1 This is doc/gcc.info, produced by makeinfo version 4.8 from 2 ../../../toolchain/android-toolchain/gcc-4.3.1/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 Software 6 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 "GNU General Public License" and "Funding Free 12 Software", the Front-Cover texts being (a) (see below), and with the 13 Back-Cover Texts being (b) (see below). A copy of the license is 14 included in the section entitled "GNU 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 Software 35 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 "GNU General Public License" and "Funding Free 41 Software", the Front-Cover texts being (a) (see below), and with the 42 Back-Cover Texts being (b) (see below). A copy of the license is 43 included in the section entitled "GNU 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.3.1. 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.3/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 2.4 Treelang language 306 ===================== 307 308 There is no standard for treelang, which is a sample language front end 309 for GCC. Its only purpose is as a sample for people wishing to write a 310 new language for GCC. The language is documented in 311 `gcc/treelang/treelang.texi' which can be turned into info or HTML 312 format. 313 314 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 315 conformance and compatibility of the Ada compiler. 316 317 *Note Standards: (gfortran)Standards, for details of standards 318 supported by GNU Fortran. 319 320 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 321 details of compatibility between `gcj' and the Java Platform. 322 323 324 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 325 326 3 GCC Command Options 327 ********************* 328 329 When you invoke GCC, it normally does preprocessing, compilation, 330 assembly and linking. The "overall options" allow you to stop this 331 process at an intermediate stage. For example, the `-c' option says 332 not to run the linker. Then the output consists of object files output 333 by the assembler. 334 335 Other options are passed on to one stage of processing. Some options 336 control the preprocessor and others the compiler itself. Yet other 337 options control the assembler and linker; most of these are not 338 documented here, since you rarely need to use any of them. 339 340 Most of the command line options that you can use with GCC are useful 341 for C programs; when an option is only useful with another language 342 (usually C++), the explanation says so explicitly. If the description 343 for a particular option does not mention a source language, you can use 344 that option with all supported languages. 345 346 *Note Compiling C++ Programs: Invoking G++, for a summary of special 347 options for compiling C++ programs. 348 349 The `gcc' program accepts options and file names as operands. Many 350 options have multi-letter names; therefore multiple single-letter 351 options may _not_ be grouped: `-dr' is very different from `-d -r'. 352 353 You can mix options and other arguments. For the most part, the order 354 you use doesn't matter. Order does matter when you use several options 355 of the same kind; for example, if you specify `-L' more than once, the 356 directories are searched in the order specified. Also, the placement 357 of the `-l' option is significant. 358 359 Many options have long names starting with `-f' or with `-W'--for 360 example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 361 have both positive and negative forms; the negative form of `-ffoo' 362 would be `-fno-foo'. This manual documents only one of these two 363 forms, whichever one is not the default. 364 365 *Note Option Index::, for an index to GCC's options. 366 367 * Menu: 368 369 * Option Summary:: Brief list of all options, without explanations. 370 * Overall Options:: Controlling the kind of output: 371 an executable, object files, assembler files, 372 or preprocessed source. 373 * Invoking G++:: Compiling C++ programs. 374 * C Dialect Options:: Controlling the variant of C language compiled. 375 * C++ Dialect Options:: Variations on C++. 376 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 377 and Objective-C++. 378 * Language Independent Options:: Controlling how diagnostics should be 379 formatted. 380 * Warning Options:: How picky should the compiler be? 381 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 382 * Optimize Options:: How much optimization? 383 * Preprocessor Options:: Controlling header files and macro definitions. 384 Also, getting dependency information for Make. 385 * Assembler Options:: Passing options to the assembler. 386 * Link Options:: Specifying libraries and so on. 387 * Directory Options:: Where to find header files and libraries. 388 Where to find the compiler executable files. 389 * Spec Files:: How to pass switches to sub-processes. 390 * Target Options:: Running a cross-compiler, or an old version of GCC. 391 * Submodel Options:: Specifying minor hardware or convention variations, 392 such as 68010 vs 68020. 393 * Code Gen Options:: Specifying conventions for function calls, data layout 394 and register usage. 395 * Environment Variables:: Env vars that affect GCC. 396 * Precompiled Headers:: Compiling a header once, and using it many times. 397 * Running Protoize:: Automatically adding or removing function prototypes. 398 399 400 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 401 402 3.1 Option Summary 403 ================== 404 405 Here is a summary of all the options, grouped by type. Explanations are 406 in the following sections. 407 408 _Overall Options_ 409 *Note Options Controlling the Kind of Output: Overall Options. 410 -c -S -E -o FILE -combine -pipe -pass-exit-codes 411 -x LANGUAGE -v -### --help[=CLASS] --target-help 412 --version @FILE 413 414 _C Language Options_ 415 *Note Options Controlling C Dialect: C Dialect Options. 416 -ansi -std=STANDARD -fgnu89-inline 417 -aux-info FILENAME 418 -fno-asm -fno-builtin -fno-builtin-FUNCTION 419 -fhosted -ffreestanding -fopenmp -fms-extensions 420 -trigraphs -no-integrated-cpp -traditional -traditional-cpp 421 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 422 -fsigned-bitfields -fsigned-char 423 -funsigned-bitfields -funsigned-char 424 425 _C++ Language Options_ 426 *Note Options Controlling C++ Dialect: C++ Dialect Options. 427 -fabi-version=N -fno-access-control -fcheck-new 428 -fconserve-space -ffriend-injection 429 -fno-elide-constructors 430 -fno-enforce-eh-specs 431 -ffor-scope -fno-for-scope -fno-gnu-keywords 432 -fno-implicit-templates 433 -fno-implicit-inline-templates 434 -fno-implement-inlines -fms-extensions 435 -fno-nonansi-builtins -fno-operator-names 436 -fno-optional-diags -fpermissive 437 -frepo -fno-rtti -fstats -ftemplate-depth-N 438 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 439 -fno-default-inline -fvisibility-inlines-hidden 440 -fvisibility-ms-compat 441 -Wabi -Wctor-dtor-privacy 442 -Wnon-virtual-dtor -Wreorder 443 -Weffc++ -Wno-deprecated -Wstrict-null-sentinel 444 -Wno-non-template-friend -Wold-style-cast 445 -Woverloaded-virtual -Wno-pmf-conversions 446 -Wsign-promo 447 448 _Objective-C and Objective-C++ Language Options_ 449 *Note Options Controlling Objective-C and Objective-C++ Dialects: 450 Objective-C and Objective-C++ Dialect Options. 451 -fconstant-string-class=CLASS-NAME 452 -fgnu-runtime -fnext-runtime 453 -fno-nil-receivers 454 -fobjc-call-cxx-cdtors 455 -fobjc-direct-dispatch 456 -fobjc-exceptions 457 -fobjc-gc 458 -freplace-objc-classes 459 -fzero-link 460 -gen-decls 461 -Wassign-intercept 462 -Wno-protocol -Wselector 463 -Wstrict-selector-match 464 -Wundeclared-selector 465 466 _Language Independent Options_ 467 *Note Options to Control Diagnostic Messages Formatting: Language 468 Independent Options. 469 -fmessage-length=N 470 -fdiagnostics-show-location=[once|every-line] 471 -fdiagnostics-show-option 472 473 _Warning Options_ 474 *Note Options to Request or Suppress Warnings: Warning Options. 475 -fsyntax-only -pedantic -pedantic-errors 476 -w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds 477 -Wno-attributes -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual 478 -Wchar-subscripts -Wclobbered -Wcomment 479 -Wconversion -Wcoverage-mismatch -Wno-deprecated-declarations 480 -Wdisabled-optimization -Wno-div-by-zero 481 -Wempty-body -Wno-endif-labels 482 -Werror -Werror=* 483 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 484 -Wno-format-extra-args -Wformat-nonliteral 485 -Wformat-security -Wformat-y2k -Wignored-qualifiers 486 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 487 -Wimport -Wno-import -Winit-self -Winline 488 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 489 -Winvalid-pch -Wlarger-than-LEN -Wunsafe-loop-optimizations 490 -Wlogical-op -Wlong-long 491 -Wmain -Wmissing-braces -Wmissing-field-initializers 492 -Wmissing-format-attribute -Wmissing-include-dirs 493 -Wmissing-noreturn 494 -Wno-multichar -Wnonnull -Wno-overflow 495 -Woverlength-strings -Wpacked -Wpadded 496 -Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast 497 -Wredundant-decls 498 -Wreturn-type -Wsequence-point -Wshadow 499 -Wsign-compare -Wsign-conversion -Wstack-protector 500 -Wstrict-aliasing -Wstrict-aliasing=n 501 -Wstrict-overflow -Wstrict-overflow=N 502 -Wswitch -Wswitch-default -Wswitch-enum 503 -Wsystem-headers -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized 504 -Wunknown-pragmas -Wno-pragmas -Wunreachable-code 505 -Wunused -Wunused-function -Wunused-label -Wunused-parameter 506 -Wunused-value -Wunused-variable 507 -Wvariadic-macros -Wvla 508 -Wvolatile-register-var -Wwrite-strings 509 510 _C and Objective-C-only Warning Options_ 511 -Wbad-function-cast -Wmissing-declarations 512 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 513 -Wold-style-declaration -Wold-style-definition 514 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 515 -Wdeclaration-after-statement -Wpointer-sign 516 517 _Debugging Options_ 518 *Note Options for Debugging Your Program or GCC: Debugging Options. 519 -dLETTERS -dumpspecs -dumpmachine -dumpversion 520 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 521 -fdump-noaddr -fdump-unnumbered -fdump-translation-unit[-N] 522 -fdump-class-hierarchy[-N] 523 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 524 -fdump-tree-all 525 -fdump-tree-original[-N] 526 -fdump-tree-optimized[-N] 527 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias 528 -fdump-tree-ch 529 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 530 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 531 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 532 -fdump-tree-dom[-N] 533 -fdump-tree-dse[-N] 534 -fdump-tree-phiopt[-N] 535 -fdump-tree-forwprop[-N] 536 -fdump-tree-copyrename[-N] 537 -fdump-tree-nrv -fdump-tree-vect 538 -fdump-tree-sink 539 -fdump-tree-sra[-N] 540 -fdump-tree-salias 541 -fdump-tree-fre[-N] 542 -fdump-tree-vrp[-N] 543 -ftree-vectorizer-verbose=N 544 -fdump-tree-storeccp[-N] 545 -feliminate-dwarf2-dups -feliminate-unused-debug-types 546 -feliminate-unused-debug-symbols -femit-class-debug-always 547 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 548 -frandom-seed=STRING -fsched-verbose=N 549 -ftest-coverage -ftime-report -fvar-tracking 550 -g -gLEVEL -gcoff -gdwarf-2 551 -ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ 552 -fno-merge-debug-strings -fdebug-prefix-map=OLD=NEW 553 -femit-struct-debug-baseonly -femit-struct-debug-reduced 554 -femit-struct-debug-detailed[=SPEC-LIST] 555 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 556 -print-multi-directory -print-multi-lib 557 -print-prog-name=PROGRAM -print-search-dirs -Q 558 -print-sysroot-headers-suffix 559 -save-temps -time 560 561 _Optimization Options_ 562 *Note Options that Control Optimization: Optimize Options. 563 -falign-functions[=N] -falign-jumps[=N] 564 -falign-labels[=N] -falign-loops[=N] -fassociative-math 565 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize 566 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves 567 -fcheck-data-deps -fcprop-registers -fcrossjumping -fcse-follow-jumps 568 -fcse-skip-blocks -fcx-limited-range -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 -finline-functions 574 -finline-functions-called-once -finline-limit=N 575 -finline-small-functions -fipa-cp -fipa-marix-reorg -fipa-pta 576 -fipa-pure-const -fipa-reference -fipa-struct-reorg 577 -fipa-type-escape -fivopts -fkeep-inline-functions -fkeep-static-consts 578 -fmerge-all-constants -fmerge-constants -fmodulo-sched 579 -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap 580 -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline 581 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 582 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 583 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 584 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 585 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 586 -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays 587 -fprofile-generate -fprofile-use -fprofile-values -freciprocal-math 588 -fregmove -frename-registers -freorder-blocks 589 -freorder-blocks-and-partition -freorder-functions 590 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 591 -frounding-math -frtl-abstract-sequences -fsched2-use-superblocks 592 -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous 593 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 594 -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee 595 -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller 596 -fsplit-wide-types -fstack-protector -fstack-protector-all 597 -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer -ftree-ccp 598 -ftree-ch -ftree-copy-prop -ftree-copyrename -ftree-dce 599 -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im 600 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 601 -ftree-parallelize-loops=N -ftree-pre -ftree-reassoc -ftree-salias 602 -ftree-sink -ftree-sra -ftree-store-ccp -ftree-ter 603 -ftree-vect-loop-version -ftree-vectorize -ftree-vrp -funit-at-a-time 604 -funroll-all-loops -funroll-loops -funsafe-loop-optimizations 605 -funsafe-math-optimizations -funswitch-loops 606 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 607 -fwhole-program 608 --param NAME=VALUE 609 -O -O0 -O1 -O2 -O3 -Os 610 611 _Preprocessor Options_ 612 *Note Options Controlling the Preprocessor: Preprocessor Options. 613 -AQUESTION=ANSWER 614 -A-QUESTION[=ANSWER] 615 -C -dD -dI -dM -dN 616 -DMACRO[=DEFN] -E -H 617 -idirafter DIR 618 -include FILE -imacros FILE 619 -iprefix FILE -iwithprefix DIR 620 -iwithprefixbefore DIR -isystem DIR 621 -imultilib DIR -isysroot DIR 622 -M -MM -MF -MG -MP -MQ -MT -nostdinc 623 -P -fworking-directory -remap 624 -trigraphs -undef -UMACRO -Wp,OPTION 625 -Xpreprocessor OPTION 626 627 _Assembler Option_ 628 *Note Passing Options to the Assembler: Assembler Options. 629 -Wa,OPTION -Xassembler OPTION 630 631 _Linker Options_ 632 *Note Options for Linking: Link Options. 633 OBJECT-FILE-NAME -lLIBRARY 634 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 635 -s -static -static-libgcc -shared -shared-libgcc -symbolic 636 -Wl,OPTION -Xlinker OPTION 637 -u SYMBOL 638 639 _Directory Options_ 640 *Note Options for Directory Search: Directory Options. 641 -BPREFIX -IDIR -iquoteDIR -LDIR 642 -specs=FILE -I- --sysroot=DIR 643 644 _Target Options_ 645 *Note Target Options::. 646 -V VERSION -b MACHINE 647 648 _Machine Dependent Options_ 649 *Note Hardware Models and Configurations: Submodel Options. 650 651 _ARC Options_ 652 -EB -EL 653 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 654 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 655 656 _ARM Options_ 657 -mapcs-frame -mno-apcs-frame 658 -mabi=NAME 659 -mapcs-stack-check -mno-apcs-stack-check 660 -mapcs-float -mno-apcs-float 661 -mapcs-reentrant -mno-apcs-reentrant 662 -msched-prolog -mno-sched-prolog 663 -mlittle-endian -mbig-endian -mwords-little-endian 664 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe 665 -mthumb-interwork -mno-thumb-interwork 666 -mcpu=NAME -march=NAME -mfpu=NAME 667 -mstructure-size-boundary=N 668 -mabort-on-noreturn 669 -mlong-calls -mno-long-calls 670 -msingle-pic-base -mno-single-pic-base 671 -mpic-register=REG 672 -mnop-fun-dllimport 673 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 674 -mpoke-function-name 675 -mthumb -marm 676 -mtpcs-frame -mtpcs-leaf-frame 677 -mcaller-super-interworking -mcallee-super-interworking 678 -mtp=NAME 679 -mandroid 680 681 _AVR Options_ 682 -mmcu=MCU -msize -minit-stack=N -mno-interrupts 683 -mcall-prologues -mno-tablejump -mtiny-stack -mint8 684 685 _Blackfin Options_ 686 -mcpu=CPU[-SIREVISION] 687 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 688 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 689 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 690 -mno-id-shared-library -mshared-library-id=N 691 -mleaf-id-shared-library -mno-leaf-id-shared-library 692 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 693 -mfast-fp -minline-plt 694 695 _CRIS Options_ 696 -mcpu=CPU -march=CPU -mtune=CPU 697 -mmax-stack-frame=N -melinux-stacksize=N 698 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 699 -mstack-align -mdata-align -mconst-align 700 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 701 -melf -maout -melinux -mlinux -sim -sim2 702 -mmul-bug-workaround -mno-mul-bug-workaround 703 704 _CRX Options_ 705 -mmac -mpush-args 706 707 _Darwin Options_ 708 -all_load -allowable_client -arch -arch_errors_fatal 709 -arch_only -bind_at_load -bundle -bundle_loader 710 -client_name -compatibility_version -current_version 711 -dead_strip 712 -dependency-file -dylib_file -dylinker_install_name 713 -dynamic -dynamiclib -exported_symbols_list 714 -filelist -flat_namespace -force_cpusubtype_ALL 715 -force_flat_namespace -headerpad_max_install_names 716 -iframework 717 -image_base -init -install_name -keep_private_externs 718 -multi_module -multiply_defined -multiply_defined_unused 719 -noall_load -no_dead_strip_inits_and_terms 720 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 721 -pagezero_size -prebind -prebind_all_twolevel_modules 722 -private_bundle -read_only_relocs -sectalign 723 -sectobjectsymbols -whyload -seg1addr 724 -sectcreate -sectobjectsymbols -sectorder 725 -segaddr -segs_read_only_addr -segs_read_write_addr 726 -seg_addr_table -seg_addr_table_filename -seglinkedit 727 -segprot -segs_read_only_addr -segs_read_write_addr 728 -single_module -static -sub_library -sub_umbrella 729 -twolevel_namespace -umbrella -undefined 730 -unexported_symbols_list -weak_reference_mismatches 731 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 732 -mkernel -mone-byte-bool 733 734 _DEC Alpha Options_ 735 -mno-fp-regs -msoft-float -malpha-as -mgas 736 -mieee -mieee-with-inexact -mieee-conformant 737 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 738 -mtrap-precision=MODE -mbuild-constants 739 -mcpu=CPU-TYPE -mtune=CPU-TYPE 740 -mbwx -mmax -mfix -mcix 741 -mfloat-vax -mfloat-ieee 742 -mexplicit-relocs -msmall-data -mlarge-data 743 -msmall-text -mlarge-text 744 -mmemory-latency=TIME 745 746 _DEC Alpha/VMS Options_ 747 -mvms-return-codes 748 749 _FRV Options_ 750 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 751 -mhard-float -msoft-float 752 -malloc-cc -mfixed-cc -mdword -mno-dword 753 -mdouble -mno-double 754 -mmedia -mno-media -mmuladd -mno-muladd 755 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 756 -mlinked-fp -mlong-calls -malign-labels 757 -mlibrary-pic -macc-4 -macc-8 758 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 759 -moptimize-membar -mno-optimize-membar 760 -mscc -mno-scc -mcond-exec -mno-cond-exec 761 -mvliw-branch -mno-vliw-branch 762 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 763 -mno-nested-cond-exec -mtomcat-stats 764 -mTLS -mtls 765 -mcpu=CPU 766 767 _GNU/Linux Options_ 768 -muclibc 769 770 _H8/300 Options_ 771 -mrelax -mh -ms -mn -mint32 -malign-300 772 773 _HPPA Options_ 774 -march=ARCHITECTURE-TYPE 775 -mbig-switch -mdisable-fpregs -mdisable-indexing 776 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 777 -mfixed-range=REGISTER-RANGE 778 -mjump-in-delay -mlinker-opt -mlong-calls 779 -mlong-load-store -mno-big-switch -mno-disable-fpregs 780 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 781 -mno-jump-in-delay -mno-long-load-store 782 -mno-portable-runtime -mno-soft-float 783 -mno-space-regs -msoft-float -mpa-risc-1-0 784 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 785 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 786 -munix=UNIX-STD -nolibdld -static -threads 787 788 _i386 and x86-64 Options_ 789 -mtune=CPU-TYPE -march=CPU-TYPE 790 -mfpmath=UNIT 791 -masm=DIALECT -mno-fancy-math-387 792 -mno-fp-ret-in-387 -msoft-float 793 -mno-wide-multiply -mrtd -malign-double 794 -mpreferred-stack-boundary=NUM -mcld -mcx16 -msahf -mrecip 795 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 796 -msse4a -m3dnow -mpopcnt -mabm -msse5 797 -mthreads -mno-align-stringops -minline-all-stringops 798 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 799 -m96bit-long-double -mregparm=NUM -msseregparm 800 -mveclibabi=TYPE -mpc32 -mpc64 -mpc80 -mstackrealign 801 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 802 -mcmodel=CODE-MODEL 803 -m32 -m64 -mlarge-data-threshold=NUM 804 -mfused-madd -mno-fused-madd 805 806 _IA-64 Options_ 807 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 808 -mvolatile-asm-stop -mregister-names -mno-sdata 809 -mconstant-gp -mauto-pic -minline-float-divide-min-latency 810 -minline-float-divide-max-throughput 811 -minline-int-divide-min-latency 812 -minline-int-divide-max-throughput 813 -minline-sqrt-min-latency -minline-sqrt-max-throughput 814 -mno-dwarf2-asm -mearly-stop-bits 815 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 816 -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64 817 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec 818 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 819 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose 820 -mno-sched-prefer-non-data-spec-insns 821 -mno-sched-prefer-non-control-spec-insns 822 -mno-sched-count-spec-in-critical-path 823 824 _M32R/D Options_ 825 -m32r2 -m32rx -m32r 826 -mdebug 827 -malign-loops -mno-align-loops 828 -missue-rate=NUMBER 829 -mbranch-cost=NUMBER 830 -mmodel=CODE-SIZE-MODEL-TYPE 831 -msdata=SDATA-TYPE 832 -mno-flush-func -mflush-func=NAME 833 -mno-flush-trap -mflush-trap=NUMBER 834 -G NUM 835 836 _M32C Options_ 837 -mcpu=CPU -msim -memregs=NUMBER 838 839 _M680x0 Options_ 840 -march=ARCH -mcpu=CPU -mtune=TUNE 841 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 842 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 843 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 844 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 845 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 846 -malign-int -mstrict-align -msep-data -mno-sep-data 847 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 848 849 _M68hc1x Options_ 850 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 851 -mauto-incdec -minmax -mlong-calls -mshort 852 -msoft-reg-count=COUNT 853 854 _MCore Options_ 855 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 856 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 857 -m4byte-functions -mno-4byte-functions -mcallgraph-data 858 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 859 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 860 861 _MIPS Options_ 862 -EL -EB -march=ARCH -mtune=ARCH 863 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 864 -mips16 -mno-mips16 -mflip-mips16 865 -minterlink-mips16 -mno-interlink-mips16 866 -mabi=ABI -mabicalls -mno-abicalls 867 -mshared -mno-shared -mxgot -mno-xgot -mgp32 -mgp64 868 -mfp32 -mfp64 -mhard-float -msoft-float 869 -msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 870 -msmartmips -mno-smartmips 871 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 872 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 873 -mlong64 -mlong32 -msym32 -mno-sym32 874 -GNUM -mlocal-sdata -mno-local-sdata 875 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 876 -membedded-data -mno-embedded-data 877 -muninit-const-in-rodata -mno-uninit-const-in-rodata 878 -mcode-readable=SETTING 879 -msplit-addresses -mno-split-addresses 880 -mexplicit-relocs -mno-explicit-relocs 881 -mcheck-zero-division -mno-check-zero-division 882 -mdivide-traps -mdivide-breaks 883 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 884 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 885 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 886 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 887 -mfix-sb1 -mno-fix-sb1 888 -mflush-func=FUNC -mno-flush-func 889 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 890 -mfp-exceptions -mno-fp-exceptions 891 -mvr4130-align -mno-vr4130-align 892 893 _MMIX Options_ 894 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 895 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 896 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 897 -mno-base-addresses -msingle-exit -mno-single-exit 898 899 _MN10300 Options_ 900 -mmult-bug -mno-mult-bug 901 -mam33 -mno-am33 902 -mam33-2 -mno-am33-2 903 -mreturn-pointer-on-d0 904 -mno-crt0 -mrelax 905 906 _MT Options_ 907 -mno-crt0 -mbacc -msim 908 -march=CPU-TYPE 909 910 _PDP-11 Options_ 911 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 912 -mbcopy -mbcopy-builtin -mint32 -mno-int16 913 -mint16 -mno-int32 -mfloat32 -mno-float64 914 -mfloat64 -mno-float32 -mabshi -mno-abshi 915 -mbranch-expensive -mbranch-cheap 916 -msplit -mno-split -munix-asm -mdec-asm 917 918 _PowerPC Options_ See RS/6000 and PowerPC Options. 919 920 _RS/6000 and PowerPC Options_ 921 -mcpu=CPU-TYPE 922 -mtune=CPU-TYPE 923 -mpower -mno-power -mpower2 -mno-power2 924 -mpowerpc -mpowerpc64 -mno-powerpc 925 -maltivec -mno-altivec 926 -mpowerpc-gpopt -mno-powerpc-gpopt 927 -mpowerpc-gfxopt -mno-powerpc-gfxopt 928 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd 929 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 930 -mnew-mnemonics -mold-mnemonics 931 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 932 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 933 -malign-power -malign-natural 934 -msoft-float -mhard-float -mmultiple -mno-multiple 935 -mstring -mno-string -mupdate -mno-update 936 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 937 -mstrict-align -mno-strict-align -mrelocatable 938 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 939 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 940 -mdynamic-no-pic -maltivec -mswdiv 941 -mprioritize-restricted-insns=PRIORITY 942 -msched-costly-dep=DEPENDENCE_TYPE 943 -minsert-sched-nops=SCHEME 944 -mcall-sysv -mcall-netbsd 945 -maix-struct-return -msvr4-struct-return 946 -mabi=ABI-TYPE -msecure-plt -mbss-plt 947 -misel -mno-isel 948 -misel=yes -misel=no 949 -mspe -mno-spe 950 -mspe=yes -mspe=no 951 -mpaired 952 -mvrsave -mno-vrsave 953 -mmulhw -mno-mulhw 954 -mdlmzb -mno-dlmzb 955 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 956 -mprototype -mno-prototype 957 -msim -mmvme -mads -myellowknife -memb -msdata 958 -msdata=OPT -mvxworks -mwindiss -G NUM -pthread 959 960 _S/390 and zSeries Options_ 961 -mtune=CPU-TYPE -march=CPU-TYPE 962 -mhard-float -msoft-float -mlong-double-64 -mlong-double-128 963 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 964 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 965 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 966 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 967 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 968 969 _Score Options_ 970 -meb -mel 971 -mnhwloop 972 -muls 973 -mmac 974 -mscore5 -mscore5u -mscore7 -mscore7d 975 976 _SH Options_ 977 -m1 -m2 -m2e -m3 -m3e 978 -m4-nofpu -m4-single-only -m4-single -m4 979 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 980 -m5-64media -m5-64media-nofpu 981 -m5-32media -m5-32media-nofpu 982 -m5-compact -m5-compact-nofpu 983 -mb -ml -mdalign -mrelax 984 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 985 -mieee -misize -minline-ic_invalidate -mpadstruct -mspace 986 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 987 -mdivsi3_libfunc=NAME 988 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 989 -minvalid-symbols 990 991 _SPARC Options_ 992 -mcpu=CPU-TYPE 993 -mtune=CPU-TYPE 994 -mcmodel=CODE-MODEL 995 -m32 -m64 -mapp-regs -mno-app-regs 996 -mfaster-structs -mno-faster-structs 997 -mfpu -mno-fpu -mhard-float -msoft-float 998 -mhard-quad-float -msoft-quad-float 999 -mimpure-text -mno-impure-text -mlittle-endian 1000 -mstack-bias -mno-stack-bias 1001 -munaligned-doubles -mno-unaligned-doubles 1002 -mv8plus -mno-v8plus -mvis -mno-vis 1003 -threads -pthreads -pthread 1004 1005 _SPU Options_ 1006 -mwarn-reloc -merror-reloc 1007 -msafe-dma -munsafe-dma 1008 -mbranch-hints 1009 -msmall-mem -mlarge-mem -mstdmain 1010 -mfixed-range=REGISTER-RANGE 1011 1012 _System V Options_ 1013 -Qy -Qn -YP,PATHS -Ym,DIR 1014 1015 _V850 Options_ 1016 -mlong-calls -mno-long-calls -mep -mno-ep 1017 -mprolog-function -mno-prolog-function -mspace 1018 -mtda=N -msda=N -mzda=N 1019 -mapp-regs -mno-app-regs 1020 -mdisable-callt -mno-disable-callt 1021 -mv850e1 1022 -mv850e 1023 -mv850 -mbig-switch 1024 1025 _VAX Options_ 1026 -mg -mgnu -munix 1027 1028 _VxWorks Options_ 1029 -mrtp -non-static -Bstatic -Bdynamic 1030 -Xbind-lazy -Xbind-now 1031 1032 _x86-64 Options_ See i386 and x86-64 Options. 1033 1034 _Xstormy16 Options_ 1035 -msim 1036 1037 _Xtensa Options_ 1038 -mconst16 -mno-const16 1039 -mfused-madd -mno-fused-madd 1040 -mtext-section-literals -mno-text-section-literals 1041 -mtarget-align -mno-target-align 1042 -mlongcalls -mno-longcalls 1043 1044 _zSeries Options_ See S/390 and zSeries Options. 1045 1046 _Code Generation Options_ 1047 *Note Options for Code Generation Conventions: Code Gen Options. 1048 -fcall-saved-REG -fcall-used-REG 1049 -ffixed-REG -fexceptions 1050 -fnon-call-exceptions -funwind-tables 1051 -fasynchronous-unwind-tables 1052 -finhibit-size-directive -finstrument-functions 1053 -finstrument-functions-exclude-function-list=SYM,SYM,... 1054 -finstrument-functions-exclude-file-list=FILE,FILE,... 1055 -fno-common -fno-ident 1056 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1057 -fno-jump-tables 1058 -frecord-gcc-switches 1059 -freg-struct-return -fshort-enums 1060 -fshort-double -fshort-wchar 1061 -fverbose-asm -fpack-struct[=N] -fstack-check 1062 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1063 -fno-stack-limit -fargument-alias -fargument-noalias 1064 -fargument-noalias-global -fargument-noalias-anything 1065 -fleading-underscore -ftls-model=MODEL 1066 -ftrapv -fwrapv -fbounds-check 1067 -fvisibility 1068 1069 1070 * Menu: 1071 1072 * Overall Options:: Controlling the kind of output: 1073 an executable, object files, assembler files, 1074 or preprocessed source. 1075 * C Dialect Options:: Controlling the variant of C language compiled. 1076 * C++ Dialect Options:: Variations on C++. 1077 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1078 and Objective-C++. 1079 * Language Independent Options:: Controlling how diagnostics should be 1080 formatted. 1081 * Warning Options:: How picky should the compiler be? 1082 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 1083 * Optimize Options:: How much optimization? 1084 * Preprocessor Options:: Controlling header files and macro definitions. 1085 Also, getting dependency information for Make. 1086 * Assembler Options:: Passing options to the assembler. 1087 * Link Options:: Specifying libraries and so on. 1088 * Directory Options:: Where to find header files and libraries. 1089 Where to find the compiler executable files. 1090 * Spec Files:: How to pass switches to sub-processes. 1091 * Target Options:: Running a cross-compiler, or an old version of GCC. 1092 1093 1094 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1095 1096 3.2 Options Controlling the Kind of Output 1097 ========================================== 1098 1099 Compilation can involve up to four stages: preprocessing, compilation 1100 proper, assembly and linking, always in that order. GCC is capable of 1101 preprocessing and compiling several files either into several assembler 1102 input files, or into one assembler input file; then each assembler 1103 input file produces an object file, and linking combines all the object 1104 files (those newly compiled, and those specified as input) into an 1105 executable file. 1106 1107 For any given input file, the file name suffix determines what kind of 1108 compilation is done: 1109 1110 `FILE.c' 1111 C source code which must be preprocessed. 1112 1113 `FILE.i' 1114 C source code which should not be preprocessed. 1115 1116 `FILE.ii' 1117 C++ source code which should not be preprocessed. 1118 1119 `FILE.m' 1120 Objective-C source code. Note that you must link with the 1121 `libobjc' library to make an Objective-C program work. 1122 1123 `FILE.mi' 1124 Objective-C source code which should not be preprocessed. 1125 1126 `FILE.mm' 1127 `FILE.M' 1128 Objective-C++ source code. Note that you must link with the 1129 `libobjc' library to make an Objective-C++ program work. Note 1130 that `.M' refers to a literal capital M. 1131 1132 `FILE.mii' 1133 Objective-C++ source code which should not be preprocessed. 1134 1135 `FILE.h' 1136 C, C++, Objective-C or Objective-C++ header file to be turned into 1137 a precompiled header. 1138 1139 `FILE.cc' 1140 `FILE.cp' 1141 `FILE.cxx' 1142 `FILE.cpp' 1143 `FILE.CPP' 1144 `FILE.c++' 1145 `FILE.C' 1146 C++ source code which must be preprocessed. Note that in `.cxx', 1147 the last two letters must both be literally `x'. Likewise, `.C' 1148 refers to a literal capital C. 1149 1150 `FILE.mm' 1151 `FILE.M' 1152 Objective-C++ source code which must be preprocessed. 1153 1154 `FILE.mii' 1155 Objective-C++ source code which should not be preprocessed. 1156 1157 `FILE.hh' 1158 `FILE.H' 1159 `FILE.hp' 1160 `FILE.hxx' 1161 `FILE.hpp' 1162 `FILE.HPP' 1163 `FILE.h++' 1164 `FILE.tcc' 1165 C++ header file to be turned into a precompiled header. 1166 1167 `FILE.f' 1168 `FILE.for' 1169 `FILE.FOR' 1170 Fixed form Fortran source code which should not be preprocessed. 1171 1172 `FILE.F' 1173 `FILE.fpp' 1174 `FILE.FPP' 1175 Fixed form Fortran source code which must be preprocessed (with 1176 the traditional preprocessor). 1177 1178 `FILE.f90' 1179 `FILE.f95' 1180 Free form Fortran source code which should not be preprocessed. 1181 1182 `FILE.F90' 1183 `FILE.F95' 1184 Free form Fortran source code which must be preprocessed (with the 1185 traditional preprocessor). 1186 1187 `FILE.ads' 1188 Ada source code file which contains a library unit declaration (a 1189 declaration of a package, subprogram, or generic, or a generic 1190 instantiation), or a library unit renaming declaration (a package, 1191 generic, or subprogram renaming declaration). Such files are also 1192 called "specs". 1193 1194 `FILE.adb' 1195 Ada source code file containing a library unit body (a subprogram 1196 or package body). Such files are also called "bodies". 1197 1198 `FILE.s' 1199 Assembler code. 1200 1201 `FILE.S' 1202 `FILE.sx' 1203 Assembler code which must be preprocessed. 1204 1205 `OTHER' 1206 An object file to be fed straight into linking. Any file name 1207 with no recognized suffix is treated this way. 1208 1209 You can specify the input language explicitly with the `-x' option: 1210 1211 `-x LANGUAGE' 1212 Specify explicitly the LANGUAGE for the following input files 1213 (rather than letting the compiler choose a default based on the 1214 file name suffix). This option applies to all following input 1215 files until the next `-x' option. Possible values for LANGUAGE 1216 are: 1217 c c-header c-cpp-output 1218 c++ c++-header c++-cpp-output 1219 objective-c objective-c-header objective-c-cpp-output 1220 objective-c++ objective-c++-header objective-c++-cpp-output 1221 assembler assembler-with-cpp 1222 ada 1223 f95 f95-cpp-input 1224 java 1225 treelang 1226 1227 `-x none' 1228 Turn off any specification of a language, so that subsequent files 1229 are handled according to their file name suffixes (as they are if 1230 `-x' has not been used at all). 1231 1232 `-pass-exit-codes' 1233 Normally the `gcc' program will exit with the code of 1 if any 1234 phase of the compiler returns a non-success return code. If you 1235 specify `-pass-exit-codes', the `gcc' program will instead return 1236 with numerically highest error produced by any phase that returned 1237 an error indication. The C, C++, and Fortran frontends return 4, 1238 if an internal compiler error is encountered. 1239 1240 If you only want some of the stages of compilation, you can use `-x' 1241 (or filename suffixes) to tell `gcc' where to start, and one of the 1242 options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1243 some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1244 do nothing at all. 1245 1246 `-c' 1247 Compile or assemble the source files, but do not link. The linking 1248 stage simply is not done. The ultimate output is in the form of an 1249 object file for each source file. 1250 1251 By default, the object file name for a source file is made by 1252 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1253 1254 Unrecognized input files, not requiring compilation or assembly, 1255 are ignored. 1256 1257 `-S' 1258 Stop after the stage of compilation proper; do not assemble. The 1259 output is in the form of an assembler code file for each 1260 non-assembler input file specified. 1261 1262 By default, the assembler file name for a source file is made by 1263 replacing the suffix `.c', `.i', etc., with `.s'. 1264 1265 Input files that don't require compilation are ignored. 1266 1267 `-E' 1268 Stop after the preprocessing stage; do not run the compiler 1269 proper. The output is in the form of preprocessed source code, 1270 which is sent to the standard output. 1271 1272 Input files which don't require preprocessing are ignored. 1273 1274 `-o FILE' 1275 Place output in file FILE. This applies regardless to whatever 1276 sort of output is being produced, whether it be an executable file, 1277 an object file, an assembler file or preprocessed C code. 1278 1279 If `-o' is not specified, the default is to put an executable file 1280 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1281 assembler file in `SOURCE.s', a precompiled header file in 1282 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1283 output. 1284 1285 `-v' 1286 Print (on standard error output) the commands executed to run the 1287 stages of compilation. Also print the version number of the 1288 compiler driver program and of the preprocessor and the compiler 1289 proper. 1290 1291 `-###' 1292 Like `-v' except the commands are not executed and all command 1293 arguments are quoted. This is useful for shell scripts to capture 1294 the driver-generated command lines. 1295 1296 `-pipe' 1297 Use pipes rather than temporary files for communication between the 1298 various stages of compilation. This fails to work on some systems 1299 where the assembler is unable to read from a pipe; but the GNU 1300 assembler has no trouble. 1301 1302 `-combine' 1303 If you are compiling multiple source files, this option tells the 1304 driver to pass all the source files to the compiler at once (for 1305 those languages for which the compiler can handle this). This 1306 will allow intermodule analysis (IMA) to be performed by the 1307 compiler. Currently the only language for which this is supported 1308 is C. If you pass source files for multiple languages to the 1309 driver, using this option, the driver will invoke the compiler(s) 1310 that support IMA once each, passing each compiler all the source 1311 files appropriate for it. For those languages that do not support 1312 IMA this option will be ignored, and the compiler will be invoked 1313 once for each source file in that language. If you use this 1314 option in conjunction with `-save-temps', the compiler will 1315 generate multiple pre-processed files (one for each source file), 1316 but only one (combined) `.o' or `.s' file. 1317 1318 `--help' 1319 Print (on the standard output) a description of the command line 1320 options understood by `gcc'. If the `-v' option is also specified 1321 then `--help' will also be passed on to the various processes 1322 invoked by `gcc', so that they can display the command line options 1323 they accept. If the `-Wextra' option has also been specified 1324 (prior to the `--help' option), then command line options which 1325 have no documentation associated with them will also be displayed. 1326 1327 `--target-help' 1328 Print (on the standard output) a description of target-specific 1329 command line options for each tool. For some targets extra 1330 target-specific information may also be printed. 1331 1332 `--help=CLASS[,QUALIFIER]' 1333 Print (on the standard output) a description of the command line 1334 options understood by the compiler that fit into a specific class. 1335 The class can be one of `optimizers', `warnings', `target', 1336 `params', or LANGUAGE: 1337 1338 `optimizers' 1339 This will display all of the optimization options supported 1340 by the compiler. 1341 1342 `warnings' 1343 This will display all of the options controlling warning 1344 messages produced by the compiler. 1345 1346 `target' 1347 This will display target-specific options. Unlike the 1348 `--target-help' option however, target-specific options of the 1349 linker and assembler will not be displayed. This is because 1350 those tools do not currently support the extended `--help=' 1351 syntax. 1352 1353 `params' 1354 This will display the values recognized by the `--param' 1355 option. 1356 1357 LANGUAGE 1358 This will display the options supported for LANGUAGE, where 1359 LANGUAGE is the name of one of the languages supported in this 1360 version of GCC. 1361 1362 `common' 1363 This will display the options that are common to all 1364 languages. 1365 1366 It is possible to further refine the output of the `--help=' 1367 option by adding a comma separated list of qualifiers after the 1368 class. These can be any from the following list: 1369 1370 `undocumented' 1371 Display only those options which are undocumented. 1372 1373 `joined' 1374 Display options which take an argument that appears after an 1375 equal sign in the same continuous piece of text, such as: 1376 `--help=target'. 1377 1378 `separate' 1379 Display options which take an argument that appears as a 1380 separate word following the original option, such as: `-o 1381 output-file'. 1382 1383 Thus for example to display all the undocumented target-specific 1384 switches supported by the compiler the following can be used: 1385 1386 --help=target,undocumented 1387 1388 The sense of a qualifier can be inverted by prefixing it with the 1389 ^ character, so for example to display all binary warning options 1390 (i.e., ones that are either on or off and that do not take an 1391 argument), which have a description the following can be used: 1392 1393 --help=warnings,^joined,^undocumented 1394 1395 A class can also be used as a qualifier, although this usually 1396 restricts the output by so much that there is nothing to display. 1397 One case where it does work however is when one of the classes is 1398 TARGET. So for example to display all the target-specific 1399 optimization options the following can be used: 1400 1401 --help=target,optimizers 1402 1403 The `--help=' option can be repeated on the command line. Each 1404 successive use will display its requested class of options, 1405 skipping those that have already been displayed. 1406 1407 If the `-Q' option appears on the command line before the 1408 `--help=' option, then the descriptive text displayed by `--help=' 1409 is changed. Instead of describing the displayed options, an 1410 indication is given as to whether the option is enabled, disabled 1411 or set to a specific value (assuming that the compiler knows this 1412 at the point where the `--help=' option is used). 1413 1414 Here is a truncated example from the ARM port of `gcc': 1415 1416 % gcc -Q -mabi=2 --help=target -c 1417 The following options are target specific: 1418 -mabi= 2 1419 -mabort-on-noreturn [disabled] 1420 -mapcs [disabled] 1421 1422 The output is sensitive to the effects of previous command line 1423 options, so for example it is possible to find out which 1424 optimizations are enabled at `-O2' by using: 1425 1426 -O2 --help=optimizers 1427 1428 Alternatively you can discover which binary optimizations are 1429 enabled by `-O3' by using: 1430 1431 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1432 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1433 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1434 1435 `--version' 1436 Display the version number and copyrights of the invoked GCC. 1437 1438 `@FILE' 1439 Read command-line options from FILE. The options read are 1440 inserted in place of the original @FILE option. If FILE does not 1441 exist, or cannot be read, then the option will be treated 1442 literally, and not removed. 1443 1444 Options in FILE are separated by whitespace. A whitespace 1445 character may be included in an option by surrounding the entire 1446 option in either single or double quotes. Any character 1447 (including a backslash) may be included by prefixing the character 1448 to be included with a backslash. The FILE may itself contain 1449 additional @FILE options; any such options will be processed 1450 recursively. 1451 1452 1453 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1454 1455 3.3 Compiling C++ Programs 1456 ========================== 1457 1458 C++ source files conventionally use one of the suffixes `.C', `.cc', 1459 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1460 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1461 preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1462 these names and compiles them as C++ programs even if you call the 1463 compiler the same way as for compiling C programs (usually with the 1464 name `gcc'). 1465 1466 However, the use of `gcc' does not add the C++ library. `g++' is a 1467 program that calls GCC and treats `.c', `.h' and `.i' files as C++ 1468 source files instead of C source files unless `-x' is used, and 1469 automatically specifies linking against the C++ library. This program 1470 is also useful when precompiling a C header file with a `.h' extension 1471 for use in C++ compilations. On many systems, `g++' is also installed 1472 with the name `c++'. 1473 1474 When you compile C++ programs, you may specify many of the same 1475 command-line options that you use for compiling programs in any 1476 language; or command-line options meaningful for C and related 1477 languages; or options that are meaningful only for C++ programs. *Note 1478 Options Controlling C Dialect: C Dialect Options, for explanations of 1479 options for languages related to C. *Note Options Controlling C++ 1480 Dialect: C++ Dialect Options, for explanations of options that are 1481 meaningful only for C++ programs. 1482 1483 1484 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1485 1486 3.4 Options Controlling C Dialect 1487 ================================= 1488 1489 The following options control the dialect of C (or languages derived 1490 from C, such as C++, Objective-C and Objective-C++) that the compiler 1491 accepts: 1492 1493 `-ansi' 1494 In C mode, this is equivalent to `-std=c89'. In C++ mode, it is 1495 equivalent to `-std=c++98'. 1496 1497 This turns off certain features of GCC that are incompatible with 1498 ISO C90 (when compiling C code), or of standard C++ (when 1499 compiling C++ code), such as the `asm' and `typeof' keywords, and 1500 predefined macros such as `unix' and `vax' that identify the type 1501 of system you are using. It also enables the undesirable and 1502 rarely used ISO trigraph feature. For the C compiler, it disables 1503 recognition of C++ style `//' comments as well as the `inline' 1504 keyword. 1505 1506 The alternate keywords `__asm__', `__extension__', `__inline__' 1507 and `__typeof__' continue to work despite `-ansi'. You would not 1508 want to use them in an ISO C program, of course, but it is useful 1509 to put them in header files that might be included in compilations 1510 done with `-ansi'. Alternate predefined macros such as `__unix__' 1511 and `__vax__' are also available, with or without `-ansi'. 1512 1513 The `-ansi' option does not cause non-ISO programs to be rejected 1514 gratuitously. For that, `-pedantic' is required in addition to 1515 `-ansi'. *Note Warning Options::. 1516 1517 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1518 is used. Some header files may notice this macro and refrain from 1519 declaring certain functions or defining certain macros that the 1520 ISO standard doesn't call for; this is to avoid interfering with 1521 any programs that might use these names for other things. 1522 1523 Functions that would normally be built in but do not have semantics 1524 defined by ISO C (such as `alloca' and `ffs') are not built-in 1525 functions when `-ansi' is used. *Note Other built-in functions 1526 provided by GCC: Other Builtins, for details of the functions 1527 affected. 1528 1529 `-std=' 1530 Determine the language standard. *Note Language Standards 1531 Supported by GCC: Standards, for details of these standard 1532 versions. This option is currently only supported when compiling 1533 C or C++. 1534 1535 The compiler can accept several base standards, such as `c89' or 1536 `c++98', and GNU dialects of those standards, such as `gnu89' or 1537 `gnu++98'. By specifing a base standard, the compiler will accept 1538 all programs following that standard and those using GNU 1539 extensions that do not contradict it. For example, `-std=c89' 1540 turns off certain features of GCC that are incompatible with ISO 1541 C90, such as the `asm' and `typeof' keywords, but not other GNU 1542 extensions that do not have a meaning in ISO C90, such as omitting 1543 the middle term of a `?:' expression. On the other hand, by 1544 specifing a GNU dialect of a standard, all features the compiler 1545 support are enabled, even when those features change the meaning 1546 of the base standard and some strict-conforming programs may be 1547 rejected. The particular standard is used by `-pedantic' to 1548 identify which features are GNU extensions given that version of 1549 the standard. For example `-std=gnu89 -pedantic' would warn about 1550 C++ style `//' comments, while `-std=gnu99 -pedantic' would not. 1551 1552 A value for this option must be provided; possible values are 1553 1554 `c89' 1555 `iso9899:1990' 1556 Support all ISO C90 programs (certain GNU extensions that 1557 conflict with ISO C90 are disabled). Same as `-ansi' for C 1558 code. 1559 1560 `iso9899:199409' 1561 ISO C90 as modified in amendment 1. 1562 1563 `c99' 1564 `c9x' 1565 `iso9899:1999' 1566 `iso9899:199x' 1567 ISO C99. Note that this standard is not yet fully supported; 1568 see `http://gcc.gnu.org/gcc-4.3/c99status.html' for more 1569 information. The names `c9x' and `iso9899:199x' are 1570 deprecated. 1571 1572 `gnu89' 1573 GNU dialect of ISO C90 (including some C99 features). This is 1574 the default for C code. 1575 1576 `gnu99' 1577 `gnu9x' 1578 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1579 GCC, this will become the default. The name `gnu9x' is 1580 deprecated. 1581 1582 `c++98' 1583 The 1998 ISO C++ standard plus amendments. Same as `-ansi' for 1584 C++ code. 1585 1586 `gnu++98' 1587 GNU dialect of `-std=c++98'. This is the default for C++ 1588 code. 1589 1590 `c++0x' 1591 The working draft of the upcoming ISO C++0x standard. This 1592 option enables experimental features that are likely to be 1593 included in C++0x. The working draft is constantly changing, 1594 and any feature that is enabled by this flag may be removed 1595 from future versions of GCC if it is not part of the C++0x 1596 standard. 1597 1598 `gnu++0x' 1599 GNU dialect of `-std=c++0x'. This option enables experimental 1600 features that may be removed in future versions of GCC. 1601 1602 `-fgnu89-inline' 1603 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1604 semantics for `inline' functions when in C99 mode. *Note An 1605 Inline Function is As Fast As a Macro: Inline. This option is 1606 accepted and ignored by GCC versions 4.1.3 up to but not including 1607 4.3. In GCC versions 4.3 and later it changes the behavior of GCC 1608 in C99 mode. Using this option is roughly equivalent to adding the 1609 `gnu_inline' function attribute to all inline functions (*note 1610 Function Attributes::). 1611 1612 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 1613 semantics for `inline' when in C99 or gnu99 mode (i.e., it 1614 specifies the default behavior). This option was first supported 1615 in GCC 4.3. This option is not supported in C89 or gnu89 mode. 1616 1617 The preprocessor macros `__GNUC_GNU_INLINE__' and 1618 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1619 effect for `inline' functions. *Note Common Predefined Macros: 1620 (cpp)Common Predefined Macros. 1621 1622 `-aux-info FILENAME' 1623 Output to the given filename prototyped declarations for all 1624 functions declared and/or defined in a translation unit, including 1625 those in header files. This option is silently ignored in any 1626 language other than C. 1627 1628 Besides declarations, the file indicates, in comments, the origin 1629 of each declaration (source file and line), whether the 1630 declaration was implicit, prototyped or unprototyped (`I', `N' for 1631 new or `O' for old, respectively, in the first character after the 1632 line number and the colon), and whether it came from a declaration 1633 or a definition (`C' or `F', respectively, in the following 1634 character). In the case of function definitions, a K&R-style list 1635 of arguments followed by their declarations is also provided, 1636 inside comments, after the declaration. 1637 1638 `-fno-asm' 1639 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1640 code can use these words as identifiers. You can use the keywords 1641 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1642 `-fno-asm'. 1643 1644 In C++, this switch only affects the `typeof' keyword, since `asm' 1645 and `inline' are standard keywords. You may want to use the 1646 `-fno-gnu-keywords' flag instead, which has the same effect. In 1647 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1648 the `asm' and `typeof' keywords, since `inline' is a standard 1649 keyword in ISO C99. 1650 1651 `-fno-builtin' 1652 `-fno-builtin-FUNCTION' 1653 Don't recognize built-in functions that do not begin with 1654 `__builtin_' as prefix. *Note Other built-in functions provided 1655 by GCC: Other Builtins, for details of the functions affected, 1656 including those which are not built-in functions when `-ansi' or 1657 `-std' options for strict ISO C conformance are used because they 1658 do not have an ISO standard meaning. 1659 1660 GCC normally generates special code to handle certain built-in 1661 functions more efficiently; for instance, calls to `alloca' may 1662 become single instructions that adjust the stack directly, and 1663 calls to `memcpy' may become inline copy loops. The resulting 1664 code is often both smaller and faster, but since the function 1665 calls no longer appear as such, you cannot set a breakpoint on 1666 those calls, nor can you change the behavior of the functions by 1667 linking with a different library. In addition, when a function is 1668 recognized as a built-in function, GCC may use information about 1669 that function to warn about problems with calls to that function, 1670 or to generate more efficient code, even if the resulting code 1671 still contains calls to that function. For example, warnings are 1672 given with `-Wformat' for bad calls to `printf', when `printf' is 1673 built in, and `strlen' is known not to modify global memory. 1674 1675 With the `-fno-builtin-FUNCTION' option only the built-in function 1676 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1677 If a function is named this is not built-in in this version of 1678 GCC, this option is ignored. There is no corresponding 1679 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1680 functions selectively when using `-fno-builtin' or 1681 `-ffreestanding', you may define macros such as: 1682 1683 #define abs(n) __builtin_abs ((n)) 1684 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1685 1686 `-fhosted' 1687 Assert that compilation takes place in a hosted environment. This 1688 implies `-fbuiltin'. A hosted environment is one in which the 1689 entire standard library is available, and in which `main' has a 1690 return type of `int'. Examples are nearly everything except a 1691 kernel. This is equivalent to `-fno-freestanding'. 1692 1693 `-ffreestanding' 1694 Assert that compilation takes place in a freestanding environment. 1695 This implies `-fno-builtin'. A freestanding environment is one 1696 in which the standard library may not exist, and program startup 1697 may not necessarily be at `main'. The most obvious example is an 1698 OS kernel. This is equivalent to `-fno-hosted'. 1699 1700 *Note Language Standards Supported by GCC: Standards, for details 1701 of freestanding and hosted environments. 1702 1703 `-fopenmp' 1704 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 1705 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 1706 generates parallel code according to the OpenMP Application 1707 Program Interface v2.5 `http://www.openmp.org/'. This option 1708 implies `-pthread', and thus is only supported on targets that 1709 have support for `-pthread'. 1710 1711 `-fms-extensions' 1712 Accept some non-standard constructs used in Microsoft header files. 1713 1714 Some cases of unnamed fields in structures and unions are only 1715 accepted with this option. *Note Unnamed struct/union fields 1716 within structs/unions: Unnamed Fields, for details. 1717 1718 `-trigraphs' 1719 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1720 for strict ISO C conformance) implies `-trigraphs'. 1721 1722 `-no-integrated-cpp' 1723 Performs a compilation in two passes: preprocessing and compiling. 1724 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 1725 via the `-B' option. The user supplied compilation step can then 1726 add in an additional preprocessing step after normal preprocessing 1727 but before compiling. The default is to use the integrated cpp 1728 (internal cpp) 1729 1730 The semantics of this option will change if "cc1", "cc1plus", and 1731 "cc1obj" are merged. 1732 1733 `-traditional' 1734 `-traditional-cpp' 1735 Formerly, these options caused GCC to attempt to emulate a 1736 pre-standard C compiler. They are now only supported with the 1737 `-E' switch. The preprocessor continues to support a pre-standard 1738 mode. See the GNU CPP manual for details. 1739 1740 `-fcond-mismatch' 1741 Allow conditional expressions with mismatched types in the second 1742 and third arguments. The value of such an expression is void. 1743 This option is not supported for C++. 1744 1745 `-flax-vector-conversions' 1746 Allow implicit conversions between vectors with differing numbers 1747 of elements and/or incompatible element types. This option should 1748 not be used for new code. 1749 1750 `-funsigned-char' 1751 Let the type `char' be unsigned, like `unsigned char'. 1752 1753 Each kind of machine has a default for what `char' should be. It 1754 is either like `unsigned char' by default or like `signed char' by 1755 default. 1756 1757 Ideally, a portable program should always use `signed char' or 1758 `unsigned char' when it depends on the signedness of an object. 1759 But many programs have been written to use plain `char' and expect 1760 it to be signed, or expect it to be unsigned, depending on the 1761 machines they were written for. This option, and its inverse, let 1762 you make such a program work with the opposite default. 1763 1764 The type `char' is always a distinct type from each of `signed 1765 char' or `unsigned char', even though its behavior is always just 1766 like one of those two. 1767 1768 `-fsigned-char' 1769 Let the type `char' be signed, like `signed char'. 1770 1771 Note that this is equivalent to `-fno-unsigned-char', which is the 1772 negative form of `-funsigned-char'. Likewise, the option 1773 `-fno-signed-char' is equivalent to `-funsigned-char'. 1774 1775 `-fsigned-bitfields' 1776 `-funsigned-bitfields' 1777 `-fno-signed-bitfields' 1778 `-fno-unsigned-bitfields' 1779 These options control whether a bit-field is signed or unsigned, 1780 when the declaration does not use either `signed' or `unsigned'. 1781 By default, such a bit-field is signed, because this is 1782 consistent: the basic integer types such as `int' are signed types. 1783 1784 1785 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 1786 1787 3.5 Options Controlling C++ Dialect 1788 =================================== 1789 1790 This section describes the command-line options that are only meaningful 1791 for C++ programs; but you can also use most of the GNU compiler options 1792 regardless of what language your program is in. For example, you might 1793 compile a file `firstClass.C' like this: 1794 1795 g++ -g -frepo -O -c firstClass.C 1796 1797 In this example, only `-frepo' is an option meant only for C++ 1798 programs; you can use the other options with any language supported by 1799 GCC. 1800 1801 Here is a list of options that are _only_ for compiling C++ programs: 1802 1803 `-fabi-version=N' 1804 Use version N of the C++ ABI. Version 2 is the version of the C++ 1805 ABI that first appeared in G++ 3.4. Version 1 is the version of 1806 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 1807 be the version that conforms most closely to the C++ ABI 1808 specification. Therefore, the ABI obtained using version 0 will 1809 change as ABI bugs are fixed. 1810 1811 The default is version 2. 1812 1813 `-fno-access-control' 1814 Turn off all access checking. This switch is mainly useful for 1815 working around bugs in the access control code. 1816 1817 `-fcheck-new' 1818 Check that the pointer returned by `operator new' is non-null 1819 before attempting to modify the storage allocated. This check is 1820 normally unnecessary because the C++ standard specifies that 1821 `operator new' will only return `0' if it is declared `throw()', 1822 in which case the compiler will always check the return value even 1823 without this option. In all other cases, when `operator new' has 1824 a non-empty exception specification, memory exhaustion is 1825 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 1826 1827 `-fconserve-space' 1828 Put uninitialized or runtime-initialized global variables into the 1829 common segment, as C does. This saves space in the executable at 1830 the cost of not diagnosing duplicate definitions. If you compile 1831 with this flag and your program mysteriously crashes after 1832 `main()' has completed, you may have an object that is being 1833 destroyed twice because two definitions were merged. 1834 1835 This option is no longer useful on most targets, now that support 1836 has been added for putting variables into BSS without making them 1837 common. 1838 1839 `-ffriend-injection' 1840 Inject friend functions into the enclosing namespace, so that they 1841 are visible outside the scope of the class in which they are 1842 declared. Friend functions were documented to work this way in 1843 the old Annotated C++ Reference Manual, and versions of G++ before 1844 4.1 always worked that way. However, in ISO C++ a friend function 1845 which is not declared in an enclosing scope can only be found 1846 using argument dependent lookup. This option causes friends to be 1847 injected as they were in earlier releases. 1848 1849 This option is for compatibility, and may be removed in a future 1850 release of G++. 1851 1852 `-fno-elide-constructors' 1853 The C++ standard allows an implementation to omit creating a 1854 temporary which is only used to initialize another object of the 1855 same type. Specifying this option disables that optimization, and 1856 forces G++ to call the copy constructor in all cases. 1857 1858 `-fno-enforce-eh-specs' 1859 Don't generate code to check for violation of exception 1860 specifications at runtime. This option violates the C++ standard, 1861 but may be useful for reducing code size in production builds, 1862 much like defining `NDEBUG'. This does not give user code 1863 permission to throw exceptions in violation of the exception 1864 specifications; the compiler will still optimize based on the 1865 specifications, so throwing an unexpected exception will result in 1866 undefined behavior. 1867 1868 `-ffor-scope' 1869 `-fno-for-scope' 1870 If `-ffor-scope' is specified, the scope of variables declared in 1871 a for-init-statement is limited to the `for' loop itself, as 1872 specified by the C++ standard. If `-fno-for-scope' is specified, 1873 the scope of variables declared in a for-init-statement extends to 1874 the end of the enclosing scope, as was the case in old versions of 1875 G++, and other (traditional) implementations of C++. 1876 1877 The default if neither flag is given to follow the standard, but 1878 to allow and give a warning for old-style code that would 1879 otherwise be invalid, or have different behavior. 1880 1881 `-fno-gnu-keywords' 1882 Do not recognize `typeof' as a keyword, so that code can use this 1883 word as an identifier. You can use the keyword `__typeof__' 1884 instead. `-ansi' implies `-fno-gnu-keywords'. 1885 1886 `-fno-implicit-templates' 1887 Never emit code for non-inline templates which are instantiated 1888 implicitly (i.e. by use); only emit code for explicit 1889 instantiations. *Note Template Instantiation::, for more 1890 information. 1891 1892 `-fno-implicit-inline-templates' 1893 Don't emit code for implicit instantiations of inline templates, 1894 either. The default is to handle inlines differently so that 1895 compiles with and without optimization will need the same set of 1896 explicit instantiations. 1897 1898 `-fno-implement-inlines' 1899 To save space, do not emit out-of-line copies of inline functions 1900 controlled by `#pragma implementation'. This will cause linker 1901 errors if these functions are not inlined everywhere they are 1902 called. 1903 1904 `-fms-extensions' 1905 Disable pedantic warnings about constructs used in MFC, such as 1906 implicit int and getting a pointer to member function via 1907 non-standard syntax. 1908 1909 `-fno-nonansi-builtins' 1910 Disable built-in declarations of functions that are not mandated by 1911 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 1912 `bzero', `conjf', and other related functions. 1913 1914 `-fno-operator-names' 1915 Do not treat the operator name keywords `and', `bitand', `bitor', 1916 `compl', `not', `or' and `xor' as synonyms as keywords. 1917 1918 `-fno-optional-diags' 1919 Disable diagnostics that the standard says a compiler does not 1920 need to issue. Currently, the only such diagnostic issued by G++ 1921 is the one for a name having multiple meanings within a class. 1922 1923 `-fpermissive' 1924 Downgrade some diagnostics about nonconformant code from errors to 1925 warnings. Thus, using `-fpermissive' will allow some 1926 nonconforming code to compile. 1927 1928 `-frepo' 1929 Enable automatic template instantiation at link time. This option 1930 also implies `-fno-implicit-templates'. *Note Template 1931 Instantiation::, for more information. 1932 1933 `-fno-rtti' 1934 Disable generation of information about every class with virtual 1935 functions for use by the C++ runtime type identification features 1936 (`dynamic_cast' and `typeid'). If you don't use those parts of 1937 the language, you can save some space by using this flag. Note 1938 that exception handling uses the same information, but it will 1939 generate it as needed. The `dynamic_cast' operator can still be 1940 used for casts that do not require runtime type information, i.e. 1941 casts to `void *' or to unambiguous base classes. 1942 1943 `-fstats' 1944 Emit statistics about front-end processing at the end of the 1945 compilation. This information is generally only useful to the G++ 1946 development team. 1947 1948 `-ftemplate-depth-N' 1949 Set the maximum instantiation depth for template classes to N. A 1950 limit on the template instantiation depth is needed to detect 1951 endless recursions during template class instantiation. ANSI/ISO 1952 C++ conforming programs must not rely on a maximum depth greater 1953 than 17. 1954 1955 `-fno-threadsafe-statics' 1956 Do not emit the extra code to use the routines specified in the C++ 1957 ABI for thread-safe initialization of local statics. You can use 1958 this option to reduce code size slightly in code that doesn't need 1959 to be thread-safe. 1960 1961 `-fuse-cxa-atexit' 1962 Register destructors for objects with static storage duration with 1963 the `__cxa_atexit' function rather than the `atexit' function. 1964 This option is required for fully standards-compliant handling of 1965 static destructors, but will only work if your C library supports 1966 `__cxa_atexit'. 1967 1968 `-fno-use-cxa-get-exception-ptr' 1969 Don't use the `__cxa_get_exception_ptr' runtime routine. This 1970 will cause `std::uncaught_exception' to be incorrect, but is 1971 necessary if the runtime routine is not available. 1972 1973 `-fvisibility-inlines-hidden' 1974 This switch declares that the user does not attempt to compare 1975 pointers to inline methods where the addresses of the two functions 1976 were taken in different shared objects. 1977 1978 The effect of this is that GCC may, effectively, mark inline 1979 methods with `__attribute__ ((visibility ("hidden")))' so that 1980 they do not appear in the export table of a DSO and do not require 1981 a PLT indirection when used within the DSO. Enabling this option 1982 can have a dramatic effect on load and link times of a DSO as it 1983 massively reduces the size of the dynamic export table when the 1984 library makes heavy use of templates. 1985 1986 The behavior of this switch is not quite the same as marking the 1987 methods as hidden directly, because it does not affect static 1988 variables local to the function or cause the compiler to deduce 1989 that the function is defined in only one shared object. 1990 1991 You may mark a method as having a visibility explicitly to negate 1992 the effect of the switch for that method. For example, if you do 1993 want to compare pointers to a particular inline method, you might 1994 mark it as having default visibility. Marking the enclosing class 1995 with explicit visibility will have no effect. 1996 1997 Explicitly instantiated inline methods are unaffected by this 1998 option as their linkage might otherwise cross a shared library 1999 boundary. *Note Template Instantiation::. 2000 2001 `-fvisibility-ms-compat' 2002 This flag attempts to use visibility settings to make GCC's C++ 2003 linkage model compatible with that of Microsoft Visual Studio. 2004 2005 The flag makes these changes to GCC's linkage model: 2006 2007 1. It sets the default visibility to `hidden', like 2008 `-fvisibility=hidden'. 2009 2010 2. Types, but not their members, are not hidden by default. 2011 2012 3. The One Definition Rule is relaxed for types without explicit 2013 visibility specifications which are defined in more than one 2014 different shared object: those declarations are permitted if 2015 they would have been permitted when this option was not used. 2016 2017 In new code it is better to use `-fvisibility=hidden' and export 2018 those classes which are intended to be externally visible. 2019 Unfortunately it is possible for code to rely, perhaps 2020 accidentally, on the Visual Studio behavior. 2021 2022 Among the consequences of these changes are that static data 2023 members of the same type with the same name but defined in 2024 different shared objects will be different, so changing one will 2025 not change the other; and that pointers to function members 2026 defined in different shared objects may not compare equal. When 2027 this flag is given, it is a violation of the ODR to define types 2028 with the same name differently. 2029 2030 `-fno-weak' 2031 Do not use weak symbol support, even if it is provided by the 2032 linker. By default, G++ will use weak symbols if they are 2033 available. This option exists only for testing, and should not be 2034 used by end-users; it will result in inferior code and has no 2035 benefits. This option may be removed in a future release of G++. 2036 2037 `-nostdinc++' 2038 Do not search for header files in the standard directories 2039 specific to C++, but do still search the other standard 2040 directories. (This option is used when building the C++ library.) 2041 2042 In addition, these optimization, warning, and code generation options 2043 have meanings only for C++ programs: 2044 2045 `-fno-default-inline' 2046 Do not assume `inline' for functions defined inside a class scope. 2047 *Note Options That Control Optimization: Optimize Options. Note 2048 that these functions will have linkage like inline functions; they 2049 just won't be inlined by default. 2050 2051 `-Wabi (C++ and Objective-C++ only)' 2052 Warn when G++ generates code that is probably not compatible with 2053 the vendor-neutral C++ ABI. Although an effort has been made to 2054 warn about all such cases, there are probably some cases that are 2055 not warned about, even though G++ is generating incompatible code. 2056 There may also be cases where warnings are emitted even though 2057 the code that is generated will be compatible. 2058 2059 You should rewrite your code to avoid these warnings if you are 2060 concerned about the fact that code generated by G++ may not be 2061 binary compatible with code generated by other compilers. 2062 2063 The known incompatibilities at this point include: 2064 2065 * Incorrect handling of tail-padding for bit-fields. G++ may 2066 attempt to pack data into the same byte as a base class. For 2067 example: 2068 2069 struct A { virtual void f(); int f1 : 1; }; 2070 struct B : public A { int f2 : 1; }; 2071 2072 In this case, G++ will place `B::f2' into the same byte 2073 as`A::f1'; other compilers will not. You can avoid this 2074 problem by explicitly padding `A' so that its size is a 2075 multiple of the byte size on your platform; that will cause 2076 G++ and other compilers to layout `B' identically. 2077 2078 * Incorrect handling of tail-padding for virtual bases. G++ 2079 does not use tail padding when laying out virtual bases. For 2080 example: 2081 2082 struct A { virtual void f(); char c1; }; 2083 struct B { B(); char c2; }; 2084 struct C : public A, public virtual B {}; 2085 2086 In this case, G++ will not place `B' into the tail-padding for 2087 `A'; other compilers will. You can avoid this problem by 2088 explicitly padding `A' so that its size is a multiple of its 2089 alignment (ignoring virtual base classes); that will cause 2090 G++ and other compilers to layout `C' identically. 2091 2092 * Incorrect handling of bit-fields with declared widths greater 2093 than that of their underlying types, when the bit-fields 2094 appear in a union. For example: 2095 2096 union U { int i : 4096; }; 2097 2098 Assuming that an `int' does not have 4096 bits, G++ will make 2099 the union too small by the number of bits in an `int'. 2100 2101 * Empty classes can be placed at incorrect offsets. For 2102 example: 2103 2104 struct A {}; 2105 2106 struct B { 2107 A a; 2108 virtual void f (); 2109 }; 2110 2111 struct C : public B, public A {}; 2112 2113 G++ will place the `A' base class of `C' at a nonzero offset; 2114 it should be placed at offset zero. G++ mistakenly believes 2115 that the `A' data member of `B' is already at offset zero. 2116 2117 * Names of template functions whose types involve `typename' or 2118 template template parameters can be mangled incorrectly. 2119 2120 template <typename Q> 2121 void f(typename Q::X) {} 2122 2123 template <template <typename> class Q> 2124 void f(typename Q<int>::X) {} 2125 2126 Instantiations of these templates may be mangled incorrectly. 2127 2128 2129 `-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2130 Warn when a class seems unusable because all the constructors or 2131 destructors in that class are private, and it has neither friends 2132 nor public static member functions. 2133 2134 `-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2135 Warn when a class has virtual functions and accessible non-virtual 2136 destructor, in which case it would be possible but unsafe to delete 2137 an instance of a derived class through a pointer to the base class. 2138 This warning is also enabled if -Weffc++ is specified. 2139 2140 `-Wreorder (C++ and Objective-C++ only)' 2141 Warn when the order of member initializers given in the code does 2142 not match the order in which they must be executed. For instance: 2143 2144 struct A { 2145 int i; 2146 int j; 2147 A(): j (0), i (1) { } 2148 }; 2149 2150 The compiler will rearrange the member initializers for `i' and 2151 `j' to match the declaration order of the members, emitting a 2152 warning to that effect. This warning is enabled by `-Wall'. 2153 2154 The following `-W...' options are not affected by `-Wall'. 2155 2156 `-Weffc++ (C++ and Objective-C++ only)' 2157 Warn about violations of the following style guidelines from Scott 2158 Meyers' `Effective C++' book: 2159 2160 * Item 11: Define a copy constructor and an assignment 2161 operator for classes with dynamically allocated memory. 2162 2163 * Item 12: Prefer initialization to assignment in constructors. 2164 2165 * Item 14: Make destructors virtual in base classes. 2166 2167 * Item 15: Have `operator=' return a reference to `*this'. 2168 2169 * Item 23: Don't try to return a reference when you must 2170 return an object. 2171 2172 2173 Also warn about violations of the following style guidelines from 2174 Scott Meyers' `More Effective C++' book: 2175 2176 * Item 6: Distinguish between prefix and postfix forms of 2177 increment and decrement operators. 2178 2179 * Item 7: Never overload `&&', `||', or `,'. 2180 2181 2182 When selecting this option, be aware that the standard library 2183 headers do not obey all of these guidelines; use `grep -v' to 2184 filter out those warnings. 2185 2186 `-Wno-deprecated (C++ and Objective-C++ only)' 2187 Do not warn about usage of deprecated features. *Note Deprecated 2188 Features::. 2189 2190 `-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2191 Warn also about the use of an uncasted `NULL' as sentinel. When 2192 compiling only with GCC this is a valid sentinel, as `NULL' is 2193 defined to `__null'. Although it is a null pointer constant not a 2194 null pointer, it is guaranteed to of the same size as a pointer. 2195 But this use is not portable across different compilers. 2196 2197 `-Wno-non-template-friend (C++ and Objective-C++ only)' 2198 Disable warnings when non-templatized friend functions are declared 2199 within a template. Since the advent of explicit template 2200 specification support in G++, if the name of the friend is an 2201 unqualified-id (i.e., `friend foo(int)'), the C++ language 2202 specification demands that the friend declare or define an 2203 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2204 implemented explicit specification, unqualified-ids could be 2205 interpreted as a particular specialization of a templatized 2206 function. Because this non-conforming behavior is no longer the 2207 default behavior for G++, `-Wnon-template-friend' allows the 2208 compiler to check existing code for potential trouble spots and is 2209 on by default. This new compiler behavior can be turned off with 2210 `-Wno-non-template-friend' which keeps the conformant compiler code 2211 but disables the helpful warning. 2212 2213 `-Wold-style-cast (C++ and Objective-C++ only)' 2214 Warn if an old-style (C-style) cast to a non-void type is used 2215 within a C++ program. The new-style casts (`dynamic_cast', 2216 `static_cast', `reinterpret_cast', and `const_cast') are less 2217 vulnerable to unintended effects and much easier to search for. 2218 2219 `-Woverloaded-virtual (C++ and Objective-C++ only)' 2220 Warn when a function declaration hides virtual functions from a 2221 base class. For example, in: 2222 2223 struct A { 2224 virtual void f(); 2225 }; 2226 2227 struct B: public A { 2228 void f(int); 2229 }; 2230 2231 the `A' class version of `f' is hidden in `B', and code like: 2232 2233 B* b; 2234 b->f(); 2235 2236 will fail to compile. 2237 2238 `-Wno-pmf-conversions (C++ and Objective-C++ only)' 2239 Disable the diagnostic for converting a bound pointer to member 2240 function to a plain pointer. 2241 2242 `-Wsign-promo (C++ and Objective-C++ only)' 2243 Warn when overload resolution chooses a promotion from unsigned or 2244 enumerated type to a signed type, over a conversion to an unsigned 2245 type of the same size. Previous versions of G++ would try to 2246 preserve unsignedness, but the standard mandates the current 2247 behavior. 2248 2249 struct A { 2250 operator int (); 2251 A& operator = (int); 2252 }; 2253 2254 main () 2255 { 2256 A a,b; 2257 a = b; 2258 } 2259 2260 In this example, G++ will synthesize a default `A& operator = 2261 (const A&);', while cfront will use the user-defined `operator ='. 2262 2263 2264 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2265 2266 3.6 Options Controlling Objective-C and Objective-C++ Dialects 2267 ============================================================== 2268 2269 (NOTE: This manual does not describe the Objective-C and Objective-C++ 2270 languages themselves. See *Note Language Standards Supported by GCC: 2271 Standards, for references.) 2272 2273 This section describes the command-line options that are only 2274 meaningful for Objective-C and Objective-C++ programs, but you can also 2275 use most of the language-independent GNU compiler options. For 2276 example, you might compile a file `some_class.m' like this: 2277 2278 gcc -g -fgnu-runtime -O -c some_class.m 2279 2280 In this example, `-fgnu-runtime' is an option meant only for 2281 Objective-C and Objective-C++ programs; you can use the other options 2282 with any language supported by GCC. 2283 2284 Note that since Objective-C is an extension of the C language, 2285 Objective-C compilations may also use options specific to the C 2286 front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2287 compilations may use C++-specific options (e.g., `-Wabi'). 2288 2289 Here is a list of options that are _only_ for compiling Objective-C 2290 and Objective-C++ programs: 2291 2292 `-fconstant-string-class=CLASS-NAME' 2293 Use CLASS-NAME as the name of the class to instantiate for each 2294 literal string specified with the syntax `@"..."'. The default 2295 class name is `NXConstantString' if the GNU runtime is being used, 2296 and `NSConstantString' if the NeXT runtime is being used (see 2297 below). The `-fconstant-cfstrings' option, if also present, will 2298 override the `-fconstant-string-class' setting and cause `@"..."' 2299 literals to be laid out as constant CoreFoundation strings. 2300 2301 `-fgnu-runtime' 2302 Generate object code compatible with the standard GNU Objective-C 2303 runtime. This is the default for most types of systems. 2304 2305 `-fnext-runtime' 2306 Generate output compatible with the NeXT runtime. This is the 2307 default for NeXT-based systems, including Darwin and Mac OS X. 2308 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2309 option is used. 2310 2311 `-fno-nil-receivers' 2312 Assume that all Objective-C message dispatches (e.g., `[receiver 2313 message:arg]') in this translation unit ensure that the receiver 2314 is not `nil'. This allows for more efficient entry points in the 2315 runtime to be used. Currently, this option is only available in 2316 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2317 2318 `-fobjc-call-cxx-cdtors' 2319 For each Objective-C class, check if any of its instance variables 2320 is a C++ object with a non-trivial default constructor. If so, 2321 synthesize a special `- (id) .cxx_construct' instance method that 2322 will run non-trivial default constructors on any such instance 2323 variables, in order, and then return `self'. Similarly, check if 2324 any instance variable is a C++ object with a non-trivial 2325 destructor, and if so, synthesize a special `- (void) 2326 .cxx_destruct' method that will run all such default destructors, 2327 in reverse order. 2328 2329 The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods 2330 thusly generated will only operate on instance variables declared 2331 in the current Objective-C class, and not those inherited from 2332 superclasses. It is the responsibility of the Objective-C runtime 2333 to invoke all such methods in an object's inheritance hierarchy. 2334 The `- (id) .cxx_construct' methods will be invoked by the runtime 2335 immediately after a new object instance is allocated; the `- 2336 (void) .cxx_destruct' methods will be invoked immediately before 2337 the runtime deallocates an object instance. 2338 2339 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2340 later has support for invoking the `- (id) .cxx_construct' and `- 2341 (void) .cxx_destruct' methods. 2342 2343 `-fobjc-direct-dispatch' 2344 Allow fast jumps to the message dispatcher. On Darwin this is 2345 accomplished via the comm page. 2346 2347 `-fobjc-exceptions' 2348 Enable syntactic support for structured exception handling in 2349 Objective-C, similar to what is offered by C++ and Java. This 2350 option is unavailable in conjunction with the NeXT runtime on Mac 2351 OS X 10.2 and earlier. 2352 2353 @try { 2354 ... 2355 @throw expr; 2356 ... 2357 } 2358 @catch (AnObjCClass *exc) { 2359 ... 2360 @throw expr; 2361 ... 2362 @throw; 2363 ... 2364 } 2365 @catch (AnotherClass *exc) { 2366 ... 2367 } 2368 @catch (id allOthers) { 2369 ... 2370 } 2371 @finally { 2372 ... 2373 @throw expr; 2374 ... 2375 } 2376 2377 The `@throw' statement may appear anywhere in an Objective-C or 2378 Objective-C++ program; when used inside of a `@catch' block, the 2379 `@throw' may appear without an argument (as shown above), in which 2380 case the object caught by the `@catch' will be rethrown. 2381 2382 Note that only (pointers to) Objective-C objects may be thrown and 2383 caught using this scheme. When an object is thrown, it will be 2384 caught by the nearest `@catch' clause capable of handling objects 2385 of that type, analogously to how `catch' blocks work in C++ and 2386 Java. A `@catch(id ...)' clause (as shown above) may also be 2387 provided to catch any and all Objective-C exceptions not caught by 2388 previous `@catch' clauses (if any). 2389 2390 The `@finally' clause, if present, will be executed upon exit from 2391 the immediately preceding `@try ... @catch' section. This will 2392 happen regardless of whether any exceptions are thrown, caught or 2393 rethrown inside the `@try ... @catch' section, analogously to the 2394 behavior of the `finally' clause in Java. 2395 2396 There are several caveats to using the new exception mechanism: 2397 2398 * Although currently designed to be binary compatible with 2399 `NS_HANDLER'-style idioms provided by the `NSException' 2400 class, the new exceptions can only be used on Mac OS X 10.3 2401 (Panther) and later systems, due to additional functionality 2402 needed in the (NeXT) Objective-C runtime. 2403 2404 * As mentioned above, the new exceptions do not support handling 2405 types other than Objective-C objects. Furthermore, when 2406 used from Objective-C++, the Objective-C exception model does 2407 not interoperate with C++ exceptions at this time. This 2408 means you cannot `@throw' an exception from Objective-C and 2409 `catch' it in C++, or vice versa (i.e., `throw ... @catch'). 2410 2411 The `-fobjc-exceptions' switch also enables the use of 2412 synchronization blocks for thread-safe execution: 2413 2414 @synchronized (ObjCClass *guard) { 2415 ... 2416 } 2417 2418 Upon entering the `@synchronized' block, a thread of execution 2419 shall first check whether a lock has been placed on the 2420 corresponding `guard' object by another thread. If it has, the 2421 current thread shall wait until the other thread relinquishes its 2422 lock. Once `guard' becomes available, the current thread will 2423 place its own lock on it, execute the code contained in the 2424 `@synchronized' block, and finally relinquish the lock (thereby 2425 making `guard' available to other threads). 2426 2427 Unlike Java, Objective-C does not allow for entire methods to be 2428 marked `@synchronized'. Note that throwing exceptions out of 2429 `@synchronized' blocks is allowed, and will cause the guarding 2430 object to be unlocked properly. 2431 2432 `-fobjc-gc' 2433 Enable garbage collection (GC) in Objective-C and Objective-C++ 2434 programs. 2435 2436 `-freplace-objc-classes' 2437 Emit a special marker instructing `ld(1)' not to statically link in 2438 the resulting object file, and allow `dyld(1)' to load it in at 2439 run time instead. This is used in conjunction with the 2440 Fix-and-Continue debugging mode, where the object file in question 2441 may be recompiled and dynamically reloaded in the course of 2442 program execution, without the need to restart the program itself. 2443 Currently, Fix-and-Continue functionality is only available in 2444 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2445 2446 `-fzero-link' 2447 When compiling for the NeXT runtime, the compiler ordinarily 2448 replaces calls to `objc_getClass("...")' (when the name of the 2449 class is known at compile time) with static class references that 2450 get initialized at load time, which improves run-time performance. 2451 Specifying the `-fzero-link' flag suppresses this behavior and 2452 causes calls to `objc_getClass("...")' to be retained. This is 2453 useful in Zero-Link debugging mode, since it allows for individual 2454 class implementations to be modified during program execution. 2455 2456 `-gen-decls' 2457 Dump interface declarations for all classes seen in the source 2458 file to a file named `SOURCENAME.decl'. 2459 2460 `-Wassign-intercept (Objective-C and Objective-C++ only)' 2461 Warn whenever an Objective-C assignment is being intercepted by the 2462 garbage collector. 2463 2464 `-Wno-protocol (Objective-C and Objective-C++ only)' 2465 If a class is declared to implement a protocol, a warning is 2466 issued for every method in the protocol that is not implemented by 2467 the class. The default behavior is to issue a warning for every 2468 method not explicitly implemented in the class, even if a method 2469 implementation is inherited from the superclass. If you use the 2470 `-Wno-protocol' option, then methods inherited from the superclass 2471 are considered to be implemented, and no warning is issued for 2472 them. 2473 2474 `-Wselector (Objective-C and Objective-C++ only)' 2475 Warn if multiple methods of different types for the same selector 2476 are found during compilation. The check is performed on the list 2477 of methods in the final stage of compilation. Additionally, a 2478 check is performed for each selector appearing in a 2479 `@selector(...)' expression, and a corresponding method for that 2480 selector has been found during compilation. Because these checks 2481 scan the method table only at the end of compilation, these 2482 warnings are not produced if the final stage of compilation is not 2483 reached, for example because an error is found during compilation, 2484 or because the `-fsyntax-only' option is being used. 2485 2486 `-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2487 Warn if multiple methods with differing argument and/or return 2488 types are found for a given selector when attempting to send a 2489 message using this selector to a receiver of type `id' or `Class'. 2490 When this flag is off (which is the default behavior), the 2491 compiler will omit such warnings if any differences found are 2492 confined to types which share the same size and alignment. 2493 2494 `-Wundeclared-selector (Objective-C and Objective-C++ only)' 2495 Warn if a `@selector(...)' expression referring to an undeclared 2496 selector is found. A selector is considered undeclared if no 2497 method with that name has been declared before the 2498 `@selector(...)' expression, either explicitly in an `@interface' 2499 or `@protocol' declaration, or implicitly in an `@implementation' 2500 section. This option always performs its checks as soon as a 2501 `@selector(...)' expression is found, while `-Wselector' only 2502 performs its checks in the final stage of compilation. This also 2503 enforces the coding style convention that methods and selectors 2504 must be declared before being used. 2505 2506 `-print-objc-runtime-info' 2507 Generate C header describing the largest structure that is passed 2508 by value, if any. 2509 2510 2511 2512 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2513 2514 3.7 Options to Control Diagnostic Messages Formatting 2515 ===================================================== 2516 2517 Traditionally, diagnostic messages have been formatted irrespective of 2518 the output device's aspect (e.g. its width, ...). The options described 2519 below can be used to control the diagnostic messages formatting 2520 algorithm, e.g. how many characters per line, how often source location 2521 information should be reported. Right now, only the C++ front end can 2522 honor these options. However it is expected, in the near future, that 2523 the remaining front ends would be able to digest them correctly. 2524 2525 `-fmessage-length=N' 2526 Try to format error messages so that they fit on lines of about N 2527 characters. The default is 72 characters for `g++' and 0 for the 2528 rest of the front ends supported by GCC. If N is zero, then no 2529 line-wrapping will be done; each error message will appear on a 2530 single line. 2531 2532 `-fdiagnostics-show-location=once' 2533 Only meaningful in line-wrapping mode. Instructs the diagnostic 2534 messages reporter to emit _once_ source location information; that 2535 is, in case the message is too long to fit on a single physical 2536 line and has to be wrapped, the source location won't be emitted 2537 (as prefix) again, over and over, in subsequent continuation 2538 lines. This is the default behavior. 2539 2540 `-fdiagnostics-show-location=every-line' 2541 Only meaningful in line-wrapping mode. Instructs the diagnostic 2542 messages reporter to emit the same source location information (as 2543 prefix) for physical lines that result from the process of breaking 2544 a message which is too long to fit on a single line. 2545 2546 `-fdiagnostics-show-option' 2547 This option instructs the diagnostic machinery to add text to each 2548 diagnostic emitted, which indicates which command line option 2549 directly controls that diagnostic, when such an option is known to 2550 the diagnostic machinery. 2551 2552 `-Wcoverage-mismatch' 2553 Warn if feedback profiles do not match when using the 2554 `-fprofile-use' option. If a source file was changed between 2555 `-fprofile-gen' and `-fprofile-use', the files with the profile 2556 feedback can fail to match the source file and GCC can not use the 2557 profile feedback information. By default, GCC emits an error 2558 message in this case. The option `-Wcoverage-mismatch' emits a 2559 warning instead of an error. GCC does not use appropriate 2560 feedback profiles, so using this option can result in poorly 2561 optimized code. This option is useful only in the case of very 2562 minor changes such as bug fixes to an existing code-base. 2563 2564 2565 2566 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2567 2568 3.8 Options to Request or Suppress Warnings 2569 =========================================== 2570 2571 Warnings are diagnostic messages that report constructions which are 2572 not inherently erroneous but which are risky or suggest there may have 2573 been an error. 2574 2575 The following language-independent options do not enable specific 2576 warnings but control the kinds of diagnostics produced by GCC. 2577 2578 `-fsyntax-only' 2579 Check the code for syntax errors, but don't do anything beyond 2580 that. 2581 2582 `-w' 2583 Inhibit all warning messages. 2584 2585 `-Werror' 2586 Make all warnings into errors. 2587 2588 `-Werror=' 2589 Make the specified warning into an error. The specifier for a 2590 warning is appended, for example `-Werror=switch' turns the 2591 warnings controlled by `-Wswitch' into errors. This switch takes a 2592 negative form, to be used to negate `-Werror' for specific 2593 warnings, for example `-Wno-error=switch' makes `-Wswitch' 2594 warnings not be errors, even when `-Werror' is in effect. You can 2595 use the `-fdiagnostics-show-option' option to have each 2596 controllable warning amended with the option which controls it, to 2597 determine what to use with this option. 2598 2599 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 2600 However, `-Wno-error='FOO does not imply anything. 2601 2602 `-Wfatal-errors' 2603 This option causes the compiler to abort compilation on the first 2604 error occurred rather than trying to keep going and printing 2605 further error messages. 2606 2607 2608 You can request many specific warnings with options beginning `-W', 2609 for example `-Wimplicit' to request warnings on implicit declarations. 2610 Each of these specific warning options also has a negative form 2611 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2612 This manual lists only one of the two forms, whichever is not the 2613 default. For further, language-specific options also refer to *Note 2614 C++ Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 2615 Options::. 2616 2617 `-pedantic' 2618 Issue all the warnings demanded by strict ISO C and ISO C++; 2619 reject all programs that use forbidden extensions, and some other 2620 programs that do not follow ISO C and ISO C++. For ISO C, follows 2621 the version of the ISO C standard specified by any `-std' option 2622 used. 2623 2624 Valid ISO C and ISO C++ programs should compile properly with or 2625 without this option (though a rare few will require `-ansi' or a 2626 `-std' option specifying the required version of ISO C). However, 2627 without this option, certain GNU extensions and traditional C and 2628 C++ features are supported as well. With this option, they are 2629 rejected. 2630 2631 `-pedantic' does not cause warning messages for use of the 2632 alternate keywords whose names begin and end with `__'. Pedantic 2633 warnings are also disabled in the expression that follows 2634 `__extension__'. However, only system header files should use 2635 these escape routes; application programs should avoid them. 2636 *Note Alternate Keywords::. 2637 2638 Some users try to use `-pedantic' to check programs for strict ISO 2639 C conformance. They soon find that it does not do quite what they 2640 want: it finds some non-ISO practices, but not all--only those for 2641 which ISO C _requires_ a diagnostic, and some others for which 2642 diagnostics have been added. 2643 2644 A feature to report any failure to conform to ISO C might be 2645 useful in some instances, but would require considerable 2646 additional work and would be quite different from `-pedantic'. We 2647 don't have plans to support such a feature in the near future. 2648 2649 Where the standard specified with `-std' represents a GNU extended 2650 dialect of C, such as `gnu89' or `gnu99', there is a corresponding 2651 "base standard", the version of ISO C on which the GNU extended 2652 dialect is based. Warnings from `-pedantic' are given where they 2653 are required by the base standard. (It would not make sense for 2654 such warnings to be given only for features not in the specified 2655 GNU C dialect, since by definition the GNU dialects of C include 2656 all features the compiler supports with the given option, and 2657 there would be nothing to warn about.) 2658 2659 `-pedantic-errors' 2660 Like `-pedantic', except that errors are produced rather than 2661 warnings. 2662 2663 `-Wall' 2664 This enables all the warnings about constructions that some users 2665 consider questionable, and that are easy to avoid (or modify to 2666 prevent the warning), even in conjunction with macros. This also 2667 enables some language-specific warnings described in *Note C++ 2668 Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 2669 Options::. 2670 2671 `-Wall' turns on the following warning flags: 2672 2673 -Waddress 2674 -Warray-bounds (only with `-O2') 2675 -Wc++0x-compat 2676 -Wchar-subscripts 2677 -Wimplicit-int 2678 -Wimplicit-function-declaration 2679 -Wcomment 2680 -Wformat 2681 -Wmain (only for C/ObjC and unless `-ffreestanding') 2682 -Wmissing-braces 2683 -Wnonnull 2684 -Wparentheses 2685 -Wpointer-sign 2686 -Wreorder 2687 -Wreturn-type 2688 -Wsequence-point 2689 -Wsign-compare (only in C++) 2690 -Wstrict-aliasing 2691 -Wstrict-overflow=1 2692 -Wswitch 2693 -Wtrigraphs 2694 -Wuninitialized (only with `-O1' and above) 2695 -Wunknown-pragmas 2696 -Wunused-function 2697 -Wunused-label 2698 -Wunused-value 2699 -Wunused-variable 2700 2701 Note that some warning flags are not implied by `-Wall'. Some of 2702 them warn about constructions that users generally do not consider 2703 questionable, but which occasionally you might wish to check for; 2704 others warn about constructions that are necessary or hard to 2705 avoid in some cases, and there is no simple way to modify the code 2706 to suppress the warning. Some of them are enabled by `-Wextra' but 2707 many of them must be enabled individually. 2708 2709 `-Wextra' 2710 This enables some extra warning flags that are not enabled by 2711 `-Wall'. (This option used to be called `-W'. The older name is 2712 still supported, but the newer name is more descriptive.) 2713 2714 -Wclobbered 2715 -Wempty-body 2716 -Wignored-qualifiers 2717 -Wmissing-field-initializers 2718 -Wmissing-parameter-type (C only) 2719 -Wold-style-declaration (C only) 2720 -Woverride-init 2721 -Wsign-compare 2722 -Wtype-limits 2723 -Wuninitialized (only with `-O1' and above) 2724 -Wunused-parameter (only with `-Wunused' or `-Wall') 2725 2726 The option `-Wextra' also prints warning messages for the 2727 following cases: 2728 2729 * A pointer is compared against integer zero with `<', `<=', 2730 `>', or `>='. 2731 2732 * (C++ only) An enumerator and a non-enumerator both appear in a 2733 conditional expression. 2734 2735 * (C++ only) A non-static reference or non-static `const' member 2736 appears in a class without constructors. 2737 2738 * (C++ only) Ambiguous virtual bases. 2739 2740 * (C++ only) Subscripting an array which has been declared 2741 `register'. 2742 2743 * (C++ only) Taking the address of a variable which has been 2744 declared `register'. 2745 2746 * (C++ only) A base class is not initialized in a derived 2747 class' copy constructor. 2748 2749 2750 `-Wno-import' 2751 Inhibit warning messages about the use of `#import'. 2752 2753 `-Wchar-subscripts' 2754 Warn if an array subscript has type `char'. This is a common cause 2755 of error, as programmers often forget that this type is signed on 2756 some machines. This warning is enabled by `-Wall'. 2757 2758 `-Wcomment' 2759 Warn whenever a comment-start sequence `/*' appears in a `/*' 2760 comment, or whenever a Backslash-Newline appears in a `//' comment. 2761 This warning is enabled by `-Wall'. 2762 2763 `-Wformat' 2764 Check calls to `printf' and `scanf', etc., to make sure that the 2765 arguments supplied have types appropriate to the format string 2766 specified, and that the conversions specified in the format string 2767 make sense. This includes standard functions, and others 2768 specified by format attributes (*note Function Attributes::), in 2769 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 2770 extension, not in the C standard) families (or other 2771 target-specific families). Which functions are checked without 2772 format attributes having been specified depends on the standard 2773 version selected, and such checks of functions without the 2774 attribute specified are disabled by `-ffreestanding' or 2775 `-fno-builtin'. 2776 2777 The formats are checked against the format features supported by 2778 GNU libc version 2.2. These include all ISO C90 and C99 features, 2779 as well as features from the Single Unix Specification and some 2780 BSD and GNU extensions. Other library implementations may not 2781 support all these features; GCC does not support warning about 2782 features that go beyond a particular library's limitations. 2783 However, if `-pedantic' is used with `-Wformat', warnings will be 2784 given about format features not in the selected standard version 2785 (but not for `strfmon' formats, since those are not in any version 2786 of the C standard). *Note Options Controlling C Dialect: C 2787 Dialect Options. 2788 2789 Since `-Wformat' also checks for null format arguments for several 2790 functions, `-Wformat' also implies `-Wnonnull'. 2791 2792 `-Wformat' is included in `-Wall'. For more control over some 2793 aspects of format checking, the options `-Wformat-y2k', 2794 `-Wno-format-extra-args', `-Wno-format-zero-length', 2795 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 2796 available, but are not included in `-Wall'. 2797 2798 `-Wformat-y2k' 2799 If `-Wformat' is specified, also warn about `strftime' formats 2800 which may yield only a two-digit year. 2801 2802 `-Wno-format-extra-args' 2803 If `-Wformat' is specified, do not warn about excess arguments to a 2804 `printf' or `scanf' format function. The C standard specifies 2805 that such arguments are ignored. 2806 2807 Where the unused arguments lie between used arguments that are 2808 specified with `$' operand number specifications, normally 2809 warnings are still given, since the implementation could not know 2810 what type to pass to `va_arg' to skip the unused arguments. 2811 However, in the case of `scanf' formats, this option will suppress 2812 the warning if the unused arguments are all pointers, since the 2813 Single Unix Specification says that such unused arguments are 2814 allowed. 2815 2816 `-Wno-format-zero-length (C and Objective-C only)' 2817 If `-Wformat' is specified, do not warn about zero-length formats. 2818 The C standard specifies that zero-length formats are allowed. 2819 2820 `-Wformat-nonliteral' 2821 If `-Wformat' is specified, also warn if the format string is not a 2822 string literal and so cannot be checked, unless the format function 2823 takes its format arguments as a `va_list'. 2824 2825 `-Wformat-security' 2826 If `-Wformat' is specified, also warn about uses of format 2827 functions that represent possible security problems. At present, 2828 this warns about calls to `printf' and `scanf' functions where the 2829 format string is not a string literal and there are no format 2830 arguments, as in `printf (foo);'. This may be a security hole if 2831 the format string came from untrusted input and contains `%n'. 2832 (This is currently a subset of what `-Wformat-nonliteral' warns 2833 about, but in future warnings may be added to `-Wformat-security' 2834 that are not included in `-Wformat-nonliteral'.) 2835 2836 `-Wformat=2' 2837 Enable `-Wformat' plus format checks not included in `-Wformat'. 2838 Currently equivalent to `-Wformat -Wformat-nonliteral 2839 -Wformat-security -Wformat-y2k'. 2840 2841 `-Wnonnull (C and Objective-C only)' 2842 Warn about passing a null pointer for arguments marked as 2843 requiring a non-null value by the `nonnull' function attribute. 2844 2845 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 2846 disabled with the `-Wno-nonnull' option. 2847 2848 `-Winit-self (C, C++, Objective-C and Objective-C++ only)' 2849 Warn about uninitialized variables which are initialized with 2850 themselves. Note this option can only be used with the 2851 `-Wuninitialized' option, which in turn only works with `-O1' and 2852 above. 2853 2854 For example, GCC will warn about `i' being uninitialized in the 2855 following snippet only when `-Winit-self' has been specified: 2856 int f() 2857 { 2858 int i = i; 2859 return i; 2860 } 2861 2862 `-Wimplicit-int (C and Objective-C only)' 2863 Warn when a declaration does not specify a type. This warning is 2864 enabled by `-Wall'. 2865 2866 `-Wimplicit-function-declaration (C and Objective-C only)' 2867 Give a warning whenever a function is used before being declared. 2868 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 2869 by default and it is made into an error by `-pedantic-errors'. 2870 This warning is also enabled by `-Wall'. 2871 2872 `-Wimplicit' 2873 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 2874 This warning is enabled by `-Wall'. 2875 2876 `-Wignored-qualifiers (C and C++ only)' 2877 Warn if the return type of a function has a type qualifier such as 2878 `const'. For ISO C such a type qualifier has no effect, since the 2879 value returned by a function is not an lvalue. For C++, the 2880 warning is only emitted for scalar types or `void'. ISO C 2881 prohibits qualified `void' return types on function definitions, 2882 so such return types always receive a warning even without this 2883 option. 2884 2885 This warning is also enabled by `-Wextra'. 2886 2887 `-Wmain' 2888 Warn if the type of `main' is suspicious. `main' should be a 2889 function with external linkage, returning int, taking either zero 2890 arguments, two, or three arguments of appropriate types. This 2891 warning is enabled by `-Wall'. 2892 2893 `-Wmissing-braces' 2894 Warn if an aggregate or union initializer is not fully bracketed. 2895 In the following example, the initializer for `a' is not fully 2896 bracketed, but that for `b' is fully bracketed. 2897 2898 int a[2][2] = { 0, 1, 2, 3 }; 2899 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 2900 2901 This warning is enabled by `-Wall'. 2902 2903 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 2904 Warn if a user-supplied include directory does not exist. 2905 2906 `-Wparentheses' 2907 Warn if parentheses are omitted in certain contexts, such as when 2908 there is an assignment in a context where a truth value is 2909 expected, or when operators are nested whose precedence people 2910 often get confused about. 2911 2912 Also warn if a comparison like `x<=y<=z' appears; this is 2913 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 2914 interpretation from that of ordinary mathematical notation. 2915 2916 Also warn about constructions where there may be confusion to which 2917 `if' statement an `else' branch belongs. Here is an example of 2918 such a case: 2919 2920 { 2921 if (a) 2922 if (b) 2923 foo (); 2924 else 2925 bar (); 2926 } 2927 2928 In C/C++, every `else' branch belongs to the innermost possible 2929 `if' statement, which in this example is `if (b)'. This is often 2930 not what the programmer expected, as illustrated in the above 2931 example by indentation the programmer chose. When there is the 2932 potential for this confusion, GCC will issue a warning when this 2933 flag is specified. To eliminate the warning, add explicit braces 2934 around the innermost `if' statement so there is no way the `else' 2935 could belong to the enclosing `if'. The resulting code would look 2936 like this: 2937 2938 { 2939 if (a) 2940 { 2941 if (b) 2942 foo (); 2943 else 2944 bar (); 2945 } 2946 } 2947 2948 This warning is enabled by `-Wall'. 2949 2950 `-Wsequence-point' 2951 Warn about code that may have undefined semantics because of 2952 violations of sequence point rules in the C and C++ standards. 2953 2954 The C and C++ standards defines the order in which expressions in 2955 a C/C++ program are evaluated in terms of "sequence points", which 2956 represent a partial ordering between the execution of parts of the 2957 program: those executed before the sequence point, and those 2958 executed after it. These occur after the evaluation of a full 2959 expression (one which is not part of a larger expression), after 2960 the evaluation of the first operand of a `&&', `||', `? :' or `,' 2961 (comma) operator, before a function is called (but after the 2962 evaluation of its arguments and the expression denoting the called 2963 function), and in certain other places. Other than as expressed 2964 by the sequence point rules, the order of evaluation of 2965 subexpressions of an expression is not specified. All these rules 2966 describe only a partial order rather than a total order, since, 2967 for example, if two functions are called within one expression 2968 with no sequence point between them, the order in which the 2969 functions are called is not specified. However, the standards 2970 committee have ruled that function calls do not overlap. 2971 2972 It is not specified when between sequence points modifications to 2973 the values of objects take effect. Programs whose behavior 2974 depends on this have undefined behavior; the C and C++ standards 2975 specify that "Between the previous and next sequence point an 2976 object shall have its stored value modified at most once by the 2977 evaluation of an expression. Furthermore, the prior value shall 2978 be read only to determine the value to be stored.". If a program 2979 breaks these rules, the results on any particular implementation 2980 are entirely unpredictable. 2981 2982 Examples of code with undefined behavior are `a = a++;', `a[n] = 2983 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 2984 diagnosed by this option, and it may give an occasional false 2985 positive result, but in general it has been found fairly effective 2986 at detecting this sort of problem in programs. 2987 2988 The standard is worded confusingly, therefore there is some debate 2989 over the precise meaning of the sequence point rules in subtle 2990 cases. Links to discussions of the problem, including proposed 2991 formal definitions, may be found on the GCC readings page, at 2992 `http://gcc.gnu.org/readings.html'. 2993 2994 This warning is enabled by `-Wall' for C and C++. 2995 2996 `-Wreturn-type' 2997 Warn whenever a function is defined with a return-type that 2998 defaults to `int'. Also warn about any `return' statement with no 2999 return-value in a function whose return-type is not `void' 3000 (falling off the end of the function body is considered returning 3001 without a value), and about a `return' statement with a expression 3002 in a function whose return-type is `void'. 3003 3004 For C++, a function without return type always produces a 3005 diagnostic message, even when `-Wno-return-type' is specified. 3006 The only exceptions are `main' and functions defined in system 3007 headers. 3008 3009 This warning is enabled by `-Wall'. 3010 3011 `-Wswitch' 3012 Warn whenever a `switch' statement has an index of enumerated type 3013 and lacks a `case' for one or more of the named codes of that 3014 enumeration. (The presence of a `default' label prevents this 3015 warning.) `case' labels outside the enumeration range also 3016 provoke warnings when this option is used. This warning is 3017 enabled by `-Wall'. 3018 3019 `-Wswitch-default' 3020 Warn whenever a `switch' statement does not have a `default' case. 3021 3022 `-Wswitch-enum' 3023 Warn whenever a `switch' statement has an index of enumerated type 3024 and lacks a `case' for one or more of the named codes of that 3025 enumeration. `case' labels outside the enumeration range also 3026 provoke warnings when this option is used. 3027 3028 `-Wtrigraphs' 3029 Warn if any trigraphs are encountered that might change the 3030 meaning of the program (trigraphs within comments are not warned 3031 about). This warning is enabled by `-Wall'. 3032 3033 `-Wunused-function' 3034 Warn whenever a static function is declared but not defined or a 3035 non-inline static function is unused. This warning is enabled by 3036 `-Wall'. 3037 3038 `-Wunused-label' 3039 Warn whenever a label is declared but not used. This warning is 3040 enabled by `-Wall'. 3041 3042 To suppress this warning use the `unused' attribute (*note 3043 Variable Attributes::). 3044 3045 `-Wunused-parameter' 3046 Warn whenever a function parameter is unused aside from its 3047 declaration. 3048 3049 To suppress this warning use the `unused' attribute (*note 3050 Variable Attributes::). 3051 3052 `-Wunused-variable' 3053 Warn whenever a local variable or non-constant static variable is 3054 unused aside from its declaration. This warning is enabled by 3055 `-Wall'. 3056 3057 To suppress this warning use the `unused' attribute (*note 3058 Variable Attributes::). 3059 3060 `-Wunused-value' 3061 Warn whenever a statement computes a result that is explicitly not 3062 used. To suppress this warning cast the unused expression to 3063 `void'. This includes an expression-statement or the left-hand 3064 side of a comma expression that contains no side effects. For 3065 example, an expression such as `x[i,j]' will cause a warning, while 3066 `x[(void)i,j]' will not. 3067 3068 This warning is enabled by `-Wall'. 3069 3070 `-Wunused' 3071 All the above `-Wunused' options combined. 3072 3073 In order to get a warning about an unused function parameter, you 3074 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3075 `-Wunused'), or separately specify `-Wunused-parameter'. 3076 3077 `-Wuninitialized' 3078 Warn if an automatic variable is used without first being 3079 initialized or if a variable may be clobbered by a `setjmp' call. 3080 3081 These warnings are possible only in optimizing compilation, 3082 because they require data flow information that is computed only 3083 when optimizing. If you do not specify `-O', you will not get 3084 these warnings. Instead, GCC will issue a warning about 3085 `-Wuninitialized' requiring `-O'. 3086 3087 If you want to warn about code which uses the uninitialized value 3088 of the variable in its own initializer, use the `-Winit-self' 3089 option. 3090 3091 These warnings occur for individual uninitialized or clobbered 3092 elements of structure, union or array variables as well as for 3093 variables which are uninitialized or clobbered as a whole. They do 3094 not occur for variables or elements declared `volatile'. Because 3095 these warnings depend on optimization, the exact variables or 3096 elements for which there are warnings will depend on the precise 3097 optimization options and version of GCC used. 3098 3099 Note that there may be no warning about a variable that is used 3100 only to compute a value that itself is never used, because such 3101 computations may be deleted by data flow analysis before the 3102 warnings are printed. 3103 3104 These warnings are made optional because GCC is not smart enough 3105 to see all the reasons why the code might be correct despite 3106 appearing to have an error. Here is one example of how this can 3107 happen: 3108 3109 { 3110 int x; 3111 switch (y) 3112 { 3113 case 1: x = 1; 3114 break; 3115 case 2: x = 4; 3116 break; 3117 case 3: x = 5; 3118 } 3119 foo (x); 3120 } 3121 3122 If the value of `y' is always 1, 2 or 3, then `x' is always 3123 initialized, but GCC doesn't know this. Here is another common 3124 case: 3125 3126 { 3127 int save_y; 3128 if (change_y) save_y = y, y = new_y; 3129 ... 3130 if (change_y) y = save_y; 3131 } 3132 3133 This has no bug because `save_y' is used only if it is set. 3134 3135 This option also warns when a non-volatile automatic variable 3136 might be changed by a call to `longjmp'. These warnings as well 3137 are possible only in optimizing compilation. 3138 3139 The compiler sees only the calls to `setjmp'. It cannot know 3140 where `longjmp' will be called; in fact, a signal handler could 3141 call it at any point in the code. As a result, you may get a 3142 warning even when there is in fact no problem because `longjmp' 3143 cannot in fact be called at the place which would cause a problem. 3144 3145 Some spurious warnings can be avoided if you declare all the 3146 functions you use that never return as `noreturn'. *Note Function 3147 Attributes::. 3148 3149 This warning is enabled by `-Wall' or `-Wextra' in optimizing 3150 compilations (`-O1' and above). 3151 3152 `-Wunknown-pragmas' 3153 Warn when a #pragma directive is encountered which is not 3154 understood by GCC. If this command line option is used, warnings 3155 will even be issued for unknown pragmas in system header files. 3156 This is not the case if the warnings were only enabled by the 3157 `-Wall' command line option. 3158 3159 `-Wno-pragmas' 3160 Do not warn about misuses of pragmas, such as incorrect parameters, 3161 invalid syntax, or conflicts between pragmas. See also 3162 `-Wunknown-pragmas'. 3163 3164 `-Wstrict-aliasing' 3165 This option is only active when `-fstrict-aliasing' is active. It 3166 warns about code which might break the strict aliasing rules that 3167 the compiler is using for optimization. The warning does not 3168 catch all cases, but does attempt to catch the more common 3169 pitfalls. It is included in `-Wall'. It is equivalent to 3170 `-Wstrict-aliasing=3' 3171 3172 `-Wstrict-aliasing=n' 3173 This option is only active when `-fstrict-aliasing' is active. It 3174 warns about code which might break the strict aliasing rules that 3175 the compiler is using for optimization. Higher levels correspond 3176 to higher accuracy (fewer false positives). Higher levels also 3177 correspond to more effort, similar to the way -O works. 3178 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with 3179 n=3. 3180 3181 Level 1: Most aggressive, quick, least accurate. Possibly useful 3182 when higher levels do not warn but -fstrict-aliasing still breaks 3183 the code, as it has very few false negatives. However, it has 3184 many false positives. Warns for all pointer conversions between 3185 possibly incompatible types, even if never dereferenced. Runs in 3186 the frontend only. 3187 3188 Level 2: Aggressive, quick, not too precise. May still have many 3189 false positives (not as many as level 1 though), and few false 3190 negatives (but possibly more than level 1). Unlike level 1, it 3191 only warns when an address is taken. Warns about incomplete 3192 types. Runs in the frontend only. 3193 3194 Level 3 (default for `-Wstrict-aliasing'): Should have very few 3195 false positives and few false negatives. Slightly slower than 3196 levels 1 or 2 when optimization is enabled. Takes care of the 3197 common punn+dereference pattern in the frontend: 3198 `*(int*)&some_float'. If optimization is enabled, it also runs in 3199 the backend, where it deals with multiple statement cases using 3200 flow-sensitive points-to information. Only warns when the 3201 converted pointer is dereferenced. Does not warn about incomplete 3202 types. 3203 3204 `-Wstrict-overflow' 3205 `-Wstrict-overflow=N' 3206 This option is only active when `-fstrict-overflow' is active. It 3207 warns about cases where the compiler optimizes based on the 3208 assumption that signed overflow does not occur. Note that it does 3209 not warn about all cases where the code might overflow: it only 3210 warns about cases where the compiler implements some optimization. 3211 Thus this warning depends on the optimization level. 3212 3213 An optimization which assumes that signed overflow does not occur 3214 is perfectly safe if the values of the variables involved are such 3215 that overflow never does, in fact, occur. Therefore this warning 3216 can easily give a false positive: a warning about code which is not 3217 actually a problem. To help focus on important issues, several 3218 warning levels are defined. No warnings are issued for the use of 3219 undefined signed overflow when estimating how many iterations a 3220 loop will require, in particular when determining whether a loop 3221 will be executed at all. 3222 3223 `-Wstrict-overflow=1' 3224 Warn about cases which are both questionable and easy to 3225 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 3226 the compiler will simplify this to `1'. This level of 3227 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 3228 not, and must be explicitly requested. 3229 3230 `-Wstrict-overflow=2' 3231 Also warn about other cases where a comparison is simplified 3232 to a constant. For example: `abs (x) >= 0'. This can only be 3233 simplified when `-fstrict-overflow' is in effect, because 3234 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 3235 zero. `-Wstrict-overflow' (with no level) is the same as 3236 `-Wstrict-overflow=2'. 3237 3238 `-Wstrict-overflow=3' 3239 Also warn about other cases where a comparison is simplified. 3240 For example: `x + 1 > 1' will be simplified to `x > 0'. 3241 3242 `-Wstrict-overflow=4' 3243 Also warn about other simplifications not covered by the 3244 above cases. For example: `(x * 10) / 5' will be simplified 3245 to `x * 2'. 3246 3247 `-Wstrict-overflow=5' 3248 Also warn about cases where the compiler reduces the 3249 magnitude of a constant involved in a comparison. For 3250 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 3251 This is reported only at the highest warning level because 3252 this simplification applies to many comparisons, so this 3253 warning level will give a very large number of false 3254 positives. 3255 3256 `-Warray-bounds' 3257 This option is only active when `-ftree-vrp' is active (default 3258 for -O2 and above). It warns about subscripts to arrays that are 3259 always out of bounds. This warning is enabled by `-Wall'. 3260 3261 `-Wno-div-by-zero' 3262 Do not warn about compile-time integer division by zero. Floating 3263 point division by zero is not warned about, as it can be a 3264 legitimate way of obtaining infinities and NaNs. 3265 3266 `-Wsystem-headers' 3267 Print warning messages for constructs found in system header files. 3268 Warnings from system headers are normally suppressed, on the 3269 assumption that they usually do not indicate real problems and 3270 would only make the compiler output harder to read. Using this 3271 command line option tells GCC to emit warnings from system headers 3272 as if they occurred in user code. However, note that using 3273 `-Wall' in conjunction with this option will _not_ warn about 3274 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 3275 must also be used. 3276 3277 `-Wfloat-equal' 3278 Warn if floating point values are used in equality comparisons. 3279 3280 The idea behind this is that sometimes it is convenient (for the 3281 programmer) to consider floating-point values as approximations to 3282 infinitely precise real numbers. If you are doing this, then you 3283 need to compute (by analyzing the code, or in some other way) the 3284 maximum or likely maximum error that the computation introduces, 3285 and allow for it when performing comparisons (and when producing 3286 output, but that's a different problem). In particular, instead 3287 of testing for equality, you would check to see whether the two 3288 values have ranges that overlap; and this is done with the 3289 relational operators, so equality comparisons are probably 3290 mistaken. 3291 3292 `-Wtraditional (C and Objective-C only)' 3293 Warn about certain constructs that behave differently in 3294 traditional and ISO C. Also warn about ISO C constructs that have 3295 no traditional C equivalent, and/or problematic constructs which 3296 should be avoided. 3297 3298 * Macro parameters that appear within string literals in the 3299 macro body. In traditional C macro replacement takes place 3300 within string literals, but does not in ISO C. 3301 3302 * In traditional C, some preprocessor directives did not exist. 3303 Traditional preprocessors would only consider a line to be a 3304 directive if the `#' appeared in column 1 on the line. 3305 Therefore `-Wtraditional' warns about directives that 3306 traditional C understands but would ignore because the `#' 3307 does not appear as the first character on the line. It also 3308 suggests you hide directives like `#pragma' not understood by 3309 traditional C by indenting them. Some traditional 3310 implementations would not recognize `#elif', so it suggests 3311 avoiding it altogether. 3312 3313 * A function-like macro that appears without arguments. 3314 3315 * The unary plus operator. 3316 3317 * The `U' integer constant suffix, or the `F' or `L' floating 3318 point constant suffixes. (Traditional C does support the `L' 3319 suffix on integer constants.) Note, these suffixes appear in 3320 macros defined in the system headers of most modern systems, 3321 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3322 macros in user code might normally lead to spurious warnings, 3323 however GCC's integrated preprocessor has enough context to 3324 avoid warning in these cases. 3325 3326 * A function declared external in one block and then used after 3327 the end of the block. 3328 3329 * A `switch' statement has an operand of type `long'. 3330 3331 * A non-`static' function declaration follows a `static' one. 3332 This construct is not accepted by some traditional C 3333 compilers. 3334 3335 * The ISO type of an integer constant has a different width or 3336 signedness from its traditional type. This warning is only 3337 issued if the base of the constant is ten. I.e. hexadecimal 3338 or octal values, which typically represent bit patterns, are 3339 not warned about. 3340 3341 * Usage of ISO string concatenation is detected. 3342 3343 * Initialization of automatic aggregates. 3344 3345 * Identifier conflicts with labels. Traditional C lacks a 3346 separate namespace for labels. 3347 3348 * Initialization of unions. If the initializer is zero, the 3349 warning is omitted. This is done under the assumption that 3350 the zero initializer in user code appears conditioned on e.g. 3351 `__STDC__' to avoid missing initializer warnings and relies 3352 on default initialization to zero in the traditional C case. 3353 3354 * Conversions by prototypes between fixed/floating point values 3355 and vice versa. The absence of these prototypes when 3356 compiling with traditional C would cause serious problems. 3357 This is a subset of the possible conversion warnings, for the 3358 full set use `-Wtraditional-conversion'. 3359 3360 * Use of ISO C style function definitions. This warning 3361 intentionally is _not_ issued for prototype declarations or 3362 variadic functions because these ISO C features will appear 3363 in your code when using libiberty's traditional C 3364 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3365 is also bypassed for nested functions because that feature is 3366 already a GCC extension and thus not relevant to traditional 3367 C compatibility. 3368 3369 `-Wtraditional-conversion (C and Objective-C only)' 3370 Warn if a prototype causes a type conversion that is different 3371 from what would happen to the same argument in the absence of a 3372 prototype. This includes conversions of fixed point to floating 3373 and vice versa, and conversions changing the width or signedness 3374 of a fixed point argument except when the same as the default 3375 promotion. 3376 3377 `-Wdeclaration-after-statement (C and Objective-C only)' 3378 Warn when a declaration is found after a statement in a block. 3379 This construct, known from C++, was introduced with ISO C99 and is 3380 by default allowed in GCC. It is not supported by ISO C90 and was 3381 not supported by GCC versions before GCC 3.0. *Note Mixed 3382 Declarations::. 3383 3384 `-Wundef' 3385 Warn if an undefined identifier is evaluated in an `#if' directive. 3386 3387 `-Wno-endif-labels' 3388 Do not warn whenever an `#else' or an `#endif' are followed by 3389 text. 3390 3391 `-Wshadow' 3392 Warn whenever a local variable shadows another local variable, 3393 parameter or global variable or whenever a built-in function is 3394 shadowed. 3395 3396 `-Wlarger-than-LEN' 3397 Warn whenever an object of larger than LEN bytes is defined. 3398 3399 `-Wunsafe-loop-optimizations' 3400 Warn if the loop cannot be optimized because the compiler could not 3401 assume anything on the bounds of the loop indices. With 3402 `-funsafe-loop-optimizations' warn if the compiler made such 3403 assumptions. 3404 3405 `-Wpointer-arith' 3406 Warn about anything that depends on the "size of" a function type 3407 or of `void'. GNU C assigns these types a size of 1, for 3408 convenience in calculations with `void *' pointers and pointers to 3409 functions. In C++, warn also when an arithmetic operation involves 3410 `NULL'. This warning is also enabled by `-pedantic'. 3411 3412 `-Wtype-limits' 3413 Warn if a comparison is always true or always false due to the 3414 limited range of the data type, but do not warn for constant 3415 expressions. For example, warn if an unsigned variable is 3416 compared against zero with `<' or `>='. This warning is also 3417 enabled by `-Wextra'. 3418 3419 `-Wbad-function-cast (C and Objective-C only)' 3420 Warn whenever a function call is cast to a non-matching type. For 3421 example, warn if `int malloc()' is cast to `anything *'. 3422 3423 `-Wc++-compat (C and Objective-C only)' 3424 Warn about ISO C constructs that are outside of the common subset 3425 of ISO C and ISO C++, e.g. request for implicit conversion from 3426 `void *' to a pointer to non-`void' type. 3427 3428 `-Wc++0x-compat (C++ and Objective-C++ only)' 3429 Warn about C++ constructs whose meaning differs between ISO C++ 3430 1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will 3431 become keywords in ISO C++ 200x. This warning is enabled by 3432 `-Wall'. 3433 3434 `-Wcast-qual' 3435 Warn whenever a pointer is cast so as to remove a type qualifier 3436 from the target type. For example, warn if a `const char *' is 3437 cast to an ordinary `char *'. 3438 3439 `-Wcast-align' 3440 Warn whenever a pointer is cast such that the required alignment 3441 of the target is increased. For example, warn if a `char *' is 3442 cast to an `int *' on machines where integers can only be accessed 3443 at two- or four-byte boundaries. 3444 3445 `-Wwrite-strings' 3446 When compiling C, give string constants the type `const 3447 char[LENGTH]' so that copying the address of one into a 3448 non-`const' `char *' pointer will get a warning; when compiling 3449 C++, warn about the deprecated conversion from string literals to 3450 `char *'. This warning, by default, is enabled for C++ programs. 3451 These warnings will help you find at compile time code that can 3452 try to write into a string constant, but only if you have been 3453 very careful about using `const' in declarations and prototypes. 3454 Otherwise, it will just be a nuisance; this is why we did not make 3455 `-Wall' request these warnings. 3456 3457 `-Wclobbered' 3458 Warn for variables that might be changed by `longjmp' or `vfork'. 3459 This warning is also enabled by `-Wextra'. 3460 3461 `-Wconversion' 3462 Warn for implicit conversions that may alter a value. This includes 3463 conversions between real and integer, like `abs (x)' when `x' is 3464 `double'; conversions between signed and unsigned, like `unsigned 3465 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 3466 Do not warn for explicit casts like `abs ((int) x)' and `ui = 3467 (unsigned) -1', or if the value is not changed by the conversion 3468 like in `abs (2.0)'. Warnings about conversions between signed 3469 and unsigned integers can be disabled by using 3470 `-Wno-sign-conversion'. 3471 3472 For C++, also warn for conversions between `NULL' and non-pointer 3473 types; confusing overload resolution for user-defined conversions; 3474 and conversions that will never use a type conversion operator: 3475 conversions to `void', the same type, a base class or a reference 3476 to them. Warnings about conversions between signed and unsigned 3477 integers are disabled by default in C++ unless `-Wsign-conversion' 3478 is explicitly enabled. 3479 3480 `-Wempty-body' 3481 Warn if an empty body occurs in an `if', `else' or `do while' 3482 statement. Additionally, in C++, warn when an empty body occurs 3483 in a `while' or `for' statement with no whitespacing before the 3484 semicolon. This warning is also enabled by `-Wextra'. 3485 3486 `-Wsign-compare' 3487 Warn when a comparison between signed and unsigned values could 3488 produce an incorrect result when the signed value is converted to 3489 unsigned. This warning is also enabled by `-Wextra'; to get the 3490 other warnings of `-Wextra' without this warning, use `-Wextra 3491 -Wno-sign-compare'. 3492 3493 `-Wsign-conversion' 3494 Warn for implicit conversions that may change the sign of an 3495 integer value, like assigning a signed integer expression to an 3496 unsigned integer variable. An explicit cast silences the warning. 3497 In C, this option is enabled also by `-Wconversion'. 3498 3499 `-Waddress' 3500 Warn about suspicious uses of memory addresses. These include using 3501 the address of a function in a conditional expression, such as 3502 `void func(void); if (func)', and comparisons against the memory 3503 address of a string literal, such as `if (x == "abc")'. Such uses 3504 typically indicate a programmer error: the address of a function 3505 always evaluates to true, so their use in a conditional usually 3506 indicate that the programmer forgot the parentheses in a function 3507 call; and comparisons against string literals result in unspecified 3508 behavior and are not portable in C, so they usually indicate that 3509 the programmer intended to use `strcmp'. This warning is enabled 3510 by `-Wall'. 3511 3512 `-Wlogical-op' 3513 Warn about suspicious uses of logical operators in expressions. 3514 This includes using logical operators in contexts where a bit-wise 3515 operator is likely to be expected. 3516 3517 `-Waggregate-return' 3518 Warn if any functions that return structures or unions are defined 3519 or called. (In languages where you can return an array, this also 3520 elicits a warning.) 3521 3522 `-Wno-attributes' 3523 Do not warn if an unexpected `__attribute__' is used, such as 3524 unrecognized attributes, function attributes applied to variables, 3525 etc. This will not stop errors for incorrect use of supported 3526 attributes. 3527 3528 `-Wstrict-prototypes (C and Objective-C only)' 3529 Warn if a function is declared or defined without specifying the 3530 argument types. (An old-style function definition is permitted 3531 without a warning if preceded by a declaration which specifies the 3532 argument types.) 3533 3534 `-Wold-style-declaration (C and Objective-C only)' 3535 Warn for obsolescent usages, according to the C Standard, in a 3536 declaration. For example, warn if storage-class specifiers like 3537 `static' are not the first things in a declaration. This warning 3538 is also enabled by `-Wextra'. 3539 3540 `-Wold-style-definition (C and Objective-C only)' 3541 Warn if an old-style function definition is used. A warning is 3542 given even if there is a previous prototype. 3543 3544 `-Wmissing-parameter-type (C and Objective-C only)' 3545 A function parameter is declared without a type specifier in 3546 K&R-style functions: 3547 3548 void foo(bar) { } 3549 3550 This warning is also enabled by `-Wextra'. 3551 3552 `-Wmissing-prototypes (C and Objective-C only)' 3553 Warn if a global function is defined without a previous prototype 3554 declaration. This warning is issued even if the definition itself 3555 provides a prototype. The aim is to detect global functions that 3556 fail to be declared in header files. 3557 3558 `-Wmissing-declarations' 3559 Warn if a global function is defined without a previous 3560 declaration. Do so even if the definition itself provides a 3561 prototype. Use this option to detect global functions that are 3562 not declared in header files. In C++, no warnings are issued for 3563 function templates, or for inline functions, or for functions in 3564 anonymous namespaces. 3565 3566 `-Wmissing-field-initializers' 3567 Warn if a structure's initializer has some fields missing. For 3568 example, the following code would cause such a warning, because 3569 `x.h' is implicitly zero: 3570 3571 struct s { int f, g, h; }; 3572 struct s x = { 3, 4 }; 3573 3574 This option does not warn about designated initializers, so the 3575 following modification would not trigger a warning: 3576 3577 struct s { int f, g, h; }; 3578 struct s x = { .f = 3, .g = 4 }; 3579 3580 This warning is included in `-Wextra'. To get other `-Wextra' 3581 warnings without this one, use `-Wextra 3582 -Wno-missing-field-initializers'. 3583 3584 `-Wmissing-noreturn' 3585 Warn about functions which might be candidates for attribute 3586 `noreturn'. Note these are only possible candidates, not absolute 3587 ones. Care should be taken to manually verify functions actually 3588 do not ever return before adding the `noreturn' attribute, 3589 otherwise subtle code generation bugs could be introduced. You 3590 will not get a warning for `main' in hosted C environments. 3591 3592 `-Wmissing-format-attribute' 3593 Warn about function pointers which might be candidates for `format' 3594 attributes. Note these are only possible candidates, not absolute 3595 ones. GCC will guess that function pointers with `format' 3596 attributes that are used in assignment, initialization, parameter 3597 passing or return statements should have a corresponding `format' 3598 attribute in the resulting type. I.e. the left-hand side of the 3599 assignment or initialization, the type of the parameter variable, 3600 or the return type of the containing function respectively should 3601 also have a `format' attribute to avoid the warning. 3602 3603 GCC will also warn about function definitions which might be 3604 candidates for `format' attributes. Again, these are only 3605 possible candidates. GCC will guess that `format' attributes 3606 might be appropriate for any function that calls a function like 3607 `vprintf' or `vscanf', but this might not always be the case, and 3608 some functions for which `format' attributes are appropriate may 3609 not be detected. 3610 3611 `-Wno-multichar' 3612 Do not warn if a multicharacter constant (`'FOOF'') is used. 3613 Usually they indicate a typo in the user's code, as they have 3614 implementation-defined values, and should not be used in portable 3615 code. 3616 3617 `-Wnormalized=<none|id|nfc|nfkc>' 3618 In ISO C and ISO C++, two identifiers are different if they are 3619 different sequences of characters. However, sometimes when 3620 characters outside the basic ASCII character set are used, you can 3621 have two different character sequences that look the same. To 3622 avoid confusion, the ISO 10646 standard sets out some 3623 "normalization rules" which when applied ensure that two sequences 3624 that look the same are turned into the same sequence. GCC can 3625 warn you if you are using identifiers which have not been 3626 normalized; this option controls that warning. 3627 3628 There are four levels of warning that GCC supports. The default is 3629 `-Wnormalized=nfc', which warns about any identifier which is not 3630 in the ISO 10646 "C" normalized form, "NFC". NFC is the 3631 recommended form for most uses. 3632 3633 Unfortunately, there are some characters which ISO C and ISO C++ 3634 allow in identifiers that when turned into NFC aren't allowable as 3635 identifiers. That is, there's no way to use these symbols in 3636 portable ISO C or C++ and have all your identifiers in NFC. 3637 `-Wnormalized=id' suppresses the warning for these characters. It 3638 is hoped that future versions of the standards involved will 3639 correct this, which is why this option is not the default. 3640 3641 You can switch the warning off for all characters by writing 3642 `-Wnormalized=none'. You would only want to do this if you were 3643 using some other normalization scheme (like "D"), because 3644 otherwise you can easily create bugs that are literally impossible 3645 to see. 3646 3647 Some characters in ISO 10646 have distinct meanings but look 3648 identical in some fonts or display methodologies, especially once 3649 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 3650 LATIN SMALL LETTER N", will display just like a regular `n' which 3651 has been placed in a superscript. ISO 10646 defines the "NFKC" 3652 normalization scheme to convert all these into a standard form as 3653 well, and GCC will warn if your code is not in NFKC if you use 3654 `-Wnormalized=nfkc'. This warning is comparable to warning about 3655 every identifier that contains the letter O because it might be 3656 confused with the digit 0, and so is not the default, but may be 3657 useful as a local coding convention if the programming environment 3658 is unable to be fixed to display these characters distinctly. 3659 3660 `-Wno-deprecated-declarations' 3661 Do not warn about uses of functions (*note Function Attributes::), 3662 variables (*note Variable Attributes::), and types (*note Type 3663 Attributes::) marked as deprecated by using the `deprecated' 3664 attribute. 3665 3666 `-Wno-overflow' 3667 Do not warn about compile-time overflow in constant expressions. 3668 3669 `-Woverride-init (C and Objective-C only)' 3670 Warn if an initialized field without side effects is overridden 3671 when using designated initializers (*note Designated Initializers: 3672 Designated Inits.). 3673 3674 This warning is included in `-Wextra'. To get other `-Wextra' 3675 warnings without this one, use `-Wextra -Wno-override-init'. 3676 3677 `-Wpacked' 3678 Warn if a structure is given the packed attribute, but the packed 3679 attribute has no effect on the layout or size of the structure. 3680 Such structures may be mis-aligned for little benefit. For 3681 instance, in this code, the variable `f.x' in `struct bar' will be 3682 misaligned even though `struct bar' does not itself have the 3683 packed attribute: 3684 3685 struct foo { 3686 int x; 3687 char a, b, c, d; 3688 } __attribute__((packed)); 3689 struct bar { 3690 char z; 3691 struct foo f; 3692 }; 3693 3694 `-Wpadded' 3695 Warn if padding is included in a structure, either to align an 3696 element of the structure or to align the whole structure. 3697 Sometimes when this happens it is possible to rearrange the fields 3698 of the structure to reduce the padding and so make the structure 3699 smaller. 3700 3701 `-Wredundant-decls' 3702 Warn if anything is declared more than once in the same scope, 3703 even in cases where multiple declaration is valid and changes 3704 nothing. 3705 3706 `-Wnested-externs (C and Objective-C only)' 3707 Warn if an `extern' declaration is encountered within a function. 3708 3709 `-Wunreachable-code' 3710 Warn if the compiler detects that code will never be executed. 3711 3712 This option is intended to warn when the compiler detects that at 3713 least a whole line of source code will never be executed, because 3714 some condition is never satisfied or because it is after a 3715 procedure that never returns. 3716 3717 It is possible for this option to produce a warning even though 3718 there are circumstances under which part of the affected line can 3719 be executed, so care should be taken when removing 3720 apparently-unreachable code. 3721 3722 For instance, when a function is inlined, a warning may mean that 3723 the line is unreachable in only one inlined copy of the function. 3724 3725 This option is not made part of `-Wall' because in a debugging 3726 version of a program there is often substantial code which checks 3727 correct functioning of the program and is, hopefully, unreachable 3728 because the program does work. Another common use of unreachable 3729 code is to provide behavior which is selectable at compile-time. 3730 3731 `-Winline' 3732 Warn if a function can not be inlined and it was declared as 3733 inline. Even with this option, the compiler will not warn about 3734 failures to inline functions declared in system headers. 3735 3736 The compiler uses a variety of heuristics to determine whether or 3737 not to inline a function. For example, the compiler takes into 3738 account the size of the function being inlined and the amount of 3739 inlining that has already been done in the current function. 3740 Therefore, seemingly insignificant changes in the source program 3741 can cause the warnings produced by `-Winline' to appear or 3742 disappear. 3743 3744 `-Wno-invalid-offsetof (C++ and Objective-C++ only)' 3745 Suppress warnings from applying the `offsetof' macro to a non-POD 3746 type. According to the 1998 ISO C++ standard, applying `offsetof' 3747 to a non-POD type is undefined. In existing C++ implementations, 3748 however, `offsetof' typically gives meaningful results even when 3749 applied to certain kinds of non-POD types. (Such as a simple 3750 `struct' that fails to be a POD type only by virtue of having a 3751 constructor.) This flag is for users who are aware that they are 3752 writing nonportable code and who have deliberately chosen to 3753 ignore the warning about it. 3754 3755 The restrictions on `offsetof' may be relaxed in a future version 3756 of the C++ standard. 3757 3758 `-Wno-int-to-pointer-cast (C and Objective-C only)' 3759 Suppress warnings from casts to pointer type of an integer of a 3760 different size. 3761 3762 `-Wno-pointer-to-int-cast (C and Objective-C only)' 3763 Suppress warnings from casts from a pointer to an integer type of a 3764 different size. 3765 3766 `-Winvalid-pch' 3767 Warn if a precompiled header (*note Precompiled Headers::) is 3768 found in the search path but can't be used. 3769 3770 `-Wlong-long' 3771 Warn if `long long' type is used. This is default. To inhibit 3772 the warning messages, use `-Wno-long-long'. Flags `-Wlong-long' 3773 and `-Wno-long-long' are taken into account only when `-pedantic' 3774 flag is used. 3775 3776 `-Wvariadic-macros' 3777 Warn if variadic macros are used in pedantic ISO C90 mode, or the 3778 GNU alternate syntax when in pedantic ISO C99 mode. This is 3779 default. To inhibit the warning messages, use 3780 `-Wno-variadic-macros'. 3781 3782 `-Wvla' 3783 Warn if variable length array is used in the code. `-Wno-vla' 3784 will prevent the `-pedantic' warning of the variable length array. 3785 3786 `-Wvolatile-register-var' 3787 Warn if a register variable is declared volatile. The volatile 3788 modifier does not inhibit all optimizations that may eliminate 3789 reads and/or writes to register variables. 3790 3791 `-Wdisabled-optimization' 3792 Warn if a requested optimization pass is disabled. This warning 3793 does not generally indicate that there is anything wrong with your 3794 code; it merely indicates that GCC's optimizers were unable to 3795 handle the code effectively. Often, the problem is that your code 3796 is too big or too complex; GCC will refuse to optimize programs 3797 when the optimization itself is likely to take inordinate amounts 3798 of time. 3799 3800 `-Wpointer-sign (C and Objective-C only)' 3801 Warn for pointer argument passing or assignment with different 3802 signedness. This option is only supported for C and Objective-C. 3803 It is implied by `-Wall' and by `-pedantic', which can be disabled 3804 with `-Wno-pointer-sign'. 3805 3806 `-Wstack-protector' 3807 This option is only active when `-fstack-protector' is active. It 3808 warns about functions that will not be protected against stack 3809 smashing. 3810 3811 `-Woverlength-strings' 3812 Warn about string constants which are longer than the "minimum 3813 maximum" length specified in the C standard. Modern compilers 3814 generally allow string constants which are much longer than the 3815 standard's minimum limit, but very portable programs should avoid 3816 using longer strings. 3817 3818 The limit applies _after_ string constant concatenation, and does 3819 not count the trailing NUL. In C89, the limit was 509 characters; 3820 in C99, it was raised to 4095. C++98 does not specify a normative 3821 minimum maximum, so we do not diagnose overlength strings in C++. 3822 3823 This option is implied by `-pedantic', and can be disabled with 3824 `-Wno-overlength-strings'. 3825 3826 3827 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 3828 3829 3.9 Options for Debugging Your Program or GCC 3830 ============================================= 3831 3832 GCC has various special options that are used for debugging either your 3833 program or GCC: 3834 3835 `-g' 3836 Produce debugging information in the operating system's native 3837 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 3838 debugging information. 3839 3840 On most systems that use stabs format, `-g' enables use of extra 3841 debugging information that only GDB can use; this extra information 3842 makes debugging work better in GDB but will probably make other 3843 debuggers crash or refuse to read the program. If you want to 3844 control for certain whether to generate the extra information, use 3845 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 3846 below). 3847 3848 GCC allows you to use `-g' with `-O'. The shortcuts taken by 3849 optimized code may occasionally produce surprising results: some 3850 variables you declared may not exist at all; flow of control may 3851 briefly move where you did not expect it; some statements may not 3852 be executed because they compute constant results or their values 3853 were already at hand; some statements may execute in different 3854 places because they were moved out of loops. 3855 3856 Nevertheless it proves possible to debug optimized output. This 3857 makes it reasonable to use the optimizer for programs that might 3858 have bugs. 3859 3860 The following options are useful when GCC is generated with the 3861 capability for more than one debugging format. 3862 3863 `-ggdb' 3864 Produce debugging information for use by GDB. This means to use 3865 the most expressive format available (DWARF 2, stabs, or the 3866 native format if neither of those are supported), including GDB 3867 extensions if at all possible. 3868 3869 `-gstabs' 3870 Produce debugging information in stabs format (if that is 3871 supported), without GDB extensions. This is the format used by 3872 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 3873 systems this option produces stabs debugging output which is not 3874 understood by DBX or SDB. On System V Release 4 systems this 3875 option requires the GNU assembler. 3876 3877 `-feliminate-unused-debug-symbols' 3878 Produce debugging information in stabs format (if that is 3879 supported), for only symbols that are actually used. 3880 3881 `-femit-class-debug-always' 3882 Instead of emitting debugging information for a C++ class in only 3883 one object file, emit it in all object files using the class. 3884 This option should be used only with debuggers that are unable to 3885 handle the way GCC normally emits debugging information for 3886 classes because using this option will increase the size of 3887 debugging information by as much as a factor of two. 3888 3889 `-gstabs+' 3890 Produce debugging information in stabs format (if that is 3891 supported), using GNU extensions understood only by the GNU 3892 debugger (GDB). The use of these extensions is likely to make 3893 other debuggers crash or refuse to read the program. 3894 3895 `-gcoff' 3896 Produce debugging information in COFF format (if that is 3897 supported). This is the format used by SDB on most System V 3898 systems prior to System V Release 4. 3899 3900 `-gxcoff' 3901 Produce debugging information in XCOFF format (if that is 3902 supported). This is the format used by the DBX debugger on IBM 3903 RS/6000 systems. 3904 3905 `-gxcoff+' 3906 Produce debugging information in XCOFF format (if that is 3907 supported), using GNU extensions understood only by the GNU 3908 debugger (GDB). The use of these extensions is likely to make 3909 other debuggers crash or refuse to read the program, and may cause 3910 assemblers other than the GNU assembler (GAS) to fail with an 3911 error. 3912 3913 `-gdwarf-2' 3914 Produce debugging information in DWARF version 2 format (if that is 3915 supported). This is the format used by DBX on IRIX 6. With this 3916 option, GCC uses features of DWARF version 3 when they are useful; 3917 version 3 is upward compatible with version 2, but may still cause 3918 problems for older debuggers. 3919 3920 `-gvms' 3921 Produce debugging information in VMS debug format (if that is 3922 supported). This is the format used by DEBUG on VMS systems. 3923 3924 `-gLEVEL' 3925 `-ggdbLEVEL' 3926 `-gstabsLEVEL' 3927 `-gcoffLEVEL' 3928 `-gxcoffLEVEL' 3929 `-gvmsLEVEL' 3930 Request debugging information and also use LEVEL to specify how 3931 much information. The default level is 2. 3932 3933 Level 0 produces no debug information at all. Thus, `-g0' negates 3934 `-g'. 3935 3936 Level 1 produces minimal information, enough for making backtraces 3937 in parts of the program that you don't plan to debug. This 3938 includes descriptions of functions and external variables, but no 3939 information about local variables and no line numbers. 3940 3941 Level 3 includes extra information, such as all the macro 3942 definitions present in the program. Some debuggers support macro 3943 expansion when you use `-g3'. 3944 3945 `-gdwarf-2' does not accept a concatenated debug level, because 3946 GCC used to support an option `-gdwarf' that meant to generate 3947 debug information in version 1 of the DWARF format (which is very 3948 different from version 2), and it would have been too confusing. 3949 That debug format is long obsolete, but the option cannot be 3950 changed now. Instead use an additional `-gLEVEL' option to change 3951 the debug level for DWARF2. 3952 3953 `-feliminate-dwarf2-dups' 3954 Compress DWARF2 debugging information by eliminating duplicated 3955 information about each symbol. This option only makes sense when 3956 generating DWARF2 debugging information with `-gdwarf-2'. 3957 3958 `-femit-struct-debug-baseonly' 3959 Emit debug information for struct-like types only when the base 3960 name of the compilation source file matches the base name of file 3961 in which the struct was defined. 3962 3963 This option substantially reduces the size of debugging 3964 information, but at significant potential loss in type information 3965 to the debugger. See `-femit-struct-debug-reduced' for a less 3966 aggressive option. See `-femit-struct-debug-detailed' for more 3967 detailed control. 3968 3969 This option works only with DWARF 2. 3970 3971 `-femit-struct-debug-reduced' 3972 Emit debug information for struct-like types only when the base 3973 name of the compilation source file matches the base name of file 3974 in which the type was defined, unless the struct is a template or 3975 defined in a system header. 3976 3977 This option significantly reduces the size of debugging 3978 information, with some potential loss in type information to the 3979 debugger. See `-femit-struct-debug-baseonly' for a more 3980 aggressive option. See `-femit-struct-debug-detailed' for more 3981 detailed control. 3982 3983 This option works only with DWARF 2. 3984 3985 `-femit-struct-debug-detailed[=SPEC-LIST]' 3986 Specify the struct-like types for which the compiler will generate 3987 debug information. The intent is to reduce duplicate struct debug 3988 information between different object files within the same program. 3989 3990 This option is a detailed version of `-femit-struct-debug-reduced' 3991 and `-femit-struct-debug-baseonly', which will serve for most 3992 needs. 3993 3994 A specification has the syntax 3995 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 3996 3997 The optional first word limits the specification to structs that 3998 are used directly (`dir:') or used indirectly (`ind:'). A struct 3999 type is used directly when it is the type of a variable, member. 4000 Indirect uses arise through pointers to structs. That is, when 4001 use of an incomplete struct would be legal, the use is indirect. 4002 An example is `struct one direct; struct two * indirect;'. 4003 4004 The optional second word limits the specification to ordinary 4005 structs (`ord:') or generic structs (`gen:'). Generic structs are 4006 a bit complicated to explain. For C++, these are non-explicit 4007 specializations of template classes, or non-template classes 4008 within the above. Other programming languages have generics, but 4009 `-femit-struct-debug-detailed' does not yet implement them. 4010 4011 The third word specifies the source files for those structs for 4012 which the compiler will emit debug information. The values `none' 4013 and `any' have the normal meaning. The value `base' means that 4014 the base of name of the file in which the type declaration appears 4015 must match the base of the name of the main compilation file. In 4016 practice, this means that types declared in `foo.c' and `foo.h' 4017 will have debug information, but types declared in other header 4018 will not. The value `sys' means those types satisfying `base' or 4019 declared in system or compiler headers. 4020 4021 You may need to experiment to determine the best settings for your 4022 application. 4023 4024 The default is `-femit-struct-debug-detailed=all'. 4025 4026 This option works only with DWARF 2. 4027 4028 `-fno-merge-debug-strings' 4029 Direct the linker to merge together strings which are identical in 4030 different object files. This is not supported by all assemblers or 4031 linker. This decreases the size of the debug information in the 4032 output file at the cost of increasing link processing time. This 4033 is on by default. 4034 4035 `-fdebug-prefix-map=OLD=NEW' 4036 When compiling files in directory `OLD', record debugging 4037 information describing them as in `NEW' instead. 4038 4039 `-p' 4040 Generate extra code to write profile information suitable for the 4041 analysis program `prof'. You must use this option when compiling 4042 the source files you want data about, and you must also use it when 4043 linking. 4044 4045 `-pg' 4046 Generate extra code to write profile information suitable for the 4047 analysis program `gprof'. You must use this option when compiling 4048 the source files you want data about, and you must also use it when 4049 linking. 4050 4051 `-Q' 4052 Makes the compiler print out each function name as it is compiled, 4053 and print some statistics about each pass when it finishes. 4054 4055 `-ftime-report' 4056 Makes the compiler print some statistics about the time consumed 4057 by each pass when it finishes. 4058 4059 `-fmem-report' 4060 Makes the compiler print some statistics about permanent memory 4061 allocation when it finishes. 4062 4063 `-fpre-ipa-mem-report' 4064 4065 `-fpost-ipa-mem-report' 4066 Makes the compiler print some statistics about permanent memory 4067 allocation before or after interprocedural optimization. 4068 4069 `-fprofile-arcs' 4070 Add code so that program flow "arcs" are instrumented. During 4071 execution the program records how many times each branch and call 4072 is executed and how many times it is taken or returns. When the 4073 compiled program exits it saves this data to a file called 4074 `AUXNAME.gcda' for each source file. The data may be used for 4075 profile-directed optimizations (`-fbranch-probabilities'), or for 4076 test coverage analysis (`-ftest-coverage'). Each object file's 4077 AUXNAME is generated from the name of the output file, if 4078 explicitly specified and it is not the final executable, otherwise 4079 it is the basename of the source file. In both cases any suffix 4080 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 4081 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 4082 *Note Cross-profiling::. 4083 4084 `--coverage' 4085 This option is used to compile and link code instrumented for 4086 coverage analysis. The option is a synonym for `-fprofile-arcs' 4087 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 4088 See the documentation for those options for more details. 4089 4090 * Compile the source files with `-fprofile-arcs' plus 4091 optimization and code generation options. For test coverage 4092 analysis, use the additional `-ftest-coverage' option. You 4093 do not need to profile every source file in a program. 4094 4095 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 4096 latter implies the former). 4097 4098 * Run the program on a representative workload to generate the 4099 arc profile information. This may be repeated any number of 4100 times. You can run concurrent instances of your program, and 4101 provided that the file system supports locking, the data 4102 files will be correctly updated. Also `fork' calls are 4103 detected and correctly handled (double counting will not 4104 happen). 4105 4106 * For profile-directed optimizations, compile the source files 4107 again with the same optimization and code generation options 4108 plus `-fbranch-probabilities' (*note Options that Control 4109 Optimization: Optimize Options.). 4110 4111 * For test coverage analysis, use `gcov' to produce human 4112 readable information from the `.gcno' and `.gcda' files. 4113 Refer to the `gcov' documentation for further information. 4114 4115 4116 With `-fprofile-arcs', for each function of your program GCC 4117 creates a program flow graph, then finds a spanning tree for the 4118 graph. Only arcs that are not on the spanning tree have to be 4119 instrumented: the compiler adds code to count the number of times 4120 that these arcs are executed. When an arc is the only exit or 4121 only entrance to a block, the instrumentation code can be added to 4122 the block; otherwise, a new basic block must be created to hold 4123 the instrumentation code. 4124 4125 `-ftest-coverage' 4126 Produce a notes file that the `gcov' code-coverage utility (*note 4127 `gcov'--a Test Coverage Program: Gcov.) can use to show program 4128 coverage. Each source file's note file is called `AUXNAME.gcno'. 4129 Refer to the `-fprofile-arcs' option above for a description of 4130 AUXNAME and instructions on how to generate test coverage data. 4131 Coverage data will match the source files more closely, if you do 4132 not optimize. 4133 4134 `-fdbg-cnt-list' 4135 Print the name and the counter upperbound for all debug counters. 4136 4137 `-fdbg-cnt=COUNTER-VALUE-LIST' 4138 Set the internal debug counter upperbound. COUNTER-VALUE-LIST is a 4139 comma-separated list of NAME:VALUE pairs which sets the upperbound 4140 of each debug counter NAME to VALUE. All debug counters have the 4141 initial upperbound of UINT_MAX, thus dbg_cnt() returns true always 4142 unless the upperbound is set by this option. e.g. With 4143 -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only 4144 for first 10 invocations and dbg_cnt(tail_call) will return false 4145 always. 4146 4147 `-dLETTERS' 4148 4149 `-fdump-rtl-PASS' 4150 Says to make debugging dumps during compilation at times specified 4151 by LETTERS. This is used for debugging the RTL-based passes of 4152 the compiler. The file names for most of the dumps are made by 4153 appending a pass number and a word to the DUMPNAME. DUMPNAME is 4154 generated from the name of the output file, if explicitly 4155 specified and it is not an executable, otherwise it is the 4156 basename of the source file. These switches may have different 4157 effects when `-E' is used for preprocessing. 4158 4159 Most debug dumps can be enabled either passing a letter to the `-d' 4160 option, or with a long `-fdump-rtl' switch; here are the possible 4161 letters for use in LETTERS and PASS, and their meanings: 4162 4163 `-dA' 4164 Annotate the assembler output with miscellaneous debugging 4165 information. 4166 4167 `-dB' 4168 `-fdump-rtl-bbro' 4169 Dump after block reordering, to `FILE.148r.bbro'. 4170 4171 `-dc' 4172 `-fdump-rtl-combine' 4173 Dump after the RTL instruction combination pass, to the file 4174 `FILE.129r.combine'. 4175 4176 `-dC' 4177 `-fdump-rtl-ce1' 4178 `-fdump-rtl-ce2' 4179 `-dC' and `-fdump-rtl-ce1' enable dumping after the first if 4180 conversion, to the file `FILE.117r.ce1'. `-dC' and 4181 `-fdump-rtl-ce2' enable dumping after the second if 4182 conversion, to the file `FILE.130r.ce2'. 4183 4184 `-dd' 4185 `-fdump-rtl-btl' 4186 `-fdump-rtl-dbr' 4187 `-dd' and `-fdump-rtl-btl' enable dumping after branch target 4188 load optimization, to `FILE.31.btl'. `-dd' and 4189 `-fdump-rtl-dbr' enable dumping after delayed branch 4190 scheduling, to `FILE.36.dbr'. 4191 4192 `-dD' 4193 Dump all macro definitions, at the end of preprocessing, in 4194 addition to normal output. 4195 4196 `-dE' 4197 `-fdump-rtl-ce3' 4198 Dump after the third if conversion, to `FILE.146r.ce3'. 4199 4200 `-df' 4201 `-fdump-rtl-cfg' 4202 `-fdump-rtl-life' 4203 `-df' and `-fdump-rtl-cfg' enable dumping after control and 4204 data flow analysis, to `FILE.116r.cfg'. `-df' and 4205 `-fdump-rtl-cfg' enable dumping dump after life analysis, to 4206 `FILE.128r.life1' and `FILE.135r.life2'. 4207 4208 `-dg' 4209 `-fdump-rtl-greg' 4210 Dump after global register allocation, to `FILE.139r.greg'. 4211 4212 `-dG' 4213 `-fdump-rtl-gcse' 4214 `-fdump-rtl-bypass' 4215 `-dG' and `-fdump-rtl-gcse' enable dumping after GCSE, to 4216 `FILE.114r.gcse'. `-dG' and `-fdump-rtl-bypass' enable 4217 dumping after jump bypassing and control flow optimizations, 4218 to `FILE.115r.bypass'. 4219 4220 `-dh' 4221 `-fdump-rtl-eh' 4222 Dump after finalization of EH handling code, to `FILE.02.eh'. 4223 4224 `-di' 4225 `-fdump-rtl-sibling' 4226 Dump after sibling call optimizations, to `FILE.106r.sibling'. 4227 4228 `-dj' 4229 `-fdump-rtl-jump' 4230 Dump after the first jump optimization, to `FILE.112r.jump'. 4231 4232 `-dk' 4233 `-fdump-rtl-stack' 4234 Dump after conversion from GCC's "flat register file" 4235 registers to the x87's stack-like registers, to 4236 `FILE.152r.stack'. 4237 4238 `-dl' 4239 `-fdump-rtl-lreg' 4240 Dump after local register allocation, to `FILE.138r.lreg'. 4241 4242 `-dL' 4243 `-fdump-rtl-loop2' 4244 `-dL' and `-fdump-rtl-loop2' enable dumping after the loop 4245 optimization pass, to `FILE.119r.loop2', 4246 `FILE.120r.loop2_init', `FILE.121r.loop2_invariant', and 4247 `FILE.125r.loop2_done'. 4248 4249 `-dm' 4250 `-fdump-rtl-sms' 4251 Dump after modulo scheduling, to `FILE.136r.sms'. 4252 4253 `-dM' 4254 `-fdump-rtl-mach' 4255 Dump after performing the machine dependent reorganization 4256 pass, to `FILE.155r.mach' if that pass exists. 4257 4258 `-dn' 4259 `-fdump-rtl-rnreg' 4260 Dump after register renumbering, to `FILE.147r.rnreg'. 4261 4262 `-dN' 4263 `-fdump-rtl-regmove' 4264 Dump after the register move pass, to `FILE.132r.regmove'. 4265 4266 `-do' 4267 `-fdump-rtl-postreload' 4268 Dump after post-reload optimizations, to `FILE.24.postreload'. 4269 4270 `-dr' 4271 `-fdump-rtl-expand' 4272 Dump after RTL generation, to `FILE.104r.expand'. 4273 4274 `-dR' 4275 `-fdump-rtl-sched2' 4276 Dump after the second scheduling pass, to `FILE.149r.sched2'. 4277 4278 `-ds' 4279 `-fdump-rtl-cse' 4280 Dump after CSE (including the jump optimization that 4281 sometimes follows CSE), to `FILE.113r.cse'. 4282 4283 `-dS' 4284 `-fdump-rtl-sched1' 4285 Dump after the first scheduling pass, to `FILE.136r.sched1'. 4286 4287 `-dt' 4288 `-fdump-rtl-cse2' 4289 Dump after the second CSE pass (including the jump 4290 optimization that sometimes follows CSE), to `FILE.127r.cse2'. 4291 4292 `-dT' 4293 `-fdump-rtl-tracer' 4294 Dump after running tracer, to `FILE.118r.tracer'. 4295 4296 `-dV' 4297 `-fdump-rtl-vpt' 4298 `-fdump-rtl-vartrack' 4299 `-dV' and `-fdump-rtl-vpt' enable dumping after the value 4300 profile transformations, to `FILE.10.vpt'. `-dV' and 4301 `-fdump-rtl-vartrack' enable dumping after variable tracking, 4302 to `FILE.154r.vartrack'. 4303 4304 `-dw' 4305 `-fdump-rtl-flow2' 4306 Dump after the second flow pass, to `FILE.142r.flow2'. 4307 4308 `-dz' 4309 `-fdump-rtl-peephole2' 4310 Dump after the peephole pass, to `FILE.145r.peephole2'. 4311 4312 `-dZ' 4313 `-fdump-rtl-web' 4314 Dump after live range splitting, to `FILE.126r.web'. 4315 4316 `-da' 4317 `-fdump-rtl-all' 4318 Produce all the dumps listed above. 4319 4320 `-dH' 4321 Produce a core dump whenever an error occurs. 4322 4323 `-dm' 4324 Print statistics on memory usage, at the end of the run, to 4325 standard error. 4326 4327 `-dp' 4328 Annotate the assembler output with a comment indicating which 4329 pattern and alternative was used. The length of each 4330 instruction is also printed. 4331 4332 `-dP' 4333 Dump the RTL in the assembler output as a comment before each 4334 instruction. Also turns on `-dp' annotation. 4335 4336 `-dv' 4337 For each of the other indicated dump files (either with `-d' 4338 or `-fdump-rtl-PASS'), dump a representation of the control 4339 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 4340 4341 `-dx' 4342 Just generate RTL for a function instead of compiling it. 4343 Usually used with `r' (`-fdump-rtl-expand'). 4344 4345 `-dy' 4346 Dump debugging information during parsing, to standard error. 4347 4348 `-fdump-noaddr' 4349 When doing debugging dumps (see `-d' option above), suppress 4350 address output. This makes it more feasible to use diff on 4351 debugging dumps for compiler invocations with different compiler 4352 binaries and/or different text / bss / data / heap / stack / dso 4353 start locations. 4354 4355 `-fdump-unnumbered' 4356 When doing debugging dumps (see `-d' option above), suppress 4357 instruction numbers and address output. This makes it more 4358 feasible to use diff on debugging dumps for compiler invocations 4359 with different options, in particular with and without `-g'. 4360 4361 `-fdump-translation-unit (C++ only)' 4362 `-fdump-translation-unit-OPTIONS (C++ only)' 4363 Dump a representation of the tree structure for the entire 4364 translation unit to a file. The file name is made by appending 4365 `.tu' to the source file name. If the `-OPTIONS' form is used, 4366 OPTIONS controls the details of the dump as described for the 4367 `-fdump-tree' options. 4368 4369 `-fdump-class-hierarchy (C++ only)' 4370 `-fdump-class-hierarchy-OPTIONS (C++ only)' 4371 Dump a representation of each class's hierarchy and virtual 4372 function table layout to a file. The file name is made by 4373 appending `.class' to the source file name. If the `-OPTIONS' 4374 form is used, OPTIONS controls the details of the dump as 4375 described for the `-fdump-tree' options. 4376 4377 `-fdump-ipa-SWITCH' 4378 Control the dumping at various stages of inter-procedural analysis 4379 language tree to a file. The file name is generated by appending 4380 a switch specific suffix to the source file name. The following 4381 dumps are possible: 4382 4383 `all' 4384 Enables all inter-procedural analysis dumps. 4385 4386 `cgraph' 4387 Dumps information about call-graph optimization, unused 4388 function removal, and inlining decisions. 4389 4390 `inline' 4391 Dump after function inlining. 4392 4393 4394 `-fdump-tree-SWITCH' 4395 `-fdump-tree-SWITCH-OPTIONS' 4396 Control the dumping at various stages of processing the 4397 intermediate language tree to a file. The file name is generated 4398 by appending a switch specific suffix to the source file name. If 4399 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 4400 options that control the details of the dump. Not all options are 4401 applicable to all dumps, those which are not meaningful will be 4402 ignored. The following options are available 4403 4404 `address' 4405 Print the address of each node. Usually this is not 4406 meaningful as it changes according to the environment and 4407 source file. Its primary use is for tying up a dump file 4408 with a debug environment. 4409 4410 `slim' 4411 Inhibit dumping of members of a scope or body of a function 4412 merely because that scope has been reached. Only dump such 4413 items when they are directly reachable by some other path. 4414 When dumping pretty-printed trees, this option inhibits 4415 dumping the bodies of control structures. 4416 4417 `raw' 4418 Print a raw representation of the tree. By default, trees are 4419 pretty-printed into a C-like representation. 4420 4421 `details' 4422 Enable more detailed dumps (not honored by every dump option). 4423 4424 `stats' 4425 Enable dumping various statistics about the pass (not honored 4426 by every dump option). 4427 4428 `blocks' 4429 Enable showing basic block boundaries (disabled in raw dumps). 4430 4431 `vops' 4432 Enable showing virtual operands for every statement. 4433 4434 `lineno' 4435 Enable showing line numbers for statements. 4436 4437 `uid' 4438 Enable showing the unique ID (`DECL_UID') for each variable. 4439 4440 `all' 4441 Turn on all options, except `raw', `slim' and `lineno'. 4442 4443 The following tree dumps are possible: 4444 `original' 4445 Dump before any tree based optimization, to `FILE.original'. 4446 4447 `optimized' 4448 Dump after all tree based optimization, to `FILE.optimized'. 4449 4450 `gimple' 4451 Dump each function before and after the gimplification pass 4452 to a file. The file name is made by appending `.gimple' to 4453 the source file name. 4454 4455 `cfg' 4456 Dump the control flow graph of each function to a file. The 4457 file name is made by appending `.cfg' to the source file name. 4458 4459 `vcg' 4460 Dump the control flow graph of each function to a file in VCG 4461 format. The file name is made by appending `.vcg' to the 4462 source file name. Note that if the file contains more than 4463 one function, the generated file cannot be used directly by 4464 VCG. You will need to cut and paste each function's graph 4465 into its own separate file first. 4466 4467 `ch' 4468 Dump each function after copying loop headers. The file name 4469 is made by appending `.ch' to the source file name. 4470 4471 `ssa' 4472 Dump SSA related information to a file. The file name is 4473 made by appending `.ssa' to the source file name. 4474 4475 `salias' 4476 Dump structure aliasing variable information to a file. This 4477 file name is made by appending `.salias' to the source file 4478 name. 4479 4480 `alias' 4481 Dump aliasing information for each function. The file name 4482 is made by appending `.alias' to the source file name. 4483 4484 `ccp' 4485 Dump each function after CCP. The file name is made by 4486 appending `.ccp' to the source file name. 4487 4488 `storeccp' 4489 Dump each function after STORE-CCP. The file name is made by 4490 appending `.storeccp' to the source file name. 4491 4492 `pre' 4493 Dump trees after partial redundancy elimination. The file 4494 name is made by appending `.pre' to the source file name. 4495 4496 `fre' 4497 Dump trees after full redundancy elimination. The file name 4498 is made by appending `.fre' to the source file name. 4499 4500 `copyprop' 4501 Dump trees after copy propagation. The file name is made by 4502 appending `.copyprop' to the source file name. 4503 4504 `store_copyprop' 4505 Dump trees after store copy-propagation. The file name is 4506 made by appending `.store_copyprop' to the source file name. 4507 4508 `dce' 4509 Dump each function after dead code elimination. The file 4510 name is made by appending `.dce' to the source file name. 4511 4512 `mudflap' 4513 Dump each function after adding mudflap instrumentation. The 4514 file name is made by appending `.mudflap' to the source file 4515 name. 4516 4517 `sra' 4518 Dump each function after performing scalar replacement of 4519 aggregates. The file name is made by appending `.sra' to the 4520 source file name. 4521 4522 `sink' 4523 Dump each function after performing code sinking. The file 4524 name is made by appending `.sink' to the source file name. 4525 4526 `dom' 4527 Dump each function after applying dominator tree 4528 optimizations. The file name is made by appending `.dom' to 4529 the source file name. 4530 4531 `dse' 4532 Dump each function after applying dead store elimination. 4533 The file name is made by appending `.dse' to the source file 4534 name. 4535 4536 `phiopt' 4537 Dump each function after optimizing PHI nodes into 4538 straightline code. The file name is made by appending 4539 `.phiopt' to the source file name. 4540 4541 `forwprop' 4542 Dump each function after forward propagating single use 4543 variables. The file name is made by appending `.forwprop' to 4544 the source file name. 4545 4546 `copyrename' 4547 Dump each function after applying the copy rename 4548 optimization. The file name is made by appending 4549 `.copyrename' to the source file name. 4550 4551 `nrv' 4552 Dump each function after applying the named return value 4553 optimization on generic trees. The file name is made by 4554 appending `.nrv' to the source file name. 4555 4556 `vect' 4557 Dump each function after applying vectorization of loops. 4558 The file name is made by appending `.vect' to the source file 4559 name. 4560 4561 `vrp' 4562 Dump each function after Value Range Propagation (VRP). The 4563 file name is made by appending `.vrp' to the source file name. 4564 4565 `all' 4566 Enable all the available tree dumps with the flags provided 4567 in this option. 4568 4569 `-ftree-vectorizer-verbose=N' 4570 This option controls the amount of debugging output the vectorizer 4571 prints. This information is written to standard error, unless 4572 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 4573 case it is output to the usual dump listing file, `.vect'. For 4574 N=0 no diagnostic information is reported. If N=1 the vectorizer 4575 reports each loop that got vectorized, and the total number of 4576 loops that got vectorized. If N=2 the vectorizer also reports 4577 non-vectorized loops that passed the first analysis phase 4578 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 4579 single-entry/exit loops. This is the same verbosity level that 4580 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 4581 either more information dumped for each reported loop, or same 4582 amount of information reported for more loops: If N=3, alignment 4583 related information is added to the reports. If N=4, 4584 data-references related information (e.g. memory dependences, 4585 memory access-patterns) is added to the reports. If N=5, the 4586 vectorizer reports also non-vectorized inner-most loops that did 4587 not pass the first analysis phase (i.e., may not be countable, or 4588 may have complicated control-flow). If N=6, the vectorizer 4589 reports also non-vectorized nested loops. For N=7, all the 4590 information the vectorizer generates during its analysis and 4591 transformation is reported. This is the same verbosity level that 4592 `-fdump-tree-vect-details' uses. 4593 4594 `-frandom-seed=STRING' 4595 This option provides a seed that GCC uses when it would otherwise 4596 use random numbers. It is used to generate certain symbol names 4597 that have to be different in every compiled file. It is also used 4598 to place unique stamps in coverage data files and the object files 4599 that produce them. You can use the `-frandom-seed' option to 4600 produce reproducibly identical object files. 4601 4602 The STRING should be different for every file you compile. 4603 4604 `-fsched-verbose=N' 4605 On targets that use instruction scheduling, this option controls 4606 the amount of debugging output the scheduler prints. This 4607 information is written to standard error, unless `-dS' or `-dR' is 4608 specified, in which case it is output to the usual dump listing 4609 file, `.sched' or `.sched2' respectively. However for N greater 4610 than nine, the output is always printed to standard error. 4611 4612 For N greater than zero, `-fsched-verbose' outputs the same 4613 information as `-dRS'. For N greater than one, it also output 4614 basic block probabilities, detailed ready list information and 4615 unit/insn info. For N greater than two, it includes RTL at abort 4616 point, control-flow and regions info. And for N over four, 4617 `-fsched-verbose' also includes dependence info. 4618 4619 `-save-temps' 4620 Store the usual "temporary" intermediate files permanently; place 4621 them in the current directory and name them based on the source 4622 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 4623 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 4624 preprocessed `foo.i' output file even though the compiler now 4625 normally uses an integrated preprocessor. 4626 4627 When used in combination with the `-x' command line option, 4628 `-save-temps' is sensible enough to avoid over writing an input 4629 source file with the same extension as an intermediate file. The 4630 corresponding intermediate file may be obtained by renaming the 4631 source file before using `-save-temps'. 4632 4633 `-time' 4634 Report the CPU time taken by each subprocess in the compilation 4635 sequence. For C source files, this is the compiler proper and 4636 assembler (plus the linker if linking is done). The output looks 4637 like this: 4638 4639 # cc1 0.12 0.01 4640 # as 0.00 0.01 4641 4642 The first number on each line is the "user time", that is time 4643 spent executing the program itself. The second number is "system 4644 time", time spent executing operating system routines on behalf of 4645 the program. Both numbers are in seconds. 4646 4647 `-fvar-tracking' 4648 Run variable tracking pass. It computes where variables are 4649 stored at each position in code. Better debugging information is 4650 then generated (if the debugging information format supports this 4651 information). 4652 4653 It is enabled by default when compiling with optimization (`-Os', 4654 `-O', `-O2', ...), debugging information (`-g') and the debug info 4655 format supports it. 4656 4657 `-print-file-name=LIBRARY' 4658 Print the full absolute name of the library file LIBRARY that 4659 would be used when linking--and don't do anything else. With this 4660 option, GCC does not compile or link anything; it just prints the 4661 file name. 4662 4663 `-print-multi-directory' 4664 Print the directory name corresponding to the multilib selected by 4665 any other switches present in the command line. This directory is 4666 supposed to exist in `GCC_EXEC_PREFIX'. 4667 4668 `-print-multi-lib' 4669 Print the mapping from multilib directory names to compiler 4670 switches that enable them. The directory name is separated from 4671 the switches by `;', and each switch starts with an `@' instead of 4672 the `-', without spaces between multiple switches. This is 4673 supposed to ease shell-processing. 4674 4675 `-print-prog-name=PROGRAM' 4676 Like `-print-file-name', but searches for a program such as `cpp'. 4677 4678 `-print-libgcc-file-name' 4679 Same as `-print-file-name=libgcc.a'. 4680 4681 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 4682 you do want to link with `libgcc.a'. You can do 4683 4684 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 4685 4686 `-print-search-dirs' 4687 Print the name of the configured installation directory and a list 4688 of program and library directories `gcc' will search--and don't do 4689 anything else. 4690 4691 This is useful when `gcc' prints the error message `installation 4692 problem, cannot exec cpp0: No such file or directory'. To resolve 4693 this you either need to put `cpp0' and the other compiler 4694 components where `gcc' expects to find them, or you can set the 4695 environment variable `GCC_EXEC_PREFIX' to the directory where you 4696 installed them. Don't forget the trailing `/'. *Note Environment 4697 Variables::. 4698 4699 `-print-sysroot-headers-suffix' 4700 Print the suffix added to the target sysroot when searching for 4701 headers, or give an error if the compiler is not configured with 4702 such a suffix--and don't do anything else. 4703 4704 `-dumpmachine' 4705 Print the compiler's target machine (for example, 4706 `i686-pc-linux-gnu')--and don't do anything else. 4707 4708 `-dumpversion' 4709 Print the compiler version (for example, `3.0')--and don't do 4710 anything else. 4711 4712 `-dumpspecs' 4713 Print the compiler's built-in specs--and don't do anything else. 4714 (This is used when GCC itself is being built.) *Note Spec Files::. 4715 4716 `-feliminate-unused-debug-types' 4717 Normally, when producing DWARF2 output, GCC will emit debugging 4718 information for all types declared in a compilation unit, 4719 regardless of whether or not they are actually used in that 4720 compilation unit. Sometimes this is useful, such as if, in the 4721 debugger, you want to cast a value to a type that is not actually 4722 used in your program (but is declared). More often, however, this 4723 results in a significant amount of wasted space. With this 4724 option, GCC will avoid producing debug symbol output for types 4725 that are nowhere used in the source file being compiled. 4726 4727 4728 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 4729 4730 3.10 Options That Control Optimization 4731 ====================================== 4732 4733 These options control various sorts of optimizations. 4734 4735 Without any optimization option, the compiler's goal is to reduce the 4736 cost of compilation and to make debugging produce the expected results. 4737 Statements are independent: if you stop the program with a breakpoint 4738 between statements, you can then assign a new value to any variable or 4739 change the program counter to any other statement in the function and 4740 get exactly the results you would expect from the source code. 4741 4742 Turning on optimization flags makes the compiler attempt to improve 4743 the performance and/or code size at the expense of compilation time and 4744 possibly the ability to debug the program. 4745 4746 The compiler performs optimization based on the knowledge it has of 4747 the program. Optimization levels `-O' and above, in particular, enable 4748 _unit-at-a-time_ mode, which allows the compiler to consider 4749 information gained from later functions in the file when compiling a 4750 function. Compiling multiple files at once to a single output file in 4751 _unit-at-a-time_ mode allows the compiler to use information gained 4752 from all of the files when compiling each of them. 4753 4754 Not all optimizations are controlled directly by a flag. Only 4755 optimizations that have a flag are listed. 4756 4757 `-O' 4758 `-O1' 4759 Optimize. Optimizing compilation takes somewhat more time, and a 4760 lot more memory for a large function. 4761 4762 With `-O', the compiler tries to reduce code size and execution 4763 time, without performing any optimizations that take a great deal 4764 of compilation time. 4765 4766 `-O' turns on the following optimization flags: 4767 -fauto-inc-dec 4768 -fcprop-registers 4769 -fdce 4770 -fdefer-pop 4771 -fdelayed-branch 4772 -fdse 4773 -fguess-branch-probability 4774 -fif-conversion2 4775 -fif-conversion 4776 -finline-small-functions 4777 -fipa-pure-const 4778 -fipa-reference 4779 -fmerge-constants 4780 -fsplit-wide-types 4781 -ftree-ccp 4782 -ftree-ch 4783 -ftree-copyrename 4784 -ftree-dce 4785 -ftree-dominator-opts 4786 -ftree-dse 4787 -ftree-fre 4788 -ftree-sra 4789 -ftree-ter 4790 -funit-at-a-time 4791 4792 `-O' also turns on `-fomit-frame-pointer' on machines where doing 4793 so does not interfere with debugging. 4794 4795 `-O2' 4796 Optimize even more. GCC performs nearly all supported 4797 optimizations that do not involve a space-speed tradeoff. The 4798 compiler does not perform loop unrolling or function inlining when 4799 you specify `-O2'. As compared to `-O', this option increases 4800 both compilation time and the performance of the generated code. 4801 4802 `-O2' turns on all optimization flags specified by `-O'. It also 4803 turns on the following optimization flags: 4804 -fthread-jumps 4805 -falign-functions -falign-jumps 4806 -falign-loops -falign-labels 4807 -fcaller-saves 4808 -fcrossjumping 4809 -fcse-follow-jumps -fcse-skip-blocks 4810 -fdelete-null-pointer-checks 4811 -fexpensive-optimizations 4812 -fgcse -fgcse-lm 4813 -foptimize-sibling-calls 4814 -fpeephole2 4815 -fregmove 4816 -freorder-blocks -freorder-functions 4817 -frerun-cse-after-loop 4818 -fsched-interblock -fsched-spec 4819 -fschedule-insns -fschedule-insns2 4820 -fstrict-aliasing -fstrict-overflow 4821 -ftree-pre 4822 -ftree-vrp 4823 4824 Please note the warning under `-fgcse' about invoking `-O2' on 4825 programs that use computed gotos. 4826 4827 `-O3' 4828 Optimize yet more. `-O3' turns on all optimizations specified by 4829 `-O2' and also turns on the `-finline-functions', 4830 `-funswitch-loops', `-fpredictive-commoning', 4831 `-fgcse-after-reload' and `-ftree-vectorize' options. 4832 4833 `-O0' 4834 Reduce compilation time and make debugging produce the expected 4835 results. This is the default. 4836 4837 `-Os' 4838 Optimize for size. `-Os' enables all `-O2' optimizations that do 4839 not typically increase code size. It also performs further 4840 optimizations designed to reduce code size. 4841 4842 `-Os' disables the following optimization flags: 4843 -falign-functions -falign-jumps -falign-loops 4844 -falign-labels -freorder-blocks -freorder-blocks-and-partition 4845 -fprefetch-loop-arrays -ftree-vect-loop-version 4846 4847 If you use multiple `-O' options, with or without level numbers, 4848 the last such option is the one that is effective. 4849 4850 Options of the form `-fFLAG' specify machine-independent flags. Most 4851 flags have both positive and negative forms; the negative form of 4852 `-ffoo' would be `-fno-foo'. In the table below, only one of the forms 4853 is listed--the one you typically will use. You can figure out the 4854 other form by either removing `no-' or adding it. 4855 4856 The following options control specific optimizations. They are either 4857 activated by `-O' options or are related to ones that are. You can use 4858 the following flags in the rare cases when "fine-tuning" of 4859 optimizations to be performed is desired. 4860 4861 `-fno-default-inline' 4862 Do not make member functions inline by default merely because they 4863 are defined inside the class scope (C++ only). Otherwise, when 4864 you specify `-O', member functions defined inside class scope are 4865 compiled inline by default; i.e., you don't need to add `inline' 4866 in front of the member function name. 4867 4868 `-fno-defer-pop' 4869 Always pop the arguments to each function call as soon as that 4870 function returns. For machines which must pop arguments after a 4871 function call, the compiler normally lets arguments accumulate on 4872 the stack for several function calls and pops them all at once. 4873 4874 Disabled at levels `-O', `-O2', `-O3', `-Os'. 4875 4876 `-fforward-propagate' 4877 Perform a forward propagation pass on RTL. The pass tries to 4878 combine two instructions and checks if the result can be 4879 simplified. If loop unrolling is active, two passes are performed 4880 and the second is scheduled after loop unrolling. 4881 4882 This option is enabled by default at optimization levels `-O2', 4883 `-O3', `-Os'. 4884 4885 `-fomit-frame-pointer' 4886 Don't keep the frame pointer in a register for functions that 4887 don't need one. This avoids the instructions to save, set up and 4888 restore frame pointers; it also makes an extra register available 4889 in many functions. *It also makes debugging impossible on some 4890 machines.* 4891 4892 On some machines, such as the VAX, this flag has no effect, because 4893 the standard calling sequence automatically handles the frame 4894 pointer and nothing is saved by pretending it doesn't exist. The 4895 machine-description macro `FRAME_POINTER_REQUIRED' controls 4896 whether a target machine supports this flag. *Note Register 4897 Usage: (gccint)Registers. 4898 4899 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4900 4901 `-foptimize-sibling-calls' 4902 Optimize sibling and tail recursive calls. 4903 4904 Enabled at levels `-O2', `-O3', `-Os'. 4905 4906 `-fno-inline' 4907 Don't pay attention to the `inline' keyword. Normally this option 4908 is used to keep the compiler from expanding any functions inline. 4909 Note that if you are not optimizing, no functions can be expanded 4910 inline. 4911 4912 `-finline-small-functions' 4913 Integrate functions into their callers when their body is smaller 4914 than expected function call code (so overall size of program gets 4915 smaller). The compiler heuristically decides which functions are 4916 simple enough to be worth integrating in this way. 4917 4918 Enabled at level `-O2'. 4919 4920 `-finline-functions' 4921 Integrate all simple functions into their callers. The compiler 4922 heuristically decides which functions are simple enough to be worth 4923 integrating in this way. 4924 4925 If all calls to a given function are integrated, and the function 4926 is declared `static', then the function is normally not output as 4927 assembler code in its own right. 4928 4929 Enabled at level `-O3'. 4930 4931 `-finline-functions-called-once' 4932 Consider all `static' functions called once for inlining into their 4933 caller even if they are not marked `inline'. If a call to a given 4934 function is integrated, then the function is not output as 4935 assembler code in its own right. 4936 4937 Enabled if `-funit-at-a-time' is enabled. 4938 4939 `-fearly-inlining' 4940 Inline functions marked by `always_inline' and functions whose 4941 body seems smaller than the function call overhead early before 4942 doing `-fprofile-generate' instrumentation and real inlining pass. 4943 Doing so makes profiling significantly cheaper and usually 4944 inlining faster on programs having large chains of nested wrapper 4945 functions. 4946 4947 Enabled by default. 4948 4949 `-finline-limit=N' 4950 By default, GCC limits the size of functions that can be inlined. 4951 This flag allows coarse control of this limit. N is the size of 4952 functions that can be inlined in number of pseudo instructions. 4953 4954 Inlining is actually controlled by a number of parameters, which 4955 may be specified individually by using `--param NAME=VALUE'. The 4956 `-finline-limit=N' option sets some of these parameters as follows: 4957 4958 `max-inline-insns-single' 4959 is set to N/2. 4960 4961 `max-inline-insns-auto' 4962 is set to N/2. 4963 4964 See below for a documentation of the individual parameters 4965 controlling inlining and for the defaults of these parameters. 4966 4967 _Note:_ there may be no value to `-finline-limit' that results in 4968 default behavior. 4969 4970 _Note:_ pseudo instruction represents, in this particular context, 4971 an abstract measurement of function's size. In no way does it 4972 represent a count of assembly instructions and as such its exact 4973 meaning might change from one release to an another. 4974 4975 `-fkeep-inline-functions' 4976 In C, emit `static' functions that are declared `inline' into the 4977 object file, even if the function has been inlined into all of its 4978 callers. This switch does not affect functions using the `extern 4979 inline' extension in GNU C89. In C++, emit any and all inline 4980 functions into the object file. 4981 4982 `-fkeep-static-consts' 4983 Emit variables declared `static const' when optimization isn't 4984 turned on, even if the variables aren't referenced. 4985 4986 GCC enables this option by default. If you want to force the 4987 compiler to check if the variable was referenced, regardless of 4988 whether or not optimization is turned on, use the 4989 `-fno-keep-static-consts' option. 4990 4991 `-fmerge-constants' 4992 Attempt to merge identical constants (string constants and 4993 floating point constants) across compilation units. 4994 4995 This option is the default for optimized compilation if the 4996 assembler and linker support it. Use `-fno-merge-constants' to 4997 inhibit this behavior. 4998 4999 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5000 5001 `-fmerge-all-constants' 5002 Attempt to merge identical constants and identical variables. 5003 5004 This option implies `-fmerge-constants'. In addition to 5005 `-fmerge-constants' this considers e.g. even constant initialized 5006 arrays or initialized constant variables with integral or floating 5007 point types. Languages like C or C++ require each non-automatic 5008 variable to have distinct location, so using this option will 5009 result in non-conforming behavior. 5010 5011 `-fmodulo-sched' 5012 Perform swing modulo scheduling immediately before the first 5013 scheduling pass. This pass looks at innermost loops and reorders 5014 their instructions by overlapping different iterations. 5015 5016 `-fmodulo-sched-allow-regmoves' 5017 Perform more aggressive SMS based modulo scheduling with register 5018 moves allowed. By setting this flag certain anti-dependences 5019 edges will be deleted which will trigger the generation of 5020 reg-moves based on the life-range analysis. This option is 5021 effective only with `-fmodulo-sched' enabled. 5022 5023 `-fno-branch-count-reg' 5024 Do not use "decrement and branch" instructions on a count register, 5025 but instead generate a sequence of instructions that decrement a 5026 register, compare it against zero, then branch based upon the 5027 result. This option is only meaningful on architectures that 5028 support such instructions, which include x86, PowerPC, IA-64 and 5029 S/390. 5030 5031 The default is `-fbranch-count-reg'. 5032 5033 `-fno-function-cse' 5034 Do not put function addresses in registers; make each instruction 5035 that calls a constant function contain the function's address 5036 explicitly. 5037 5038 This option results in less efficient code, but some strange hacks 5039 that alter the assembler output may be confused by the 5040 optimizations performed when this option is not used. 5041 5042 The default is `-ffunction-cse' 5043 5044 `-fno-zero-initialized-in-bss' 5045 If the target supports a BSS section, GCC by default puts 5046 variables that are initialized to zero into BSS. This can save 5047 space in the resulting code. 5048 5049 This option turns off this behavior because some programs 5050 explicitly rely on variables going to the data section. E.g., so 5051 that the resulting executable can find the beginning of that 5052 section and/or make assumptions based on that. 5053 5054 The default is `-fzero-initialized-in-bss'. 5055 5056 `-fmudflap -fmudflapth -fmudflapir' 5057 For front-ends that support it (C and C++), instrument all risky 5058 pointer/array dereferencing operations, some standard library 5059 string/heap functions, and some other associated constructs with 5060 range/validity tests. Modules so instrumented should be immune to 5061 buffer overflows, invalid heap use, and some other classes of C/C++ 5062 programming errors. The instrumentation relies on a separate 5063 runtime library (`libmudflap'), which will be linked into a 5064 program if `-fmudflap' is given at link time. Run-time behavior 5065 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 5066 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 5067 its options. 5068 5069 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 5070 your program is multi-threaded. Use `-fmudflapir', in addition to 5071 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 5072 pointer reads. This produces less instrumentation (and therefore 5073 faster execution) and still provides some protection against 5074 outright memory corrupting writes, but allows erroneously read 5075 data to propagate within a program. 5076 5077 `-fthread-jumps' 5078 Perform optimizations where we check to see if a jump branches to a 5079 location where another comparison subsumed by the first is found. 5080 If so, the first branch is redirected to either the destination of 5081 the second branch or a point immediately following it, depending 5082 on whether the condition is known to be true or false. 5083 5084 Enabled at levels `-O2', `-O3', `-Os'. 5085 5086 `-fsplit-wide-types' 5087 When using a type that occupies multiple registers, such as `long 5088 long' on a 32-bit system, split the registers apart and allocate 5089 them independently. This normally generates better code for those 5090 types, but may make debugging more difficult. 5091 5092 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5093 5094 `-fcse-follow-jumps' 5095 In common subexpression elimination (CSE), scan through jump 5096 instructions when the target of the jump is not reached by any 5097 other path. For example, when CSE encounters an `if' statement 5098 with an `else' clause, CSE will follow the jump when the condition 5099 tested is false. 5100 5101 Enabled at levels `-O2', `-O3', `-Os'. 5102 5103 `-fcse-skip-blocks' 5104 This is similar to `-fcse-follow-jumps', but causes CSE to follow 5105 jumps which conditionally skip over blocks. When CSE encounters a 5106 simple `if' statement with no else clause, `-fcse-skip-blocks' 5107 causes CSE to follow the jump around the body of the `if'. 5108 5109 Enabled at levels `-O2', `-O3', `-Os'. 5110 5111 `-frerun-cse-after-loop' 5112 Re-run common subexpression elimination after loop optimizations 5113 has been performed. 5114 5115 Enabled at levels `-O2', `-O3', `-Os'. 5116 5117 `-fgcse' 5118 Perform a global common subexpression elimination pass. This pass 5119 also performs global constant and copy propagation. 5120 5121 _Note:_ When compiling a program using computed gotos, a GCC 5122 extension, you may get better runtime performance if you disable 5123 the global common subexpression elimination pass by adding 5124 `-fno-gcse' to the command line. 5125 5126 Enabled at levels `-O2', `-O3', `-Os'. 5127 5128 `-fgcse-lm' 5129 When `-fgcse-lm' is enabled, global common subexpression 5130 elimination will attempt to move loads which are only killed by 5131 stores into themselves. This allows a loop containing a 5132 load/store sequence to be changed to a load outside the loop, and 5133 a copy/store within the loop. 5134 5135 Enabled by default when gcse is enabled. 5136 5137 `-fgcse-sm' 5138 When `-fgcse-sm' is enabled, a store motion pass is run after 5139 global common subexpression elimination. This pass will attempt 5140 to move stores out of loops. When used in conjunction with 5141 `-fgcse-lm', loops containing a load/store sequence can be changed 5142 to a load before the loop and a store after the loop. 5143 5144 Not enabled at any optimization level. 5145 5146 `-fgcse-las' 5147 When `-fgcse-las' is enabled, the global common subexpression 5148 elimination pass eliminates redundant loads that come after stores 5149 to the same memory location (both partial and full redundancies). 5150 5151 Not enabled at any optimization level. 5152 5153 `-fgcse-after-reload' 5154 When `-fgcse-after-reload' is enabled, a redundant load elimination 5155 pass is performed after reload. The purpose of this pass is to 5156 cleanup redundant spilling. 5157 5158 `-funsafe-loop-optimizations' 5159 If given, the loop optimizer will assume that loop indices do not 5160 overflow, and that the loops with nontrivial exit condition are not 5161 infinite. This enables a wider range of loop optimizations even if 5162 the loop optimizer itself cannot prove that these assumptions are 5163 valid. Using `-Wunsafe-loop-optimizations', the compiler will 5164 warn you if it finds this kind of loop. 5165 5166 `-fcrossjumping' 5167 Perform cross-jumping transformation. This transformation unifies 5168 equivalent code and save code size. The resulting code may or may 5169 not perform better than without cross-jumping. 5170 5171 Enabled at levels `-O2', `-O3', `-Os'. 5172 5173 `-fauto-inc-dec' 5174 Combine increments or decrements of addresses with memory accesses. 5175 This pass is always skipped on architectures that do not have 5176 instructions to support this. Enabled by default at `-O' and 5177 higher on architectures that support this. 5178 5179 `-fdce' 5180 Perform dead code elimination (DCE) on RTL. Enabled by default at 5181 `-O' and higher. 5182 5183 `-fdse' 5184 Perform dead store elimination (DSE) on RTL. Enabled by default 5185 at `-O' and higher. 5186 5187 `-fif-conversion' 5188 Attempt to transform conditional jumps into branch-less 5189 equivalents. This include use of conditional moves, min, max, set 5190 flags and abs instructions, and some tricks doable by standard 5191 arithmetics. The use of conditional execution on chips where it 5192 is available is controlled by `if-conversion2'. 5193 5194 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5195 5196 `-fif-conversion2' 5197 Use conditional execution (where available) to transform 5198 conditional jumps into branch-less equivalents. 5199 5200 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5201 5202 `-fdelete-null-pointer-checks' 5203 Use global dataflow analysis to identify and eliminate useless 5204 checks for null pointers. The compiler assumes that dereferencing 5205 a null pointer would have halted the program. If a pointer is 5206 checked after it has already been dereferenced, it cannot be null. 5207 5208 In some environments, this assumption is not true, and programs can 5209 safely dereference null pointers. Use 5210 `-fno-delete-null-pointer-checks' to disable this optimization for 5211 programs which depend on that behavior. 5212 5213 Enabled at levels `-O2', `-O3', `-Os'. 5214 5215 `-fexpensive-optimizations' 5216 Perform a number of minor optimizations that are relatively 5217 expensive. 5218 5219 Enabled at levels `-O2', `-O3', `-Os'. 5220 5221 `-foptimize-register-move' 5222 `-fregmove' 5223 Attempt to reassign register numbers in move instructions and as 5224 operands of other simple instructions in order to maximize the 5225 amount of register tying. This is especially helpful on machines 5226 with two-operand instructions. 5227 5228 Note `-fregmove' and `-foptimize-register-move' are the same 5229 optimization. 5230 5231 Enabled at levels `-O2', `-O3', `-Os'. 5232 5233 `-fdelayed-branch' 5234 If supported for the target machine, attempt to reorder 5235 instructions to exploit instruction slots available after delayed 5236 branch instructions. 5237 5238 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5239 5240 `-fschedule-insns' 5241 If supported for the target machine, attempt to reorder 5242 instructions to eliminate execution stalls due to required data 5243 being unavailable. This helps machines that have slow floating 5244 point or memory load instructions by allowing other instructions 5245 to be issued until the result of the load or floating point 5246 instruction is required. 5247 5248 Enabled at levels `-O2', `-O3', `-Os'. 5249 5250 `-fschedule-insns2' 5251 Similar to `-fschedule-insns', but requests an additional pass of 5252 instruction scheduling after register allocation has been done. 5253 This is especially useful on machines with a relatively small 5254 number of registers and where memory load instructions take more 5255 than one cycle. 5256 5257 Enabled at levels `-O2', `-O3', `-Os'. 5258 5259 `-fno-sched-interblock' 5260 Don't schedule instructions across basic blocks. This is normally 5261 enabled by default when scheduling before register allocation, i.e. 5262 with `-fschedule-insns' or at `-O2' or higher. 5263 5264 `-fno-sched-spec' 5265 Don't allow speculative motion of non-load instructions. This is 5266 normally enabled by default when scheduling before register 5267 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 5268 5269 `-fsched-spec-load' 5270 Allow speculative motion of some load instructions. This only 5271 makes sense when scheduling before register allocation, i.e. with 5272 `-fschedule-insns' or at `-O2' or higher. 5273 5274 `-fsched-spec-load-dangerous' 5275 Allow speculative motion of more load instructions. This only 5276 makes sense when scheduling before register allocation, i.e. with 5277 `-fschedule-insns' or at `-O2' or higher. 5278 5279 `-fsched-stalled-insns' 5280 `-fsched-stalled-insns=N' 5281 Define how many insns (if any) can be moved prematurely from the 5282 queue of stalled insns into the ready list, during the second 5283 scheduling pass. `-fno-sched-stalled-insns' means that no insns 5284 will be moved prematurely, `-fsched-stalled-insns=0' means there 5285 is no limit on how many queued insns can be moved prematurely. 5286 `-fsched-stalled-insns' without a value is equivalent to 5287 `-fsched-stalled-insns=1'. 5288 5289 `-fsched-stalled-insns-dep' 5290 `-fsched-stalled-insns-dep=N' 5291 Define how many insn groups (cycles) will be examined for a 5292 dependency on a stalled insn that is candidate for premature 5293 removal from the queue of stalled insns. This has an effect only 5294 during the second scheduling pass, and only if 5295 `-fsched-stalled-insns' is used. `-fno-sched-stalled-insns-dep' 5296 is equivalent to `-fsched-stalled-insns-dep=0'. 5297 `-fsched-stalled-insns-dep' without a value is equivalent to 5298 `-fsched-stalled-insns-dep=1'. 5299 5300 `-fsched2-use-superblocks' 5301 When scheduling after register allocation, do use superblock 5302 scheduling algorithm. Superblock scheduling allows motion across 5303 basic block boundaries resulting on faster schedules. This option 5304 is experimental, as not all machine descriptions used by GCC model 5305 the CPU closely enough to avoid unreliable results from the 5306 algorithm. 5307 5308 This only makes sense when scheduling after register allocation, 5309 i.e. with `-fschedule-insns2' or at `-O2' or higher. 5310 5311 `-fsched2-use-traces' 5312 Use `-fsched2-use-superblocks' algorithm when scheduling after 5313 register allocation and additionally perform code duplication in 5314 order to increase the size of superblocks using tracer pass. See 5315 `-ftracer' for details on trace formation. 5316 5317 This mode should produce faster but significantly longer programs. 5318 Also without `-fbranch-probabilities' the traces constructed may 5319 not match the reality and hurt the performance. This only makes 5320 sense when scheduling after register allocation, i.e. with 5321 `-fschedule-insns2' or at `-O2' or higher. 5322 5323 `-fsee' 5324 Eliminate redundant sign extension instructions and move the 5325 non-redundant ones to optimal placement using lazy code motion 5326 (LCM). 5327 5328 `-freschedule-modulo-scheduled-loops' 5329 The modulo scheduling comes before the traditional scheduling, if 5330 a loop was modulo scheduled we may want to prevent the later 5331 scheduling passes from changing its schedule, we use this option 5332 to control that. 5333 5334 `-fcaller-saves' 5335 Enable values to be allocated in registers that will be clobbered 5336 by function calls, by emitting extra instructions to save and 5337 restore the registers around such calls. Such allocation is done 5338 only when it seems to result in better code than would otherwise 5339 be produced. 5340 5341 This option is always enabled by default on certain machines, 5342 usually those which have no call-preserved registers to use 5343 instead. 5344 5345 Enabled at levels `-O2', `-O3', `-Os'. 5346 5347 `-ftree-reassoc' 5348 Perform reassociation on trees. This flag is enabled by default 5349 at `-O' and higher. 5350 5351 `-ftree-pre' 5352 Perform partial redundancy elimination (PRE) on trees. This flag 5353 is enabled by default at `-O2' and `-O3'. 5354 5355 `-ftree-fre' 5356 Perform full redundancy elimination (FRE) on trees. The difference 5357 between FRE and PRE is that FRE only considers expressions that 5358 are computed on all paths leading to the redundant computation. 5359 This analysis is faster than PRE, though it exposes fewer 5360 redundancies. This flag is enabled by default at `-O' and higher. 5361 5362 `-ftree-copy-prop' 5363 Perform copy propagation on trees. This pass eliminates 5364 unnecessary copy operations. This flag is enabled by default at 5365 `-O' and higher. 5366 5367 `-ftree-salias' 5368 Perform structural alias analysis on trees. This flag is enabled 5369 by default at `-O' and higher. 5370 5371 `-fipa-pure-const' 5372 Discover which functions are pure or constant. Enabled by default 5373 at `-O' and higher. 5374 5375 `-fipa-reference' 5376 Discover which static variables do not escape cannot escape the 5377 compilation unit. Enabled by default at `-O' and higher. 5378 5379 `-fipa-struct-reorg' 5380 Perform structure reorganization optimization, that change C-like 5381 structures layout in order to better utilize spatial locality. 5382 This transformation is affective for programs containing arrays of 5383 structures. Available in two compilation modes: profile-based 5384 (enabled with `-fprofile-generate') or static (which uses built-in 5385 heuristics). Require `-fipa-type-escape' to provide the safety of 5386 this transformation. It works only in whole program mode, so it 5387 requires `-fwhole-program' and `-combine' to be enabled. 5388 Structures considered `cold' by this transformation are not 5389 affected (see `--param struct-reorg-cold-struct-ratio=VALUE'). 5390 5391 With this flag, the program debug info reflects a new structure 5392 layout. 5393 5394 `-fipa-pta' 5395 Perform interprocedural pointer analysis. 5396 5397 `-fipa-cp' 5398 Perform interprocedural constant propagation. This optimization 5399 analyzes the program to determine when values passed to functions 5400 are constants and then optimizes accordingly. This optimization 5401 can substantially increase performance if the application has 5402 constants passed to functions, but because this optimization can 5403 create multiple copies of functions, it may significantly increase 5404 code size. 5405 5406 `-fipa-matrix-reorg' 5407 Perform matrix flattening and transposing. Matrix flattening 5408 tries to replace a m-dimensional matrix with its equivalent 5409 n-dimensional matrix, where n < m. This reduces the level of 5410 indirection needed for accessing the elements of the matrix. The 5411 second optimization is matrix transposing that attemps to change 5412 the order of the matrix's dimensions in order to improve cache 5413 locality. Both optimizations need fwhole-program flag. 5414 Transposing is enabled only if profiling information is avaliable. 5415 5416 `-ftree-sink' 5417 Perform forward store motion on trees. This flag is enabled by 5418 default at `-O' and higher. 5419 5420 `-ftree-ccp' 5421 Perform sparse conditional constant propagation (CCP) on trees. 5422 This pass only operates on local scalar variables and is enabled 5423 by default at `-O' and higher. 5424 5425 `-ftree-store-ccp' 5426 Perform sparse conditional constant propagation (CCP) on trees. 5427 This pass operates on both local scalar variables and memory 5428 stores and loads (global variables, structures, arrays, etc). 5429 This flag is enabled by default at `-O2' and higher. 5430 5431 `-ftree-dce' 5432 Perform dead code elimination (DCE) on trees. This flag is 5433 enabled by default at `-O' and higher. 5434 5435 `-ftree-dominator-opts' 5436 Perform a variety of simple scalar cleanups (constant/copy 5437 propagation, redundancy elimination, range propagation and 5438 expression simplification) based on a dominator tree traversal. 5439 This also performs jump threading (to reduce jumps to jumps). This 5440 flag is enabled by default at `-O' and higher. 5441 5442 `-ftree-dse' 5443 Perform dead store elimination (DSE) on trees. A dead store is a 5444 store into a memory location which will later be overwritten by 5445 another store without any intervening loads. In this case the 5446 earlier store can be deleted. This flag is enabled by default at 5447 `-O' and higher. 5448 5449 `-ftree-ch' 5450 Perform loop header copying on trees. This is beneficial since it 5451 increases effectiveness of code motion optimizations. It also 5452 saves one jump. This flag is enabled by default at `-O' and 5453 higher. It is not enabled for `-Os', since it usually increases 5454 code size. 5455 5456 `-ftree-loop-optimize' 5457 Perform loop optimizations on trees. This flag is enabled by 5458 default at `-O' and higher. 5459 5460 `-ftree-loop-linear' 5461 Perform linear loop transformations on tree. This flag can 5462 improve cache performance and allow further loop optimizations to 5463 take place. 5464 5465 `-fcheck-data-deps' 5466 Compare the results of several data dependence analyzers. This 5467 option is used for debugging the data dependence analyzers. 5468 5469 `-ftree-loop-im' 5470 Perform loop invariant motion on trees. This pass moves only 5471 invariants that would be hard to handle at RTL level (function 5472 calls, operations that expand to nontrivial sequences of insns). 5473 With `-funswitch-loops' it also moves operands of conditions that 5474 are invariant out of the loop, so that we can use just trivial 5475 invariantness analysis in loop unswitching. The pass also includes 5476 store motion. 5477 5478 `-ftree-loop-ivcanon' 5479 Create a canonical counter for number of iterations in the loop 5480 for that determining number of iterations requires complicated 5481 analysis. Later optimizations then may determine the number 5482 easily. Useful especially in connection with unrolling. 5483 5484 `-fivopts' 5485 Perform induction variable optimizations (strength reduction, 5486 induction variable merging and induction variable elimination) on 5487 trees. 5488 5489 `-ftree-parallelize-loops=n' 5490 Parallelize loops, i.e., split their iteration space to run in n 5491 threads. This is only possible for loops whose iterations are 5492 independent and can be arbitrarily reordered. The optimization is 5493 only profitable on multiprocessor machines, for loops that are 5494 CPU-intensive, rather than constrained e.g. by memory bandwidth. 5495 This option implies `-pthread', and thus is only supported on 5496 targets that have support for `-pthread'. 5497 5498 `-ftree-sra' 5499 Perform scalar replacement of aggregates. This pass replaces 5500 structure references with scalars to prevent committing structures 5501 to memory too early. This flag is enabled by default at `-O' and 5502 higher. 5503 5504 `-ftree-copyrename' 5505 Perform copy renaming on trees. This pass attempts to rename 5506 compiler temporaries to other variables at copy locations, usually 5507 resulting in variable names which more closely resemble the 5508 original variables. This flag is enabled by default at `-O' and 5509 higher. 5510 5511 `-ftree-ter' 5512 Perform temporary expression replacement during the SSA->normal 5513 phase. Single use/single def temporaries are replaced at their 5514 use location with their defining expression. This results in 5515 non-GIMPLE code, but gives the expanders much more complex trees 5516 to work on resulting in better RTL generation. This is enabled by 5517 default at `-O' and higher. 5518 5519 `-ftree-vectorize' 5520 Perform loop vectorization on trees. This flag is enabled by 5521 default at `-O3'. 5522 5523 `-ftree-vect-loop-version' 5524 Perform loop versioning when doing loop vectorization on trees. 5525 When a loop appears to be vectorizable except that data alignment 5526 or data dependence cannot be determined at compile time then 5527 vectorized and non-vectorized versions of the loop are generated 5528 along with runtime checks for alignment or dependence to control 5529 which version is executed. This option is enabled by default 5530 except at level `-Os' where it is disabled. 5531 5532 `-fvect-cost-model' 5533 Enable cost model for vectorization. 5534 5535 `-ftree-vrp' 5536 Perform Value Range Propagation on trees. This is similar to the 5537 constant propagation pass, but instead of values, ranges of values 5538 are propagated. This allows the optimizers to remove unnecessary 5539 range checks like array bound checks and null pointer checks. 5540 This is enabled by default at `-O2' and higher. Null pointer check 5541 elimination is only done if `-fdelete-null-pointer-checks' is 5542 enabled. 5543 5544 `-ftracer' 5545 Perform tail duplication to enlarge superblock size. This 5546 transformation simplifies the control flow of the function 5547 allowing other optimizations to do better job. 5548 5549 `-funroll-loops' 5550 Unroll loops whose number of iterations can be determined at 5551 compile time or upon entry to the loop. `-funroll-loops' implies 5552 `-frerun-cse-after-loop'. This option makes code larger, and may 5553 or may not make it run faster. 5554 5555 `-funroll-all-loops' 5556 Unroll all loops, even if their number of iterations is uncertain 5557 when the loop is entered. This usually makes programs run more 5558 slowly. `-funroll-all-loops' implies the same options as 5559 `-funroll-loops', 5560 5561 `-fsplit-ivs-in-unroller' 5562 Enables expressing of values of induction variables in later 5563 iterations of the unrolled loop using the value in the first 5564 iteration. This breaks long dependency chains, thus improving 5565 efficiency of the scheduling passes. 5566 5567 Combination of `-fweb' and CSE is often sufficient to obtain the 5568 same effect. However in cases the loop body is more complicated 5569 than a single basic block, this is not reliable. It also does not 5570 work at all on some of the architectures due to restrictions in 5571 the CSE pass. 5572 5573 This optimization is enabled by default. 5574 5575 `-fvariable-expansion-in-unroller' 5576 With this option, the compiler will create multiple copies of some 5577 local variables when unrolling a loop which can result in superior 5578 code. 5579 5580 `-fpredictive-commoning' 5581 Perform predictive commoning optimization, i.e., reusing 5582 computations (especially memory loads and stores) performed in 5583 previous iterations of loops. 5584 5585 This option is enabled at level `-O3'. 5586 5587 `-fprefetch-loop-arrays' 5588 If supported by the target machine, generate instructions to 5589 prefetch memory to improve the performance of loops that access 5590 large arrays. 5591 5592 This option may generate better or worse code; results are highly 5593 dependent on the structure of loops within the source code. 5594 5595 Disabled at level `-Os'. 5596 5597 `-fno-peephole' 5598 `-fno-peephole2' 5599 Disable any machine-specific peephole optimizations. The 5600 difference between `-fno-peephole' and `-fno-peephole2' is in how 5601 they are implemented in the compiler; some targets use one, some 5602 use the other, a few use both. 5603 5604 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 5605 levels `-O2', `-O3', `-Os'. 5606 5607 `-fno-guess-branch-probability' 5608 Do not guess branch probabilities using heuristics. 5609 5610 GCC will use heuristics to guess branch probabilities if they are 5611 not provided by profiling feedback (`-fprofile-arcs'). These 5612 heuristics are based on the control flow graph. If some branch 5613 probabilities are specified by `__builtin_expect', then the 5614 heuristics will be used to guess branch probabilities for the rest 5615 of the control flow graph, taking the `__builtin_expect' info into 5616 account. The interactions between the heuristics and 5617 `__builtin_expect' can be complex, and in some cases, it may be 5618 useful to disable the heuristics so that the effects of 5619 `__builtin_expect' are easier to understand. 5620 5621 The default is `-fguess-branch-probability' at levels `-O', `-O2', 5622 `-O3', `-Os'. 5623 5624 `-freorder-blocks' 5625 Reorder basic blocks in the compiled function in order to reduce 5626 number of taken branches and improve code locality. 5627 5628 Enabled at levels `-O2', `-O3'. 5629 5630 `-freorder-blocks-and-partition' 5631 In addition to reordering basic blocks in the compiled function, 5632 in order to reduce number of taken branches, partitions hot and 5633 cold basic blocks into separate sections of the assembly and .o 5634 files, to improve paging and cache locality performance. 5635 5636 This optimization is automatically turned off in the presence of 5637 exception handling, for linkonce sections, for functions with a 5638 user-defined section attribute and on any architecture that does 5639 not support named sections. 5640 5641 `-freorder-functions' 5642 Reorder functions in the object file in order to improve code 5643 locality. This is implemented by using special subsections 5644 `.text.hot' for most frequently executed functions and 5645 `.text.unlikely' for unlikely executed functions. Reordering is 5646 done by the linker so object file format must support named 5647 sections and linker must place them in a reasonable way. 5648 5649 Also profile feedback must be available in to make this option 5650 effective. See `-fprofile-arcs' for details. 5651 5652 Enabled at levels `-O2', `-O3', `-Os'. 5653 5654 `-fstrict-aliasing' 5655 Allows the compiler to assume the strictest aliasing rules 5656 applicable to the language being compiled. For C (and C++), this 5657 activates optimizations based on the type of expressions. In 5658 particular, an object of one type is assumed never to reside at 5659 the same address as an object of a different type, unless the 5660 types are almost the same. For example, an `unsigned int' can 5661 alias an `int', but not a `void*' or a `double'. A character type 5662 may alias any other type. 5663 5664 Pay special attention to code like this: 5665 union a_union { 5666 int i; 5667 double d; 5668 }; 5669 5670 int f() { 5671 a_union t; 5672 t.d = 3.0; 5673 return t.i; 5674 } 5675 The practice of reading from a different union member than the one 5676 most recently written to (called "type-punning") is common. Even 5677 with `-fstrict-aliasing', type-punning is allowed, provided the 5678 memory is accessed through the union type. So, the code above 5679 will work as expected. However, this code might not: 5680 int f() { 5681 a_union t; 5682 int* ip; 5683 t.d = 3.0; 5684 ip = &t.i; 5685 return *ip; 5686 } 5687 5688 Enabled at levels `-O2', `-O3', `-Os'. 5689 5690 `-fstrict-overflow' 5691 Allow the compiler to assume strict signed overflow rules, 5692 depending on the language being compiled. For C (and C++) this 5693 means that overflow when doing arithmetic with signed numbers is 5694 undefined, which means that the compiler may assume that it will 5695 not happen. This permits various optimizations. For example, the 5696 compiler will assume that an expression like `i + 10 > i' will 5697 always be true for signed `i'. This assumption is only valid if 5698 signed overflow is undefined, as the expression is false if `i + 5699 10' overflows when using twos complement arithmetic. When this 5700 option is in effect any attempt to determine whether an operation 5701 on signed numbers will overflow must be written carefully to not 5702 actually involve overflow. 5703 5704 This option also allows the compiler to assume strict pointer 5705 semantics: given a pointer to an object, if adding an offset to 5706 that pointer does not produce a pointer to the same object, the 5707 addition is undefined. This permits the compiler to conclude that 5708 `p + u > p' is always true for a pointer `p' and unsigned integer 5709 `u'. This assumption is only valid because pointer wraparound is 5710 undefined, as the expression is false if `p + u' overflows using 5711 twos complement arithmetic. 5712 5713 See also the `-fwrapv' option. Using `-fwrapv' means that integer 5714 signed overflow is fully defined: it wraps. When `-fwrapv' is 5715 used, there is no difference between `-fstrict-overflow' and 5716 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 5717 of overflow are permitted. For example, if the compiler gets an 5718 overflow when doing arithmetic on constants, the overflowed value 5719 can still be used with `-fwrapv', but not otherwise. 5720 5721 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 5722 `-Os'. 5723 5724 `-falign-functions' 5725 `-falign-functions=N' 5726 Align the start of functions to the next power-of-two greater than 5727 N, skipping up to N bytes. For instance, `-falign-functions=32' 5728 aligns functions to the next 32-byte boundary, but 5729 `-falign-functions=24' would align to the next 32-byte boundary 5730 only if this can be done by skipping 23 bytes or less. 5731 5732 `-fno-align-functions' and `-falign-functions=1' are equivalent 5733 and mean that functions will not be aligned. 5734 5735 Some assemblers only support this flag when N is a power of two; 5736 in that case, it is rounded up. 5737 5738 If N is not specified or is zero, use a machine-dependent default. 5739 5740 Enabled at levels `-O2', `-O3'. 5741 5742 `-falign-labels' 5743 `-falign-labels=N' 5744 Align all branch targets to a power-of-two boundary, skipping up to 5745 N bytes like `-falign-functions'. This option can easily make 5746 code slower, because it must insert dummy operations for when the 5747 branch target is reached in the usual flow of the code. 5748 5749 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 5750 that labels will not be aligned. 5751 5752 If `-falign-loops' or `-falign-jumps' are applicable and are 5753 greater than this value, then their values are used instead. 5754 5755 If N is not specified or is zero, use a machine-dependent default 5756 which is very likely to be `1', meaning no alignment. 5757 5758 Enabled at levels `-O2', `-O3'. 5759 5760 `-falign-loops' 5761 `-falign-loops=N' 5762 Align loops to a power-of-two boundary, skipping up to N bytes 5763 like `-falign-functions'. The hope is that the loop will be 5764 executed many times, which will make up for any execution of the 5765 dummy operations. 5766 5767 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 5768 that loops will not be aligned. 5769 5770 If N is not specified or is zero, use a machine-dependent default. 5771 5772 Enabled at levels `-O2', `-O3'. 5773 5774 `-falign-jumps' 5775 `-falign-jumps=N' 5776 Align branch targets to a power-of-two boundary, for branch targets 5777 where the targets can only be reached by jumping, skipping up to N 5778 bytes like `-falign-functions'. In this case, no dummy operations 5779 need be executed. 5780 5781 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 5782 that loops will not be aligned. 5783 5784 If N is not specified or is zero, use a machine-dependent default. 5785 5786 Enabled at levels `-O2', `-O3'. 5787 5788 `-funit-at-a-time' 5789 Parse the whole compilation unit before starting to produce code. 5790 This allows some extra optimizations to take place but consumes 5791 more memory (in general). There are some compatibility issues 5792 with _unit-at-a-time_ mode: 5793 * enabling _unit-at-a-time_ mode may change the order in which 5794 functions, variables, and top-level `asm' statements are 5795 emitted, and will likely break code relying on some particular 5796 ordering. The majority of such top-level `asm' statements, 5797 though, can be replaced by `section' attributes. The 5798 `fno-toplevel-reorder' option may be used to keep the ordering 5799 used in the input file, at the cost of some optimizations. 5800 5801 * _unit-at-a-time_ mode removes unreferenced static variables 5802 and functions. This may result in undefined references when 5803 an `asm' statement refers directly to variables or functions 5804 that are otherwise unused. In that case either the 5805 variable/function shall be listed as an operand of the `asm' 5806 statement operand or, in the case of top-level `asm' 5807 statements the attribute `used' shall be used on the 5808 declaration. 5809 5810 * Static functions now can use non-standard passing conventions 5811 that may break `asm' statements calling functions directly. 5812 Again, attribute `used' will prevent this behavior. 5813 5814 As a temporary workaround, `-fno-unit-at-a-time' can be used, but 5815 this scheme may not be supported by future releases of GCC. 5816 5817 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5818 5819 `-fno-toplevel-reorder' 5820 Do not reorder top-level functions, variables, and `asm' 5821 statements. Output them in the same order that they appear in the 5822 input file. When this option is used, unreferenced static 5823 variables will not be removed. This option is intended to support 5824 existing code which relies on a particular ordering. For new 5825 code, it is better to use attributes. 5826 5827 `-fweb' 5828 Constructs webs as commonly used for register allocation purposes 5829 and assign each web individual pseudo register. This allows the 5830 register allocation pass to operate on pseudos directly, but also 5831 strengthens several other optimization passes, such as CSE, loop 5832 optimizer and trivial dead code remover. It can, however, make 5833 debugging impossible, since variables will no longer stay in a 5834 "home register". 5835 5836 Enabled by default with `-funroll-loops'. 5837 5838 `-fwhole-program' 5839 Assume that the current compilation unit represents whole program 5840 being compiled. All public functions and variables with the 5841 exception of `main' and those merged by attribute 5842 `externally_visible' become static functions and in a affect gets 5843 more aggressively optimized by interprocedural optimizers. While 5844 this option is equivalent to proper use of `static' keyword for 5845 programs consisting of single file, in combination with option 5846 `--combine' this flag can be used to compile most of smaller scale 5847 C programs since the functions and variables become local for the 5848 whole combined compilation unit, not for the single source file 5849 itself. 5850 5851 This option is not supported for Fortran programs. 5852 5853 `-fcprop-registers' 5854 After register allocation and post-register allocation instruction 5855 splitting, we perform a copy-propagation pass to try to reduce 5856 scheduling dependencies and occasionally eliminate the copy. 5857 5858 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5859 5860 `-fprofile-generate' 5861 Enable options usually used for instrumenting application to 5862 produce profile useful for later recompilation with profile 5863 feedback based optimization. You must use `-fprofile-generate' 5864 both when compiling and when linking your program. 5865 5866 The following options are enabled: `-fprofile-arcs', 5867 `-fprofile-values', `-fvpt'. 5868 5869 `-fprofile-use' 5870 Enable profile feedback directed optimizations, and optimizations 5871 generally profitable only with profile feedback available. 5872 5873 The following options are enabled: `-fbranch-probabilities', 5874 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer' 5875 5876 By default, GCC emits an error message if the feedback profiles do 5877 not match the source code. This error can be turned into a 5878 warning by using `-Wcoverage-mismatch'. Note this may result in 5879 poorly optimized code. 5880 5881 The following options control compiler behavior regarding floating 5882 point arithmetic. These options trade off between speed and 5883 correctness. All must be specifically enabled. 5884 5885 `-ffloat-store' 5886 Do not store floating point variables in registers, and inhibit 5887 other options that might change whether a floating point value is 5888 taken from a register or memory. 5889 5890 This option prevents undesirable excess precision on machines such 5891 as the 68000 where the floating registers (of the 68881) keep more 5892 precision than a `double' is supposed to have. Similarly for the 5893 x86 architecture. For most programs, the excess precision does 5894 only good, but a few programs rely on the precise definition of 5895 IEEE floating point. Use `-ffloat-store' for such programs, after 5896 modifying them to store all pertinent intermediate computations 5897 into variables. 5898 5899 `-ffast-math' 5900 Sets `-fno-math-errno', `-funsafe-math-optimizations', 5901 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 5902 and `-fcx-limited-range'. 5903 5904 This option causes the preprocessor macro `__FAST_MATH__' to be 5905 defined. 5906 5907 This option is not turned on by any `-O' option since it can 5908 result in incorrect output for programs which depend on an exact 5909 implementation of IEEE or ISO rules/specifications for math 5910 functions. It may, however, yield faster code for programs that do 5911 not require the guarantees of these specifications. 5912 5913 `-fno-math-errno' 5914 Do not set ERRNO after calling math functions that are executed 5915 with a single instruction, e.g., sqrt. A program that relies on 5916 IEEE exceptions for math error handling may want to use this flag 5917 for speed while maintaining IEEE arithmetic compatibility. 5918 5919 This option is not turned on by any `-O' option since it can 5920 result in incorrect output for programs which depend on an exact 5921 implementation of IEEE or ISO rules/specifications for math 5922 functions. It may, however, yield faster code for programs that do 5923 not require the guarantees of these specifications. 5924 5925 The default is `-fmath-errno'. 5926 5927 On Darwin systems, the math library never sets `errno'. There is 5928 therefore no reason for the compiler to consider the possibility 5929 that it might, and `-fno-math-errno' is the default. 5930 5931 `-funsafe-math-optimizations' 5932 Allow optimizations for floating-point arithmetic that (a) assume 5933 that arguments and results are valid and (b) may violate IEEE or 5934 ANSI standards. When used at link-time, it may include libraries 5935 or startup files that change the default FPU control word or other 5936 similar optimizations. 5937 5938 This option is not turned on by any `-O' option since it can 5939 result in incorrect output for programs which depend on an exact 5940 implementation of IEEE or ISO rules/specifications for math 5941 functions. It may, however, yield faster code for programs that do 5942 not require the guarantees of these specifications. Enables 5943 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 5944 and `-freciprocal-math'. 5945 5946 The default is `-fno-unsafe-math-optimizations'. 5947 5948 `-fassociative-math' 5949 Allow re-association of operands in series of floating-point 5950 operations. This violates the ISO C and C++ language standard by 5951 possibly changing computation result. NOTE: re-ordering may 5952 change the sign of zero as well as ignore NaNs and inhibit or 5953 create underflow or overflow (and thus cannot be used on a code 5954 which relies on rounding behavior like `(x + 2**52) - 2**52)'. 5955 May also reorder floating-point comparisons and thus may not be 5956 used when ordered comparisons are required. This option requires 5957 that both `-fno-signed-zeros' and `-fno-trapping-math' be in 5958 effect. Moreover, it doesn't make much sense with 5959 `-frounding-math'. 5960 5961 The default is `-fno-associative-math'. 5962 5963 `-freciprocal-math' 5964 Allow the reciprocal of a value to be used instead of dividing by 5965 the value if this enables optimizations. For example `x / y' can 5966 be replaced with `x * (1/y)' which is useful if `(1/y)' is subject 5967 to common subexpression elimination. Note that this loses 5968 precision and increases the number of flops operating on the value. 5969 5970 The default is `-fno-reciprocal-math'. 5971 5972 `-ffinite-math-only' 5973 Allow optimizations for floating-point arithmetic that assume that 5974 arguments and results are not NaNs or +-Infs. 5975 5976 This option is not turned on by any `-O' option since it can 5977 result in incorrect output for programs which depend on an exact 5978 implementation of IEEE or ISO rules/specifications for math 5979 functions. It may, however, yield faster code for programs that do 5980 not require the guarantees of these specifications. 5981 5982 The default is `-fno-finite-math-only'. 5983 5984 `-fno-signed-zeros' 5985 Allow optimizations for floating point arithmetic that ignore the 5986 signedness of zero. IEEE arithmetic specifies the behavior of 5987 distinct +0.0 and -0.0 values, which then prohibits simplification 5988 of expressions such as x+0.0 or 0.0*x (even with 5989 `-ffinite-math-only'). This option implies that the sign of a 5990 zero result isn't significant. 5991 5992 The default is `-fsigned-zeros'. 5993 5994 `-fno-trapping-math' 5995 Compile code assuming that floating-point operations cannot 5996 generate user-visible traps. These traps include division by 5997 zero, overflow, underflow, inexact result and invalid operation. 5998 This option requires that `-fno-signaling-nans' be in effect. 5999 Setting this option may allow faster code if one relies on 6000 "non-stop" IEEE arithmetic, for example. 6001 6002 This option should never be turned on by any `-O' option since it 6003 can result in incorrect output for programs which depend on an 6004 exact implementation of IEEE or ISO rules/specifications for math 6005 functions. 6006 6007 The default is `-ftrapping-math'. 6008 6009 `-frounding-math' 6010 Disable transformations and optimizations that assume default 6011 floating point rounding behavior. This is round-to-zero for all 6012 floating point to integer conversions, and round-to-nearest for 6013 all other arithmetic truncations. This option should be specified 6014 for programs that change the FP rounding mode dynamically, or that 6015 may be executed with a non-default rounding mode. This option 6016 disables constant folding of floating point expressions at 6017 compile-time (which may be affected by rounding mode) and 6018 arithmetic transformations that are unsafe in the presence of 6019 sign-dependent rounding modes. 6020 6021 The default is `-fno-rounding-math'. 6022 6023 This option is experimental and does not currently guarantee to 6024 disable all GCC optimizations that are affected by rounding mode. 6025 Future versions of GCC may provide finer control of this setting 6026 using C99's `FENV_ACCESS' pragma. This command line option will 6027 be used to specify the default state for `FENV_ACCESS'. 6028 6029 `-frtl-abstract-sequences' 6030 It is a size optimization method. This option is to find identical 6031 sequences of code, which can be turned into pseudo-procedures and 6032 then replace all occurrences with calls to the newly created 6033 subroutine. It is kind of an opposite of `-finline-functions'. 6034 This optimization runs at RTL level. 6035 6036 `-fsignaling-nans' 6037 Compile code assuming that IEEE signaling NaNs may generate 6038 user-visible traps during floating-point operations. Setting this 6039 option disables optimizations that may change the number of 6040 exceptions visible with signaling NaNs. This option implies 6041 `-ftrapping-math'. 6042 6043 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 6044 defined. 6045 6046 The default is `-fno-signaling-nans'. 6047 6048 This option is experimental and does not currently guarantee to 6049 disable all GCC optimizations that affect signaling NaN behavior. 6050 6051 `-fsingle-precision-constant' 6052 Treat floating point constant as single precision constant instead 6053 of implicitly converting it to double precision constant. 6054 6055 `-fcx-limited-range' 6056 When enabled, this option states that a range reduction step is not 6057 needed when performing complex division. The default is 6058 `-fno-cx-limited-range', but is enabled by `-ffast-math'. 6059 6060 This option controls the default setting of the ISO C99 6061 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 6062 all languages. 6063 6064 6065 The following options control optimizations that may improve 6066 performance, but are not enabled by any `-O' options. This section 6067 includes experimental options that may produce broken code. 6068 6069 `-fbranch-probabilities' 6070 After running a program compiled with `-fprofile-arcs' (*note 6071 Options for Debugging Your Program or `gcc': Debugging Options.), 6072 you can compile it a second time using `-fbranch-probabilities', 6073 to improve optimizations based on the number of times each branch 6074 was taken. When the program compiled with `-fprofile-arcs' exits 6075 it saves arc execution counts to a file called `SOURCENAME.gcda' 6076 for each source file. The information in this data file is very 6077 dependent on the structure of the generated code, so you must use 6078 the same source code and the same optimization options for both 6079 compilations. 6080 6081 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 6082 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 6083 optimization. Currently, they are only used in one place: in 6084 `reorg.c', instead of guessing which path a branch is mostly to 6085 take, the `REG_BR_PROB' values are used to exactly determine which 6086 path is taken more often. 6087 6088 `-fprofile-values' 6089 If combined with `-fprofile-arcs', it adds code so that some data 6090 about values of expressions in the program is gathered. 6091 6092 With `-fbranch-probabilities', it reads back the data gathered 6093 from profiling values of expressions and adds `REG_VALUE_PROFILE' 6094 notes to instructions for their later usage in optimizations. 6095 6096 Enabled with `-fprofile-generate' and `-fprofile-use'. 6097 6098 `-fvpt' 6099 If combined with `-fprofile-arcs', it instructs the compiler to add 6100 a code to gather information about values of expressions. 6101 6102 With `-fbranch-probabilities', it reads back the data gathered and 6103 actually performs the optimizations based on them. Currently the 6104 optimizations include specialization of division operation using 6105 the knowledge about the value of the denominator. 6106 6107 `-frename-registers' 6108 Attempt to avoid false dependencies in scheduled code by making use 6109 of registers left over after register allocation. This 6110 optimization will most benefit processors with lots of registers. 6111 Depending on the debug information format adopted by the target, 6112 however, it can make debugging impossible, since variables will no 6113 longer stay in a "home register". 6114 6115 Enabled by default with `-funroll-loops'. 6116 6117 `-ftracer' 6118 Perform tail duplication to enlarge superblock size. This 6119 transformation simplifies the control flow of the function 6120 allowing other optimizations to do better job. 6121 6122 Enabled with `-fprofile-use'. 6123 6124 `-funroll-loops' 6125 Unroll loops whose number of iterations can be determined at 6126 compile time or upon entry to the loop. `-funroll-loops' implies 6127 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 6128 also turns on complete loop peeling (i.e. complete removal of 6129 loops with small constant number of iterations). This option 6130 makes code larger, and may or may not make it run faster. 6131 6132 Enabled with `-fprofile-use'. 6133 6134 `-funroll-all-loops' 6135 Unroll all loops, even if their number of iterations is uncertain 6136 when the loop is entered. This usually makes programs run more 6137 slowly. `-funroll-all-loops' implies the same options as 6138 `-funroll-loops'. 6139 6140 `-fpeel-loops' 6141 Peels the loops for that there is enough information that they do 6142 not roll much (from profile feedback). It also turns on complete 6143 loop peeling (i.e. complete removal of loops with small constant 6144 number of iterations). 6145 6146 Enabled with `-fprofile-use'. 6147 6148 `-fmove-loop-invariants' 6149 Enables the loop invariant motion pass in the RTL loop optimizer. 6150 Enabled at level `-O1' 6151 6152 `-funswitch-loops' 6153 Move branches with loop invariant conditions out of the loop, with 6154 duplicates of the loop on both branches (modified according to 6155 result of the condition). 6156 6157 `-ffunction-sections' 6158 `-fdata-sections' 6159 Place each function or data item into its own section in the output 6160 file if the target supports arbitrary sections. The name of the 6161 function or the name of the data item determines the section's name 6162 in the output file. 6163 6164 Use these options on systems where the linker can perform 6165 optimizations to improve locality of reference in the instruction 6166 space. Most systems using the ELF object format and SPARC 6167 processors running Solaris 2 have linkers with such optimizations. 6168 AIX may have these optimizations in the future. 6169 6170 Only use these options when there are significant benefits from 6171 doing so. When you specify these options, the assembler and 6172 linker will create larger object and executable files and will 6173 also be slower. You will not be able to use `gprof' on all 6174 systems if you specify this option and you may have problems with 6175 debugging if you specify both this option and `-g'. 6176 6177 `-fbranch-target-load-optimize' 6178 Perform branch target register load optimization before prologue / 6179 epilogue threading. The use of target registers can typically be 6180 exposed only during reload, thus hoisting loads out of loops and 6181 doing inter-block scheduling needs a separate optimization pass. 6182 6183 `-fbranch-target-load-optimize2' 6184 Perform branch target register load optimization after prologue / 6185 epilogue threading. 6186 6187 `-fbtr-bb-exclusive' 6188 When performing branch target register load optimization, don't 6189 reuse branch target registers in within any basic block. 6190 6191 `-fstack-protector' 6192 Emit extra code to check for buffer overflows, such as stack 6193 smashing attacks. This is done by adding a guard variable to 6194 functions with vulnerable objects. This includes functions that 6195 call alloca, and functions with buffers larger than 8 bytes. The 6196 guards are initialized when a function is entered and then checked 6197 when the function exits. If a guard check fails, an error message 6198 is printed and the program exits. 6199 6200 `-fstack-protector-all' 6201 Like `-fstack-protector' except that all functions are protected. 6202 6203 `-fsection-anchors' 6204 Try to reduce the number of symbolic address calculations by using 6205 shared "anchor" symbols to address nearby objects. This 6206 transformation can help to reduce the number of GOT entries and 6207 GOT accesses on some targets. 6208 6209 For example, the implementation of the following function `foo': 6210 6211 static int a, b, c; 6212 int foo (void) { return a + b + c; } 6213 6214 would usually calculate the addresses of all three variables, but 6215 if you compile it with `-fsection-anchors', it will access the 6216 variables from a common anchor point instead. The effect is 6217 similar to the following pseudocode (which isn't valid C): 6218 6219 int foo (void) 6220 { 6221 register int *xr = &x; 6222 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 6223 } 6224 6225 Not all targets support this option. 6226 6227 `--param NAME=VALUE' 6228 In some places, GCC uses various constants to control the amount of 6229 optimization that is done. For example, GCC will not inline 6230 functions that contain more that a certain number of instructions. 6231 You can control some of these constants on the command-line using 6232 the `--param' option. 6233 6234 The names of specific parameters, and the meaning of the values, 6235 are tied to the internals of the compiler, and are subject to 6236 change without notice in future releases. 6237 6238 In each case, the VALUE is an integer. The allowable choices for 6239 NAME are given in the following table: 6240 6241 `salias-max-implicit-fields' 6242 The maximum number of fields in a variable without direct 6243 structure accesses for which structure aliasing will consider 6244 trying to track each field. The default is 5 6245 6246 `salias-max-array-elements' 6247 The maximum number of elements an array can have and its 6248 elements still be tracked individually by structure aliasing. 6249 The default is 4 6250 6251 `sra-max-structure-size' 6252 The maximum structure size, in bytes, at which the scalar 6253 replacement of aggregates (SRA) optimization will perform 6254 block copies. The default value, 0, implies that GCC will 6255 select the most appropriate size itself. 6256 6257 `sra-field-structure-ratio' 6258 The threshold ratio (as a percentage) between instantiated 6259 fields and the complete structure size. We say that if the 6260 ratio of the number of bytes in instantiated fields to the 6261 number of bytes in the complete structure exceeds this 6262 parameter, then block copies are not used. The default is 75. 6263 6264 `struct-reorg-cold-struct-ratio' 6265 The threshold ratio (as a percentage) between a structure 6266 frequency and the frequency of the hottest structure in the 6267 program. This parameter is used by struct-reorg optimization 6268 enabled by `-fipa-struct-reorg'. We say that if the ratio of 6269 a structure frequency, calculated by profiling, to the 6270 hottest structure frequency in the program is less than this 6271 parameter, then structure reorganization is not applied to 6272 this structure. The default is 10. 6273 6274 `max-crossjump-edges' 6275 The maximum number of incoming edges to consider for 6276 crossjumping. The algorithm used by `-fcrossjumping' is 6277 O(N^2) in the number of edges incoming to each block. 6278 Increasing values mean more aggressive optimization, making 6279 the compile time increase with probably small improvement in 6280 executable size. 6281 6282 `min-crossjump-insns' 6283 The minimum number of instructions which must be matched at 6284 the end of two blocks before crossjumping will be performed 6285 on them. This value is ignored in the case where all 6286 instructions in the block being crossjumped from are matched. 6287 The default value is 5. 6288 6289 `max-grow-copy-bb-insns' 6290 The maximum code size expansion factor when copying basic 6291 blocks instead of jumping. The expansion is relative to a 6292 jump instruction. The default value is 8. 6293 6294 `max-goto-duplication-insns' 6295 The maximum number of instructions to duplicate to a block 6296 that jumps to a computed goto. To avoid O(N^2) behavior in a 6297 number of passes, GCC factors computed gotos early in the 6298 compilation process, and unfactors them as late as possible. 6299 Only computed jumps at the end of a basic blocks with no more 6300 than max-goto-duplication-insns are unfactored. The default 6301 value is 8. 6302 6303 `max-delay-slot-insn-search' 6304 The maximum number of instructions to consider when looking 6305 for an instruction to fill a delay slot. If more than this 6306 arbitrary number of instructions is searched, the time 6307 savings from filling the delay slot will be minimal so stop 6308 searching. Increasing values mean more aggressive 6309 optimization, making the compile time increase with probably 6310 small improvement in executable run time. 6311 6312 `max-delay-slot-live-search' 6313 When trying to fill delay slots, the maximum number of 6314 instructions to consider when searching for a block with 6315 valid live register information. Increasing this arbitrarily 6316 chosen value means more aggressive optimization, increasing 6317 the compile time. This parameter should be removed when the 6318 delay slot code is rewritten to maintain the control-flow 6319 graph. 6320 6321 `max-gcse-memory' 6322 The approximate maximum amount of memory that will be 6323 allocated in order to perform the global common subexpression 6324 elimination optimization. If more memory than specified is 6325 required, the optimization will not be done. 6326 6327 `max-gcse-passes' 6328 The maximum number of passes of GCSE to run. The default is 6329 1. 6330 6331 `max-pending-list-length' 6332 The maximum number of pending dependencies scheduling will 6333 allow before flushing the current state and starting over. 6334 Large functions with few branches or calls can create 6335 excessively large lists which needlessly consume memory and 6336 resources. 6337 6338 `max-inline-insns-single' 6339 Several parameters control the tree inliner used in gcc. 6340 This number sets the maximum number of instructions (counted 6341 in GCC's internal representation) in a single function that 6342 the tree inliner will consider for inlining. This only 6343 affects functions declared inline and methods implemented in 6344 a class declaration (C++). The default value is 450. 6345 6346 `max-inline-insns-auto' 6347 When you use `-finline-functions' (included in `-O3'), a lot 6348 of functions that would otherwise not be considered for 6349 inlining by the compiler will be investigated. To those 6350 functions, a different (more restrictive) limit compared to 6351 functions declared inline can be applied. The default value 6352 is 90. 6353 6354 `large-function-insns' 6355 The limit specifying really large functions. For functions 6356 larger than this limit after inlining inlining is constrained 6357 by `--param large-function-growth'. This parameter is useful 6358 primarily to avoid extreme compilation time caused by 6359 non-linear algorithms used by the backend. This parameter is 6360 ignored when `-funit-at-a-time' is not used. The default 6361 value is 2700. 6362 6363 `large-function-growth' 6364 Specifies maximal growth of large function caused by inlining 6365 in percents. This parameter is ignored when 6366 `-funit-at-a-time' is not used. The default value is 100 6367 which limits large function growth to 2.0 times the original 6368 size. 6369 6370 `large-unit-insns' 6371 The limit specifying large translation unit. Growth caused 6372 by inlining of units larger than this limit is limited by 6373 `--param inline-unit-growth'. For small units this might be 6374 too tight (consider unit consisting of function A that is 6375 inline and B that just calls A three time. If B is small 6376 relative to A, the growth of unit is 300\% and yet such 6377 inlining is very sane. For very large units consisting of 6378 small inlineable functions however the overall unit growth 6379 limit is needed to avoid exponential explosion of code size. 6380 Thus for smaller units, the size is increased to `--param 6381 large-unit-insns' before applying `--param 6382 inline-unit-growth'. The default is 10000 6383 6384 `inline-unit-growth' 6385 Specifies maximal overall growth of the compilation unit 6386 caused by inlining. This parameter is ignored when 6387 `-funit-at-a-time' is not used. The default value is 30 6388 which limits unit growth to 1.3 times the original size. 6389 6390 `large-stack-frame' 6391 The limit specifying large stack frames. While inlining the 6392 algorithm is trying to not grow past this limit too much. 6393 Default value is 256 bytes. 6394 6395 `large-stack-frame-growth' 6396 Specifies maximal growth of large stack frames caused by 6397 inlining in percents. The default value is 1000 which limits 6398 large stack frame growth to 11 times the original size. 6399 6400 `max-inline-insns-recursive' 6401 `max-inline-insns-recursive-auto' 6402 Specifies maximum number of instructions out-of-line copy of 6403 self recursive inline function can grow into by performing 6404 recursive inlining. 6405 6406 For functions declared inline `--param 6407 max-inline-insns-recursive' is taken into account. For 6408 function not declared inline, recursive inlining happens only 6409 when `-finline-functions' (included in `-O3') is enabled and 6410 `--param max-inline-insns-recursive-auto' is used. The 6411 default value is 450. 6412 6413 `max-inline-recursive-depth' 6414 `max-inline-recursive-depth-auto' 6415 Specifies maximum recursion depth used by the recursive 6416 inlining. 6417 6418 For functions declared inline `--param 6419 max-inline-recursive-depth' is taken into account. For 6420 function not declared inline, recursive inlining happens only 6421 when `-finline-functions' (included in `-O3') is enabled and 6422 `--param max-inline-recursive-depth-auto' is used. The 6423 default value is 8. 6424 6425 `min-inline-recursive-probability' 6426 Recursive inlining is profitable only for function having 6427 deep recursion in average and can hurt for function having 6428 little recursion depth by increasing the prologue size or 6429 complexity of function body to other optimizers. 6430 6431 When profile feedback is available (see `-fprofile-generate') 6432 the actual recursion depth can be guessed from probability 6433 that function will recurse via given call expression. This 6434 parameter limits inlining only to call expression whose 6435 probability exceeds given threshold (in percents). The 6436 default value is 10. 6437 6438 `inline-call-cost' 6439 Specify cost of call instruction relative to simple 6440 arithmetics operations (having cost of 1). Increasing this 6441 cost disqualifies inlining of non-leaf functions and at the 6442 same time increases size of leaf function that is believed to 6443 reduce function size by being inlined. In effect it 6444 increases amount of inlining for code having large 6445 abstraction penalty (many functions that just pass the 6446 arguments to other functions) and decrease inlining for code 6447 with low abstraction penalty. The default value is 12. 6448 6449 `min-vect-loop-bound' 6450 The minimum number of iterations under which a loop will not 6451 get vectorized when `-ftree-vectorize' is used. The number 6452 of iterations after vectorization needs to be greater than 6453 the value specified by this option to allow vectorization. 6454 The default value is 0. 6455 6456 `max-unrolled-insns' 6457 The maximum number of instructions that a loop should have if 6458 that loop is unrolled, and if the loop is unrolled, it 6459 determines how many times the loop code is unrolled. 6460 6461 `max-average-unrolled-insns' 6462 The maximum number of instructions biased by probabilities of 6463 their execution that a loop should have if that loop is 6464 unrolled, and if the loop is unrolled, it determines how many 6465 times the loop code is unrolled. 6466 6467 `max-unroll-times' 6468 The maximum number of unrollings of a single loop. 6469 6470 `max-peeled-insns' 6471 The maximum number of instructions that a loop should have if 6472 that loop is peeled, and if the loop is peeled, it determines 6473 how many times the loop code is peeled. 6474 6475 `max-peel-times' 6476 The maximum number of peelings of a single loop. 6477 6478 `max-completely-peeled-insns' 6479 The maximum number of insns of a completely peeled loop. 6480 6481 `max-completely-peel-times' 6482 The maximum number of iterations of a loop to be suitable for 6483 complete peeling. 6484 6485 `max-unswitch-insns' 6486 The maximum number of insns of an unswitched loop. 6487 6488 `max-unswitch-level' 6489 The maximum number of branches unswitched in a single loop. 6490 6491 `lim-expensive' 6492 The minimum cost of an expensive expression in the loop 6493 invariant motion. 6494 6495 `iv-consider-all-candidates-bound' 6496 Bound on number of candidates for induction variables below 6497 that all candidates are considered for each use in induction 6498 variable optimizations. Only the most relevant candidates 6499 are considered if there are more candidates, to avoid 6500 quadratic time complexity. 6501 6502 `iv-max-considered-uses' 6503 The induction variable optimizations give up on loops that 6504 contain more induction variable uses. 6505 6506 `iv-always-prune-cand-set-bound' 6507 If number of candidates in the set is smaller than this value, 6508 we always try to remove unnecessary ivs from the set during 6509 its optimization when a new iv is added to the set. 6510 6511 `scev-max-expr-size' 6512 Bound on size of expressions used in the scalar evolutions 6513 analyzer. Large expressions slow the analyzer. 6514 6515 `omega-max-vars' 6516 The maximum number of variables in an Omega constraint system. 6517 The default value is 128. 6518 6519 `omega-max-geqs' 6520 The maximum number of inequalities in an Omega constraint 6521 system. The default value is 256. 6522 6523 `omega-max-eqs' 6524 The maximum number of equalities in an Omega constraint 6525 system. The default value is 128. 6526 6527 `omega-max-wild-cards' 6528 The maximum number of wildcard variables that the Omega 6529 solver will be able to insert. The default value is 18. 6530 6531 `omega-hash-table-size' 6532 The size of the hash table in the Omega solver. The default 6533 value is 550. 6534 6535 `omega-max-keys' 6536 The maximal number of keys used by the Omega solver. The 6537 default value is 500. 6538 6539 `omega-eliminate-redundant-constraints' 6540 When set to 1, use expensive methods to eliminate all 6541 redundant constraints. The default value is 0. 6542 6543 `vect-max-version-for-alignment-checks' 6544 The maximum number of runtime checks that can be performed 6545 when doing loop versioning for alignment in the vectorizer. 6546 See option ftree-vect-loop-version for more information. 6547 6548 `vect-max-version-for-alias-checks' 6549 The maximum number of runtime checks that can be performed 6550 when doing loop versioning for alias in the vectorizer. See 6551 option ftree-vect-loop-version for more information. 6552 6553 `max-iterations-to-track' 6554 The maximum number of iterations of a loop the brute force 6555 algorithm for analysis of # of iterations of the loop tries 6556 to evaluate. 6557 6558 `hot-bb-count-fraction' 6559 Select fraction of the maximal count of repetitions of basic 6560 block in program given basic block needs to have to be 6561 considered hot. 6562 6563 `hot-bb-frequency-fraction' 6564 Select fraction of the maximal frequency of executions of 6565 basic block in function given basic block needs to have to be 6566 considered hot 6567 6568 `max-predicted-iterations' 6569 The maximum number of loop iterations we predict statically. 6570 This is useful in cases where function contain single loop 6571 with known bound and other loop with unknown. We predict the 6572 known number of iterations correctly, while the unknown 6573 number of iterations average to roughly 10. This means that 6574 the loop without bounds would appear artificially cold 6575 relative to the other one. 6576 6577 `align-threshold' 6578 Select fraction of the maximal frequency of executions of 6579 basic block in function given basic block will get aligned. 6580 6581 `align-loop-iterations' 6582 A loop expected to iterate at lest the selected number of 6583 iterations will get aligned. 6584 6585 `tracer-dynamic-coverage' 6586 `tracer-dynamic-coverage-feedback' 6587 This value is used to limit superblock formation once the 6588 given percentage of executed instructions is covered. This 6589 limits unnecessary code size expansion. 6590 6591 The `tracer-dynamic-coverage-feedback' is used only when 6592 profile feedback is available. The real profiles (as opposed 6593 to statically estimated ones) are much less balanced allowing 6594 the threshold to be larger value. 6595 6596 `tracer-max-code-growth' 6597 Stop tail duplication once code growth has reached given 6598 percentage. This is rather hokey argument, as most of the 6599 duplicates will be eliminated later in cross jumping, so it 6600 may be set to much higher values than is the desired code 6601 growth. 6602 6603 `tracer-min-branch-ratio' 6604 Stop reverse growth when the reverse probability of best edge 6605 is less than this threshold (in percent). 6606 6607 `tracer-min-branch-ratio' 6608 `tracer-min-branch-ratio-feedback' 6609 Stop forward growth if the best edge do have probability 6610 lower than this threshold. 6611 6612 Similarly to `tracer-dynamic-coverage' two values are 6613 present, one for compilation for profile feedback and one for 6614 compilation without. The value for compilation with profile 6615 feedback needs to be more conservative (higher) in order to 6616 make tracer effective. 6617 6618 `max-cse-path-length' 6619 Maximum number of basic blocks on path that cse considers. 6620 The default is 10. 6621 6622 `max-cse-insns' 6623 The maximum instructions CSE process before flushing. The 6624 default is 1000. 6625 6626 `max-aliased-vops' 6627 Maximum number of virtual operands per function allowed to 6628 represent aliases before triggering the alias partitioning 6629 heuristic. Alias partitioning reduces compile times and 6630 memory consumption needed for aliasing at the expense of 6631 precision loss in alias information. The default value for 6632 this parameter is 100 for -O1, 500 for -O2 and 1000 for -O3. 6633 6634 Notice that if a function contains more memory statements 6635 than the value of this parameter, it is not really possible 6636 to achieve this reduction. In this case, the compiler will 6637 use the number of memory statements as the value for 6638 `max-aliased-vops'. 6639 6640 `avg-aliased-vops' 6641 Average number of virtual operands per statement allowed to 6642 represent aliases before triggering the alias partitioning 6643 heuristic. This works in conjunction with 6644 `max-aliased-vops'. If a function contains more than 6645 `max-aliased-vops' virtual operators, then memory symbols 6646 will be grouped into memory partitions until either the total 6647 number of virtual operators is below `max-aliased-vops' or 6648 the average number of virtual operators per memory statement 6649 is below `avg-aliased-vops'. The default value for this 6650 parameter is 1 for -O1 and -O2, and 3 for -O3. 6651 6652 `ggc-min-expand' 6653 GCC uses a garbage collector to manage its own memory 6654 allocation. This parameter specifies the minimum percentage 6655 by which the garbage collector's heap should be allowed to 6656 expand between collections. Tuning this may improve 6657 compilation speed; it has no effect on code generation. 6658 6659 The default is 30% + 70% * (RAM/1GB) with an upper bound of 6660 100% when RAM >= 1GB. If `getrlimit' is available, the 6661 notion of "RAM" is the smallest of actual RAM and 6662 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 6663 calculate RAM on a particular platform, the lower bound of 6664 30% is used. Setting this parameter and `ggc-min-heapsize' 6665 to zero causes a full collection to occur at every 6666 opportunity. This is extremely slow, but can be useful for 6667 debugging. 6668 6669 `ggc-min-heapsize' 6670 Minimum size of the garbage collector's heap before it begins 6671 bothering to collect garbage. The first collection occurs 6672 after the heap expands by `ggc-min-expand'% beyond 6673 `ggc-min-heapsize'. Again, tuning this may improve 6674 compilation speed, and has no effect on code generation. 6675 6676 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 6677 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 6678 exceeded, but with a lower bound of 4096 (four megabytes) and 6679 an upper bound of 131072 (128 megabytes). If GCC is not able 6680 to calculate RAM on a particular platform, the lower bound is 6681 used. Setting this parameter very large effectively disables 6682 garbage collection. Setting this parameter and 6683 `ggc-min-expand' to zero causes a full collection to occur at 6684 every opportunity. 6685 6686 `max-reload-search-insns' 6687 The maximum number of instruction reload should look backward 6688 for equivalent register. Increasing values mean more 6689 aggressive optimization, making the compile time increase 6690 with probably slightly better performance. The default value 6691 is 100. 6692 6693 `max-cselib-memory-locations' 6694 The maximum number of memory locations cselib should take 6695 into account. Increasing values mean more aggressive 6696 optimization, making the compile time increase with probably 6697 slightly better performance. The default value is 500. 6698 6699 `max-flow-memory-locations' 6700 Similar as `max-cselib-memory-locations' but for dataflow 6701 liveness. The default value is 100. 6702 6703 `reorder-blocks-duplicate' 6704 `reorder-blocks-duplicate-feedback' 6705 Used by basic block reordering pass to decide whether to use 6706 unconditional branch or duplicate the code on its 6707 destination. Code is duplicated when its estimated size is 6708 smaller than this value multiplied by the estimated size of 6709 unconditional jump in the hot spots of the program. 6710 6711 The `reorder-block-duplicate-feedback' is used only when 6712 profile feedback is available and may be set to higher values 6713 than `reorder-block-duplicate' since information about the 6714 hot spots is more accurate. 6715 6716 `max-sched-ready-insns' 6717 The maximum number of instructions ready to be issued the 6718 scheduler should consider at any given time during the first 6719 scheduling pass. Increasing values mean more thorough 6720 searches, making the compilation time increase with probably 6721 little benefit. The default value is 100. 6722 6723 `max-sched-region-blocks' 6724 The maximum number of blocks in a region to be considered for 6725 interblock scheduling. The default value is 10. 6726 6727 `max-sched-region-insns' 6728 The maximum number of insns in a region to be considered for 6729 interblock scheduling. The default value is 100. 6730 6731 `min-spec-prob' 6732 The minimum probability (in percents) of reaching a source 6733 block for interblock speculative scheduling. The default 6734 value is 40. 6735 6736 `max-sched-extend-regions-iters' 6737 The maximum number of iterations through CFG to extend 6738 regions. 0 - disable region extension, N - do at most N 6739 iterations. The default value is 0. 6740 6741 `max-sched-insn-conflict-delay' 6742 The maximum conflict delay for an insn to be considered for 6743 speculative motion. The default value is 3. 6744 6745 `sched-spec-prob-cutoff' 6746 The minimal probability of speculation success (in percents), 6747 so that speculative insn will be scheduled. The default 6748 value is 40. 6749 6750 `max-last-value-rtl' 6751 The maximum size measured as number of RTLs that can be 6752 recorded in an expression in combiner for a pseudo register 6753 as last known value of that register. The default is 10000. 6754 6755 `integer-share-limit' 6756 Small integer constants can use a shared data structure, 6757 reducing the compiler's memory usage and increasing its 6758 speed. This sets the maximum value of a shared integer 6759 constant. The default value is 256. 6760 6761 `min-virtual-mappings' 6762 Specifies the minimum number of virtual mappings in the 6763 incremental SSA updater that should be registered to trigger 6764 the virtual mappings heuristic defined by 6765 virtual-mappings-ratio. The default value is 100. 6766 6767 `virtual-mappings-ratio' 6768 If the number of virtual mappings is virtual-mappings-ratio 6769 bigger than the number of virtual symbols to be updated, then 6770 the incremental SSA updater switches to a full update for 6771 those symbols. The default ratio is 3. 6772 6773 `ssp-buffer-size' 6774 The minimum size of buffers (i.e. arrays) that will receive 6775 stack smashing protection when `-fstack-protection' is used. 6776 6777 `max-jump-thread-duplication-stmts' 6778 Maximum number of statements allowed in a block that needs to 6779 be duplicated when threading jumps. 6780 6781 `max-fields-for-field-sensitive' 6782 Maximum number of fields in a structure we will treat in a 6783 field sensitive manner during pointer analysis. 6784 6785 `prefetch-latency' 6786 Estimate on average number of instructions that are executed 6787 before prefetch finishes. The distance we prefetch ahead is 6788 proportional to this constant. Increasing this number may 6789 also lead to less streams being prefetched (see 6790 `simultaneous-prefetches'). 6791 6792 `simultaneous-prefetches' 6793 Maximum number of prefetches that can run at the same time. 6794 6795 `l1-cache-line-size' 6796 The size of cache line in L1 cache, in bytes. 6797 6798 `l1-cache-size' 6799 The size of L1 cache, in kilobytes. 6800 6801 `l2-cache-size' 6802 The size of L2 cache, in kilobytes. 6803 6804 `use-canonical-types' 6805 Whether the compiler should use the "canonical" type system. 6806 By default, this should always be 1, which uses a more 6807 efficient internal mechanism for comparing types in C++ and 6808 Objective-C++. However, if bugs in the canonical type system 6809 are causing compilation failures, set this value to 0 to 6810 disable canonical types. 6811 6812 `max-partial-antic-length' 6813 Maximum length of the partial antic set computed during the 6814 tree partial redundancy elimination optimization 6815 (`-ftree-pre') when optimizing at `-O3' and above. For some 6816 sorts of source code the enhanced partial redundancy 6817 elimination optimization can run away, consuming all of the 6818 memory available on the host machine. This parameter sets a 6819 limit on the length of the sets that are computed, which 6820 prevents the runaway behaviour. Setting a value of 0 for 6821 this paramter will allow an unlimited set length. 6822 6823 `sccvn-max-scc-size' 6824 Maximum size of a strongly connected component (SCC) during 6825 SCCVN processing. If this limit is hit, SCCVN processing for 6826 the whole function will not be done and optimizations 6827 depending on it will be disabled. The default maximum SCC 6828 size is 10000. 6829 6830 6831 6832 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 6833 6834 3.11 Options Controlling the Preprocessor 6835 ========================================= 6836 6837 These options control the C preprocessor, which is run on each C source 6838 file before actual compilation. 6839 6840 If you use the `-E' option, nothing is done except preprocessing. 6841 Some of these options make sense only together with `-E' because they 6842 cause the preprocessor output to be unsuitable for actual compilation. 6843 6844 You can use `-Wp,OPTION' to bypass the compiler driver and pass 6845 OPTION directly through to the preprocessor. If OPTION contains 6846 commas, it is split into multiple options at the commas. However, 6847 many options are modified, translated or interpreted by the 6848 compiler driver before being passed to the preprocessor, and `-Wp' 6849 forcibly bypasses this phase. The preprocessor's direct interface 6850 is undocumented and subject to change, so whenever possible you 6851 should avoid using `-Wp' and let the driver handle the options 6852 instead. 6853 6854 `-Xpreprocessor OPTION' 6855 Pass OPTION as an option to the preprocessor. You can use this to 6856 supply system-specific preprocessor options which GCC does not 6857 know how to recognize. 6858 6859 If you want to pass an option that takes an argument, you must use 6860 `-Xpreprocessor' twice, once for the option and once for the 6861 argument. 6862 6863 `-D NAME' 6864 Predefine NAME as a macro, with definition `1'. 6865 6866 `-D NAME=DEFINITION' 6867 The contents of DEFINITION are tokenized and processed as if they 6868 appeared during translation phase three in a `#define' directive. 6869 In particular, the definition will be truncated by embedded 6870 newline characters. 6871 6872 If you are invoking the preprocessor from a shell or shell-like 6873 program you may need to use the shell's quoting syntax to protect 6874 characters such as spaces that have a meaning in the shell syntax. 6875 6876 If you wish to define a function-like macro on the command line, 6877 write its argument list with surrounding parentheses before the 6878 equals sign (if any). Parentheses are meaningful to most shells, 6879 so you will need to quote the option. With `sh' and `csh', 6880 `-D'NAME(ARGS...)=DEFINITION'' works. 6881 6882 `-D' and `-U' options are processed in the order they are given on 6883 the command line. All `-imacros FILE' and `-include FILE' options 6884 are processed after all `-D' and `-U' options. 6885 6886 `-U NAME' 6887 Cancel any previous definition of NAME, either built in or 6888 provided with a `-D' option. 6889 6890 `-undef' 6891 Do not predefine any system-specific or GCC-specific macros. The 6892 standard predefined macros remain defined. 6893 6894 `-I DIR' 6895 Add the directory DIR to the list of directories to be searched 6896 for header files. Directories named by `-I' are searched before 6897 the standard system include directories. If the directory DIR is 6898 a standard system include directory, the option is ignored to 6899 ensure that the default search order for system directories and 6900 the special treatment of system headers are not defeated . If DIR 6901 begins with `=', then the `=' will be replaced by the sysroot 6902 prefix; see `--sysroot' and `-isysroot'. 6903 6904 `-o FILE' 6905 Write output to FILE. This is the same as specifying FILE as the 6906 second non-option argument to `cpp'. `gcc' has a different 6907 interpretation of a second non-option argument, so you must use 6908 `-o' to specify the output file. 6909 6910 `-Wall' 6911 Turns on all optional warnings which are desirable for normal code. 6912 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 6913 warning about integer promotion causing a change of sign in `#if' 6914 expressions. Note that many of the preprocessor's warnings are on 6915 by default and have no options to control them. 6916 6917 `-Wcomment' 6918 `-Wcomments' 6919 Warn whenever a comment-start sequence `/*' appears in a `/*' 6920 comment, or whenever a backslash-newline appears in a `//' comment. 6921 (Both forms have the same effect.) 6922 6923 `-Wtrigraphs' 6924 Most trigraphs in comments cannot affect the meaning of the 6925 program. However, a trigraph that would form an escaped newline 6926 (`??/' at the end of a line) can, by changing where the comment 6927 begins or ends. Therefore, only trigraphs that would form escaped 6928 newlines produce warnings inside a comment. 6929 6930 This option is implied by `-Wall'. If `-Wall' is not given, this 6931 option is still enabled unless trigraphs are enabled. To get 6932 trigraph conversion without warnings, but get the other `-Wall' 6933 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 6934 6935 `-Wtraditional' 6936 Warn about certain constructs that behave differently in 6937 traditional and ISO C. Also warn about ISO C constructs that have 6938 no traditional C equivalent, and problematic constructs which 6939 should be avoided. 6940 6941 `-Wimport' 6942 Warn the first time `#import' is used. 6943 6944 `-Wundef' 6945 Warn whenever an identifier which is not a macro is encountered in 6946 an `#if' directive, outside of `defined'. Such identifiers are 6947 replaced with zero. 6948 6949 `-Wunused-macros' 6950 Warn about macros defined in the main file that are unused. A 6951 macro is "used" if it is expanded or tested for existence at least 6952 once. The preprocessor will also warn if the macro has not been 6953 used at the time it is redefined or undefined. 6954 6955 Built-in macros, macros defined on the command line, and macros 6956 defined in include files are not warned about. 6957 6958 _Note:_ If a macro is actually used, but only used in skipped 6959 conditional blocks, then CPP will report it as unused. To avoid 6960 the warning in such a case, you might improve the scope of the 6961 macro's definition by, for example, moving it into the first 6962 skipped block. Alternatively, you could provide a dummy use with 6963 something like: 6964 6965 #if defined the_macro_causing_the_warning 6966 #endif 6967 6968 `-Wendif-labels' 6969 Warn whenever an `#else' or an `#endif' are followed by text. 6970 This usually happens in code of the form 6971 6972 #if FOO 6973 ... 6974 #else FOO 6975 ... 6976 #endif FOO 6977 6978 The second and third `FOO' should be in comments, but often are not 6979 in older programs. This warning is on by default. 6980 6981 `-Werror' 6982 Make all warnings into hard errors. Source code which triggers 6983 warnings will be rejected. 6984 6985 `-Wsystem-headers' 6986 Issue warnings for code in system headers. These are normally 6987 unhelpful in finding bugs in your own code, therefore suppressed. 6988 If you are responsible for the system library, you may want to see 6989 them. 6990 6991 `-w' 6992 Suppress all warnings, including those which GNU CPP issues by 6993 default. 6994 6995 `-pedantic' 6996 Issue all the mandatory diagnostics listed in the C standard. 6997 Some of them are left out by default, since they trigger 6998 frequently on harmless code. 6999 7000 `-pedantic-errors' 7001 Issue all the mandatory diagnostics, and make all mandatory 7002 diagnostics into errors. This includes mandatory diagnostics that 7003 GCC issues without `-pedantic' but treats as warnings. 7004 7005 `-M' 7006 Instead of outputting the result of preprocessing, output a rule 7007 suitable for `make' describing the dependencies of the main source 7008 file. The preprocessor outputs one `make' rule containing the 7009 object file name for that source file, a colon, and the names of 7010 all the included files, including those coming from `-include' or 7011 `-imacros' command line options. 7012 7013 Unless specified explicitly (with `-MT' or `-MQ'), the object file 7014 name consists of the name of the source file with any suffix 7015 replaced with object file suffix and with any leading directory 7016 parts removed. If there are many included files then the rule is 7017 split into several lines using `\'-newline. The rule has no 7018 commands. 7019 7020 This option does not suppress the preprocessor's debug output, 7021 such as `-dM'. To avoid mixing such debug output with the 7022 dependency rules you should explicitly specify the dependency 7023 output file with `-MF', or use an environment variable like 7024 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 7025 output will still be sent to the regular output stream as normal. 7026 7027 Passing `-M' to the driver implies `-E', and suppresses warnings 7028 with an implicit `-w'. 7029 7030 `-MM' 7031 Like `-M' but do not mention header files that are found in system 7032 header directories, nor header files that are included, directly 7033 or indirectly, from such a header. 7034 7035 This implies that the choice of angle brackets or double quotes in 7036 an `#include' directive does not in itself determine whether that 7037 header will appear in `-MM' dependency output. This is a slight 7038 change in semantics from GCC versions 3.0 and earlier. 7039 7040 `-MF FILE' 7041 When used with `-M' or `-MM', specifies a file to write the 7042 dependencies to. If no `-MF' switch is given the preprocessor 7043 sends the rules to the same place it would have sent preprocessed 7044 output. 7045 7046 When used with the driver options `-MD' or `-MMD', `-MF' overrides 7047 the default dependency output file. 7048 7049 `-MG' 7050 In conjunction with an option such as `-M' requesting dependency 7051 generation, `-MG' assumes missing header files are generated files 7052 and adds them to the dependency list without raising an error. 7053 The dependency filename is taken directly from the `#include' 7054 directive without prepending any path. `-MG' also suppresses 7055 preprocessed output, as a missing header file renders this useless. 7056 7057 This feature is used in automatic updating of makefiles. 7058 7059 `-MP' 7060 This option instructs CPP to add a phony target for each dependency 7061 other than the main file, causing each to depend on nothing. These 7062 dummy rules work around errors `make' gives if you remove header 7063 files without updating the `Makefile' to match. 7064 7065 This is typical output: 7066 7067 test.o: test.c test.h 7068 7069 test.h: 7070 7071 `-MT TARGET' 7072 Change the target of the rule emitted by dependency generation. By 7073 default CPP takes the name of the main input file, deletes any 7074 directory components and any file suffix such as `.c', and appends 7075 the platform's usual object suffix. The result is the target. 7076 7077 An `-MT' option will set the target to be exactly the string you 7078 specify. If you want multiple targets, you can specify them as a 7079 single argument to `-MT', or use multiple `-MT' options. 7080 7081 For example, `-MT '$(objpfx)foo.o'' might give 7082 7083 $(objpfx)foo.o: foo.c 7084 7085 `-MQ TARGET' 7086 Same as `-MT', but it quotes any characters which are special to 7087 Make. `-MQ '$(objpfx)foo.o'' gives 7088 7089 $$(objpfx)foo.o: foo.c 7090 7091 The default target is automatically quoted, as if it were given 7092 with `-MQ'. 7093 7094 `-MD' 7095 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 7096 implied. The driver determines FILE based on whether an `-o' 7097 option is given. If it is, the driver uses its argument but with 7098 a suffix of `.d', otherwise it takes the name of the input file, 7099 removes any directory components and suffix, and applies a `.d' 7100 suffix. 7101 7102 If `-MD' is used in conjunction with `-E', any `-o' switch is 7103 understood to specify the dependency output file (*note -MF: 7104 dashMF.), but if used without `-E', each `-o' is understood to 7105 specify a target object file. 7106 7107 Since `-E' is not implied, `-MD' can be used to generate a 7108 dependency output file as a side-effect of the compilation process. 7109 7110 `-MMD' 7111 Like `-MD' except mention only user header files, not system 7112 header files. 7113 7114 `-fpch-deps' 7115 When using precompiled headers (*note Precompiled Headers::), this 7116 flag will cause the dependency-output flags to also list the files 7117 from the precompiled header's dependencies. If not specified only 7118 the precompiled header would be listed and not the files that were 7119 used to create it because those files are not consulted when a 7120 precompiled header is used. 7121 7122 `-fpch-preprocess' 7123 This option allows use of a precompiled header (*note Precompiled 7124 Headers::) together with `-E'. It inserts a special `#pragma', 7125 `#pragma GCC pch_preprocess "<filename>"' in the output to mark 7126 the place where the precompiled header was found, and its 7127 filename. When `-fpreprocessed' is in use, GCC recognizes this 7128 `#pragma' and loads the PCH. 7129 7130 This option is off by default, because the resulting preprocessed 7131 output is only really suitable as input to GCC. It is switched on 7132 by `-save-temps'. 7133 7134 You should not write this `#pragma' in your own code, but it is 7135 safe to edit the filename if the PCH file is available in a 7136 different location. The filename may be absolute or it may be 7137 relative to GCC's current directory. 7138 7139 `-x c' 7140 `-x c++' 7141 `-x objective-c' 7142 `-x assembler-with-cpp' 7143 Specify the source language: C, C++, Objective-C, or assembly. 7144 This has nothing to do with standards conformance or extensions; 7145 it merely selects which base syntax to expect. If you give none 7146 of these options, cpp will deduce the language from the extension 7147 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 7148 extensions for C++ and assembly are also recognized. If cpp does 7149 not recognize the extension, it will treat the file as C; this is 7150 the most generic mode. 7151 7152 _Note:_ Previous versions of cpp accepted a `-lang' option which 7153 selected both the language and the standards conformance level. 7154 This option has been removed, because it conflicts with the `-l' 7155 option. 7156 7157 `-std=STANDARD' 7158 `-ansi' 7159 Specify the standard to which the code should conform. Currently 7160 CPP knows about C and C++ standards; others may be added in the 7161 future. 7162 7163 STANDARD may be one of: 7164 `iso9899:1990' 7165 `c89' 7166 The ISO C standard from 1990. `c89' is the customary 7167 shorthand for this version of the standard. 7168 7169 The `-ansi' option is equivalent to `-std=c89'. 7170 7171 `iso9899:199409' 7172 The 1990 C standard, as amended in 1994. 7173 7174 `iso9899:1999' 7175 `c99' 7176 `iso9899:199x' 7177 `c9x' 7178 The revised ISO C standard, published in December 1999. 7179 Before publication, this was known as C9X. 7180 7181 `gnu89' 7182 The 1990 C standard plus GNU extensions. This is the default. 7183 7184 `gnu99' 7185 `gnu9x' 7186 The 1999 C standard plus GNU extensions. 7187 7188 `c++98' 7189 The 1998 ISO C++ standard plus amendments. 7190 7191 `gnu++98' 7192 The same as `-std=c++98' plus GNU extensions. This is the 7193 default for C++ code. 7194 7195 `-I-' 7196 Split the include path. Any directories specified with `-I' 7197 options before `-I-' are searched only for headers requested with 7198 `#include "FILE"'; they are not searched for `#include <FILE>'. 7199 If additional directories are specified with `-I' options after 7200 the `-I-', those directories are searched for all `#include' 7201 directives. 7202 7203 In addition, `-I-' inhibits the use of the directory of the current 7204 file directory as the first search directory for `#include "FILE"'. 7205 This option has been deprecated. 7206 7207 `-nostdinc' 7208 Do not search the standard system directories for header files. 7209 Only the directories you have specified with `-I' options (and the 7210 directory of the current file, if appropriate) are searched. 7211 7212 `-nostdinc++' 7213 Do not search for header files in the C++-specific standard 7214 directories, but do still search the other standard directories. 7215 (This option is used when building the C++ library.) 7216 7217 `-include FILE' 7218 Process FILE as if `#include "file"' appeared as the first line of 7219 the primary source file. However, the first directory searched 7220 for FILE is the preprocessor's working directory _instead of_ the 7221 directory containing the main source file. If not found there, it 7222 is searched for in the remainder of the `#include "..."' search 7223 chain as normal. 7224 7225 If multiple `-include' options are given, the files are included 7226 in the order they appear on the command line. 7227 7228 `-imacros FILE' 7229 Exactly like `-include', except that any output produced by 7230 scanning FILE is thrown away. Macros it defines remain defined. 7231 This allows you to acquire all the macros from a header without 7232 also processing its declarations. 7233 7234 All files specified by `-imacros' are processed before all files 7235 specified by `-include'. 7236 7237 `-idirafter DIR' 7238 Search DIR for header files, but do it _after_ all directories 7239 specified with `-I' and the standard system directories have been 7240 exhausted. DIR is treated as a system include directory. If DIR 7241 begins with `=', then the `=' will be replaced by the sysroot 7242 prefix; see `--sysroot' and `-isysroot'. 7243 7244 `-iprefix PREFIX' 7245 Specify PREFIX as the prefix for subsequent `-iwithprefix' 7246 options. If the prefix represents a directory, you should include 7247 the final `/'. 7248 7249 `-iwithprefix DIR' 7250 `-iwithprefixbefore DIR' 7251 Append DIR to the prefix specified previously with `-iprefix', and 7252 add the resulting directory to the include search path. 7253 `-iwithprefixbefore' puts it in the same place `-I' would; 7254 `-iwithprefix' puts it where `-idirafter' would. 7255 7256 `-isysroot DIR' 7257 This option is like the `--sysroot' option, but applies only to 7258 header files. See the `--sysroot' option for more information. 7259 7260 `-imultilib DIR' 7261 Use DIR as a subdirectory of the directory containing 7262 target-specific C++ headers. 7263 7264 `-isystem DIR' 7265 Search DIR for header files, after all directories specified by 7266 `-I' but before the standard system directories. Mark it as a 7267 system directory, so that it gets the same special treatment as is 7268 applied to the standard system directories. If DIR begins with 7269 `=', then the `=' will be replaced by the sysroot prefix; see 7270 `--sysroot' and `-isysroot'. 7271 7272 `-iquote DIR' 7273 Search DIR only for header files requested with `#include "FILE"'; 7274 they are not searched for `#include <FILE>', before all 7275 directories specified by `-I' and before the standard system 7276 directories. If DIR begins with `=', then the `=' will be replaced 7277 by the sysroot prefix; see `--sysroot' and `-isysroot'. 7278 7279 `-fdirectives-only' 7280 When preprocessing, handle directives, but do not expand macros. 7281 7282 The option's behavior depends on the `-E' and `-fpreprocessed' 7283 options. 7284 7285 With `-E', preprocessing is limited to the handling of directives 7286 such as `#define', `#ifdef', and `#error'. Other preprocessor 7287 operations, such as macro expansion and trigraph conversion are 7288 not performed. In addition, the `-dD' option is implicitly 7289 enabled. 7290 7291 With `-fpreprocessed', predefinition of command line and most 7292 builtin macros is disabled. Macros such as `__LINE__', which are 7293 contextually dependent, are handled normally. This enables 7294 compilation of files previously preprocessed with `-E 7295 -fdirectives-only'. 7296 7297 With both `-E' and `-fpreprocessed', the rules for 7298 `-fpreprocessed' take precedence. This enables full preprocessing 7299 of files previously preprocessed with `-E -fdirectives-only'. 7300 7301 `-fdollars-in-identifiers' 7302 Accept `$' in identifiers. 7303 7304 `-fextended-identifiers' 7305 Accept universal character names in identifiers. This option is 7306 experimental; in a future version of GCC, it will be enabled by 7307 default for C99 and C++. 7308 7309 `-fpreprocessed' 7310 Indicate to the preprocessor that the input file has already been 7311 preprocessed. This suppresses things like macro expansion, 7312 trigraph conversion, escaped newline splicing, and processing of 7313 most directives. The preprocessor still recognizes and removes 7314 comments, so that you can pass a file preprocessed with `-C' to 7315 the compiler without problems. In this mode the integrated 7316 preprocessor is little more than a tokenizer for the front ends. 7317 7318 `-fpreprocessed' is implicit if the input file has one of the 7319 extensions `.i', `.ii' or `.mi'. These are the extensions that 7320 GCC uses for preprocessed files created by `-save-temps'. 7321 7322 `-ftabstop=WIDTH' 7323 Set the distance between tab stops. This helps the preprocessor 7324 report correct column numbers in warnings or errors, even if tabs 7325 appear on the line. If the value is less than 1 or greater than 7326 100, the option is ignored. The default is 8. 7327 7328 `-fexec-charset=CHARSET' 7329 Set the execution character set, used for string and character 7330 constants. The default is UTF-8. CHARSET can be any encoding 7331 supported by the system's `iconv' library routine. 7332 7333 `-fwide-exec-charset=CHARSET' 7334 Set the wide execution character set, used for wide string and 7335 character constants. The default is UTF-32 or UTF-16, whichever 7336 corresponds to the width of `wchar_t'. As with `-fexec-charset', 7337 CHARSET can be any encoding supported by the system's `iconv' 7338 library routine; however, you will have problems with encodings 7339 that do not fit exactly in `wchar_t'. 7340 7341 `-finput-charset=CHARSET' 7342 Set the input character set, used for translation from the 7343 character set of the input file to the source character set used 7344 by GCC. If the locale does not specify, or GCC cannot get this 7345 information from the locale, the default is UTF-8. This can be 7346 overridden by either the locale or this command line option. 7347 Currently the command line option takes precedence if there's a 7348 conflict. CHARSET can be any encoding supported by the system's 7349 `iconv' library routine. 7350 7351 `-fworking-directory' 7352 Enable generation of linemarkers in the preprocessor output that 7353 will let the compiler know the current working directory at the 7354 time of preprocessing. When this option is enabled, the 7355 preprocessor will emit, after the initial linemarker, a second 7356 linemarker with the current working directory followed by two 7357 slashes. GCC will use this directory, when it's present in the 7358 preprocessed input, as the directory emitted as the current 7359 working directory in some debugging information formats. This 7360 option is implicitly enabled if debugging information is enabled, 7361 but this can be inhibited with the negated form 7362 `-fno-working-directory'. If the `-P' flag is present in the 7363 command line, this option has no effect, since no `#line' 7364 directives are emitted whatsoever. 7365 7366 `-fno-show-column' 7367 Do not print column numbers in diagnostics. This may be necessary 7368 if diagnostics are being scanned by a program that does not 7369 understand the column numbers, such as `dejagnu'. 7370 7371 `-A PREDICATE=ANSWER' 7372 Make an assertion with the predicate PREDICATE and answer ANSWER. 7373 This form is preferred to the older form `-A PREDICATE(ANSWER)', 7374 which is still supported, because it does not use shell special 7375 characters. 7376 7377 `-A -PREDICATE=ANSWER' 7378 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 7379 7380 `-dCHARS' 7381 CHARS is a sequence of one or more of the following characters, 7382 and must not be preceded by a space. Other characters are 7383 interpreted by the compiler proper, or reserved for future 7384 versions of GCC, and so are silently ignored. If you specify 7385 characters whose behavior conflicts, the result is undefined. 7386 7387 `M' 7388 Instead of the normal output, generate a list of `#define' 7389 directives for all the macros defined during the execution of 7390 the preprocessor, including predefined macros. This gives 7391 you a way of finding out what is predefined in your version 7392 of the preprocessor. Assuming you have no file `foo.h', the 7393 command 7394 7395 touch foo.h; cpp -dM foo.h 7396 7397 will show all the predefined macros. 7398 7399 If you use `-dM' without the `-E' option, `-dM' is 7400 interpreted as a synonym for `-fdump-rtl-mach'. *Note 7401 Debugging Options: (gcc)Debugging Options. 7402 7403 `D' 7404 Like `M' except in two respects: it does _not_ include the 7405 predefined macros, and it outputs _both_ the `#define' 7406 directives and the result of preprocessing. Both kinds of 7407 output go to the standard output file. 7408 7409 `N' 7410 Like `D', but emit only the macro names, not their expansions. 7411 7412 `I' 7413 Output `#include' directives in addition to the result of 7414 preprocessing. 7415 7416 `-P' 7417 Inhibit generation of linemarkers in the output from the 7418 preprocessor. This might be useful when running the preprocessor 7419 on something that is not C code, and will be sent to a program 7420 which might be confused by the linemarkers. 7421 7422 `-C' 7423 Do not discard comments. All comments are passed through to the 7424 output file, except for comments in processed directives, which 7425 are deleted along with the directive. 7426 7427 You should be prepared for side effects when using `-C'; it causes 7428 the preprocessor to treat comments as tokens in their own right. 7429 For example, comments appearing at the start of what would be a 7430 directive line have the effect of turning that line into an 7431 ordinary source line, since the first token on the line is no 7432 longer a `#'. 7433 7434 `-CC' 7435 Do not discard comments, including during macro expansion. This is 7436 like `-C', except that comments contained within macros are also 7437 passed through to the output file where the macro is expanded. 7438 7439 In addition to the side-effects of the `-C' option, the `-CC' 7440 option causes all C++-style comments inside a macro to be 7441 converted to C-style comments. This is to prevent later use of 7442 that macro from inadvertently commenting out the remainder of the 7443 source line. 7444 7445 The `-CC' option is generally used to support lint comments. 7446 7447 `-traditional-cpp' 7448 Try to imitate the behavior of old-fashioned C preprocessors, as 7449 opposed to ISO C preprocessors. 7450 7451 `-trigraphs' 7452 Process trigraph sequences. These are three-character sequences, 7453 all starting with `??', that are defined by ISO C to stand for 7454 single characters. For example, `??/' stands for `\', so `'??/n'' 7455 is a character constant for a newline. By default, GCC ignores 7456 trigraphs, but in standard-conforming modes it converts them. See 7457 the `-std' and `-ansi' options. 7458 7459 The nine trigraphs and their replacements are 7460 7461 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 7462 Replacement: [ ] { } # \ ^ | ~ 7463 7464 `-remap' 7465 Enable special code to work around file systems which only permit 7466 very short file names, such as MS-DOS. 7467 7468 `--help' 7469 `--target-help' 7470 Print text describing all the command line options instead of 7471 preprocessing anything. 7472 7473 `-v' 7474 Verbose mode. Print out GNU CPP's version number at the beginning 7475 of execution, and report the final form of the include path. 7476 7477 `-H' 7478 Print the name of each header file used, in addition to other 7479 normal activities. Each name is indented to show how deep in the 7480 `#include' stack it is. Precompiled header files are also 7481 printed, even if they are found to be invalid; an invalid 7482 precompiled header file is printed with `...x' and a valid one 7483 with `...!' . 7484 7485 `-version' 7486 `--version' 7487 Print out GNU CPP's version number. With one dash, proceed to 7488 preprocess as normal. With two dashes, exit immediately. 7489 7490 7491 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 7492 7493 3.12 Passing Options to the Assembler 7494 ===================================== 7495 7496 You can pass options to the assembler. 7497 7498 `-Wa,OPTION' 7499 Pass OPTION as an option to the assembler. If OPTION contains 7500 commas, it is split into multiple options at the commas. 7501 7502 `-Xassembler OPTION' 7503 Pass OPTION as an option to the assembler. You can use this to 7504 supply system-specific assembler options which GCC does not know 7505 how to recognize. 7506 7507 If you want to pass an option that takes an argument, you must use 7508 `-Xassembler' twice, once for the option and once for the argument. 7509 7510 7511 7512 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 7513 7514 3.13 Options for Linking 7515 ======================== 7516 7517 These options come into play when the compiler links object files into 7518 an executable output file. They are meaningless if the compiler is not 7519 doing a link step. 7520 7521 `OBJECT-FILE-NAME' 7522 A file name that does not end in a special recognized suffix is 7523 considered to name an object file or library. (Object files are 7524 distinguished from libraries by the linker according to the file 7525 contents.) If linking is done, these object files are used as 7526 input to the linker. 7527 7528 `-c' 7529 `-S' 7530 `-E' 7531 If any of these options is used, then the linker is not run, and 7532 object file names should not be used as arguments. *Note Overall 7533 Options::. 7534 7535 `-lLIBRARY' 7536 `-l LIBRARY' 7537 Search the library named LIBRARY when linking. (The second 7538 alternative with the library as a separate argument is only for 7539 POSIX compliance and is not recommended.) 7540 7541 It makes a difference where in the command you write this option; 7542 the linker searches and processes libraries and object files in 7543 the order they are specified. Thus, `foo.o -lz bar.o' searches 7544 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 7545 refers to functions in `z', those functions may not be loaded. 7546 7547 The linker searches a standard list of directories for the library, 7548 which is actually a file named `libLIBRARY.a'. The linker then 7549 uses this file as if it had been specified precisely by name. 7550 7551 The directories searched include several standard system 7552 directories plus any that you specify with `-L'. 7553 7554 Normally the files found this way are library files--archive files 7555 whose members are object files. The linker handles an archive 7556 file by scanning through it for members which define symbols that 7557 have so far been referenced but not defined. But if the file that 7558 is found is an ordinary object file, it is linked in the usual 7559 fashion. The only difference between using an `-l' option and 7560 specifying a file name is that `-l' surrounds LIBRARY with `lib' 7561 and `.a' and searches several directories. 7562 7563 `-lobjc' 7564 You need this special case of the `-l' option in order to link an 7565 Objective-C or Objective-C++ program. 7566 7567 `-nostartfiles' 7568 Do not use the standard system startup files when linking. The 7569 standard system libraries are used normally, unless `-nostdlib' or 7570 `-nodefaultlibs' is used. 7571 7572 `-nodefaultlibs' 7573 Do not use the standard system libraries when linking. Only the 7574 libraries you specify will be passed to the linker. The standard 7575 startup files are used normally, unless `-nostartfiles' is used. 7576 The compiler may generate calls to `memcmp', `memset', `memcpy' 7577 and `memmove'. These entries are usually resolved by entries in 7578 libc. These entry points should be supplied through some other 7579 mechanism when this option is specified. 7580 7581 `-nostdlib' 7582 Do not use the standard system startup files or libraries when 7583 linking. No startup files and only the libraries you specify will 7584 be passed to the linker. The compiler may generate calls to 7585 `memcmp', `memset', `memcpy' and `memmove'. These entries are 7586 usually resolved by entries in libc. These entry points should be 7587 supplied through some other mechanism when this option is 7588 specified. 7589 7590 One of the standard libraries bypassed by `-nostdlib' and 7591 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 7592 that GCC uses to overcome shortcomings of particular machines, or 7593 special needs for some languages. (*Note Interfacing to GCC 7594 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 7595 most cases, you need `libgcc.a' even when you want to avoid other 7596 standard libraries. In other words, when you specify `-nostdlib' 7597 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 7598 This ensures that you have no unresolved references to internal GCC 7599 library subroutines. (For example, `__main', used to ensure C++ 7600 constructors will be called; *note `collect2': (gccint)Collect2.) 7601 7602 `-pie' 7603 Produce a position independent executable on targets which support 7604 it. For predictable results, you must also specify the same set 7605 of options that were used to generate code (`-fpie', `-fPIE', or 7606 model suboptions) when you specify this option. 7607 7608 `-rdynamic' 7609 Pass the flag `-export-dynamic' to the ELF linker, on targets that 7610 support it. This instructs the linker to add all symbols, not only 7611 used ones, to the dynamic symbol table. This option is needed for 7612 some uses of `dlopen' or to allow obtaining backtraces from within 7613 a program. 7614 7615 `-s' 7616 Remove all symbol table and relocation information from the 7617 executable. 7618 7619 `-static' 7620 On systems that support dynamic linking, this prevents linking 7621 with the shared libraries. On other systems, this option has no 7622 effect. 7623 7624 `-shared' 7625 Produce a shared object which can then be linked with other 7626 objects to form an executable. Not all systems support this 7627 option. For predictable results, you must also specify the same 7628 set of options that were used to generate code (`-fpic', `-fPIC', 7629 or model suboptions) when you specify this option.(1) 7630 7631 `-shared-libgcc' 7632 `-static-libgcc' 7633 On systems that provide `libgcc' as a shared library, these options 7634 force the use of either the shared or static version respectively. 7635 If no shared version of `libgcc' was built when the compiler was 7636 configured, these options have no effect. 7637 7638 There are several situations in which an application should use the 7639 shared `libgcc' instead of the static version. The most common of 7640 these is when the application wishes to throw and catch exceptions 7641 across different shared libraries. In that case, each of the 7642 libraries as well as the application itself should use the shared 7643 `libgcc'. 7644 7645 Therefore, the G++ and GCJ drivers automatically add 7646 `-shared-libgcc' whenever you build a shared library or a main 7647 executable, because C++ and Java programs typically use 7648 exceptions, so this is the right thing to do. 7649 7650 If, instead, you use the GCC driver to create shared libraries, 7651 you may find that they will not always be linked with the shared 7652 `libgcc'. If GCC finds, at its configuration time, that you have 7653 a non-GNU linker or a GNU linker that does not support option 7654 `--eh-frame-hdr', it will link the shared version of `libgcc' into 7655 shared libraries by default. Otherwise, it will take advantage of 7656 the linker and optimize away the linking with the shared version 7657 of `libgcc', linking with the static version of libgcc by default. 7658 This allows exceptions to propagate through such shared 7659 libraries, without incurring relocation costs at library load time. 7660 7661 However, if a library or main executable is supposed to throw or 7662 catch exceptions, you must link it using the G++ or GCJ driver, as 7663 appropriate for the languages used in the program, or using the 7664 option `-shared-libgcc', such that it is linked with the shared 7665 `libgcc'. 7666 7667 `-symbolic' 7668 Bind references to global symbols when building a shared object. 7669 Warn about any unresolved references (unless overridden by the 7670 link editor option `-Xlinker -z -Xlinker defs'). Only a few 7671 systems support this option. 7672 7673 `-Xlinker OPTION' 7674 Pass OPTION as an option to the linker. You can use this to 7675 supply system-specific linker options which GCC does not know how 7676 to recognize. 7677 7678 If you want to pass an option that takes an argument, you must use 7679 `-Xlinker' twice, once for the option and once for the argument. 7680 For example, to pass `-assert definitions', you must write 7681 `-Xlinker -assert -Xlinker definitions'. It does not work to write 7682 `-Xlinker "-assert definitions"', because this passes the entire 7683 string as a single argument, which is not what the linker expects. 7684 7685 `-Wl,OPTION' 7686 Pass OPTION as an option to the linker. If OPTION contains 7687 commas, it is split into multiple options at the commas. 7688 7689 `-u SYMBOL' 7690 Pretend the symbol SYMBOL is undefined, to force linking of 7691 library modules to define it. You can use `-u' multiple times with 7692 different symbols to force loading of additional library modules. 7693 7694 ---------- Footnotes ---------- 7695 7696 (1) On some systems, `gcc -shared' needs to build supplementary stub 7697 code for constructors to work. On multi-libbed systems, `gcc -shared' 7698 must select the correct support libraries to link against. Failing to 7699 supply the correct flags may lead to subtle defects. Supplying them in 7700 cases where they are not necessary is innocuous. 7701 7702 7703 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 7704 7705 3.14 Options for Directory Search 7706 ================================= 7707 7708 These options specify directories to search for header files, for 7709 libraries and for parts of the compiler: 7710 7711 `-IDIR' 7712 Add the directory DIR to the head of the list of directories to be 7713 searched for header files. This can be used to override a system 7714 header file, substituting your own version, since these 7715 directories are searched before the system header file 7716 directories. However, you should not use this option to add 7717 directories that contain vendor-supplied system header files (use 7718 `-isystem' for that). If you use more than one `-I' option, the 7719 directories are scanned in left-to-right order; the standard 7720 system directories come after. 7721 7722 If a standard system include directory, or a directory specified 7723 with `-isystem', is also specified with `-I', the `-I' option will 7724 be ignored. The directory will still be searched but as a system 7725 directory at its normal position in the system include chain. 7726 This is to ensure that GCC's procedure to fix buggy system headers 7727 and the ordering for the include_next directive are not 7728 inadvertently changed. If you really need to change the search 7729 order for system directories, use the `-nostdinc' and/or 7730 `-isystem' options. 7731 7732 `-iquoteDIR' 7733 Add the directory DIR to the head of the list of directories to be 7734 searched for header files only for the case of `#include "FILE"'; 7735 they are not searched for `#include <FILE>', otherwise just like 7736 `-I'. 7737 7738 `-LDIR' 7739 Add directory DIR to the list of directories to be searched for 7740 `-l'. 7741 7742 `-BPREFIX' 7743 This option specifies where to find the executables, libraries, 7744 include files, and data files of the compiler itself. 7745 7746 The compiler driver program runs one or more of the subprograms 7747 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 7748 program it tries to run, both with and without `MACHINE/VERSION/' 7749 (*note Target Options::). 7750 7751 For each subprogram to be run, the compiler driver first tries the 7752 `-B' prefix, if any. If that name is not found, or if `-B' was 7753 not specified, the driver tries two standard prefixes, which are 7754 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 7755 results in a file name that is found, the unmodified program name 7756 is searched for using the directories specified in your `PATH' 7757 environment variable. 7758 7759 The compiler will check to see if the path provided by the `-B' 7760 refers to a directory, and if necessary it will add a directory 7761 separator character at the end of the path. 7762 7763 `-B' prefixes that effectively specify directory names also apply 7764 to libraries in the linker, because the compiler translates these 7765 options into `-L' options for the linker. They also apply to 7766 includes files in the preprocessor, because the compiler 7767 translates these options into `-isystem' options for the 7768 preprocessor. In this case, the compiler appends `include' to the 7769 prefix. 7770 7771 The run-time support file `libgcc.a' can also be searched for using 7772 the `-B' prefix, if needed. If it is not found there, the two 7773 standard prefixes above are tried, and that is all. The file is 7774 left out of the link if it is not found by those means. 7775 7776 Another way to specify a prefix much like the `-B' prefix is to use 7777 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 7778 Variables::. 7779 7780 As a special kludge, if the path provided by `-B' is 7781 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 7782 will be replaced by `[dir/]include'. This is to help with 7783 boot-strapping the compiler. 7784 7785 `-specs=FILE' 7786 Process FILE after the compiler reads in the standard `specs' 7787 file, in order to override the defaults that the `gcc' driver 7788 program uses when determining what switches to pass to `cc1', 7789 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 7790 specified on the command line, and they are processed in order, 7791 from left to right. 7792 7793 `--sysroot=DIR' 7794 Use DIR as the logical root directory for headers and libraries. 7795 For example, if the compiler would normally search for headers in 7796 `/usr/include' and libraries in `/usr/lib', it will instead search 7797 `DIR/usr/include' and `DIR/usr/lib'. 7798 7799 If you use both this option and the `-isysroot' option, then the 7800 `--sysroot' option will apply to libraries, but the `-isysroot' 7801 option will apply to header files. 7802 7803 The GNU linker (beginning with version 2.16) has the necessary 7804 support for this option. If your linker does not support this 7805 option, the header file aspect of `--sysroot' will still work, but 7806 the library aspect will not. 7807 7808 `-I-' 7809 This option has been deprecated. Please use `-iquote' instead for 7810 `-I' directories before the `-I-' and remove the `-I-'. Any 7811 directories you specify with `-I' options before the `-I-' option 7812 are searched only for the case of `#include "FILE"'; they are not 7813 searched for `#include <FILE>'. 7814 7815 If additional directories are specified with `-I' options after 7816 the `-I-', these directories are searched for all `#include' 7817 directives. (Ordinarily _all_ `-I' directories are used this way.) 7818 7819 In addition, the `-I-' option inhibits the use of the current 7820 directory (where the current input file came from) as the first 7821 search directory for `#include "FILE"'. There is no way to 7822 override this effect of `-I-'. With `-I.' you can specify 7823 searching the directory which was current when the compiler was 7824 invoked. That is not exactly the same as what the preprocessor 7825 does by default, but it is often satisfactory. 7826 7827 `-I-' does not inhibit the use of the standard system directories 7828 for header files. Thus, `-I-' and `-nostdinc' are independent. 7829 7830 7831 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 7832 7833 3.15 Specifying subprocesses and the switches to pass to them 7834 ============================================================= 7835 7836 `gcc' is a driver program. It performs its job by invoking a sequence 7837 of other programs to do the work of compiling, assembling and linking. 7838 GCC interprets its command-line parameters and uses these to deduce 7839 which programs it should invoke, and which command-line options it 7840 ought to place on their command lines. This behavior is controlled by 7841 "spec strings". In most cases there is one spec string for each 7842 program that GCC can invoke, but a few programs have multiple spec 7843 strings to control their behavior. The spec strings built into GCC can 7844 be overridden by using the `-specs=' command-line switch to specify a 7845 spec file. 7846 7847 "Spec files" are plaintext files that are used to construct spec 7848 strings. They consist of a sequence of directives separated by blank 7849 lines. The type of directive is determined by the first non-whitespace 7850 character on the line and it can be one of the following: 7851 7852 `%COMMAND' 7853 Issues a COMMAND to the spec file processor. The commands that can 7854 appear here are: 7855 7856 `%include <FILE>' 7857 Search for FILE and insert its text at the current point in 7858 the specs file. 7859 7860 `%include_noerr <FILE>' 7861 Just like `%include', but do not generate an error message if 7862 the include file cannot be found. 7863 7864 `%rename OLD_NAME NEW_NAME' 7865 Rename the spec string OLD_NAME to NEW_NAME. 7866 7867 7868 `*[SPEC_NAME]:' 7869 This tells the compiler to create, override or delete the named 7870 spec string. All lines after this directive up to the next 7871 directive or blank line are considered to be the text for the spec 7872 string. If this results in an empty string then the spec will be 7873 deleted. (Or, if the spec did not exist, then nothing will 7874 happened.) Otherwise, if the spec does not currently exist a new 7875 spec will be created. If the spec does exist then its contents 7876 will be overridden by the text of this directive, unless the first 7877 character of that text is the `+' character, in which case the 7878 text will be appended to the spec. 7879 7880 `[SUFFIX]:' 7881 Creates a new `[SUFFIX] spec' pair. All lines after this directive 7882 and up to the next directive or blank line are considered to make 7883 up the spec string for the indicated suffix. When the compiler 7884 encounters an input file with the named suffix, it will processes 7885 the spec string in order to work out how to compile that file. 7886 For example: 7887 7888 .ZZ: 7889 z-compile -input %i 7890 7891 This says that any input file whose name ends in `.ZZ' should be 7892 passed to the program `z-compile', which should be invoked with the 7893 command-line switch `-input' and with the result of performing the 7894 `%i' substitution. (See below.) 7895 7896 As an alternative to providing a spec string, the text that 7897 follows a suffix directive can be one of the following: 7898 7899 `@LANGUAGE' 7900 This says that the suffix is an alias for a known LANGUAGE. 7901 This is similar to using the `-x' command-line switch to GCC 7902 to specify a language explicitly. For example: 7903 7904 .ZZ: 7905 @c++ 7906 7907 Says that .ZZ files are, in fact, C++ source files. 7908 7909 `#NAME' 7910 This causes an error messages saying: 7911 7912 NAME compiler not installed on this system. 7913 7914 GCC already has an extensive list of suffixes built into it. This 7915 directive will add an entry to the end of the list of suffixes, but 7916 since the list is searched from the end backwards, it is 7917 effectively possible to override earlier entries using this 7918 technique. 7919 7920 7921 GCC has the following spec strings built into it. Spec files can 7922 override these strings or create their own. Note that individual 7923 targets can also add their own spec strings to this list. 7924 7925 asm Options to pass to the assembler 7926 asm_final Options to pass to the assembler post-processor 7927 cpp Options to pass to the C preprocessor 7928 cc1 Options to pass to the C compiler 7929 cc1plus Options to pass to the C++ compiler 7930 endfile Object files to include at the end of the link 7931 link Options to pass to the linker 7932 lib Libraries to include on the command line to the linker 7933 libgcc Decides which GCC support library to pass to the linker 7934 linker Sets the name of the linker 7935 predefines Defines to be passed to the C preprocessor 7936 signed_char Defines to pass to CPP to say whether `char' is signed 7937 by default 7938 startfile Object files to include at the start of the link 7939 7940 Here is a small example of a spec file: 7941 7942 %rename lib old_lib 7943 7944 *lib: 7945 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 7946 7947 This example renames the spec called `lib' to `old_lib' and then 7948 overrides the previous definition of `lib' with a new one. The new 7949 definition adds in some extra command-line options before including the 7950 text of the old definition. 7951 7952 "Spec strings" are a list of command-line options to be passed to their 7953 corresponding program. In addition, the spec strings can contain 7954 `%'-prefixed sequences to substitute variable text or to conditionally 7955 insert text into the command line. Using these constructs it is 7956 possible to generate quite complex command lines. 7957 7958 Here is a table of all defined `%'-sequences for spec strings. Note 7959 that spaces are not generated automatically around the results of 7960 expanding these sequences. Therefore you can concatenate them together 7961 or combine them with constant text in a single argument. 7962 7963 `%%' 7964 Substitute one `%' into the program name or argument. 7965 7966 `%i' 7967 Substitute the name of the input file being processed. 7968 7969 `%b' 7970 Substitute the basename of the input file being processed. This 7971 is the substring up to (and not including) the last period and not 7972 including the directory. 7973 7974 `%B' 7975 This is the same as `%b', but include the file suffix (text after 7976 the last period). 7977 7978 `%d' 7979 Marks the argument containing or following the `%d' as a temporary 7980 file name, so that that file will be deleted if GCC exits 7981 successfully. Unlike `%g', this contributes no text to the 7982 argument. 7983 7984 `%gSUFFIX' 7985 Substitute a file name that has suffix SUFFIX and is chosen once 7986 per compilation, and mark the argument in the same way as `%d'. 7987 To reduce exposure to denial-of-service attacks, the file name is 7988 now chosen in a way that is hard to predict even when previously 7989 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 7990 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 7991 matches the regexp `[.A-Za-z]*' or the special string `%O', which 7992 is treated exactly as if `%O' had been preprocessed. Previously, 7993 `%g' was simply substituted with a file name chosen once per 7994 compilation, without regard to any appended suffix (which was 7995 therefore treated just like ordinary text), making such attacks 7996 more likely to succeed. 7997 7998 `%uSUFFIX' 7999 Like `%g', but generates a new temporary file name even if 8000 `%uSUFFIX' was already seen. 8001 8002 `%USUFFIX' 8003 Substitutes the last file name generated with `%uSUFFIX', 8004 generating a new one if there is no such last file name. In the 8005 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 8006 they don't share the same suffix _space_, so `%g.s ... %U.s ... 8007 %g.s ... %U.s' would involve the generation of two distinct file 8008 names, one for each `%g.s' and another for each `%U.s'. 8009 Previously, `%U' was simply substituted with a file name chosen 8010 for the previous `%u', without regard to any appended suffix. 8011 8012 `%jSUFFIX' 8013 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 8014 writable, and if save-temps is off; otherwise, substitute the name 8015 of a temporary file, just like `%u'. This temporary file is not 8016 meant for communication between processes, but rather as a junk 8017 disposal mechanism. 8018 8019 `%|SUFFIX' 8020 `%mSUFFIX' 8021 Like `%g', except if `-pipe' is in effect. In that case `%|' 8022 substitutes a single dash and `%m' substitutes nothing at all. 8023 These are the two most common ways to instruct a program that it 8024 should read from standard input or write to standard output. If 8025 you need something more elaborate you can use an `%{pipe:`X'}' 8026 construct: see for example `f/lang-specs.h'. 8027 8028 `%.SUFFIX' 8029 Substitutes .SUFFIX for the suffixes of a matched switch's args 8030 when it is subsequently output with `%*'. SUFFIX is terminated by 8031 the next space or %. 8032 8033 `%w' 8034 Marks the argument containing or following the `%w' as the 8035 designated output file of this compilation. This puts the argument 8036 into the sequence of arguments that `%o' will substitute later. 8037 8038 `%o' 8039 Substitutes the names of all the output files, with spaces 8040 automatically placed around them. You should write spaces around 8041 the `%o' as well or the results are undefined. `%o' is for use in 8042 the specs for running the linker. Input files whose names have no 8043 recognized suffix are not compiled at all, but they are included 8044 among the output files, so they will be linked. 8045 8046 `%O' 8047 Substitutes the suffix for object files. Note that this is 8048 handled specially when it immediately follows `%g, %u, or %U', 8049 because of the need for those to form complete file names. The 8050 handling is such that `%O' is treated exactly as if it had already 8051 been substituted, except that `%g, %u, and %U' do not currently 8052 support additional SUFFIX characters following `%O' as they would 8053 following, for example, `.o'. 8054 8055 `%p' 8056 Substitutes the standard macro predefinitions for the current 8057 target machine. Use this when running `cpp'. 8058 8059 `%P' 8060 Like `%p', but puts `__' before and after the name of each 8061 predefined macro, except for macros that start with `__' or with 8062 `_L', where L is an uppercase letter. This is for ISO C. 8063 8064 `%I' 8065 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 8066 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 8067 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 8068 necessary. 8069 8070 `%s' 8071 Current argument is the name of a library or startup file of some 8072 sort. Search for that file in a standard list of directories and 8073 substitute the full name found. 8074 8075 `%eSTR' 8076 Print STR as an error message. STR is terminated by a newline. 8077 Use this when inconsistent options are detected. 8078 8079 `%(NAME)' 8080 Substitute the contents of spec string NAME at this point. 8081 8082 `%[NAME]' 8083 Like `%(...)' but put `__' around `-D' arguments. 8084 8085 `%x{OPTION}' 8086 Accumulate an option for `%X'. 8087 8088 `%X' 8089 Output the accumulated linker options specified by `-Wl' or a `%x' 8090 spec string. 8091 8092 `%Y' 8093 Output the accumulated assembler options specified by `-Wa'. 8094 8095 `%Z' 8096 Output the accumulated preprocessor options specified by `-Wp'. 8097 8098 `%a' 8099 Process the `asm' spec. This is used to compute the switches to 8100 be passed to the assembler. 8101 8102 `%A' 8103 Process the `asm_final' spec. This is a spec string for passing 8104 switches to an assembler post-processor, if such a program is 8105 needed. 8106 8107 `%l' 8108 Process the `link' spec. This is the spec for computing the 8109 command line passed to the linker. Typically it will make use of 8110 the `%L %G %S %D and %E' sequences. 8111 8112 `%D' 8113 Dump out a `-L' option for each directory that GCC believes might 8114 contain startup files. If the target supports multilibs then the 8115 current multilib directory will be prepended to each of these 8116 paths. 8117 8118 `%L' 8119 Process the `lib' spec. This is a spec string for deciding which 8120 libraries should be included on the command line to the linker. 8121 8122 `%G' 8123 Process the `libgcc' spec. This is a spec string for deciding 8124 which GCC support library should be included on the command line 8125 to the linker. 8126 8127 `%S' 8128 Process the `startfile' spec. This is a spec for deciding which 8129 object files should be the first ones passed to the linker. 8130 Typically this might be a file named `crt0.o'. 8131 8132 `%E' 8133 Process the `endfile' spec. This is a spec string that specifies 8134 the last object files that will be passed to the linker. 8135 8136 `%C' 8137 Process the `cpp' spec. This is used to construct the arguments 8138 to be passed to the C preprocessor. 8139 8140 `%1' 8141 Process the `cc1' spec. This is used to construct the options to 8142 be passed to the actual C compiler (`cc1'). 8143 8144 `%2' 8145 Process the `cc1plus' spec. This is used to construct the options 8146 to be passed to the actual C++ compiler (`cc1plus'). 8147 8148 `%*' 8149 Substitute the variable part of a matched option. See below. 8150 Note that each comma in the substituted string is replaced by a 8151 single space. 8152 8153 `%<`S'' 8154 Remove all occurrences of `-S' from the command line. Note--this 8155 command is position dependent. `%' commands in the spec string 8156 before this one will see `-S', `%' commands in the spec string 8157 after this one will not. 8158 8159 `%:FUNCTION(ARGS)' 8160 Call the named function FUNCTION, passing it ARGS. ARGS is first 8161 processed as a nested spec string, then split into an argument 8162 vector in the usual fashion. The function returns a string which 8163 is processed as if it had appeared literally as part of the 8164 current spec. 8165 8166 The following built-in spec functions are provided: 8167 8168 ``getenv'' 8169 The `getenv' spec function takes two arguments: an environment 8170 variable name and a string. If the environment variable is 8171 not defined, a fatal error is issued. Otherwise, the return 8172 value is the value of the environment variable concatenated 8173 with the string. For example, if `TOPDIR' is defined as 8174 `/path/to/top', then: 8175 8176 %:getenv(TOPDIR /include) 8177 8178 expands to `/path/to/top/include'. 8179 8180 ``if-exists'' 8181 The `if-exists' spec function takes one argument, an absolute 8182 pathname to a file. If the file exists, `if-exists' returns 8183 the pathname. Here is a small example of its usage: 8184 8185 *startfile: 8186 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 8187 8188 ``if-exists-else'' 8189 The `if-exists-else' spec function is similar to the 8190 `if-exists' spec function, except that it takes two 8191 arguments. The first argument is an absolute pathname to a 8192 file. If the file exists, `if-exists-else' returns the 8193 pathname. If it does not exist, it returns the second 8194 argument. This way, `if-exists-else' can be used to select 8195 one file or another, based on the existence of the first. 8196 Here is a small example of its usage: 8197 8198 *startfile: 8199 crt0%O%s %:if-exists(crti%O%s) \ 8200 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 8201 8202 ``replace-outfile'' 8203 The `replace-outfile' spec function takes two arguments. It 8204 looks for the first argument in the outfiles array and 8205 replaces it with the second argument. Here is a small 8206 example of its usage: 8207 8208 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 8209 8210 ``print-asm-header'' 8211 The `print-asm-header' function takes no arguments and simply 8212 prints a banner like: 8213 8214 Assembler options 8215 ================= 8216 8217 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 8218 8219 It is used to separate compiler options from assembler options 8220 in the `--target-help' output. 8221 8222 `%{`S'}' 8223 Substitutes the `-S' switch, if that switch was given to GCC. If 8224 that switch was not specified, this substitutes nothing. Note that 8225 the leading dash is omitted when specifying this option, and it is 8226 automatically inserted if the substitution is performed. Thus the 8227 spec string `%{foo}' would match the command-line option `-foo' 8228 and would output the command line option `-foo'. 8229 8230 `%W{`S'}' 8231 Like %{`S'} but mark last argument supplied within as a file to be 8232 deleted on failure. 8233 8234 `%{`S'*}' 8235 Substitutes all the switches specified to GCC whose names start 8236 with `-S', but which also take an argument. This is used for 8237 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 8238 being one switch whose names starts with `o'. %{o*} would 8239 substitute this text, including the space. Thus two arguments 8240 would be generated. 8241 8242 `%{`S'*&`T'*}' 8243 Like %{`S'*}, but preserve order of `S' and `T' options (the order 8244 of `S' and `T' in the spec is not significant). There can be any 8245 number of ampersand-separated variables; for each the wild card is 8246 optional. Useful for CPP as `%{D*&U*&A*}'. 8247 8248 `%{`S':`X'}' 8249 Substitutes `X', if the `-S' switch was given to GCC. 8250 8251 `%{!`S':`X'}' 8252 Substitutes `X', if the `-S' switch was _not_ given to GCC. 8253 8254 `%{`S'*:`X'}' 8255 Substitutes `X' if one or more switches whose names start with 8256 `-S' are specified to GCC. Normally `X' is substituted only once, 8257 no matter how many such switches appeared. However, if `%*' 8258 appears somewhere in `X', then `X' will be substituted once for 8259 each matching switch, with the `%*' replaced by the part of that 8260 switch that matched the `*'. 8261 8262 `%{.`S':`X'}' 8263 Substitutes `X', if processing a file with suffix `S'. 8264 8265 `%{!.`S':`X'}' 8266 Substitutes `X', if _not_ processing a file with suffix `S'. 8267 8268 `%{,`S':`X'}' 8269 Substitutes `X', if processing a file for language `S'. 8270 8271 `%{!,`S':`X'}' 8272 Substitutes `X', if not processing a file for language `S'. 8273 8274 `%{`S'|`P':`X'}' 8275 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 8276 be combined with `!', `.', `,', and `*' sequences as well, 8277 although they have a stronger binding than the `|'. If `%*' 8278 appears in `X', all of the alternatives must be starred, and only 8279 the first matching alternative is substituted. 8280 8281 For example, a spec string like this: 8282 8283 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 8284 8285 will output the following command-line options from the following 8286 input command-line options: 8287 8288 fred.c -foo -baz 8289 jim.d -bar -boggle 8290 -d fred.c -foo -baz -boggle 8291 -d jim.d -bar -baz -boggle 8292 8293 `%{S:X; T:Y; :D}' 8294 If `S' was given to GCC, substitutes `X'; else if `T' was given to 8295 GCC, substitutes `Y'; else substitutes `D'. There can be as many 8296 clauses as you need. This may be combined with `.', `,', `!', 8297 `|', and `*' as needed. 8298 8299 8300 The conditional text `X' in a %{`S':`X'} or similar construct may 8301 contain other nested `%' constructs or spaces, or even newlines. They 8302 are processed as usual, as described above. Trailing white space in 8303 `X' is ignored. White space may also appear anywhere on the left side 8304 of the colon in these constructs, except between `.' or `*' and the 8305 corresponding word. 8306 8307 The `-O', `-f', `-m', and `-W' switches are handled specifically in 8308 these constructs. If another value of `-O' or the negated form of a 8309 `-f', `-m', or `-W' switch is found later in the command line, the 8310 earlier switch value is ignored, except with {`S'*} where `S' is just 8311 one letter, which passes all matching options. 8312 8313 The character `|' at the beginning of the predicate text is used to 8314 indicate that a command should be piped to the following command, but 8315 only if `-pipe' is specified. 8316 8317 It is built into GCC which switches take arguments and which do not. 8318 (You might think it would be useful to generalize this to allow each 8319 compiler's spec to say which switches take arguments. But this cannot 8320 be done in a consistent fashion. GCC cannot even decide which input 8321 files have been specified without knowing which switches take arguments, 8322 and it must know which input files to compile in order to tell which 8323 compilers to run). 8324 8325 GCC also knows implicitly that arguments starting in `-l' are to be 8326 treated as compiler output files, and passed to the linker in their 8327 proper position among the other output files. 8328 8329 8330 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 8331 8332 3.16 Specifying Target Machine and Compiler Version 8333 =================================================== 8334 8335 The usual way to run GCC is to run the executable called `gcc', or 8336 `<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to 8337 run a version other than the one that was installed last. Sometimes 8338 this is inconvenient, so GCC provides options that will switch to 8339 another cross-compiler or version. 8340 8341 `-b MACHINE' 8342 The argument MACHINE specifies the target machine for compilation. 8343 8344 The value to use for MACHINE is the same as was specified as the 8345 machine type when configuring GCC as a cross-compiler. For 8346 example, if a cross-compiler was configured with `configure 8347 arm-elf', meaning to compile for an arm processor with elf 8348 binaries, then you would specify `-b arm-elf' to run that cross 8349 compiler. Because there are other options beginning with `-b', the 8350 configuration must contain a hyphen. 8351 8352 `-V VERSION' 8353 The argument VERSION specifies which version of GCC to run. This 8354 is useful when multiple versions are installed. For example, 8355 VERSION might be `4.0', meaning to run GCC version 4.0. 8356 8357 The `-V' and `-b' options work by running the 8358 `<machine>-gcc-<version>' executable, so there's no real reason to use 8359 them if you can just run that directly. 8360 8361 8362 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 8363 8364 3.17 Hardware Models and Configurations 8365 ======================================= 8366 8367 Earlier we discussed the standard option `-b' which chooses among 8368 different installed compilers for completely different target machines, 8369 such as VAX vs. 68000 vs. 80386. 8370 8371 In addition, each of these target machine types can have its own 8372 special options, starting with `-m', to choose among various hardware 8373 models or configurations--for example, 68010 vs 68020, floating 8374 coprocessor or none. A single installed version of the compiler can 8375 compile for any model or configuration, according to the options 8376 specified. 8377 8378 Some configurations of the compiler also support additional special 8379 options, usually for compatibility with other compilers on the same 8380 platform. 8381 8382 * Menu: 8383 8384 * ARC Options:: 8385 * ARM Options:: 8386 * AVR Options:: 8387 * Blackfin Options:: 8388 * CRIS Options:: 8389 * CRX Options:: 8390 * Darwin Options:: 8391 * DEC Alpha Options:: 8392 * DEC Alpha/VMS Options:: 8393 * FRV Options:: 8394 * GNU/Linux Options:: 8395 * H8/300 Options:: 8396 * HPPA Options:: 8397 * i386 and x86-64 Options:: 8398 * IA-64 Options:: 8399 * M32C Options:: 8400 * M32R/D Options:: 8401 * M680x0 Options:: 8402 * M68hc1x Options:: 8403 * MCore Options:: 8404 * MIPS Options:: 8405 * MMIX Options:: 8406 * MN10300 Options:: 8407 * MT Options:: 8408 * PDP-11 Options:: 8409 * PowerPC Options:: 8410 * RS/6000 and PowerPC Options:: 8411 * S/390 and zSeries Options:: 8412 * Score Options:: 8413 * SH Options:: 8414 * SPARC Options:: 8415 * SPU Options:: 8416 * System V Options:: 8417 * V850 Options:: 8418 * VAX Options:: 8419 * VxWorks Options:: 8420 * x86-64 Options:: 8421 * Xstormy16 Options:: 8422 * Xtensa Options:: 8423 * zSeries Options:: 8424 8425 8426 File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 8427 8428 3.17.1 ARC Options 8429 ------------------ 8430 8431 These options are defined for ARC implementations: 8432 8433 `-EL' 8434 Compile code for little endian mode. This is the default. 8435 8436 `-EB' 8437 Compile code for big endian mode. 8438 8439 `-mmangle-cpu' 8440 Prepend the name of the cpu to all public symbol names. In 8441 multiple-processor systems, there are many ARC variants with 8442 different instruction and register set characteristics. This flag 8443 prevents code compiled for one cpu to be linked with code compiled 8444 for another. No facility exists for handling variants that are 8445 "almost identical". This is an all or nothing option. 8446 8447 `-mcpu=CPU' 8448 Compile code for ARC variant CPU. Which variants are supported 8449 depend on the configuration. All variants support `-mcpu=base', 8450 this is the default. 8451 8452 `-mtext=TEXT-SECTION' 8453 `-mdata=DATA-SECTION' 8454 `-mrodata=READONLY-DATA-SECTION' 8455 Put functions, data, and readonly data in TEXT-SECTION, 8456 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 8457 This can be overridden with the `section' attribute. *Note 8458 Variable Attributes::. 8459 8460 8461 8462 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 8463 8464 3.17.2 ARM Options 8465 ------------------ 8466 8467 These `-m' options are defined for Advanced RISC Machines (ARM) 8468 architectures: 8469 8470 `-mabi=NAME' 8471 Generate code for the specified ABI. Permissible values are: 8472 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 8473 8474 `-mapcs-frame' 8475 Generate a stack frame that is compliant with the ARM Procedure 8476 Call Standard for all functions, even if this is not strictly 8477 necessary for correct execution of the code. Specifying 8478 `-fomit-frame-pointer' with this option will cause the stack 8479 frames not to be generated for leaf functions. The default is 8480 `-mno-apcs-frame'. 8481 8482 `-mapcs' 8483 This is a synonym for `-mapcs-frame'. 8484 8485 `-mthumb-interwork' 8486 Generate code which supports calling between the ARM and Thumb 8487 instruction sets. Without this option the two instruction sets 8488 cannot be reliably used inside one program. The default is 8489 `-mno-thumb-interwork', since slightly larger code is generated 8490 when `-mthumb-interwork' is specified. 8491 8492 `-mno-sched-prolog' 8493 Prevent the reordering of instructions in the function prolog, or 8494 the merging of those instruction with the instructions in the 8495 function's body. This means that all functions will start with a 8496 recognizable set of instructions (or in fact one of a choice from 8497 a small set of different function prologues), and this information 8498 can be used to locate the start if functions inside an executable 8499 piece of code. The default is `-msched-prolog'. 8500 8501 `-mhard-float' 8502 Generate output containing floating point instructions. This is 8503 the default. 8504 8505 `-msoft-float' 8506 Generate output containing library calls for floating point. 8507 *Warning:* the requisite libraries are not available for all ARM 8508 targets. Normally the facilities of the machine's usual C 8509 compiler are used, but this cannot be done directly in 8510 cross-compilation. You must make your own arrangements to provide 8511 suitable library functions for cross-compilation. 8512 8513 `-msoft-float' changes the calling convention in the output file; 8514 therefore, it is only useful if you compile _all_ of a program with 8515 this option. In particular, you need to compile `libgcc.a', the 8516 library that comes with GCC, with `-msoft-float' in order for this 8517 to work. 8518 8519 `-mfloat-abi=NAME' 8520 Specifies which ABI to use for floating point values. Permissible 8521 values are: `soft', `softfp' and `hard'. 8522 8523 `soft' and `hard' are equivalent to `-msoft-float' and 8524 `-mhard-float' respectively. `softfp' allows the generation of 8525 floating point instructions, but still uses the soft-float calling 8526 conventions. 8527 8528 `-mlittle-endian' 8529 Generate code for a processor running in little-endian mode. This 8530 is the default for all standard configurations. 8531 8532 `-mbig-endian' 8533 Generate code for a processor running in big-endian mode; the 8534 default is to compile code for a little-endian processor. 8535 8536 `-mwords-little-endian' 8537 This option only applies when generating code for big-endian 8538 processors. Generate code for a little-endian word order but a 8539 big-endian byte order. That is, a byte order of the form 8540 `32107654'. Note: this option should only be used if you require 8541 compatibility with code for big-endian ARM processors generated by 8542 versions of the compiler prior to 2.8. 8543 8544 `-mcpu=NAME' 8545 This specifies the name of the target ARM processor. GCC uses 8546 this name to determine what kind of instructions it can emit when 8547 generating assembly code. Permissible names are: `arm2', `arm250', 8548 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 8549 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 8550 `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe', 8551 `arm7tdmi', `arm7tdmi-s', `arm8', `strongarm', `strongarm110', 8552 `strongarm1100', `arm8', `arm810', `arm9', `arm9e', `arm920', 8553 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 8554 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 8555 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 8556 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s', 8557 `arm1176jz-s', `arm1176jzf-s', `cortex-a8', `cortex-r4', 8558 `cortex-m3', `xscale', `iwmmxt', `ep9312'. 8559 8560 `-mtune=NAME' 8561 This option is very similar to the `-mcpu=' option, except that 8562 instead of specifying the actual target processor type, and hence 8563 restricting which instructions can be used, it specifies that GCC 8564 should tune the performance of the code as if the target were of 8565 the type specified in this option, but still choosing the 8566 instructions that it will generate based on the cpu specified by a 8567 `-mcpu=' option. For some ARM implementations better performance 8568 can be obtained by using this option. 8569 8570 `-march=NAME' 8571 This specifies the name of the target ARM architecture. GCC uses 8572 this name to determine what kind of instructions it can emit when 8573 generating assembly code. This option can be used in conjunction 8574 with or instead of the `-mcpu=' option. Permissible names are: 8575 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 8576 `armv5t', `armv5te', `armv6', `armv6j', `armv6t2', `armv6z', 8577 `armv6zk', `armv7', `armv7-a', `armv7-r', `armv7-m', `iwmmxt', 8578 `ep9312'. 8579 8580 `-mfpu=NAME' 8581 `-mfpe=NUMBER' 8582 `-mfp=NUMBER' 8583 This specifies what floating point hardware (or hardware 8584 emulation) is available on the target. Permissible names are: 8585 `fpa', `fpe2', `fpe3', `maverick', `vfp'. `-mfp' and `-mfpe' are 8586 synonyms for `-mfpu'=`fpe'NUMBER, for compatibility with older 8587 versions of GCC. 8588 8589 If `-msoft-float' is specified this specifies the format of 8590 floating point values. 8591 8592 `-mstructure-size-boundary=N' 8593 The size of all structures and unions will be rounded up to a 8594 multiple of the number of bits set by this option. Permissible 8595 values are 8, 32 and 64. The default value varies for different 8596 toolchains. For the COFF targeted toolchain the default value is 8597 8. A value of 64 is only allowed if the underlying ABI supports 8598 it. 8599 8600 Specifying the larger number can produce faster, more efficient 8601 code, but can also increase the size of the program. Different 8602 values are potentially incompatible. Code compiled with one value 8603 cannot necessarily expect to work with code or libraries compiled 8604 with another value, if they exchange information using structures 8605 or unions. 8606 8607 `-mabort-on-noreturn' 8608 Generate a call to the function `abort' at the end of a `noreturn' 8609 function. It will be executed if the function tries to return. 8610 8611 `-mlong-calls' 8612 `-mno-long-calls' 8613 Tells the compiler to perform function calls by first loading the 8614 address of the function into a register and then performing a 8615 subroutine call on this register. This switch is needed if the 8616 target function will lie outside of the 64 megabyte addressing 8617 range of the offset based version of subroutine call instruction. 8618 8619 Even if this switch is enabled, not all function calls will be 8620 turned into long calls. The heuristic is that static functions, 8621 functions which have the `short-call' attribute, functions that 8622 are inside the scope of a `#pragma no_long_calls' directive and 8623 functions whose definitions have already been compiled within the 8624 current compilation unit, will not be turned into long calls. The 8625 exception to this rule is that weak function definitions, 8626 functions with the `long-call' attribute or the `section' 8627 attribute, and functions that are within the scope of a `#pragma 8628 long_calls' directive, will always be turned into long calls. 8629 8630 This feature is not enabled by default. Specifying 8631 `-mno-long-calls' will restore the default behavior, as will 8632 placing the function calls within the scope of a `#pragma 8633 long_calls_off' directive. Note these switches have no effect on 8634 how the compiler generates code to handle function calls via 8635 function pointers. 8636 8637 `-mnop-fun-dllimport' 8638 Disable support for the `dllimport' attribute. 8639 8640 `-msingle-pic-base' 8641 Treat the register used for PIC addressing as read-only, rather 8642 than loading it in the prologue for each function. The run-time 8643 system is responsible for initializing this register with an 8644 appropriate value before execution begins. 8645 8646 `-mpic-register=REG' 8647 Specify the register to be used for PIC addressing. The default 8648 is R10 unless stack-checking is enabled, when R9 is used. 8649 8650 `-mcirrus-fix-invalid-insns' 8651 Insert NOPs into the instruction stream to in order to work around 8652 problems with invalid Maverick instruction combinations. This 8653 option is only valid if the `-mcpu=ep9312' option has been used to 8654 enable generation of instructions for the Cirrus Maverick floating 8655 point co-processor. This option is not enabled by default, since 8656 the problem is only present in older Maverick implementations. 8657 The default can be re-enabled by use of the 8658 `-mno-cirrus-fix-invalid-insns' switch. 8659 8660 `-mpoke-function-name' 8661 Write the name of each function into the text section, directly 8662 preceding the function prologue. The generated code is similar to 8663 this: 8664 8665 t0 8666 .ascii "arm_poke_function_name", 0 8667 .align 8668 t1 8669 .word 0xff000000 + (t1 - t0) 8670 arm_poke_function_name 8671 mov ip, sp 8672 stmfd sp!, {fp, ip, lr, pc} 8673 sub fp, ip, #4 8674 8675 When performing a stack backtrace, code can inspect the value of 8676 `pc' stored at `fp + 0'. If the trace function then looks at 8677 location `pc - 12' and the top 8 bits are set, then we know that 8678 there is a function name embedded immediately preceding this 8679 location and has length `((pc[-3]) & 0xff000000)'. 8680 8681 `-mthumb' 8682 Generate code for the Thumb instruction set. The default is to 8683 use the 32-bit ARM instruction set. This option automatically 8684 enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 8685 instructions based on the `-mcpu=NAME' and `-march=NAME' options. 8686 8687 `-mtpcs-frame' 8688 Generate a stack frame that is compliant with the Thumb Procedure 8689 Call Standard for all non-leaf functions. (A leaf function is one 8690 that does not call any other functions.) The default is 8691 `-mno-tpcs-frame'. 8692 8693 `-mtpcs-leaf-frame' 8694 Generate a stack frame that is compliant with the Thumb Procedure 8695 Call Standard for all leaf functions. (A leaf function is one 8696 that does not call any other functions.) The default is 8697 `-mno-apcs-leaf-frame'. 8698 8699 `-mcallee-super-interworking' 8700 Gives all externally visible functions in the file being compiled 8701 an ARM instruction set header which switches to Thumb mode before 8702 executing the rest of the function. This allows these functions 8703 to be called from non-interworking code. 8704 8705 `-mcaller-super-interworking' 8706 Allows calls via function pointers (including virtual functions) to 8707 execute correctly regardless of whether the target code has been 8708 compiled for interworking or not. There is a small overhead in 8709 the cost of executing a function pointer if this option is enabled. 8710 8711 `-mtp=NAME' 8712 Specify the access model for the thread local storage pointer. 8713 The valid models are `soft', which generates calls to 8714 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 8715 `cp15' directly (supported in the arm6k architecture), and `auto', 8716 which uses the best available method for the selected processor. 8717 The default setting is `auto'. 8718 8719 `-mandroid' 8720 Enable Android specific compilier options. 8721 8722 If this option is used, a preprocessor macro `__ANDROID__' is 8723 defined and has the value 1 during compilation. The option also 8724 implies C/C++ options `-fno-exceptions' `-fpic' `-mthumb-interwork' 8725 `-fno-short-enums' and C++ option `-fno-rtti'. These implied 8726 options can be overridden. For example RTTI in C++ code can still 8727 be enabled with -frtti even when -mandroid is also used. 8728 8729 Linking options depend on whether a static executable, a dynamic 8730 executable or a shared library is built. When `-static' is given, 8731 `-mandroid' implies linking flag `-Bstatic', start file 8732 `crtbegin_static.o' and end file `crtend_android.o'. 8733 8734 When `-shared' is given, `-mandroid' implies the linking flag 8735 `-Bsymbolic' and no start and end files. 8736 8737 When none of `-static' and `-shared' is given, `-mandroid' implies 8738 linking flags `-Bdynamic -dynamic-linker /system/bin/linker', 8739 start file `crtbegin_dynamic.o' and end file `crtend_android.o'. 8740 The dynamic linker used can be overriden by another 8741 `-dynamic-linker' in command line. 8742 8743 The linking option `-ldl' is also added if `-static' is not given. 8744 8745 If more than one of `-dynamic', `-static' and `-shared' are given, 8746 behaviour of `-mandroid' is undefined. 8747 8748 8749 8750 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 8751 8752 3.17.3 AVR Options 8753 ------------------ 8754 8755 These options are defined for AVR implementations: 8756 8757 `-mmcu=MCU' 8758 Specify ATMEL AVR instruction set or MCU type. 8759 8760 Instruction set avr1 is for the minimal AVR core, not supported by 8761 the C compiler, only for assembler programs (MCU types: at90s1200, 8762 attiny10, attiny11, attiny12, attiny15, attiny28). 8763 8764 Instruction set avr2 (default) is for the classic AVR core with up 8765 to 8K program memory space (MCU types: at90s2313, at90s2323, 8766 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 8767 at90s8515, at90c8534, at90s8535). 8768 8769 Instruction set avr3 is for the classic AVR core with up to 128K 8770 program memory space (MCU types: atmega103, atmega603, at43usb320, 8771 at76c711). 8772 8773 Instruction set avr4 is for the enhanced AVR core with up to 8K 8774 program memory space (MCU types: atmega8, atmega83, atmega85). 8775 8776 Instruction set avr5 is for the enhanced AVR core with up to 128K 8777 program memory space (MCU types: atmega16, atmega161, atmega163, 8778 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 8779 8780 `-msize' 8781 Output instruction sizes to the asm file. 8782 8783 `-minit-stack=N' 8784 Specify the initial stack address, which may be a symbol or 8785 numeric value, `__stack' is the default. 8786 8787 `-mno-interrupts' 8788 Generated code is not compatible with hardware interrupts. Code 8789 size will be smaller. 8790 8791 `-mcall-prologues' 8792 Functions prologues/epilogues expanded as call to appropriate 8793 subroutines. Code size will be smaller. 8794 8795 `-mno-tablejump' 8796 Do not generate tablejump insns which sometimes increase code size. 8797 8798 `-mtiny-stack' 8799 Change only the low 8 bits of the stack pointer. 8800 8801 `-mint8' 8802 Assume int to be 8 bit integer. This affects the sizes of all 8803 types: A char will be 1 byte, an int will be 1 byte, an long will 8804 be 2 bytes and long long will be 4 bytes. Please note that this 8805 option does not comply to the C standards, but it will provide you 8806 with smaller code size. 8807 8808 8809 File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 8810 8811 3.17.4 Blackfin Options 8812 ----------------------- 8813 8814 `-mcpu=CPU[-SIREVISION]' 8815 Specifies the name of the target Blackfin processor. Currently, 8816 CPU can be one of `bf522', `bf523', `bf524', `bf525', `bf526', 8817 `bf527', `bf531', `bf532', `bf533', `bf534', `bf536', `bf537', 8818 `bf538', `bf539', `bf542', `bf544', `bf547', `bf548', `bf549', 8819 `bf561'. The optional SIREVISION specifies the silicon revision 8820 of the target Blackfin processor. Any workarounds available for 8821 the targeted silicon revision will be enabled. If SIREVISION is 8822 `none', no workarounds are enabled. If SIREVISION is `any', all 8823 workarounds for the targeted processor will be enabled. The 8824 `__SILICON_REVISION__' macro is defined to two hexadecimal digits 8825 representing the major and minor numbers in the silicon revision. 8826 If SIREVISION is `none', the `__SILICON_REVISION__' is not 8827 defined. If SIREVISION is `any', the `__SILICON_REVISION__' is 8828 defined to be `0xffff'. If this optional SIREVISION is not used, 8829 GCC assumes the latest known silicon revision of the targeted 8830 Blackfin processor. 8831 8832 Support for `bf561' is incomplete. For `bf561', Only the 8833 processor macro is defined. Without this option, `bf532' is used 8834 as the processor by default. The corresponding predefined 8835 processor macros for CPU is to be defined. And for `bfin-elf' 8836 toolchain, this causes the hardware BSP provided by libgloss to be 8837 linked in if `-msim' is not given. 8838 8839 `-msim' 8840 Specifies that the program will be run on the simulator. This 8841 causes the simulator BSP provided by libgloss to be linked in. 8842 This option has effect only for `bfin-elf' toolchain. Certain 8843 other options, such as `-mid-shared-library' and `-mfdpic', imply 8844 `-msim'. 8845 8846 `-momit-leaf-frame-pointer' 8847 Don't keep the frame pointer in a register for leaf functions. 8848 This avoids the instructions to save, set up and restore frame 8849 pointers and makes an extra register available in leaf functions. 8850 The option `-fomit-frame-pointer' removes the frame pointer for 8851 all functions which might make debugging harder. 8852 8853 `-mspecld-anomaly' 8854 When enabled, the compiler will ensure that the generated code 8855 does not contain speculative loads after jump instructions. If 8856 this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 8857 8858 `-mno-specld-anomaly' 8859 Don't generate extra code to prevent speculative loads from 8860 occurring. 8861 8862 `-mcsync-anomaly' 8863 When enabled, the compiler will ensure that the generated code 8864 does not contain CSYNC or SSYNC instructions too soon after 8865 conditional branches. If this option is used, 8866 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 8867 8868 `-mno-csync-anomaly' 8869 Don't generate extra code to prevent CSYNC or SSYNC instructions 8870 from occurring too soon after a conditional branch. 8871 8872 `-mlow-64k' 8873 When enabled, the compiler is free to take advantage of the 8874 knowledge that the entire program fits into the low 64k of memory. 8875 8876 `-mno-low-64k' 8877 Assume that the program is arbitrarily large. This is the default. 8878 8879 `-mstack-check-l1' 8880 Do stack checking using information placed into L1 scratchpad 8881 memory by the uClinux kernel. 8882 8883 `-mid-shared-library' 8884 Generate code that supports shared libraries via the library ID 8885 method. This allows for execute in place and shared libraries in 8886 an environment without virtual memory management. This option 8887 implies `-fPIC'. With a `bfin-elf' target, this option implies 8888 `-msim'. 8889 8890 `-mno-id-shared-library' 8891 Generate code that doesn't assume ID based shared libraries are 8892 being used. This is the default. 8893 8894 `-mleaf-id-shared-library' 8895 Generate code that supports shared libraries via the library ID 8896 method, but assumes that this library or executable won't link 8897 against any other ID shared libraries. That allows the compiler 8898 to use faster code for jumps and calls. 8899 8900 `-mno-leaf-id-shared-library' 8901 Do not assume that the code being compiled won't link against any 8902 ID shared libraries. Slower code will be generated for jump and 8903 call insns. 8904 8905 `-mshared-library-id=n' 8906 Specified the identification number of the ID based shared library 8907 being compiled. Specifying a value of 0 will generate more 8908 compact code, specifying other values will force the allocation of 8909 that number to the current library but is no more space or time 8910 efficient than omitting this option. 8911 8912 `-msep-data' 8913 Generate code that allows the data segment to be located in a 8914 different area of memory from the text segment. This allows for 8915 execute in place in an environment without virtual memory 8916 management by eliminating relocations against the text section. 8917 8918 `-mno-sep-data' 8919 Generate code that assumes that the data segment follows the text 8920 segment. This is the default. 8921 8922 `-mlong-calls' 8923 `-mno-long-calls' 8924 Tells the compiler to perform function calls by first loading the 8925 address of the function into a register and then performing a 8926 subroutine call on this register. This switch is needed if the 8927 target function will lie outside of the 24 bit addressing range of 8928 the offset based version of subroutine call instruction. 8929 8930 This feature is not enabled by default. Specifying 8931 `-mno-long-calls' will restore the default behavior. Note these 8932 switches have no effect on how the compiler generates code to 8933 handle function calls via function pointers. 8934 8935 `-mfast-fp' 8936 Link with the fast floating-point library. This library relaxes 8937 some of the IEEE floating-point standard's rules for checking 8938 inputs against Not-a-Number (NAN), in the interest of performance. 8939 8940 `-minline-plt' 8941 Enable inlining of PLT entries in function calls to functions that 8942 are not known to bind locally. It has no effect without `-mfdpic'. 8943 8944 8945 File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 8946 8947 3.17.5 CRIS Options 8948 ------------------- 8949 8950 These options are defined specifically for the CRIS ports. 8951 8952 `-march=ARCHITECTURE-TYPE' 8953 `-mcpu=ARCHITECTURE-TYPE' 8954 Generate code for the specified architecture. The choices for 8955 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 8956 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 8957 cris-axis-linux-gnu, where the default is `v10'. 8958 8959 `-mtune=ARCHITECTURE-TYPE' 8960 Tune to ARCHITECTURE-TYPE everything applicable about the generated 8961 code, except for the ABI and the set of available instructions. 8962 The choices for ARCHITECTURE-TYPE are the same as for 8963 `-march=ARCHITECTURE-TYPE'. 8964 8965 `-mmax-stack-frame=N' 8966 Warn when the stack frame of a function exceeds N bytes. 8967 8968 `-melinux-stacksize=N' 8969 Only available with the `cris-axis-aout' target. Arranges for 8970 indications in the program to the kernel loader that the stack of 8971 the program should be set to N bytes. 8972 8973 `-metrax4' 8974 `-metrax100' 8975 The options `-metrax4' and `-metrax100' are synonyms for 8976 `-march=v3' and `-march=v8' respectively. 8977 8978 `-mmul-bug-workaround' 8979 `-mno-mul-bug-workaround' 8980 Work around a bug in the `muls' and `mulu' instructions for CPU 8981 models where it applies. This option is active by default. 8982 8983 `-mpdebug' 8984 Enable CRIS-specific verbose debug-related information in the 8985 assembly code. This option also has the effect to turn off the 8986 `#NO_APP' formatted-code indicator to the assembler at the 8987 beginning of the assembly file. 8988 8989 `-mcc-init' 8990 Do not use condition-code results from previous instruction; 8991 always emit compare and test instructions before use of condition 8992 codes. 8993 8994 `-mno-side-effects' 8995 Do not emit instructions with side-effects in addressing modes 8996 other than post-increment. 8997 8998 `-mstack-align' 8999 `-mno-stack-align' 9000 `-mdata-align' 9001 `-mno-data-align' 9002 `-mconst-align' 9003 `-mno-const-align' 9004 These options (no-options) arranges (eliminate arrangements) for 9005 the stack-frame, individual data and constants to be aligned for 9006 the maximum single data access size for the chosen CPU model. The 9007 default is to arrange for 32-bit alignment. ABI details such as 9008 structure layout are not affected by these options. 9009 9010 `-m32-bit' 9011 `-m16-bit' 9012 `-m8-bit' 9013 Similar to the stack- data- and const-align options above, these 9014 options arrange for stack-frame, writable data and constants to 9015 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 9016 alignment. 9017 9018 `-mno-prologue-epilogue' 9019 `-mprologue-epilogue' 9020 With `-mno-prologue-epilogue', the normal function prologue and 9021 epilogue that sets up the stack-frame are omitted and no return 9022 instructions or return sequences are generated in the code. Use 9023 this option only together with visual inspection of the compiled 9024 code: no warnings or errors are generated when call-saved 9025 registers must be saved, or storage for local variable needs to be 9026 allocated. 9027 9028 `-mno-gotplt' 9029 `-mgotplt' 9030 With `-fpic' and `-fPIC', don't generate (do generate) instruction 9031 sequences that load addresses for functions from the PLT part of 9032 the GOT rather than (traditional on other architectures) calls to 9033 the PLT. The default is `-mgotplt'. 9034 9035 `-maout' 9036 Legacy no-op option only recognized with the cris-axis-aout target. 9037 9038 `-melf' 9039 Legacy no-op option only recognized with the cris-axis-elf and 9040 cris-axis-linux-gnu targets. 9041 9042 `-melinux' 9043 Only recognized with the cris-axis-aout target, where it selects a 9044 GNU/linux-like multilib, include files and instruction set for 9045 `-march=v8'. 9046 9047 `-mlinux' 9048 Legacy no-op option only recognized with the cris-axis-linux-gnu 9049 target. 9050 9051 `-sim' 9052 This option, recognized for the cris-axis-aout and cris-axis-elf 9053 arranges to link with input-output functions from a simulator 9054 library. Code, initialized data and zero-initialized data are 9055 allocated consecutively. 9056 9057 `-sim2' 9058 Like `-sim', but pass linker options to locate initialized data at 9059 0x40000000 and zero-initialized data at 0x80000000. 9060 9061 9062 File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 9063 9064 3.17.6 CRX Options 9065 ------------------ 9066 9067 These options are defined specifically for the CRX ports. 9068 9069 `-mmac' 9070 Enable the use of multiply-accumulate instructions. Disabled by 9071 default. 9072 9073 `-mpush-args' 9074 Push instructions will be used to pass outgoing arguments when 9075 functions are called. Enabled by default. 9076 9077 9078 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 9079 9080 3.17.7 Darwin Options 9081 --------------------- 9082 9083 These options are defined for all architectures running the Darwin 9084 operating system. 9085 9086 FSF GCC on Darwin does not create "fat" object files; it will create 9087 an object file for the single architecture that it was built to target. 9088 Apple's GCC on Darwin does create "fat" files if multiple `-arch' 9089 options are used; it does so by running the compiler or linker multiple 9090 times and joining the results together with `lipo'. 9091 9092 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 9093 is determined by the flags that specify the ISA that GCC is targetting, 9094 like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 9095 used to override this. 9096 9097 The Darwin tools vary in their behavior when presented with an ISA 9098 mismatch. The assembler, `as', will only permit instructions to be 9099 used that are valid for the subtype of the file it is generating, so 9100 you cannot put 64-bit instructions in an `ppc750' object file. The 9101 linker for shared libraries, `/usr/bin/libtool', will fail and print an 9102 error if asked to create a shared library with a less restrictive 9103 subtype than its input files (for instance, trying to put a `ppc970' 9104 object file in a `ppc7400' library). The linker for executables, `ld', 9105 will quietly give the executable the most restrictive subtype of any of 9106 its input files. 9107 9108 `-FDIR' 9109 Add the framework directory DIR to the head of the list of 9110 directories to be searched for header files. These directories are 9111 interleaved with those specified by `-I' options and are scanned 9112 in a left-to-right order. 9113 9114 A framework directory is a directory with frameworks in it. A 9115 framework is a directory with a `"Headers"' and/or 9116 `"PrivateHeaders"' directory contained directly in it that ends in 9117 `".framework"'. The name of a framework is the name of this 9118 directory excluding the `".framework"'. Headers associated with 9119 the framework are found in one of those two directories, with 9120 `"Headers"' being searched first. A subframework is a framework 9121 directory that is in a framework's `"Frameworks"' directory. 9122 Includes of subframework headers can only appear in a header of a 9123 framework that contains the subframework, or in a sibling 9124 subframework header. Two subframeworks are siblings if they occur 9125 in the same framework. A subframework should not have the same 9126 name as a framework, a warning will be issued if this is violated. 9127 Currently a subframework cannot have subframeworks, in the 9128 future, the mechanism may be extended to support this. The 9129 standard frameworks can be found in `"/System/Library/Frameworks"' 9130 and `"/Library/Frameworks"'. An example include looks like 9131 `#include <Framework/header.h>', where `Framework' denotes the 9132 name of the framework and header.h is found in the 9133 `"PrivateHeaders"' or `"Headers"' directory. 9134 9135 `-iframeworkDIR' 9136 Like `-F' except the directory is a treated as a system directory. 9137 The main difference between this `-iframework' and `-F' is that 9138 with `-iframework' the compiler does not warn about constructs 9139 contained within header files found via DIR. This option is valid 9140 only for the C family of languages. 9141 9142 `-gused' 9143 Emit debugging information for symbols that are used. For STABS 9144 debugging format, this enables `-feliminate-unused-debug-symbols'. 9145 This is by default ON. 9146 9147 `-gfull' 9148 Emit debugging information for all symbols and types. 9149 9150 `-mmacosx-version-min=VERSION' 9151 The earliest version of MacOS X that this executable will run on 9152 is VERSION. Typical values of VERSION include `10.1', `10.2', and 9153 `10.3.9'. 9154 9155 If the compiler was built to use the system's headers by default, 9156 then the default for this option is the system version on which the 9157 compiler is running, otherwise the default is to make choices which 9158 are compatible with as many systems and code bases as possible. 9159 9160 `-mkernel' 9161 Enable kernel development mode. The `-mkernel' option sets 9162 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 9163 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 9164 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 9165 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 9166 targets. 9167 9168 `-mone-byte-bool' 9169 Override the defaults for `bool' so that `sizeof(bool)==1'. By 9170 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 9171 and `1' when compiling for Darwin/x86, so this option has no 9172 effect on x86. 9173 9174 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 9175 code that is not binary compatible with code generated without 9176 that switch. Using this switch may require recompiling all other 9177 modules in a program, including system libraries. Use this switch 9178 to conform to a non-default data model. 9179 9180 `-mfix-and-continue' 9181 `-ffix-and-continue' 9182 `-findirect-data' 9183 Generate code suitable for fast turn around development. Needed to 9184 enable gdb to dynamically load `.o' files into already running 9185 programs. `-findirect-data' and `-ffix-and-continue' are provided 9186 for backwards compatibility. 9187 9188 `-all_load' 9189 Loads all members of static archive libraries. See man ld(1) for 9190 more information. 9191 9192 `-arch_errors_fatal' 9193 Cause the errors having to do with files that have the wrong 9194 architecture to be fatal. 9195 9196 `-bind_at_load' 9197 Causes the output file to be marked such that the dynamic linker 9198 will bind all undefined references when the file is loaded or 9199 launched. 9200 9201 `-bundle' 9202 Produce a Mach-o bundle format file. See man ld(1) for more 9203 information. 9204 9205 `-bundle_loader EXECUTABLE' 9206 This option specifies the EXECUTABLE that will be loading the build 9207 output file being linked. See man ld(1) for more information. 9208 9209 `-dynamiclib' 9210 When passed this option, GCC will produce a dynamic library 9211 instead of an executable when linking, using the Darwin `libtool' 9212 command. 9213 9214 `-force_cpusubtype_ALL' 9215 This causes GCC's output file to have the ALL subtype, instead of 9216 one controlled by the `-mcpu' or `-march' option. 9217 9218 `-allowable_client CLIENT_NAME' 9219 `-client_name' 9220 `-compatibility_version' 9221 `-current_version' 9222 `-dead_strip' 9223 `-dependency-file' 9224 `-dylib_file' 9225 `-dylinker_install_name' 9226 `-dynamic' 9227 `-exported_symbols_list' 9228 `-filelist' 9229 `-flat_namespace' 9230 `-force_flat_namespace' 9231 `-headerpad_max_install_names' 9232 `-image_base' 9233 `-init' 9234 `-install_name' 9235 `-keep_private_externs' 9236 `-multi_module' 9237 `-multiply_defined' 9238 `-multiply_defined_unused' 9239 `-noall_load' 9240 `-no_dead_strip_inits_and_terms' 9241 `-nofixprebinding' 9242 `-nomultidefs' 9243 `-noprebind' 9244 `-noseglinkedit' 9245 `-pagezero_size' 9246 `-prebind' 9247 `-prebind_all_twolevel_modules' 9248 `-private_bundle' 9249 `-read_only_relocs' 9250 `-sectalign' 9251 `-sectobjectsymbols' 9252 `-whyload' 9253 `-seg1addr' 9254 `-sectcreate' 9255 `-sectobjectsymbols' 9256 `-sectorder' 9257 `-segaddr' 9258 `-segs_read_only_addr' 9259 `-segs_read_write_addr' 9260 `-seg_addr_table' 9261 `-seg_addr_table_filename' 9262 `-seglinkedit' 9263 `-segprot' 9264 `-segs_read_only_addr' 9265 `-segs_read_write_addr' 9266 `-single_module' 9267 `-static' 9268 `-sub_library' 9269 `-sub_umbrella' 9270 `-twolevel_namespace' 9271 `-umbrella' 9272 `-undefined' 9273 `-unexported_symbols_list' 9274 `-weak_reference_mismatches' 9275 `-whatsloaded' 9276 These options are passed to the Darwin linker. The Darwin linker 9277 man page describes them in detail. 9278 9279 9280 File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 9281 9282 3.17.8 DEC Alpha Options 9283 ------------------------ 9284 9285 These `-m' options are defined for the DEC Alpha implementations: 9286 9287 `-mno-soft-float' 9288 `-msoft-float' 9289 Use (do not use) the hardware floating-point instructions for 9290 floating-point operations. When `-msoft-float' is specified, 9291 functions in `libgcc.a' will be used to perform floating-point 9292 operations. Unless they are replaced by routines that emulate the 9293 floating-point operations, or compiled in such a way as to call 9294 such emulations routines, these routines will issue floating-point 9295 operations. If you are compiling for an Alpha without 9296 floating-point operations, you must ensure that the library is 9297 built so as not to call them. 9298 9299 Note that Alpha implementations without floating-point operations 9300 are required to have floating-point registers. 9301 9302 `-mfp-reg' 9303 `-mno-fp-regs' 9304 Generate code that uses (does not use) the floating-point register 9305 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 9306 register set is not used, floating point operands are passed in 9307 integer registers as if they were integers and floating-point 9308 results are passed in `$0' instead of `$f0'. This is a 9309 non-standard calling sequence, so any function with a 9310 floating-point argument or return value called by code compiled 9311 with `-mno-fp-regs' must also be compiled with that option. 9312 9313 A typical use of this option is building a kernel that does not 9314 use, and hence need not save and restore, any floating-point 9315 registers. 9316 9317 `-mieee' 9318 The Alpha architecture implements floating-point hardware 9319 optimized for maximum performance. It is mostly compliant with 9320 the IEEE floating point standard. However, for full compliance, 9321 software assistance is required. This option generates code fully 9322 IEEE compliant code _except_ that the INEXACT-FLAG is not 9323 maintained (see below). If this option is turned on, the 9324 preprocessor macro `_IEEE_FP' is defined during compilation. The 9325 resulting code is less efficient but is able to correctly support 9326 denormalized numbers and exceptional IEEE values such as 9327 not-a-number and plus/minus infinity. Other Alpha compilers call 9328 this option `-ieee_with_no_inexact'. 9329 9330 `-mieee-with-inexact' 9331 This is like `-mieee' except the generated code also maintains the 9332 IEEE INEXACT-FLAG. Turning on this option causes the generated 9333 code to implement fully-compliant IEEE math. In addition to 9334 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 9335 On some Alpha implementations the resulting code may execute 9336 significantly slower than the code generated by default. Since 9337 there is very little code that depends on the INEXACT-FLAG, you 9338 should normally not specify this option. Other Alpha compilers 9339 call this option `-ieee_with_inexact'. 9340 9341 `-mfp-trap-mode=TRAP-MODE' 9342 This option controls what floating-point related traps are enabled. 9343 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 9344 trap mode can be set to one of four values: 9345 9346 `n' 9347 This is the default (normal) setting. The only traps that 9348 are enabled are the ones that cannot be disabled in software 9349 (e.g., division by zero trap). 9350 9351 `u' 9352 In addition to the traps enabled by `n', underflow traps are 9353 enabled as well. 9354 9355 `su' 9356 Like `u', but the instructions are marked to be safe for 9357 software completion (see Alpha architecture manual for 9358 details). 9359 9360 `sui' 9361 Like `su', but inexact traps are enabled as well. 9362 9363 `-mfp-rounding-mode=ROUNDING-MODE' 9364 Selects the IEEE rounding mode. Other Alpha compilers call this 9365 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 9366 9367 `n' 9368 Normal IEEE rounding mode. Floating point numbers are 9369 rounded towards the nearest machine number or towards the 9370 even machine number in case of a tie. 9371 9372 `m' 9373 Round towards minus infinity. 9374 9375 `c' 9376 Chopped rounding mode. Floating point numbers are rounded 9377 towards zero. 9378 9379 `d' 9380 Dynamic rounding mode. A field in the floating point control 9381 register (FPCR, see Alpha architecture reference manual) 9382 controls the rounding mode in effect. The C library 9383 initializes this register for rounding towards plus infinity. 9384 Thus, unless your program modifies the FPCR, `d' corresponds 9385 to round towards plus infinity. 9386 9387 `-mtrap-precision=TRAP-PRECISION' 9388 In the Alpha architecture, floating point traps are imprecise. 9389 This means without software assistance it is impossible to recover 9390 from a floating trap and program execution normally needs to be 9391 terminated. GCC can generate code that can assist operating 9392 system trap handlers in determining the exact location that caused 9393 a floating point trap. Depending on the requirements of an 9394 application, different levels of precisions can be selected: 9395 9396 `p' 9397 Program precision. This option is the default and means a 9398 trap handler can only identify which program caused a 9399 floating point exception. 9400 9401 `f' 9402 Function precision. The trap handler can determine the 9403 function that caused a floating point exception. 9404 9405 `i' 9406 Instruction precision. The trap handler can determine the 9407 exact instruction that caused a floating point exception. 9408 9409 Other Alpha compilers provide the equivalent options called 9410 `-scope_safe' and `-resumption_safe'. 9411 9412 `-mieee-conformant' 9413 This option marks the generated code as IEEE conformant. You must 9414 not use this option unless you also specify `-mtrap-precision=i' 9415 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 9416 effect is to emit the line `.eflag 48' in the function prologue of 9417 the generated assembly file. Under DEC Unix, this has the effect 9418 that IEEE-conformant math library routines will be linked in. 9419 9420 `-mbuild-constants' 9421 Normally GCC examines a 32- or 64-bit integer constant to see if 9422 it can construct it from smaller constants in two or three 9423 instructions. If it cannot, it will output the constant as a 9424 literal and generate code to load it from the data segment at 9425 runtime. 9426 9427 Use this option to require GCC to construct _all_ integer constants 9428 using code, even if it takes more instructions (the maximum is 9429 six). 9430 9431 You would typically use this option to build a shared library 9432 dynamic loader. Itself a shared library, it must relocate itself 9433 in memory before it can find the variables and constants in its 9434 own data segment. 9435 9436 `-malpha-as' 9437 `-mgas' 9438 Select whether to generate code to be assembled by the 9439 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 9440 `-mgas'. 9441 9442 `-mbwx' 9443 `-mno-bwx' 9444 `-mcix' 9445 `-mno-cix' 9446 `-mfix' 9447 `-mno-fix' 9448 `-mmax' 9449 `-mno-max' 9450 Indicate whether GCC should generate code to use the optional BWX, 9451 CIX, FIX and MAX instruction sets. The default is to use the 9452 instruction sets supported by the CPU type specified via `-mcpu=' 9453 option or that of the CPU on which GCC was built if none was 9454 specified. 9455 9456 `-mfloat-vax' 9457 `-mfloat-ieee' 9458 Generate code that uses (does not use) VAX F and G floating point 9459 arithmetic instead of IEEE single and double precision. 9460 9461 `-mexplicit-relocs' 9462 `-mno-explicit-relocs' 9463 Older Alpha assemblers provided no way to generate symbol 9464 relocations except via assembler macros. Use of these macros does 9465 not allow optimal instruction scheduling. GNU binutils as of 9466 version 2.12 supports a new syntax that allows the compiler to 9467 explicitly mark which relocations should apply to which 9468 instructions. This option is mostly useful for debugging, as GCC 9469 detects the capabilities of the assembler when it is built and 9470 sets the default accordingly. 9471 9472 `-msmall-data' 9473 `-mlarge-data' 9474 When `-mexplicit-relocs' is in effect, static data is accessed via 9475 "gp-relative" relocations. When `-msmall-data' is used, objects 8 9476 bytes long or smaller are placed in a "small data area" (the 9477 `.sdata' and `.sbss' sections) and are accessed via 16-bit 9478 relocations off of the `$gp' register. This limits the size of 9479 the small data area to 64KB, but allows the variables to be 9480 directly accessed via a single instruction. 9481 9482 The default is `-mlarge-data'. With this option the data area is 9483 limited to just below 2GB. Programs that require more than 2GB of 9484 data must use `malloc' or `mmap' to allocate the data in the heap 9485 instead of in the program's data segment. 9486 9487 When generating code for shared libraries, `-fpic' implies 9488 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 9489 9490 `-msmall-text' 9491 `-mlarge-text' 9492 When `-msmall-text' is used, the compiler assumes that the code of 9493 the entire program (or shared library) fits in 4MB, and is thus 9494 reachable with a branch instruction. When `-msmall-data' is used, 9495 the compiler can assume that all local symbols share the same 9496 `$gp' value, and thus reduce the number of instructions required 9497 for a function call from 4 to 1. 9498 9499 The default is `-mlarge-text'. 9500 9501 `-mcpu=CPU_TYPE' 9502 Set the instruction set and instruction scheduling parameters for 9503 machine type CPU_TYPE. You can specify either the `EV' style name 9504 or the corresponding chip number. GCC supports scheduling 9505 parameters for the EV4, EV5 and EV6 family of processors and will 9506 choose the default values for the instruction set from the 9507 processor you specify. If you do not specify a processor type, 9508 GCC will default to the processor on which the compiler was built. 9509 9510 Supported values for CPU_TYPE are 9511 9512 `ev4' 9513 `ev45' 9514 `21064' 9515 Schedules as an EV4 and has no instruction set extensions. 9516 9517 `ev5' 9518 `21164' 9519 Schedules as an EV5 and has no instruction set extensions. 9520 9521 `ev56' 9522 `21164a' 9523 Schedules as an EV5 and supports the BWX extension. 9524 9525 `pca56' 9526 `21164pc' 9527 `21164PC' 9528 Schedules as an EV5 and supports the BWX and MAX extensions. 9529 9530 `ev6' 9531 `21264' 9532 Schedules as an EV6 and supports the BWX, FIX, and MAX 9533 extensions. 9534 9535 `ev67' 9536 `21264a' 9537 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 9538 extensions. 9539 9540 `-mtune=CPU_TYPE' 9541 Set only the instruction scheduling parameters for machine type 9542 CPU_TYPE. The instruction set is not changed. 9543 9544 `-mmemory-latency=TIME' 9545 Sets the latency the scheduler should assume for typical memory 9546 references as seen by the application. This number is highly 9547 dependent on the memory access patterns used by the application 9548 and the size of the external cache on the machine. 9549 9550 Valid options for TIME are 9551 9552 `NUMBER' 9553 A decimal number representing clock cycles. 9554 9555 `L1' 9556 `L2' 9557 `L3' 9558 `main' 9559 The compiler contains estimates of the number of clock cycles 9560 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 9561 (also called Dcache, Scache, and Bcache), as well as to main 9562 memory. Note that L3 is only valid for EV5. 9563 9564 9565 9566 File: gcc.info, Node: DEC Alpha/VMS Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 9567 9568 3.17.9 DEC Alpha/VMS Options 9569 ---------------------------- 9570 9571 These `-m' options are defined for the DEC Alpha/VMS implementations: 9572 9573 `-mvms-return-codes' 9574 Return VMS condition codes from main. The default is to return 9575 POSIX style condition (e.g. error) codes. 9576 9577 9578 File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 9579 9580 3.17.10 FRV Options 9581 ------------------- 9582 9583 `-mgpr-32' 9584 Only use the first 32 general purpose registers. 9585 9586 `-mgpr-64' 9587 Use all 64 general purpose registers. 9588 9589 `-mfpr-32' 9590 Use only the first 32 floating point registers. 9591 9592 `-mfpr-64' 9593 Use all 64 floating point registers 9594 9595 `-mhard-float' 9596 Use hardware instructions for floating point operations. 9597 9598 `-msoft-float' 9599 Use library routines for floating point operations. 9600 9601 `-malloc-cc' 9602 Dynamically allocate condition code registers. 9603 9604 `-mfixed-cc' 9605 Do not try to dynamically allocate condition code registers, only 9606 use `icc0' and `fcc0'. 9607 9608 `-mdword' 9609 Change ABI to use double word insns. 9610 9611 `-mno-dword' 9612 Do not use double word instructions. 9613 9614 `-mdouble' 9615 Use floating point double instructions. 9616 9617 `-mno-double' 9618 Do not use floating point double instructions. 9619 9620 `-mmedia' 9621 Use media instructions. 9622 9623 `-mno-media' 9624 Do not use media instructions. 9625 9626 `-mmuladd' 9627 Use multiply and add/subtract instructions. 9628 9629 `-mno-muladd' 9630 Do not use multiply and add/subtract instructions. 9631 9632 `-mfdpic' 9633 Select the FDPIC ABI, that uses function descriptors to represent 9634 pointers to functions. Without any PIC/PIE-related options, it 9635 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 9636 and small data are within a 12-bit range from the GOT base 9637 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 9638 bits. With a `bfin-elf' target, this option implies `-msim'. 9639 9640 `-minline-plt' 9641 Enable inlining of PLT entries in function calls to functions that 9642 are not known to bind locally. It has no effect without `-mfdpic'. 9643 It's enabled by default if optimizing for speed and compiling for 9644 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 9645 optimization option such as `-O3' or above is present in the 9646 command line. 9647 9648 `-mTLS' 9649 Assume a large TLS segment when generating thread-local code. 9650 9651 `-mtls' 9652 Do not assume a large TLS segment when generating thread-local 9653 code. 9654 9655 `-mgprel-ro' 9656 Enable the use of `GPREL' relocations in the FDPIC ABI for data 9657 that is known to be in read-only sections. It's enabled by 9658 default, except for `-fpic' or `-fpie': even though it may help 9659 make the global offset table smaller, it trades 1 instruction for 9660 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 9661 of which may be shared by multiple symbols, and it avoids the need 9662 for a GOT entry for the referenced symbol, so it's more likely to 9663 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 9664 9665 `-multilib-library-pic' 9666 Link with the (library, not FD) pic libraries. It's implied by 9667 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 9668 `-mfdpic'. You should never have to use it explicitly. 9669 9670 `-mlinked-fp' 9671 Follow the EABI requirement of always creating a frame pointer 9672 whenever a stack frame is allocated. This option is enabled by 9673 default and can be disabled with `-mno-linked-fp'. 9674 9675 `-mlong-calls' 9676 Use indirect addressing to call functions outside the current 9677 compilation unit. This allows the functions to be placed anywhere 9678 within the 32-bit address space. 9679 9680 `-malign-labels' 9681 Try to align labels to an 8-byte boundary by inserting nops into 9682 the previous packet. This option only has an effect when VLIW 9683 packing is enabled. It doesn't create new packets; it merely adds 9684 nops to existing ones. 9685 9686 `-mlibrary-pic' 9687 Generate position-independent EABI code. 9688 9689 `-macc-4' 9690 Use only the first four media accumulator registers. 9691 9692 `-macc-8' 9693 Use all eight media accumulator registers. 9694 9695 `-mpack' 9696 Pack VLIW instructions. 9697 9698 `-mno-pack' 9699 Do not pack VLIW instructions. 9700 9701 `-mno-eflags' 9702 Do not mark ABI switches in e_flags. 9703 9704 `-mcond-move' 9705 Enable the use of conditional-move instructions (default). 9706 9707 This switch is mainly for debugging the compiler and will likely 9708 be removed in a future version. 9709 9710 `-mno-cond-move' 9711 Disable the use of conditional-move instructions. 9712 9713 This switch is mainly for debugging the compiler and will likely 9714 be removed in a future version. 9715 9716 `-mscc' 9717 Enable the use of conditional set instructions (default). 9718 9719 This switch is mainly for debugging the compiler and will likely 9720 be removed in a future version. 9721 9722 `-mno-scc' 9723 Disable the use of conditional set instructions. 9724 9725 This switch is mainly for debugging the compiler and will likely 9726 be removed in a future version. 9727 9728 `-mcond-exec' 9729 Enable the use of conditional execution (default). 9730 9731 This switch is mainly for debugging the compiler and will likely 9732 be removed in a future version. 9733 9734 `-mno-cond-exec' 9735 Disable the use of conditional execution. 9736 9737 This switch is mainly for debugging the compiler and will likely 9738 be removed in a future version. 9739 9740 `-mvliw-branch' 9741 Run a pass to pack branches into VLIW instructions (default). 9742 9743 This switch is mainly for debugging the compiler and will likely 9744 be removed in a future version. 9745 9746 `-mno-vliw-branch' 9747 Do not run a pass to pack branches into VLIW instructions. 9748 9749 This switch is mainly for debugging the compiler and will likely 9750 be removed in a future version. 9751 9752 `-mmulti-cond-exec' 9753 Enable optimization of `&&' and `||' in conditional execution 9754 (default). 9755 9756 This switch is mainly for debugging the compiler and will likely 9757 be removed in a future version. 9758 9759 `-mno-multi-cond-exec' 9760 Disable optimization of `&&' and `||' in conditional execution. 9761 9762 This switch is mainly for debugging the compiler and will likely 9763 be removed in a future version. 9764 9765 `-mnested-cond-exec' 9766 Enable nested conditional execution optimizations (default). 9767 9768 This switch is mainly for debugging the compiler and will likely 9769 be removed in a future version. 9770 9771 `-mno-nested-cond-exec' 9772 Disable nested conditional execution optimizations. 9773 9774 This switch is mainly for debugging the compiler and will likely 9775 be removed in a future version. 9776 9777 `-moptimize-membar' 9778 This switch removes redundant `membar' instructions from the 9779 compiler generated code. It is enabled by default. 9780 9781 `-mno-optimize-membar' 9782 This switch disables the automatic removal of redundant `membar' 9783 instructions from the generated code. 9784 9785 `-mtomcat-stats' 9786 Cause gas to print out tomcat statistics. 9787 9788 `-mcpu=CPU' 9789 Select the processor type for which to generate code. Possible 9790 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 9791 `fr400', `fr300' and `simple'. 9792 9793 9794 9795 File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 9796 9797 3.17.11 GNU/Linux Options 9798 ------------------------- 9799 9800 These `-m' options are defined for GNU/Linux targets: 9801 9802 `-mglibc' 9803 Use the GNU C library instead of uClibc. This is the default 9804 except on `*-*-linux-*uclibc*' targets. 9805 9806 `-muclibc' 9807 Use uClibc instead of the GNU C library. This is the default on 9808 `*-*-linux-*uclibc*' targets. 9809 9810 9811 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 9812 9813 3.17.12 H8/300 Options 9814 ---------------------- 9815 9816 These `-m' options are defined for the H8/300 implementations: 9817 9818 `-mrelax' 9819 Shorten some address references at link time, when possible; uses 9820 the linker option `-relax'. *Note `ld' and the H8/300: 9821 (ld)H8/300, for a fuller description. 9822 9823 `-mh' 9824 Generate code for the H8/300H. 9825 9826 `-ms' 9827 Generate code for the H8S. 9828 9829 `-mn' 9830 Generate code for the H8S and H8/300H in the normal mode. This 9831 switch must be used either with `-mh' or `-ms'. 9832 9833 `-ms2600' 9834 Generate code for the H8S/2600. This switch must be used with 9835 `-ms'. 9836 9837 `-mint32' 9838 Make `int' data 32 bits by default. 9839 9840 `-malign-300' 9841 On the H8/300H and H8S, use the same alignment rules as for the 9842 H8/300. The default for the H8/300H and H8S is to align longs and 9843 floats on 4 byte boundaries. `-malign-300' causes them to be 9844 aligned on 2 byte boundaries. This option has no effect on the 9845 H8/300. 9846 9847 9848 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 9849 9850 3.17.13 HPPA Options 9851 -------------------- 9852 9853 These `-m' options are defined for the HPPA family of computers: 9854 9855 `-march=ARCHITECTURE-TYPE' 9856 Generate code for the specified architecture. The choices for 9857 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 9858 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 9859 an HP-UX system to determine the proper architecture option for 9860 your machine. Code compiled for lower numbered architectures will 9861 run on higher numbered architectures, but not the other way around. 9862 9863 `-mpa-risc-1-0' 9864 `-mpa-risc-1-1' 9865 `-mpa-risc-2-0' 9866 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 9867 respectively. 9868 9869 `-mbig-switch' 9870 Generate code suitable for big switch tables. Use this option 9871 only if the assembler/linker complain about out of range branches 9872 within a switch table. 9873 9874 `-mjump-in-delay' 9875 Fill delay slots of function calls with unconditional jump 9876 instructions by modifying the return pointer for the function call 9877 to be the target of the conditional jump. 9878 9879 `-mdisable-fpregs' 9880 Prevent floating point registers from being used in any manner. 9881 This is necessary for compiling kernels which perform lazy context 9882 switching of floating point registers. If you use this option and 9883 attempt to perform floating point operations, the compiler will 9884 abort. 9885 9886 `-mdisable-indexing' 9887 Prevent the compiler from using indexing address modes. This 9888 avoids some rather obscure problems when compiling MIG generated 9889 code under MACH. 9890 9891 `-mno-space-regs' 9892 Generate code that assumes the target has no space registers. 9893 This allows GCC to generate faster indirect calls and use unscaled 9894 index address modes. 9895 9896 Such code is suitable for level 0 PA systems and kernels. 9897 9898 `-mfast-indirect-calls' 9899 Generate code that assumes calls never cross space boundaries. 9900 This allows GCC to emit code which performs faster indirect calls. 9901 9902 This option will not work in the presence of shared libraries or 9903 nested functions. 9904 9905 `-mfixed-range=REGISTER-RANGE' 9906 Generate code treating the given register range as fixed registers. 9907 A fixed register is one that the register allocator can not use. 9908 This is useful when compiling kernel code. A register range is 9909 specified as two registers separated by a dash. Multiple register 9910 ranges can be specified separated by a comma. 9911 9912 `-mlong-load-store' 9913 Generate 3-instruction load and store sequences as sometimes 9914 required by the HP-UX 10 linker. This is equivalent to the `+k' 9915 option to the HP compilers. 9916 9917 `-mportable-runtime' 9918 Use the portable calling conventions proposed by HP for ELF 9919 systems. 9920 9921 `-mgas' 9922 Enable the use of assembler directives only GAS understands. 9923 9924 `-mschedule=CPU-TYPE' 9925 Schedule code according to the constraints for the machine type 9926 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 9927 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 9928 HP-UX system to determine the proper scheduling option for your 9929 machine. The default scheduling is `8000'. 9930 9931 `-mlinker-opt' 9932 Enable the optimization pass in the HP-UX linker. Note this makes 9933 symbolic debugging impossible. It also triggers a bug in the 9934 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 9935 messages when linking some programs. 9936 9937 `-msoft-float' 9938 Generate output containing library calls for floating point. 9939 *Warning:* the requisite libraries are not available for all HPPA 9940 targets. Normally the facilities of the machine's usual C 9941 compiler are used, but this cannot be done directly in 9942 cross-compilation. You must make your own arrangements to provide 9943 suitable library functions for cross-compilation. The embedded 9944 target `hppa1.1-*-pro' does provide software floating point 9945 support. 9946 9947 `-msoft-float' changes the calling convention in the output file; 9948 therefore, it is only useful if you compile _all_ of a program with 9949 this option. In particular, you need to compile `libgcc.a', the 9950 library that comes with GCC, with `-msoft-float' in order for this 9951 to work. 9952 9953 `-msio' 9954 Generate the predefine, `_SIO', for server IO. The default is 9955 `-mwsio'. This generates the predefines, `__hp9000s700', 9956 `__hp9000s700__' and `_WSIO', for workstation IO. These options 9957 are available under HP-UX and HI-UX. 9958 9959 `-mgnu-ld' 9960 Use GNU ld specific options. This passes `-shared' to ld when 9961 building a shared library. It is the default when GCC is 9962 configured, explicitly or implicitly, with the GNU linker. This 9963 option does not have any affect on which ld is called, it only 9964 changes what parameters are passed to that ld. The ld that is 9965 called is determined by the `--with-ld' configure option, GCC's 9966 program search path, and finally by the user's `PATH'. The linker 9967 used by GCC can be printed using `which `gcc 9968 -print-prog-name=ld`'. This option is only available on the 64 9969 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 9970 9971 `-mhp-ld' 9972 Use HP ld specific options. This passes `-b' to ld when building 9973 a shared library and passes `+Accept TypeMismatch' to ld on all 9974 links. It is the default when GCC is configured, explicitly or 9975 implicitly, with the HP linker. This option does not have any 9976 affect on which ld is called, it only changes what parameters are 9977 passed to that ld. The ld that is called is determined by the 9978 `--with-ld' configure option, GCC's program search path, and 9979 finally by the user's `PATH'. The linker used by GCC can be 9980 printed using `which `gcc -print-prog-name=ld`'. This option is 9981 only available on the 64 bit HP-UX GCC, i.e. configured with 9982 `hppa*64*-*-hpux*'. 9983 9984 `-mlong-calls' 9985 Generate code that uses long call sequences. This ensures that a 9986 call is always able to reach linker generated stubs. The default 9987 is to generate long calls only when the distance from the call 9988 site to the beginning of the function or translation unit, as the 9989 case may be, exceeds a predefined limit set by the branch type 9990 being used. The limits for normal calls are 7,600,000 and 240,000 9991 bytes, respectively for the PA 2.0 and PA 1.X architectures. 9992 Sibcalls are always limited at 240,000 bytes. 9993 9994 Distances are measured from the beginning of functions when using 9995 the `-ffunction-sections' option, or when using the `-mgas' and 9996 `-mno-portable-runtime' options together under HP-UX with the SOM 9997 linker. 9998 9999 It is normally not desirable to use this option as it will degrade 10000 performance. However, it may be useful in large applications, 10001 particularly when partial linking is used to build the application. 10002 10003 The types of long calls used depends on the capabilities of the 10004 assembler and linker, and the type of code being generated. The 10005 impact on systems that support long absolute calls, and long pic 10006 symbol-difference or pc-relative calls should be relatively small. 10007 However, an indirect call is used on 32-bit ELF systems in pic code 10008 and it is quite long. 10009 10010 `-munix=UNIX-STD' 10011 Generate compiler predefines and select a startfile for the 10012 specified UNIX standard. The choices for UNIX-STD are `93', `95' 10013 and `98'. `93' is supported on all HP-UX versions. `95' is 10014 available on HP-UX 10.10 and later. `98' is available on HP-UX 10015 11.11 and later. The default values are `93' for HP-UX 10.00, 10016 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 10017 later. 10018 10019 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 10020 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 10021 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 10022 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 10023 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 10024 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 10025 10026 It is _important_ to note that this option changes the interfaces 10027 for various library routines. It also affects the operational 10028 behavior of the C library. Thus, _extreme_ care is needed in 10029 using this option. 10030 10031 Library code that is intended to operate with more than one UNIX 10032 standard must test, set and restore the variable 10033 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 10034 provide this capability. 10035 10036 `-nolibdld' 10037 Suppress the generation of link options to search libdld.sl when 10038 the `-static' option is specified on HP-UX 10 and later. 10039 10040 `-static' 10041 The HP-UX implementation of setlocale in libc has a dependency on 10042 libdld.sl. There isn't an archive version of libdld.sl. Thus, 10043 when the `-static' option is specified, special link options are 10044 needed to resolve this dependency. 10045 10046 On HP-UX 10 and later, the GCC driver adds the necessary options to 10047 link with libdld.sl when the `-static' option is specified. This 10048 causes the resulting binary to be dynamic. On the 64-bit port, 10049 the linkers generate dynamic binaries by default in any case. The 10050 `-nolibdld' option can be used to prevent the GCC driver from 10051 adding these link options. 10052 10053 `-threads' 10054 Add support for multithreading with the "dce thread" library under 10055 HP-UX. This option sets flags for both the preprocessor and 10056 linker. 10057 10058 10059 File: gcc.info, Node: i386 and x86-64 Options, Next: IA-64 Options, Prev: HPPA Options, Up: Submodel Options 10060 10061 3.17.14 Intel 386 and AMD x86-64 Options 10062 ---------------------------------------- 10063 10064 These `-m' options are defined for the i386 and x86-64 family of 10065 computers: 10066 10067 `-mtune=CPU-TYPE' 10068 Tune to CPU-TYPE everything applicable about the generated code, 10069 except for the ABI and the set of available instructions. The 10070 choices for CPU-TYPE are: 10071 _generic_ 10072 Produce code optimized for the most common IA32/AMD64/EM64T 10073 processors. If you know the CPU on which your code will run, 10074 then you should use the corresponding `-mtune' option instead 10075 of `-mtune=generic'. But, if you do not know exactly what 10076 CPU users of your application will have, then you should use 10077 this option. 10078 10079 As new processors are deployed in the marketplace, the 10080 behavior of this option will change. Therefore, if you 10081 upgrade to a newer version of GCC, the code generated option 10082 will change to reflect the processors that were most common 10083 when that version of GCC was released. 10084 10085 There is no `-march=generic' option because `-march' 10086 indicates the instruction set the compiler can use, and there 10087 is no generic instruction set applicable to all processors. 10088 In contrast, `-mtune' indicates the processor (or, in this 10089 case, collection of processors) for which the code is 10090 optimized. 10091 10092 _native_ 10093 This selects the CPU to tune for at compilation time by 10094 determining the processor type of the compiling machine. 10095 Using `-mtune=native' will produce code optimized for the 10096 local machine under the constraints of the selected 10097 instruction set. Using `-march=native' will enable all 10098 instruction subsets supported by the local machine (hence the 10099 result might not run on different machines). 10100 10101 _i386_ 10102 Original Intel's i386 CPU. 10103 10104 _i486_ 10105 Intel's i486 CPU. (No scheduling is implemented for this 10106 chip.) 10107 10108 _i586, pentium_ 10109 Intel Pentium CPU with no MMX support. 10110 10111 _pentium-mmx_ 10112 Intel PentiumMMX CPU based on Pentium core with MMX 10113 instruction set support. 10114 10115 _pentiumpro_ 10116 Intel PentiumPro CPU. 10117 10118 _i686_ 10119 Same as `generic', but when used as `march' option, PentiumPro 10120 instruction set will be used, so the code will run on all 10121 i686 family chips. 10122 10123 _pentium2_ 10124 Intel Pentium2 CPU based on PentiumPro core with MMX 10125 instruction set support. 10126 10127 _pentium3, pentium3m_ 10128 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 10129 instruction set support. 10130 10131 _pentium-m_ 10132 Low power version of Intel Pentium3 CPU with MMX, SSE and 10133 SSE2 instruction set support. Used by Centrino notebooks. 10134 10135 _pentium4, pentium4m_ 10136 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 10137 support. 10138 10139 _prescott_ 10140 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 10141 and SSE3 instruction set support. 10142 10143 _nocona_ 10144 Improved version of Intel Pentium4 CPU with 64-bit 10145 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 10146 10147 _core2_ 10148 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 10149 and SSSE3 instruction set support. 10150 10151 _k6_ 10152 AMD K6 CPU with MMX instruction set support. 10153 10154 _k6-2, k6-3_ 10155 Improved versions of AMD K6 CPU with MMX and 3dNOW! 10156 instruction set support. 10157 10158 _athlon, athlon-tbird_ 10159 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE 10160 prefetch instructions support. 10161 10162 _athlon-4, athlon-xp, athlon-mp_ 10163 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and 10164 full SSE instruction set support. 10165 10166 _k8, opteron, athlon64, athlon-fx_ 10167 AMD K8 core based CPUs with x86-64 instruction set support. 10168 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 10169 64-bit instruction set extensions.) 10170 10171 _k8-sse3, opteron-sse3, athlon64-sse3_ 10172 Improved versions of k8, opteron and athlon64 with SSE3 10173 instruction set support. 10174 10175 _amdfam10, barcelona_ 10176 AMD Family 10h core based CPUs with x86-64 instruction set 10177 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 10178 3dNOW!, enhanced 3dNOW!, ABM and 64-bit instruction set 10179 extensions.) 10180 10181 _winchip-c6_ 10182 IDT Winchip C6 CPU, dealt in same way as i486 with additional 10183 MMX instruction set support. 10184 10185 _winchip2_ 10186 IDT Winchip2 CPU, dealt in same way as i486 with additional 10187 MMX and 3dNOW! instruction set support. 10188 10189 _c3_ 10190 Via C3 CPU with MMX and 3dNOW! instruction set support. (No 10191 scheduling is implemented for this chip.) 10192 10193 _c3-2_ 10194 Via C3-2 CPU with MMX and SSE instruction set support. (No 10195 scheduling is implemented for this chip.) 10196 10197 _geode_ 10198 Embedded AMD CPU with MMX and 3dNOW! instruction set support. 10199 10200 While picking a specific CPU-TYPE will schedule things 10201 appropriately for that particular chip, the compiler will not 10202 generate any code that does not run on the i386 without the 10203 `-march=CPU-TYPE' option being used. 10204 10205 `-march=CPU-TYPE' 10206 Generate instructions for the machine type CPU-TYPE. The choices 10207 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 10208 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 10209 10210 `-mcpu=CPU-TYPE' 10211 A deprecated synonym for `-mtune'. 10212 10213 `-mfpmath=UNIT' 10214 Generate floating point arithmetics for selected unit UNIT. The 10215 choices for UNIT are: 10216 10217 `387' 10218 Use the standard 387 floating point coprocessor present 10219 majority of chips and emulated otherwise. Code compiled with 10220 this option will run almost everywhere. The temporary 10221 results are computed in 80bit precision instead of precision 10222 specified by the type resulting in slightly different results 10223 compared to most of other chips. See `-ffloat-store' for 10224 more detailed description. 10225 10226 This is the default choice for i386 compiler. 10227 10228 `sse' 10229 Use scalar floating point instructions present in the SSE 10230 instruction set. This instruction set is supported by 10231 Pentium3 and newer chips, in the AMD line by Athlon-4, 10232 Athlon-xp and Athlon-mp chips. The earlier version of SSE 10233 instruction set supports only single precision arithmetics, 10234 thus the double and extended precision arithmetics is still 10235 done using 387. Later version, present only in Pentium4 and 10236 the future AMD x86-64 chips supports double precision 10237 arithmetics too. 10238 10239 For the i386 compiler, you need to use `-march=CPU-TYPE', 10240 `-msse' or `-msse2' switches to enable SSE extensions and 10241 make this option effective. For the x86-64 compiler, these 10242 extensions are enabled by default. 10243 10244 The resulting code should be considerably faster in the 10245 majority of cases and avoid the numerical instability 10246 problems of 387 code, but may break some existing code that 10247 expects temporaries to be 80bit. 10248 10249 This is the default choice for the x86-64 compiler. 10250 10251 `sse,387' 10252 Attempt to utilize both instruction sets at once. This 10253 effectively double the amount of available registers and on 10254 chips with separate execution units for 387 and SSE the 10255 execution resources too. Use this option with care, as it is 10256 still experimental, because the GCC register allocator does 10257 not model separate functional units well resulting in 10258 instable performance. 10259 10260 `-masm=DIALECT' 10261 Output asm instructions using selected DIALECT. Supported choices 10262 are `intel' or `att' (the default one). Darwin does not support 10263 `intel'. 10264 10265 `-mieee-fp' 10266 `-mno-ieee-fp' 10267 Control whether or not the compiler uses IEEE floating point 10268 comparisons. These handle correctly the case where the result of a 10269 comparison is unordered. 10270 10271 `-msoft-float' 10272 Generate output containing library calls for floating point. 10273 *Warning:* the requisite libraries are not part of GCC. Normally 10274 the facilities of the machine's usual C compiler are used, but 10275 this can't be done directly in cross-compilation. You must make 10276 your own arrangements to provide suitable library functions for 10277 cross-compilation. 10278 10279 On machines where a function returns floating point results in the 10280 80387 register stack, some floating point opcodes may be emitted 10281 even if `-msoft-float' is used. 10282 10283 `-mno-fp-ret-in-387' 10284 Do not use the FPU registers for return values of functions. 10285 10286 The usual calling convention has functions return values of types 10287 `float' and `double' in an FPU register, even if there is no FPU. 10288 The idea is that the operating system should emulate an FPU. 10289 10290 The option `-mno-fp-ret-in-387' causes such values to be returned 10291 in ordinary CPU registers instead. 10292 10293 `-mno-fancy-math-387' 10294 Some 387 emulators do not support the `sin', `cos' and `sqrt' 10295 instructions for the 387. Specify this option to avoid generating 10296 those instructions. This option is the default on FreeBSD, 10297 OpenBSD and NetBSD. This option is overridden when `-march' 10298 indicates that the target cpu will always have an FPU and so the 10299 instruction will not need emulation. As of revision 2.6.1, these 10300 instructions are not generated unless you also use the 10301 `-funsafe-math-optimizations' switch. 10302 10303 `-malign-double' 10304 `-mno-align-double' 10305 Control whether GCC aligns `double', `long double', and `long 10306 long' variables on a two word boundary or a one word boundary. 10307 Aligning `double' variables on a two word boundary will produce 10308 code that runs somewhat faster on a `Pentium' at the expense of 10309 more memory. 10310 10311 On x86-64, `-malign-double' is enabled by default. 10312 10313 *Warning:* if you use the `-malign-double' switch, structures 10314 containing the above types will be aligned differently than the 10315 published application binary interface specifications for the 386 10316 and will not be binary compatible with structures in code compiled 10317 without that switch. 10318 10319 `-m96bit-long-double' 10320 `-m128bit-long-double' 10321 These switches control the size of `long double' type. The i386 10322 application binary interface specifies the size to be 96 bits, so 10323 `-m96bit-long-double' is the default in 32 bit mode. 10324 10325 Modern architectures (Pentium and newer) would prefer `long double' 10326 to be aligned to an 8 or 16 byte boundary. In arrays or structures 10327 conforming to the ABI, this would not be possible. So specifying a 10328 `-m128bit-long-double' will align `long double' to a 16 byte 10329 boundary by padding the `long double' with an additional 32 bit 10330 zero. 10331 10332 In the x86-64 compiler, `-m128bit-long-double' is the default 10333 choice as its ABI specifies that `long double' is to be aligned on 10334 16 byte boundary. 10335 10336 Notice that neither of these options enable any extra precision 10337 over the x87 standard of 80 bits for a `long double'. 10338 10339 *Warning:* if you override the default value for your target ABI, 10340 the structures and arrays containing `long double' variables will 10341 change their size as well as function calling convention for 10342 function taking `long double' will be modified. Hence they will 10343 not be binary compatible with arrays or structures in code 10344 compiled without that switch. 10345 10346 `-mmlarge-data-threshold=NUMBER' 10347 When `-mcmodel=medium' is specified, the data greater than 10348 THRESHOLD are placed in large data section. This value must be the 10349 same across all object linked into the binary and defaults to 10350 65535. 10351 10352 `-mrtd' 10353 Use a different function-calling convention, in which functions 10354 that take a fixed number of arguments return with the `ret' NUM 10355 instruction, which pops their arguments while returning. This 10356 saves one instruction in the caller since there is no need to pop 10357 the arguments there. 10358 10359 You can specify that an individual function is called with this 10360 calling sequence with the function attribute `stdcall'. You can 10361 also override the `-mrtd' option by using the function attribute 10362 `cdecl'. *Note Function Attributes::. 10363 10364 *Warning:* this calling convention is incompatible with the one 10365 normally used on Unix, so you cannot use it if you need to call 10366 libraries compiled with the Unix compiler. 10367 10368 Also, you must provide function prototypes for all functions that 10369 take variable numbers of arguments (including `printf'); otherwise 10370 incorrect code will be generated for calls to those functions. 10371 10372 In addition, seriously incorrect code will result if you call a 10373 function with too many arguments. (Normally, extra arguments are 10374 harmlessly ignored.) 10375 10376 `-mregparm=NUM' 10377 Control how many registers are used to pass integer arguments. By 10378 default, no registers are used to pass arguments, and at most 3 10379 registers can be used. You can control this behavior for a 10380 specific function by using the function attribute `regparm'. 10381 *Note Function Attributes::. 10382 10383 *Warning:* if you use this switch, and NUM is nonzero, then you 10384 must build all modules with the same value, including any 10385 libraries. This includes the system libraries and startup modules. 10386 10387 `-msseregparm' 10388 Use SSE register passing conventions for float and double arguments 10389 and return values. You can control this behavior for a specific 10390 function by using the function attribute `sseregparm'. *Note 10391 Function Attributes::. 10392 10393 *Warning:* if you use this switch then you must build all modules 10394 with the same value, including any libraries. This includes the 10395 system libraries and startup modules. 10396 10397 `-mpc32' 10398 `-mpc64' 10399 `-mpc80' 10400 Set 80387 floating-point precision to 32, 64 or 80 bits. When 10401 `-mpc32' is specified, the significands of results of 10402 floating-point operations are rounded to 24 bits (single 10403 precision); `-mpc64' rounds the the significands of results of 10404 floating-point operations to 53 bits (double precision) and 10405 `-mpc80' rounds the significands of results of floating-point 10406 operations to 64 bits (extended double precision), which is the 10407 default. When this option is used, floating-point operations in 10408 higher precisions are not available to the programmer without 10409 setting the FPU control word explicitly. 10410 10411 Setting the rounding of floating-point operations to less than the 10412 default 80 bits can speed some programs by 2% or more. Note that 10413 some mathematical libraries assume that extended precision (80 10414 bit) floating-point operations are enabled by default; routines in 10415 such libraries could suffer significant loss of accuracy, 10416 typically through so-called "catastrophic cancellation", when this 10417 option is used to set the precision to less than extended 10418 precision. 10419 10420 `-mstackrealign' 10421 Realign the stack at entry. On the Intel x86, the 10422 `-mstackrealign' option will generate an alternate prologue and 10423 epilogue that realigns the runtime stack. This supports mixing 10424 legacy codes that keep a 4-byte aligned stack with modern codes 10425 that keep a 16-byte stack for SSE compatibility. The alternate 10426 prologue and epilogue are slower and bigger than the regular ones, 10427 and the alternate prologue requires an extra scratch register; 10428 this lowers the number of registers available if used in 10429 conjunction with the `regparm' attribute. The `-mstackrealign' 10430 option is incompatible with the nested function prologue; this is 10431 considered a hard error. See also the attribute 10432 `force_align_arg_pointer', applicable to individual functions. 10433 10434 `-mpreferred-stack-boundary=NUM' 10435 Attempt to keep the stack boundary aligned to a 2 raised to NUM 10436 byte boundary. If `-mpreferred-stack-boundary' is not specified, 10437 the default is 4 (16 bytes or 128 bits). 10438 10439 On Pentium and PentiumPro, `double' and `long double' values 10440 should be aligned to an 8 byte boundary (see `-malign-double') or 10441 suffer significant run time performance penalties. On Pentium 10442 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 10443 work properly if it is not 16 byte aligned. 10444 10445 To ensure proper alignment of this values on the stack, the stack 10446 boundary must be as aligned as that required by any value stored 10447 on the stack. Further, every function must be generated such that 10448 it keeps the stack aligned. Thus calling a function compiled with 10449 a higher preferred stack boundary from a function compiled with a 10450 lower preferred stack boundary will most likely misalign the 10451 stack. It is recommended that libraries that use callbacks always 10452 use the default setting. 10453 10454 This extra alignment does consume extra stack space, and generally 10455 increases code size. Code that is sensitive to stack space usage, 10456 such as embedded systems and operating system kernels, may want to 10457 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 10458 10459 `-mmmx' 10460 `-mno-mmx' 10461 10462 `-msse' 10463 `-mno-sse' 10464 10465 `-msse2' 10466 `-mno-sse2' 10467 10468 `-msse3' 10469 `-mno-sse3' 10470 10471 `-mssse3' 10472 `-mno-ssse3' 10473 10474 `-msse4.1' 10475 `-mno-sse4.1' 10476 10477 `-msse4.2' 10478 `-mno-sse4.2' 10479 10480 `-msse4' 10481 `-mno-sse4' 10482 10483 `-msse4a' 10484 10485 `-mno-sse4a' 10486 10487 `-msse5' 10488 `-mno-sse5' 10489 10490 `-m3dnow' 10491 `-mno-3dnow' 10492 10493 `-mpopcnt' 10494 `-mno-popcnt' 10495 10496 `-mabm' 10497 `-mno-abm' 10498 These switches enable or disable the use of instructions in the 10499 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4A, SSE5, ABM or 3DNow! 10500 extended instruction sets. These extensions are also available as 10501 built-in functions: see *Note X86 Built-in Functions::, for 10502 details of the functions enabled and disabled by these switches. 10503 10504 To have SSE/SSE2 instructions generated automatically from 10505 floating-point code (as opposed to 387 instructions), see 10506 `-mfpmath=sse'. 10507 10508 These options will enable GCC to use these extended instructions in 10509 generated code, even without `-mfpmath=sse'. Applications which 10510 perform runtime CPU detection must compile separate files for each 10511 supported architecture, using the appropriate flags. In 10512 particular, the file containing the CPU detection code should be 10513 compiled without these options. 10514 10515 `-mcld' 10516 This option instructs GCC to emit a `cld' instruction in the 10517 prologue of functions that use string instructions. String 10518 instructions depend on the DF flag to select between autoincrement 10519 or autodecrement mode. While the ABI specifies the DF flag to be 10520 cleared on function entry, some operating systems violate this 10521 specification by not clearing the DF flag in their exception 10522 dispatchers. The exception handler can be invoked with the DF flag 10523 set which leads to wrong direction mode, when string instructions 10524 are used. This option can be enabled by default on 32-bit x86 10525 targets by configuring GCC with the `--enable-cld' configure 10526 option. Generation of `cld' instructions can be suppressed with 10527 the `-mno-cld' compiler option in this case. 10528 10529 `-mcx16' 10530 This option will enable GCC to use CMPXCHG16B instruction in 10531 generated code. CMPXCHG16B allows for atomic operations on 10532 128-bit double quadword (or oword) data types. This is useful for 10533 high resolution counters that could be updated by multiple 10534 processors (or cores). This instruction is generated as part of 10535 atomic built-in functions: see *Note Atomic Builtins:: for details. 10536 10537 `-msahf' 10538 This option will enable GCC to use SAHF instruction in generated 10539 64-bit code. Early Intel CPUs with Intel 64 lacked LAHF and SAHF 10540 instructions supported by AMD64 until introduction of Pentium 4 G1 10541 step in December 2005. LAHF and SAHF are load and store 10542 instructions, respectively, for certain status flags. In 64-bit 10543 mode, SAHF instruction is used to optimize `fmod', `drem' or 10544 `remainder' built-in functions: see *Note Other Builtins:: for 10545 details. 10546 10547 `-mrecip' 10548 This option will enable GCC to use RCPSS and RSQRTSS instructions 10549 (and their vectorized variants RCPPS and RSQRTPS) with an 10550 additional Newton-Rhapson step to increase precision instead of 10551 DIVSS and SQRTSS (and their vectorized variants) for single 10552 precision floating point arguments. These instructions are 10553 generated only when `-funsafe-math-optimizations' is enabled 10554 together with `-finite-math-only' and `-fno-trapping-math'. Note 10555 that while the throughput of the sequence is higher than the 10556 throughput of the non-reciprocal instruction, the precision of the 10557 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 10558 equals 0.99999994). 10559 10560 `-mveclibabi=TYPE' 10561 Specifies the ABI type to use for vectorizing intrinsics using an 10562 external library. Supported types are `acml' for the AMD math 10563 core library style of interfacing. GCC will currently emit calls 10564 to `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log', 10565 `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', 10566 `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and 10567 `__vrs4_powf' when using this type and `-ftree-vectorize' is 10568 enabled. A ACML ABI compatible library will have to be specified 10569 at link time. 10570 10571 `-mpush-args' 10572 `-mno-push-args' 10573 Use PUSH operations to store outgoing parameters. This method is 10574 shorter and usually equally fast as method using SUB/MOV 10575 operations and is enabled by default. In some cases disabling it 10576 may improve performance because of improved scheduling and reduced 10577 dependencies. 10578 10579 `-maccumulate-outgoing-args' 10580 If enabled, the maximum amount of space required for outgoing 10581 arguments will be computed in the function prologue. This is 10582 faster on most modern CPUs because of reduced dependencies, 10583 improved scheduling and reduced stack usage when preferred stack 10584 boundary is not equal to 2. The drawback is a notable increase in 10585 code size. This switch implies `-mno-push-args'. 10586 10587 `-mthreads' 10588 Support thread-safe exception handling on `Mingw32'. Code that 10589 relies on thread-safe exception handling must compile and link all 10590 code with the `-mthreads' option. When compiling, `-mthreads' 10591 defines `-D_MT'; when linking, it links in a special thread helper 10592 library `-lmingwthrd' which cleans up per thread exception 10593 handling data. 10594 10595 `-mno-align-stringops' 10596 Do not align destination of inlined string operations. This 10597 switch reduces code size and improves performance in case the 10598 destination is already aligned, but GCC doesn't know about it. 10599 10600 `-minline-all-stringops' 10601 By default GCC inlines string operations only when destination is 10602 known to be aligned at least to 4 byte boundary. This enables 10603 more inlining, increase code size, but may improve performance of 10604 code that depends on fast memcpy, strlen and memset for short 10605 lengths. 10606 10607 `-minline-stringops-dynamically' 10608 For string operation of unknown size, inline runtime checks so for 10609 small blocks inline code is used, while for large blocks library 10610 call is used. 10611 10612 `-mstringop-strategy=ALG' 10613 Overwrite internal decision heuristic about particular algorithm 10614 to inline string operation with. The allowed values are 10615 `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386 10616 `rep' prefix of specified size, `byte_loop', `loop', 10617 `unrolled_loop' for expanding inline loop, `libcall' for always 10618 expanding library call. 10619 10620 `-momit-leaf-frame-pointer' 10621 Don't keep the frame pointer in a register for leaf functions. 10622 This avoids the instructions to save, set up and restore frame 10623 pointers and makes an extra register available in leaf functions. 10624 The option `-fomit-frame-pointer' removes the frame pointer for 10625 all functions which might make debugging harder. 10626 10627 `-mtls-direct-seg-refs' 10628 `-mno-tls-direct-seg-refs' 10629 Controls whether TLS variables may be accessed with offsets from 10630 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 10631 whether the thread base pointer must be added. Whether or not this 10632 is legal depends on the operating system, and whether it maps the 10633 segment to cover the entire TLS area. 10634 10635 For systems that use GNU libc, the default is on. 10636 10637 `-mfused-madd' 10638 `-mno-fused-madd' 10639 Enable automatic generation of fused floating point multiply-add 10640 instructions if the ISA supports such instructions. The 10641 -mfused-madd option is on by default. The fused multiply-add 10642 instructions have a different rounding behavior compared to 10643 executing a multiply followed by an add. 10644 10645 These `-m' switches are supported in addition to the above on AMD 10646 x86-64 processors in 64-bit environments. 10647 10648 `-m32' 10649 `-m64' 10650 Generate code for a 32-bit or 64-bit environment. The 32-bit 10651 environment sets int, long and pointer to 32 bits and generates 10652 code that runs on any i386 system. The 64-bit environment sets 10653 int to 32 bits and long and pointer to 64 bits and generates code 10654 for AMD's x86-64 architecture. For darwin only the -m64 option 10655 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 10656 10657 `-mno-red-zone' 10658 Do not use a so called red zone for x86-64 code. The red zone is 10659 mandated by the x86-64 ABI, it is a 128-byte area beyond the 10660 location of the stack pointer that will not be modified by signal 10661 or interrupt handlers and therefore can be used for temporary data 10662 without adjusting the stack pointer. The flag `-mno-red-zone' 10663 disables this red zone. 10664 10665 `-mcmodel=small' 10666 Generate code for the small code model: the program and its 10667 symbols must be linked in the lower 2 GB of the address space. 10668 Pointers are 64 bits. Programs can be statically or dynamically 10669 linked. This is the default code model. 10670 10671 `-mcmodel=kernel' 10672 Generate code for the kernel code model. The kernel runs in the 10673 negative 2 GB of the address space. This model has to be used for 10674 Linux kernel code. 10675 10676 `-mcmodel=medium' 10677 Generate code for the medium model: The program is linked in the 10678 lower 2 GB of the address space but symbols can be located 10679 anywhere in the address space. Programs can be statically or 10680 dynamically linked, but building of shared libraries are not 10681 supported with the medium model. 10682 10683 `-mcmodel=large' 10684 Generate code for the large model: This model makes no assumptions 10685 about addresses and sizes of sections. 10686 10687 10688 File: gcc.info, Node: IA-64 Options, Next: M32C Options, Prev: i386 and x86-64 Options, Up: Submodel Options 10689 10690 3.17.15 IA-64 Options 10691 --------------------- 10692 10693 These are the `-m' options defined for the Intel IA-64 architecture. 10694 10695 `-mbig-endian' 10696 Generate code for a big endian target. This is the default for 10697 HP-UX. 10698 10699 `-mlittle-endian' 10700 Generate code for a little endian target. This is the default for 10701 AIX5 and GNU/Linux. 10702 10703 `-mgnu-as' 10704 `-mno-gnu-as' 10705 Generate (or don't) code for the GNU assembler. This is the 10706 default. 10707 10708 `-mgnu-ld' 10709 `-mno-gnu-ld' 10710 Generate (or don't) code for the GNU linker. This is the default. 10711 10712 `-mno-pic' 10713 Generate code that does not use a global pointer register. The 10714 result is not position independent code, and violates the IA-64 10715 ABI. 10716 10717 `-mvolatile-asm-stop' 10718 `-mno-volatile-asm-stop' 10719 Generate (or don't) a stop bit immediately before and after 10720 volatile asm statements. 10721 10722 `-mregister-names' 10723 `-mno-register-names' 10724 Generate (or don't) `in', `loc', and `out' register names for the 10725 stacked registers. This may make assembler output more readable. 10726 10727 `-mno-sdata' 10728 `-msdata' 10729 Disable (or enable) optimizations that use the small data section. 10730 This may be useful for working around optimizer bugs. 10731 10732 `-mconstant-gp' 10733 Generate code that uses a single constant global pointer value. 10734 This is useful when compiling kernel code. 10735 10736 `-mauto-pic' 10737 Generate code that is self-relocatable. This implies 10738 `-mconstant-gp'. This is useful when compiling firmware code. 10739 10740 `-minline-float-divide-min-latency' 10741 Generate code for inline divides of floating point values using 10742 the minimum latency algorithm. 10743 10744 `-minline-float-divide-max-throughput' 10745 Generate code for inline divides of floating point values using 10746 the maximum throughput algorithm. 10747 10748 `-minline-int-divide-min-latency' 10749 Generate code for inline divides of integer values using the 10750 minimum latency algorithm. 10751 10752 `-minline-int-divide-max-throughput' 10753 Generate code for inline divides of integer values using the 10754 maximum throughput algorithm. 10755 10756 `-minline-sqrt-min-latency' 10757 Generate code for inline square roots using the minimum latency 10758 algorithm. 10759 10760 `-minline-sqrt-max-throughput' 10761 Generate code for inline square roots using the maximum throughput 10762 algorithm. 10763 10764 `-mno-dwarf2-asm' 10765 `-mdwarf2-asm' 10766 Don't (or do) generate assembler code for the DWARF2 line number 10767 debugging info. This may be useful when not using the GNU 10768 assembler. 10769 10770 `-mearly-stop-bits' 10771 `-mno-early-stop-bits' 10772 Allow stop bits to be placed earlier than immediately preceding the 10773 instruction that triggered the stop bit. This can improve 10774 instruction scheduling, but does not always do so. 10775 10776 `-mfixed-range=REGISTER-RANGE' 10777 Generate code treating the given register range as fixed registers. 10778 A fixed register is one that the register allocator can not use. 10779 This is useful when compiling kernel code. A register range is 10780 specified as two registers separated by a dash. Multiple register 10781 ranges can be specified separated by a comma. 10782 10783 `-mtls-size=TLS-SIZE' 10784 Specify bit size of immediate TLS offsets. Valid values are 14, 10785 22, and 64. 10786 10787 `-mtune=CPU-TYPE' 10788 Tune the instruction scheduling for a particular CPU, Valid values 10789 are itanium, itanium1, merced, itanium2, and mckinley. 10790 10791 `-mt' 10792 `-pthread' 10793 Add support for multithreading using the POSIX threads library. 10794 This option sets flags for both the preprocessor and linker. It 10795 does not affect the thread safety of object code produced by the 10796 compiler or that of libraries supplied with it. These are HP-UX 10797 specific flags. 10798 10799 `-milp32' 10800 `-mlp64' 10801 Generate code for a 32-bit or 64-bit environment. The 32-bit 10802 environment sets int, long and pointer to 32 bits. The 64-bit 10803 environment sets int to 32 bits and long and pointer to 64 bits. 10804 These are HP-UX specific flags. 10805 10806 `-mno-sched-br-data-spec' 10807 `-msched-br-data-spec' 10808 (Dis/En)able data speculative scheduling before reload. This will 10809 result in generation of the ld.a instructions and the 10810 corresponding check instructions (ld.c / chk.a). The default is 10811 'disable'. 10812 10813 `-msched-ar-data-spec' 10814 `-mno-sched-ar-data-spec' 10815 (En/Dis)able data speculative scheduling after reload. This will 10816 result in generation of the ld.a instructions and the 10817 corresponding check instructions (ld.c / chk.a). The default is 10818 'enable'. 10819 10820 `-mno-sched-control-spec' 10821 `-msched-control-spec' 10822 (Dis/En)able control speculative scheduling. This feature is 10823 available only during region scheduling (i.e. before reload). 10824 This will result in generation of the ld.s instructions and the 10825 corresponding check instructions chk.s . The default is 'disable'. 10826 10827 `-msched-br-in-data-spec' 10828 `-mno-sched-br-in-data-spec' 10829 (En/Dis)able speculative scheduling of the instructions that are 10830 dependent on the data speculative loads before reload. This is 10831 effective only with `-msched-br-data-spec' enabled. The default 10832 is 'enable'. 10833 10834 `-msched-ar-in-data-spec' 10835 `-mno-sched-ar-in-data-spec' 10836 (En/Dis)able speculative scheduling of the instructions that are 10837 dependent on the data speculative loads after reload. This is 10838 effective only with `-msched-ar-data-spec' enabled. The default 10839 is 'enable'. 10840 10841 `-msched-in-control-spec' 10842 `-mno-sched-in-control-spec' 10843 (En/Dis)able speculative scheduling of the instructions that are 10844 dependent on the control speculative loads. This is effective 10845 only with `-msched-control-spec' enabled. The default is 'enable'. 10846 10847 `-msched-ldc' 10848 `-mno-sched-ldc' 10849 (En/Dis)able use of simple data speculation checks ld.c . If 10850 disabled, only chk.a instructions will be emitted to check data 10851 speculative loads. The default is 'enable'. 10852 10853 `-mno-sched-control-ldc' 10854 `-msched-control-ldc' 10855 (Dis/En)able use of ld.c instructions to check control speculative 10856 loads. If enabled, in case of control speculative load with no 10857 speculatively scheduled dependent instructions this load will be 10858 emitted as ld.sa and ld.c will be used to check it. The default 10859 is 'disable'. 10860 10861 `-mno-sched-spec-verbose' 10862 `-msched-spec-verbose' 10863 (Dis/En)able printing of the information about speculative motions. 10864 10865 `-mno-sched-prefer-non-data-spec-insns' 10866 `-msched-prefer-non-data-spec-insns' 10867 If enabled, data speculative instructions will be chosen for 10868 schedule only if there are no other choices at the moment. This 10869 will make the use of the data speculation much more conservative. 10870 The default is 'disable'. 10871 10872 `-mno-sched-prefer-non-control-spec-insns' 10873 `-msched-prefer-non-control-spec-insns' 10874 If enabled, control speculative instructions will be chosen for 10875 schedule only if there are no other choices at the moment. This 10876 will make the use of the control speculation much more 10877 conservative. The default is 'disable'. 10878 10879 `-mno-sched-count-spec-in-critical-path' 10880 `-msched-count-spec-in-critical-path' 10881 If enabled, speculative dependencies will be considered during 10882 computation of the instructions priorities. This will make the 10883 use of the speculation a bit more conservative. The default is 10884 'disable'. 10885 10886 10887 10888 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: IA-64 Options, Up: Submodel Options 10889 10890 3.17.16 M32C Options 10891 -------------------- 10892 10893 `-mcpu=NAME' 10894 Select the CPU for which code is generated. NAME may be one of 10895 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 10896 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 10897 series. 10898 10899 `-msim' 10900 Specifies that the program will be run on the simulator. This 10901 causes an alternate runtime library to be linked in which 10902 supports, for example, file I/O. You must not use this option 10903 when generating programs that will run on real hardware; you must 10904 provide your own runtime library for whatever I/O functions are 10905 needed. 10906 10907 `-memregs=NUMBER' 10908 Specifies the number of memory-based pseudo-registers GCC will use 10909 during code generation. These pseudo-registers will be used like 10910 real registers, so there is a tradeoff between GCC's ability to 10911 fit the code into available registers, and the performance penalty 10912 of using memory instead of registers. Note that all modules in a 10913 program must be compiled with the same value for this option. 10914 Because of that, you must not use this option with the default 10915 runtime libraries gcc builds. 10916 10917 10918 10919 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 10920 10921 3.17.17 M32R/D Options 10922 ---------------------- 10923 10924 These `-m' options are defined for Renesas M32R/D architectures: 10925 10926 `-m32r2' 10927 Generate code for the M32R/2. 10928 10929 `-m32rx' 10930 Generate code for the M32R/X. 10931 10932 `-m32r' 10933 Generate code for the M32R. This is the default. 10934 10935 `-mmodel=small' 10936 Assume all objects live in the lower 16MB of memory (so that their 10937 addresses can be loaded with the `ld24' instruction), and assume 10938 all subroutines are reachable with the `bl' instruction. This is 10939 the default. 10940 10941 The addressability of a particular object can be set with the 10942 `model' attribute. 10943 10944 `-mmodel=medium' 10945 Assume objects may be anywhere in the 32-bit address space (the 10946 compiler will generate `seth/add3' instructions to load their 10947 addresses), and assume all subroutines are reachable with the `bl' 10948 instruction. 10949 10950 `-mmodel=large' 10951 Assume objects may be anywhere in the 32-bit address space (the 10952 compiler will generate `seth/add3' instructions to load their 10953 addresses), and assume subroutines may not be reachable with the 10954 `bl' instruction (the compiler will generate the much slower 10955 `seth/add3/jl' instruction sequence). 10956 10957 `-msdata=none' 10958 Disable use of the small data area. Variables will be put into 10959 one of `.data', `bss', or `.rodata' (unless the `section' 10960 attribute has been specified). This is the default. 10961 10962 The small data area consists of sections `.sdata' and `.sbss'. 10963 Objects may be explicitly put in the small data area with the 10964 `section' attribute using one of these sections. 10965 10966 `-msdata=sdata' 10967 Put small global and static data in the small data area, but do not 10968 generate special code to reference them. 10969 10970 `-msdata=use' 10971 Put small global and static data in the small data area, and 10972 generate special instructions to reference them. 10973 10974 `-G NUM' 10975 Put global and static objects less than or equal to NUM bytes into 10976 the small data or bss sections instead of the normal data or bss 10977 sections. The default value of NUM is 8. The `-msdata' option 10978 must be set to one of `sdata' or `use' for this option to have any 10979 effect. 10980 10981 All modules should be compiled with the same `-G NUM' value. 10982 Compiling with different values of NUM may or may not work; if it 10983 doesn't the linker will give an error message--incorrect code will 10984 not be generated. 10985 10986 `-mdebug' 10987 Makes the M32R specific code in the compiler display some 10988 statistics that might help in debugging programs. 10989 10990 `-malign-loops' 10991 Align all loops to a 32-byte boundary. 10992 10993 `-mno-align-loops' 10994 Do not enforce a 32-byte alignment for loops. This is the default. 10995 10996 `-missue-rate=NUMBER' 10997 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 10998 10999 `-mbranch-cost=NUMBER' 11000 NUMBER can only be 1 or 2. If it is 1 then branches will be 11001 preferred over conditional code, if it is 2, then the opposite will 11002 apply. 11003 11004 `-mflush-trap=NUMBER' 11005 Specifies the trap number to use to flush the cache. The default 11006 is 12. Valid numbers are between 0 and 15 inclusive. 11007 11008 `-mno-flush-trap' 11009 Specifies that the cache cannot be flushed by using a trap. 11010 11011 `-mflush-func=NAME' 11012 Specifies the name of the operating system function to call to 11013 flush the cache. The default is __flush_cache_, but a function 11014 call will only be used if a trap is not available. 11015 11016 `-mno-flush-func' 11017 Indicates that there is no OS function for flushing the cache. 11018 11019 11020 11021 File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 11022 11023 3.17.18 M680x0 Options 11024 ---------------------- 11025 11026 These are the `-m' options defined for M680x0 and ColdFire processors. 11027 The default settings depend on which architecture was selected when the 11028 compiler was configured; the defaults for the most common choices are 11029 given below. 11030 11031 `-march=ARCH' 11032 Generate code for a specific M680x0 or ColdFire instruction set 11033 architecture. Permissible values of ARCH for M680x0 architectures 11034 are: `68000', `68010', `68020', `68030', `68040', `68060' and 11035 `cpu32'. ColdFire architectures are selected according to 11036 Freescale's ISA classification and the permissible values are: 11037 `isaa', `isaaplus', `isab' and `isac'. 11038 11039 gcc defines a macro `__mcfARCH__' whenever it is generating code 11040 for a ColdFire target. The ARCH in this macro is one of the 11041 `-march' arguments given above. 11042 11043 When used together, `-march' and `-mtune' select code that runs on 11044 a family of similar processors but that is optimized for a 11045 particular microarchitecture. 11046 11047 `-mcpu=CPU' 11048 Generate code for a specific M680x0 or ColdFire processor. The 11049 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 11050 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 11051 given by the table below, which also classifies the CPUs into 11052 families: 11053 11054 *Family* *`-mcpu' arguments* 11055 `51qe' `51qe' 11056 `5206' `5202' `5204' `5206' 11057 `5206e' `5206e' 11058 `5208' `5207' `5208' 11059 `5211a' `5210a' `5211a' 11060 `5213' `5211' `5212' `5213' 11061 `5216' `5214' `5216' 11062 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 11063 `5225' `5224' `5225' 11064 `5235' `5232' `5233' `5234' `5235' `523x' 11065 `5249' `5249' 11066 `5250' `5250' 11067 `5271' `5270' `5271' 11068 `5272' `5272' 11069 `5275' `5274' `5275' 11070 `5282' `5280' `5281' `5282' `528x' 11071 `5307' `5307' 11072 `5329' `5327' `5328' `5329' `532x' 11073 `5373' `5372' `5373' `537x' 11074 `5407' `5407' 11075 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 11076 `5480' `5481' `5482' `5483' `5484' `5485' 11077 11078 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 11079 CPU. Other combinations of `-mcpu' and `-march' are rejected. 11080 11081 gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 11082 selected. It also defines `__mcf_family_FAMILY', where the value 11083 of FAMILY is given by the table above. 11084 11085 `-mtune=TUNE' 11086 Tune the code for a particular microarchitecture, within the 11087 constraints set by `-march' and `-mcpu'. The M680x0 11088 microarchitectures are: `68000', `68010', `68020', `68030', 11089 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 11090 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 11091 11092 You can also use `-mtune=68020-40' for code that needs to run 11093 relatively well on 68020, 68030 and 68040 targets. 11094 `-mtune=68020-60' is similar but includes 68060 targets as well. 11095 These two options select the same tuning decisions as `-m68020-40' 11096 and `-m68020-60' respectively. 11097 11098 gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for 11099 680x0 architecture ARCH. It also defines `mcARCH' unless either 11100 `-ansi' or a non-GNU `-std' option is used. If gcc is tuning for 11101 a range of architectures, as selected by `-mtune=68020-40' or 11102 `-mtune=68020-60', it defines the macros for every architecture in 11103 the range. 11104 11105 gcc also defines the macro `__mUARCH__' when tuning for ColdFire 11106 microarchitecture UARCH, where UARCH is one of the arguments given 11107 above. 11108 11109 `-m68000' 11110 `-mc68000' 11111 Generate output for a 68000. This is the default when the 11112 compiler is configured for 68000-based systems. It is equivalent 11113 to `-march=68000'. 11114 11115 Use this option for microcontrollers with a 68000 or EC000 core, 11116 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 11117 11118 `-m68010' 11119 Generate output for a 68010. This is the default when the 11120 compiler is configured for 68010-based systems. It is equivalent 11121 to `-march=68010'. 11122 11123 `-m68020' 11124 `-mc68020' 11125 Generate output for a 68020. This is the default when the 11126 compiler is configured for 68020-based systems. It is equivalent 11127 to `-march=68020'. 11128 11129 `-m68030' 11130 Generate output for a 68030. This is the default when the 11131 compiler is configured for 68030-based systems. It is equivalent 11132 to `-march=68030'. 11133 11134 `-m68040' 11135 Generate output for a 68040. This is the default when the 11136 compiler is configured for 68040-based systems. It is equivalent 11137 to `-march=68040'. 11138 11139 This option inhibits the use of 68881/68882 instructions that have 11140 to be emulated by software on the 68040. Use this option if your 11141 68040 does not have code to emulate those instructions. 11142 11143 `-m68060' 11144 Generate output for a 68060. This is the default when the 11145 compiler is configured for 68060-based systems. It is equivalent 11146 to `-march=68060'. 11147 11148 This option inhibits the use of 68020 and 68881/68882 instructions 11149 that have to be emulated by software on the 68060. Use this 11150 option if your 68060 does not have code to emulate those 11151 instructions. 11152 11153 `-mcpu32' 11154 Generate output for a CPU32. This is the default when the 11155 compiler is configured for CPU32-based systems. It is equivalent 11156 to `-march=cpu32'. 11157 11158 Use this option for microcontrollers with a CPU32 or CPU32+ core, 11159 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 11160 68341, 68349 and 68360. 11161 11162 `-m5200' 11163 Generate output for a 520X ColdFire CPU. This is the default when 11164 the compiler is configured for 520X-based systems. It is 11165 equivalent to `-mcpu=5206', and is now deprecated in favor of that 11166 option. 11167 11168 Use this option for microcontroller with a 5200 core, including 11169 the MCF5202, MCF5203, MCF5204 and MCF5206. 11170 11171 `-m5206e' 11172 Generate output for a 5206e ColdFire CPU. The option is now 11173 deprecated in favor of the equivalent `-mcpu=5206e'. 11174 11175 `-m528x' 11176 Generate output for a member of the ColdFire 528X family. The 11177 option is now deprecated in favor of the equivalent `-mcpu=528x'. 11178 11179 `-m5307' 11180 Generate output for a ColdFire 5307 CPU. The option is now 11181 deprecated in favor of the equivalent `-mcpu=5307'. 11182 11183 `-m5407' 11184 Generate output for a ColdFire 5407 CPU. The option is now 11185 deprecated in favor of the equivalent `-mcpu=5407'. 11186 11187 `-mcfv4e' 11188 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 11189 This includes use of hardware floating point instructions. The 11190 option is equivalent to `-mcpu=547x', and is now deprecated in 11191 favor of that option. 11192 11193 `-m68020-40' 11194 Generate output for a 68040, without using any of the new 11195 instructions. This results in code which can run relatively 11196 efficiently on either a 68020/68881 or a 68030 or a 68040. The 11197 generated code does use the 68881 instructions that are emulated 11198 on the 68040. 11199 11200 The option is equivalent to `-march=68020' `-mtune=68020-40'. 11201 11202 `-m68020-60' 11203 Generate output for a 68060, without using any of the new 11204 instructions. This results in code which can run relatively 11205 efficiently on either a 68020/68881 or a 68030 or a 68040. The 11206 generated code does use the 68881 instructions that are emulated 11207 on the 68060. 11208 11209 The option is equivalent to `-march=68020' `-mtune=68020-60'. 11210 11211 `-mhard-float' 11212 `-m68881' 11213 Generate floating-point instructions. This is the default for 11214 68020 and above, and for ColdFire devices that have an FPU. It 11215 defines the macro `__HAVE_68881__' on M680x0 targets and 11216 `__mcffpu__' on ColdFire targets. 11217 11218 `-msoft-float' 11219 Do not generate floating-point instructions; use library calls 11220 instead. This is the default for 68000, 68010, and 68832 targets. 11221 It is also the default for ColdFire devices that have no FPU. 11222 11223 `-mdiv' 11224 `-mno-div' 11225 Generate (do not generate) ColdFire hardware divide and remainder 11226 instructions. If `-march' is used without `-mcpu', the default is 11227 "on" for ColdFire architectures and "off" for M680x0 11228 architectures. Otherwise, the default is taken from the target CPU 11229 (either the default CPU, or the one specified by `-mcpu'). For 11230 example, the default is "off" for `-mcpu=5206' and "on" for 11231 `-mcpu=5206e'. 11232 11233 gcc defines the macro `__mcfhwdiv__' when this option is enabled. 11234 11235 `-mshort' 11236 Consider type `int' to be 16 bits wide, like `short int'. 11237 Additionally, parameters passed on the stack are also aligned to a 11238 16-bit boundary even on targets whose API mandates promotion to 11239 32-bit. 11240 11241 `-mno-short' 11242 Do not consider type `int' to be 16 bits wide. This is the 11243 default. 11244 11245 `-mnobitfield' 11246 `-mno-bitfield' 11247 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 11248 and `-m5200' options imply `-mnobitfield'. 11249 11250 `-mbitfield' 11251 Do use the bit-field instructions. The `-m68020' option implies 11252 `-mbitfield'. This is the default if you use a configuration 11253 designed for a 68020. 11254 11255 `-mrtd' 11256 Use a different function-calling convention, in which functions 11257 that take a fixed number of arguments return with the `rtd' 11258 instruction, which pops their arguments while returning. This 11259 saves one instruction in the caller since there is no need to pop 11260 the arguments there. 11261 11262 This calling convention is incompatible with the one normally used 11263 on Unix, so you cannot use it if you need to call libraries 11264 compiled with the Unix compiler. 11265 11266 Also, you must provide function prototypes for all functions that 11267 take variable numbers of arguments (including `printf'); otherwise 11268 incorrect code will be generated for calls to those functions. 11269 11270 In addition, seriously incorrect code will result if you call a 11271 function with too many arguments. (Normally, extra arguments are 11272 harmlessly ignored.) 11273 11274 The `rtd' instruction is supported by the 68010, 68020, 68030, 11275 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 11276 11277 `-mno-rtd' 11278 Do not use the calling conventions selected by `-mrtd'. This is 11279 the default. 11280 11281 `-malign-int' 11282 `-mno-align-int' 11283 Control whether GCC aligns `int', `long', `long long', `float', 11284 `double', and `long double' variables on a 32-bit boundary 11285 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 11286 variables on 32-bit boundaries produces code that runs somewhat 11287 faster on processors with 32-bit busses at the expense of more 11288 memory. 11289 11290 *Warning:* if you use the `-malign-int' switch, GCC will align 11291 structures containing the above types differently than most 11292 published application binary interface specifications for the m68k. 11293 11294 `-mpcrel' 11295 Use the pc-relative addressing mode of the 68000 directly, instead 11296 of using a global offset table. At present, this option implies 11297 `-fpic', allowing at most a 16-bit offset for pc-relative 11298 addressing. `-fPIC' is not presently supported with `-mpcrel', 11299 though this could be supported for 68020 and higher processors. 11300 11301 `-mno-strict-align' 11302 `-mstrict-align' 11303 Do not (do) assume that unaligned memory references will be 11304 handled by the system. 11305 11306 `-msep-data' 11307 Generate code that allows the data segment to be located in a 11308 different area of memory from the text segment. This allows for 11309 execute in place in an environment without virtual memory 11310 management. This option implies `-fPIC'. 11311 11312 `-mno-sep-data' 11313 Generate code that assumes that the data segment follows the text 11314 segment. This is the default. 11315 11316 `-mid-shared-library' 11317 Generate code that supports shared libraries via the library ID 11318 method. This allows for execute in place and shared libraries in 11319 an environment without virtual memory management. This option 11320 implies `-fPIC'. 11321 11322 `-mno-id-shared-library' 11323 Generate code that doesn't assume ID based shared libraries are 11324 being used. This is the default. 11325 11326 `-mshared-library-id=n' 11327 Specified the identification number of the ID based shared library 11328 being compiled. Specifying a value of 0 will generate more 11329 compact code, specifying other values will force the allocation of 11330 that number to the current library but is no more space or time 11331 efficient than omitting this option. 11332 11333 11334 11335 File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 11336 11337 3.17.19 M68hc1x Options 11338 ----------------------- 11339 11340 These are the `-m' options defined for the 68hc11 and 68hc12 11341 microcontrollers. The default values for these options depends on 11342 which style of microcontroller was selected when the compiler was 11343 configured; the defaults for the most common choices are given below. 11344 11345 `-m6811' 11346 `-m68hc11' 11347 Generate output for a 68HC11. This is the default when the 11348 compiler is configured for 68HC11-based systems. 11349 11350 `-m6812' 11351 `-m68hc12' 11352 Generate output for a 68HC12. This is the default when the 11353 compiler is configured for 68HC12-based systems. 11354 11355 `-m68S12' 11356 `-m68hcs12' 11357 Generate output for a 68HCS12. 11358 11359 `-mauto-incdec' 11360 Enable the use of 68HC12 pre and post auto-increment and 11361 auto-decrement addressing modes. 11362 11363 `-minmax' 11364 `-nominmax' 11365 Enable the use of 68HC12 min and max instructions. 11366 11367 `-mlong-calls' 11368 `-mno-long-calls' 11369 Treat all calls as being far away (near). If calls are assumed to 11370 be far away, the compiler will use the `call' instruction to call 11371 a function and the `rtc' instruction for returning. 11372 11373 `-mshort' 11374 Consider type `int' to be 16 bits wide, like `short int'. 11375 11376 `-msoft-reg-count=COUNT' 11377 Specify the number of pseudo-soft registers which are used for the 11378 code generation. The maximum number is 32. Using more pseudo-soft 11379 register may or may not result in better code depending on the 11380 program. The default is 4 for 68HC11 and 2 for 68HC12. 11381 11382 11383 11384 File: gcc.info, Node: MCore Options, Next: MIPS Options, Prev: M68hc1x Options, Up: Submodel Options 11385 11386 3.17.20 MCore Options 11387 --------------------- 11388 11389 These are the `-m' options defined for the Motorola M*Core processors. 11390 11391 `-mhardlit' 11392 `-mno-hardlit' 11393 Inline constants into the code stream if it can be done in two 11394 instructions or less. 11395 11396 `-mdiv' 11397 `-mno-div' 11398 Use the divide instruction. (Enabled by default). 11399 11400 `-mrelax-immediate' 11401 `-mno-relax-immediate' 11402 Allow arbitrary sized immediates in bit operations. 11403 11404 `-mwide-bitfields' 11405 `-mno-wide-bitfields' 11406 Always treat bit-fields as int-sized. 11407 11408 `-m4byte-functions' 11409 `-mno-4byte-functions' 11410 Force all functions to be aligned to a four byte boundary. 11411 11412 `-mcallgraph-data' 11413 `-mno-callgraph-data' 11414 Emit callgraph information. 11415 11416 `-mslow-bytes' 11417 `-mno-slow-bytes' 11418 Prefer word access when reading byte quantities. 11419 11420 `-mlittle-endian' 11421 `-mbig-endian' 11422 Generate code for a little endian target. 11423 11424 `-m210' 11425 `-m340' 11426 Generate code for the 210 processor. 11427 11428 11429 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MCore Options, Up: Submodel Options 11430 11431 3.17.21 MIPS Options 11432 -------------------- 11433 11434 `-EB' 11435 Generate big-endian code. 11436 11437 `-EL' 11438 Generate little-endian code. This is the default for `mips*el-*-*' 11439 configurations. 11440 11441 `-march=ARCH' 11442 Generate code that will run on ARCH, which can be the name of a 11443 generic MIPS ISA, or the name of a particular processor. The ISA 11444 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 11445 `mips32r2', and `mips64'. The processor names are: `4kc', `4km', 11446 `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', `5kc', `5kf', 11447 `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', `24kef2_1', 11448 `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc', `74kf2_1', 11449 `74kf1_1', `74kf3_2', `m4k', `orion', `r2000', `r3000', `r3900', 11450 `r4000', `r4400', `r4600', `r4650', `r6000', `r8000', `rm7000', 11451 `rm9000', `sb1', `sr71000', `vr4100', `vr4111', `vr4120', 11452 `vr4130', `vr4300', `vr5000', `vr5400' and `vr5500'. The special 11453 value `from-abi' selects the most compatible architecture for the 11454 selected ABI (that is, `mips1' for 32-bit ABIs and `mips3' for 11455 64-bit ABIs). 11456 11457 In processor names, a final `000' can be abbreviated as `k' (for 11458 example, `-march=r2k'). Prefixes are optional, and `vr' may be 11459 written `r'. 11460 11461 Names of the form `Nf2_1' refer to processors with FPUs clocked at 11462 half the rate of the core, names of the form `Nf1_1' refer to 11463 processors with FPUs clocked at the same rate as the core, and 11464 names of the form `Nf3_2' refer to processors with FPUs clocked a 11465 ratio of 3:2 with respect to the core. For compatibility reasons, 11466 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 11467 accepted as synonyms for `Nf1_1'. 11468 11469 GCC defines two macros based on the value of this option. The 11470 first is `_MIPS_ARCH', which gives the name of target 11471 architecture, as a string. The second has the form 11472 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 11473 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 11474 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 11475 11476 Note that the `_MIPS_ARCH' macro uses the processor names given 11477 above. In other words, it will have the full prefix and will not 11478 abbreviate `000' as `k'. In the case of `from-abi', the macro 11479 names the resolved architecture (either `"mips1"' or `"mips3"'). 11480 It names the default architecture when no `-march' option is given. 11481 11482 `-mtune=ARCH' 11483 Optimize for ARCH. Among other things, this option controls the 11484 way instructions are scheduled, and the perceived cost of 11485 arithmetic operations. The list of ARCH values is the same as for 11486 `-march'. 11487 11488 When this option is not used, GCC will optimize for the processor 11489 specified by `-march'. By using `-march' and `-mtune' together, 11490 it is possible to generate code that will run on a family of 11491 processors, but optimize the code for one particular member of 11492 that family. 11493 11494 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 11495 which work in the same way as the `-march' ones described above. 11496 11497 `-mips1' 11498 Equivalent to `-march=mips1'. 11499 11500 `-mips2' 11501 Equivalent to `-march=mips2'. 11502 11503 `-mips3' 11504 Equivalent to `-march=mips3'. 11505 11506 `-mips4' 11507 Equivalent to `-march=mips4'. 11508 11509 `-mips32' 11510 Equivalent to `-march=mips32'. 11511 11512 `-mips32r2' 11513 Equivalent to `-march=mips32r2'. 11514 11515 `-mips64' 11516 Equivalent to `-march=mips64'. 11517 11518 `-mips16' 11519 `-mno-mips16' 11520 Generate (do not generate) MIPS16 code. If GCC is targetting a 11521 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 11522 11523 MIPS16 code generation can also be controlled on a per-function 11524 basis by means of `mips16' and `nomips16' attributes. *Note 11525 Function Attributes::, for more information. 11526 11527 `-mflip-mips16' 11528 Generate MIPS16 code on alternating functions. This option is 11529 provided for regression testing of mixed MIPS16/non-MIPS16 code 11530 generation, and is not intended for ordinary use in compiling user 11531 code. 11532 11533 `-minterlink-mips16' 11534 `-mno-interlink-mips16' 11535 Require (do not require) that non-MIPS16 code be link-compatible 11536 with MIPS16 code. 11537 11538 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 11539 it must either use a call or an indirect jump. 11540 `-minterlink-mips16' therefore disables direct jumps unless GCC 11541 knows that the target of the jump is not MIPS16. 11542 11543 `-mabi=32' 11544 `-mabi=o64' 11545 `-mabi=n32' 11546 `-mabi=64' 11547 `-mabi=eabi' 11548 Generate code for the given ABI. 11549 11550 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 11551 generates 64-bit code when you select a 64-bit architecture, but 11552 you can use `-mgp32' to get 32-bit code instead. 11553 11554 For information about the O64 ABI, see 11555 `http://gcc.gnu.org/projects/mipso64-abi.html'. 11556 11557 GCC supports a variant of the o32 ABI in which floating-point 11558 registers are 64 rather than 32 bits wide. You can select this 11559 combination with `-mabi=32' `-mfp64'. This ABI relies on the 11560 `mthc1' and `mfhc1' instructions and is therefore only supported 11561 for MIPS32R2 processors. 11562 11563 The register assignments for arguments and return values remain the 11564 same, but each scalar value is passed in a single 64-bit register 11565 rather than a pair of 32-bit registers. For example, scalar 11566 floating-point values are returned in `$f0' only, not a 11567 `$f0'/`$f1' pair. The set of call-saved registers also remains 11568 the same, but all 64 bits are saved. 11569 11570 `-mabicalls' 11571 `-mno-abicalls' 11572 Generate (do not generate) code that is suitable for SVR4-style 11573 dynamic objects. `-mabicalls' is the default for SVR4-based 11574 systems. 11575 11576 `-mshared' 11577 `-mno-shared' 11578 Generate (do not generate) code that is fully position-independent, 11579 and that can therefore be linked into shared libraries. This 11580 option only affects `-mabicalls'. 11581 11582 All `-mabicalls' code has traditionally been position-independent, 11583 regardless of options like `-fPIC' and `-fpic'. However, as an 11584 extension, the GNU toolchain allows executables to use absolute 11585 accesses for locally-binding symbols. It can also use shorter GP 11586 initialization sequences and generate direct calls to 11587 locally-defined functions. This mode is selected by `-mno-shared'. 11588 11589 `-mno-shared' depends on binutils 2.16 or higher and generates 11590 objects that can only be linked by the GNU linker. However, the 11591 option does not affect the ABI of the final executable; it only 11592 affects the ABI of relocatable objects. Using `-mno-shared' will 11593 generally make executables both smaller and quicker. 11594 11595 `-mshared' is the default. 11596 11597 `-mxgot' 11598 `-mno-xgot' 11599 Lift (do not lift) the usual restrictions on the size of the global 11600 offset table. 11601 11602 GCC normally uses a single instruction to load values from the GOT. 11603 While this is relatively efficient, it will only work if the GOT 11604 is smaller than about 64k. Anything larger will cause the linker 11605 to report an error such as: 11606 11607 relocation truncated to fit: R_MIPS_GOT16 foobar 11608 11609 If this happens, you should recompile your code with `-mxgot'. It 11610 should then work with very large GOTs, although it will also be 11611 less efficient, since it will take three instructions to fetch the 11612 value of a global symbol. 11613 11614 Note that some linkers can create multiple GOTs. If you have such 11615 a linker, you should only need to use `-mxgot' when a single object 11616 file accesses more than 64k's worth of GOT entries. Very few do. 11617 11618 These options have no effect unless GCC is generating position 11619 independent code. 11620 11621 `-mgp32' 11622 Assume that general-purpose registers are 32 bits wide. 11623 11624 `-mgp64' 11625 Assume that general-purpose registers are 64 bits wide. 11626 11627 `-mfp32' 11628 Assume that floating-point registers are 32 bits wide. 11629 11630 `-mfp64' 11631 Assume that floating-point registers are 64 bits wide. 11632 11633 `-mhard-float' 11634 Use floating-point coprocessor instructions. 11635 11636 `-msoft-float' 11637 Do not use floating-point coprocessor instructions. Implement 11638 floating-point calculations using library calls instead. 11639 11640 `-msingle-float' 11641 Assume that the floating-point coprocessor only supports 11642 single-precision operations. 11643 11644 `-mdouble-float' 11645 Assume that the floating-point coprocessor supports 11646 double-precision operations. This is the default. 11647 11648 `-mllsc' 11649 `-mno-llsc' 11650 Use (do not use) `ll', `sc', and `sync' instructions to implement 11651 atomic memory built-in functions. When neither option is 11652 specified, GCC will use the instructions if the target architecture 11653 supports them. 11654 11655 `-mllsc' is useful if the runtime environment can emulate the 11656 instructions and `-mno-llsc' can be useful when compiling for 11657 nonstandard ISAs. You can make either option the default by 11658 configuring GCC with `--with-llsc' and `--without-llsc' 11659 respectively. `--with-llsc' is the default for some 11660 configurations; see the installation documentation for details. 11661 11662 `-mdsp' 11663 `-mno-dsp' 11664 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 11665 Built-in Functions::. This option defines the preprocessor macro 11666 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 11667 11668 `-mdspr2' 11669 `-mno-dspr2' 11670 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 11671 Built-in Functions::. This option defines the preprocessor macros 11672 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 11673 to 2. 11674 11675 `-msmartmips' 11676 `-mno-smartmips' 11677 Use (do not use) the MIPS SmartMIPS ASE. 11678 11679 `-mpaired-single' 11680 `-mno-paired-single' 11681 Use (do not use) paired-single floating-point instructions. *Note 11682 MIPS Paired-Single Support::. This option requires hardware 11683 floating-point support to be enabled. 11684 11685 `-mdmx' 11686 `-mno-mdmx' 11687 Use (do not use) MIPS Digital Media Extension instructions. This 11688 option can only be used when generating 64-bit code and requires 11689 hardware floating-point support to be enabled. 11690 11691 `-mips3d' 11692 `-mno-mips3d' 11693 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 11694 Functions::. The option `-mips3d' implies `-mpaired-single'. 11695 11696 `-mmt' 11697 `-mno-mt' 11698 Use (do not use) MT Multithreading instructions. 11699 11700 `-mlong64' 11701 Force `long' types to be 64 bits wide. See `-mlong32' for an 11702 explanation of the default and the way that the pointer size is 11703 determined. 11704 11705 `-mlong32' 11706 Force `long', `int', and pointer types to be 32 bits wide. 11707 11708 The default size of `int's, `long's and pointers depends on the 11709 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 11710 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 11711 `long's. Pointers are the same size as `long's, or the same size 11712 as integer registers, whichever is smaller. 11713 11714 `-msym32' 11715 `-mno-sym32' 11716 Assume (do not assume) that all symbols have 32-bit values, 11717 regardless of the selected ABI. This option is useful in 11718 combination with `-mabi=64' and `-mno-abicalls' because it allows 11719 GCC to generate shorter and faster references to symbolic 11720 addresses. 11721 11722 `-G NUM' 11723 Put definitions of externally-visible data in a small data section 11724 if that data is no bigger than NUM bytes. GCC can then access the 11725 data more efficiently; see `-mgpopt' for details. 11726 11727 The default `-G' option depends on the configuration. 11728 11729 `-mlocal-sdata' 11730 `-mno-local-sdata' 11731 Extend (do not extend) the `-G' behavior to local data too, such 11732 as to static variables in C. `-mlocal-sdata' is the default for 11733 all configurations. 11734 11735 If the linker complains that an application is using too much 11736 small data, you might want to try rebuilding the less 11737 performance-critical parts with `-mno-local-sdata'. You might 11738 also want to build large libraries with `-mno-local-sdata', so 11739 that the libraries leave more room for the main program. 11740 11741 `-mextern-sdata' 11742 `-mno-extern-sdata' 11743 Assume (do not assume) that externally-defined data will be in a 11744 small data section if that data is within the `-G' limit. 11745 `-mextern-sdata' is the default for all configurations. 11746 11747 If you compile a module MOD with `-mextern-sdata' `-G NUM' 11748 `-mgpopt', and MOD references a variable VAR that is no bigger 11749 than NUM bytes, you must make sure that VAR is placed in a small 11750 data section. If VAR is defined by another module, you must 11751 either compile that module with a high-enough `-G' setting or 11752 attach a `section' attribute to VAR's definition. If VAR is 11753 common, you must link the application with a high-enough `-G' 11754 setting. 11755 11756 The easiest way of satisfying these restrictions is to compile and 11757 link every module with the same `-G' option. However, you may 11758 wish to build a library that supports several different small data 11759 limits. You can do this by compiling the library with the highest 11760 supported `-G' setting and additionally using `-mno-extern-sdata' 11761 to stop the library from making assumptions about 11762 externally-defined data. 11763 11764 `-mgpopt' 11765 `-mno-gpopt' 11766 Use (do not use) GP-relative accesses for symbols that are known 11767 to be in a small data section; see `-G', `-mlocal-sdata' and 11768 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 11769 11770 `-mno-gpopt' is useful for cases where the `$gp' register might 11771 not hold the value of `_gp'. For example, if the code is part of 11772 a library that might be used in a boot monitor, programs that call 11773 boot monitor routines will pass an unknown value in `$gp'. (In 11774 such situations, the boot monitor itself would usually be compiled 11775 with `-G0'.) 11776 11777 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 11778 11779 `-membedded-data' 11780 `-mno-embedded-data' 11781 Allocate variables to the read-only data section first if 11782 possible, then next in the small data section if possible, 11783 otherwise in data. This gives slightly slower code than the 11784 default, but reduces the amount of RAM required when executing, 11785 and thus may be preferred for some embedded systems. 11786 11787 `-muninit-const-in-rodata' 11788 `-mno-uninit-const-in-rodata' 11789 Put uninitialized `const' variables in the read-only data section. 11790 This option is only meaningful in conjunction with 11791 `-membedded-data'. 11792 11793 `-mcode-readable=SETTING' 11794 Specify whether GCC may generate code that reads from executable 11795 sections. There are three possible settings: 11796 11797 `-mcode-readable=yes' 11798 Instructions may freely access executable sections. This is 11799 the default setting. 11800 11801 `-mcode-readable=pcrel' 11802 MIPS16 PC-relative load instructions can access executable 11803 sections, but other instructions must not do so. This option 11804 is useful on 4KSc and 4KSd processors when the code TLBs have 11805 the Read Inhibit bit set. It is also useful on processors 11806 that can be configured to have a dual instruction/data SRAM 11807 interface and that, like the M4K, automatically redirect 11808 PC-relative loads to the instruction RAM. 11809 11810 `-mcode-readable=no' 11811 Instructions must not access executable sections. This 11812 option can be useful on targets that are configured to have a 11813 dual instruction/data SRAM interface but that (unlike the 11814 M4K) do not automatically redirect PC-relative loads to the 11815 instruction RAM. 11816 11817 `-msplit-addresses' 11818 `-mno-split-addresses' 11819 Enable (disable) use of the `%hi()' and `%lo()' assembler 11820 relocation operators. This option has been superseded by 11821 `-mexplicit-relocs' but is retained for backwards compatibility. 11822 11823 `-mexplicit-relocs' 11824 `-mno-explicit-relocs' 11825 Use (do not use) assembler relocation operators when dealing with 11826 symbolic addresses. The alternative, selected by 11827 `-mno-explicit-relocs', is to use assembler macros instead. 11828 11829 `-mexplicit-relocs' is the default if GCC was configured to use an 11830 assembler that supports relocation operators. 11831 11832 `-mcheck-zero-division' 11833 `-mno-check-zero-division' 11834 Trap (do not trap) on integer division by zero. 11835 11836 The default is `-mcheck-zero-division'. 11837 11838 `-mdivide-traps' 11839 `-mdivide-breaks' 11840 MIPS systems check for division by zero by generating either a 11841 conditional trap or a break instruction. Using traps results in 11842 smaller code, but is only supported on MIPS II and later. Also, 11843 some versions of the Linux kernel have a bug that prevents trap 11844 from generating the proper signal (`SIGFPE'). Use 11845 `-mdivide-traps' to allow conditional traps on architectures that 11846 support them and `-mdivide-breaks' to force the use of breaks. 11847 11848 The default is usually `-mdivide-traps', but this can be 11849 overridden at configure time using `--with-divide=breaks'. 11850 Divide-by-zero checks can be completely disabled using 11851 `-mno-check-zero-division'. 11852 11853 `-mmemcpy' 11854 `-mno-memcpy' 11855 Force (do not force) the use of `memcpy()' for non-trivial block 11856 moves. The default is `-mno-memcpy', which allows GCC to inline 11857 most constant-sized copies. 11858 11859 `-mlong-calls' 11860 `-mno-long-calls' 11861 Disable (do not disable) use of the `jal' instruction. Calling 11862 functions using `jal' is more efficient but requires the caller 11863 and callee to be in the same 256 megabyte segment. 11864 11865 This option has no effect on abicalls code. The default is 11866 `-mno-long-calls'. 11867 11868 `-mmad' 11869 `-mno-mad' 11870 Enable (disable) use of the `mad', `madu' and `mul' instructions, 11871 as provided by the R4650 ISA. 11872 11873 `-mfused-madd' 11874 `-mno-fused-madd' 11875 Enable (disable) use of the floating point multiply-accumulate 11876 instructions, when they are available. The default is 11877 `-mfused-madd'. 11878 11879 When multiply-accumulate instructions are used, the intermediate 11880 product is calculated to infinite precision and is not subject to 11881 the FCSR Flush to Zero bit. This may be undesirable in some 11882 circumstances. 11883 11884 `-nocpp' 11885 Tell the MIPS assembler to not run its preprocessor over user 11886 assembler files (with a `.s' suffix) when assembling them. 11887 11888 `-mfix-r4000' 11889 `-mno-fix-r4000' 11890 Work around certain R4000 CPU errata: 11891 - A double-word or a variable shift may give an incorrect 11892 result if executed immediately after starting an integer 11893 division. 11894 11895 - A double-word or a variable shift may give an incorrect 11896 result if executed while an integer multiplication is in 11897 progress. 11898 11899 - An integer division may give an incorrect result if started 11900 in a delay slot of a taken branch or a jump. 11901 11902 `-mfix-r4400' 11903 `-mno-fix-r4400' 11904 Work around certain R4400 CPU errata: 11905 - A double-word or a variable shift may give an incorrect 11906 result if executed immediately after starting an integer 11907 division. 11908 11909 `-mfix-vr4120' 11910 `-mno-fix-vr4120' 11911 Work around certain VR4120 errata: 11912 - `dmultu' does not always produce the correct result. 11913 11914 - `div' and `ddiv' do not always produce the correct result if 11915 one of the operands is negative. 11916 The workarounds for the division errata rely on special functions 11917 in `libgcc.a'. At present, these functions are only provided by 11918 the `mips64vr*-elf' configurations. 11919 11920 Other VR4120 errata require a nop to be inserted between certain 11921 pairs of instructions. These errata are handled by the assembler, 11922 not by GCC itself. 11923 11924 `-mfix-vr4130' 11925 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 11926 implemented by the assembler rather than by GCC, although GCC will 11927 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 11928 `dmacc' and `dmacchi' instructions are available instead. 11929 11930 `-mfix-sb1' 11931 `-mno-fix-sb1' 11932 Work around certain SB-1 CPU core errata. (This flag currently 11933 works around the SB-1 revision 2 "F1" and "F2" floating point 11934 errata.) 11935 11936 `-mflush-func=FUNC' 11937 `-mno-flush-func' 11938 Specifies the function to call to flush the I and D caches, or to 11939 not call any such function. If called, the function must take the 11940 same arguments as the common `_flush_func()', that is, the address 11941 of the memory range for which the cache is being flushed, the size 11942 of the memory range, and the number 3 (to flush both caches). The 11943 default depends on the target GCC was configured for, but commonly 11944 is either `_flush_func' or `__cpu_flush'. 11945 11946 `mbranch-cost=NUM' 11947 Set the cost of branches to roughly NUM "simple" instructions. 11948 This cost is only a heuristic and is not guaranteed to produce 11949 consistent results across releases. A zero cost redundantly 11950 selects the default, which is based on the `-mtune' setting. 11951 11952 `-mbranch-likely' 11953 `-mno-branch-likely' 11954 Enable or disable use of Branch Likely instructions, regardless of 11955 the default for the selected architecture. By default, Branch 11956 Likely instructions may be generated if they are supported by the 11957 selected architecture. An exception is for the MIPS32 and MIPS64 11958 architectures and processors which implement those architectures; 11959 for those, Branch Likely instructions will not be generated by 11960 default because the MIPS32 and MIPS64 architectures specifically 11961 deprecate their use. 11962 11963 `-mfp-exceptions' 11964 `-mno-fp-exceptions' 11965 Specifies whether FP exceptions are enabled. This affects how we 11966 schedule FP instructions for some processors. The default is that 11967 FP exceptions are enabled. 11968 11969 For instance, on the SB-1, if FP exceptions are disabled, and we 11970 are emitting 64-bit code, then we can use both FP pipes. 11971 Otherwise, we can only use one FP pipe. 11972 11973 `-mvr4130-align' 11974 `-mno-vr4130-align' 11975 The VR4130 pipeline is two-way superscalar, but can only issue two 11976 instructions together if the first one is 8-byte aligned. When 11977 this option is enabled, GCC will align pairs of instructions that 11978 it thinks should execute in parallel. 11979 11980 This option only has an effect when optimizing for the VR4130. It 11981 normally makes code faster, but at the expense of making it bigger. 11982 It is enabled by default at optimization level `-O3'. 11983 11984 11985 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 11986 11987 3.17.22 MMIX Options 11988 -------------------- 11989 11990 These options are defined for the MMIX: 11991 11992 `-mlibfuncs' 11993 `-mno-libfuncs' 11994 Specify that intrinsic library functions are being compiled, 11995 passing all values in registers, no matter the size. 11996 11997 `-mepsilon' 11998 `-mno-epsilon' 11999 Generate floating-point comparison instructions that compare with 12000 respect to the `rE' epsilon register. 12001 12002 `-mabi=mmixware' 12003 `-mabi=gnu' 12004 Generate code that passes function parameters and return values 12005 that (in the called function) are seen as registers `$0' and up, 12006 as opposed to the GNU ABI which uses global registers `$231' and 12007 up. 12008 12009 `-mzero-extend' 12010 `-mno-zero-extend' 12011 When reading data from memory in sizes shorter than 64 bits, use 12012 (do not use) zero-extending load instructions by default, rather 12013 than sign-extending ones. 12014 12015 `-mknuthdiv' 12016 `-mno-knuthdiv' 12017 Make the result of a division yielding a remainder have the same 12018 sign as the divisor. With the default, `-mno-knuthdiv', the sign 12019 of the remainder follows the sign of the dividend. Both methods 12020 are arithmetically valid, the latter being almost exclusively used. 12021 12022 `-mtoplevel-symbols' 12023 `-mno-toplevel-symbols' 12024 Prepend (do not prepend) a `:' to all global symbols, so the 12025 assembly code can be used with the `PREFIX' assembly directive. 12026 12027 `-melf' 12028 Generate an executable in the ELF format, rather than the default 12029 `mmo' format used by the `mmix' simulator. 12030 12031 `-mbranch-predict' 12032 `-mno-branch-predict' 12033 Use (do not use) the probable-branch instructions, when static 12034 branch prediction indicates a probable branch. 12035 12036 `-mbase-addresses' 12037 `-mno-base-addresses' 12038 Generate (do not generate) code that uses _base addresses_. Using 12039 a base address automatically generates a request (handled by the 12040 assembler and the linker) for a constant to be set up in a global 12041 register. The register is used for one or more base address 12042 requests within the range 0 to 255 from the value held in the 12043 register. The generally leads to short and fast code, but the 12044 number of different data items that can be addressed is limited. 12045 This means that a program that uses lots of static data may 12046 require `-mno-base-addresses'. 12047 12048 `-msingle-exit' 12049 `-mno-single-exit' 12050 Force (do not force) generated code to have a single exit point in 12051 each function. 12052 12053 12054 File: gcc.info, Node: MN10300 Options, Next: MT Options, Prev: MMIX Options, Up: Submodel Options 12055 12056 3.17.23 MN10300 Options 12057 ----------------------- 12058 12059 These `-m' options are defined for Matsushita MN10300 architectures: 12060 12061 `-mmult-bug' 12062 Generate code to avoid bugs in the multiply instructions for the 12063 MN10300 processors. This is the default. 12064 12065 `-mno-mult-bug' 12066 Do not generate code to avoid bugs in the multiply instructions 12067 for the MN10300 processors. 12068 12069 `-mam33' 12070 Generate code which uses features specific to the AM33 processor. 12071 12072 `-mno-am33' 12073 Do not generate code which uses features specific to the AM33 12074 processor. This is the default. 12075 12076 `-mreturn-pointer-on-d0' 12077 When generating a function which returns a pointer, return the 12078 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 12079 only in a0, and attempts to call such functions without a prototype 12080 would result in errors. Note that this option is on by default; 12081 use `-mno-return-pointer-on-d0' to disable it. 12082 12083 `-mno-crt0' 12084 Do not link in the C run-time initialization object file. 12085 12086 `-mrelax' 12087 Indicate to the linker that it should perform a relaxation 12088 optimization pass to shorten branches, calls and absolute memory 12089 addresses. This option only has an effect when used on the 12090 command line for the final link step. 12091 12092 This option makes symbolic debugging impossible. 12093 12094 12095 File: gcc.info, Node: MT Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options 12096 12097 3.17.24 MT Options 12098 ------------------ 12099 12100 These `-m' options are defined for Morpho MT architectures: 12101 12102 `-march=CPU-TYPE' 12103 Generate code that will run on CPU-TYPE, which is the name of a 12104 system representing a certain processor type. Possible values for 12105 CPU-TYPE are `ms1-64-001', `ms1-16-002', `ms1-16-003' and `ms2'. 12106 12107 When this option is not used, the default is `-march=ms1-16-002'. 12108 12109 `-mbacc' 12110 Use byte loads and stores when generating code. 12111 12112 `-mno-bacc' 12113 Do not use byte loads and stores when generating code. 12114 12115 `-msim' 12116 Use simulator runtime 12117 12118 `-mno-crt0' 12119 Do not link in the C run-time initialization object file `crti.o'. 12120 Other run-time initialization and termination files such as 12121 `startup.o' and `exit.o' are still included on the linker command 12122 line. 12123 12124 12125 12126 File: gcc.info, Node: PDP-11 Options, Next: PowerPC Options, Prev: MT Options, Up: Submodel Options 12127 12128 3.17.25 PDP-11 Options 12129 ---------------------- 12130 12131 These options are defined for the PDP-11: 12132 12133 `-mfpu' 12134 Use hardware FPP floating point. This is the default. (FIS 12135 floating point on the PDP-11/40 is not supported.) 12136 12137 `-msoft-float' 12138 Do not use hardware floating point. 12139 12140 `-mac0' 12141 Return floating-point results in ac0 (fr0 in Unix assembler 12142 syntax). 12143 12144 `-mno-ac0' 12145 Return floating-point results in memory. This is the default. 12146 12147 `-m40' 12148 Generate code for a PDP-11/40. 12149 12150 `-m45' 12151 Generate code for a PDP-11/45. This is the default. 12152 12153 `-m10' 12154 Generate code for a PDP-11/10. 12155 12156 `-mbcopy-builtin' 12157 Use inline `movmemhi' patterns for copying memory. This is the 12158 default. 12159 12160 `-mbcopy' 12161 Do not use inline `movmemhi' patterns for copying memory. 12162 12163 `-mint16' 12164 `-mno-int32' 12165 Use 16-bit `int'. This is the default. 12166 12167 `-mint32' 12168 `-mno-int16' 12169 Use 32-bit `int'. 12170 12171 `-mfloat64' 12172 `-mno-float32' 12173 Use 64-bit `float'. This is the default. 12174 12175 `-mfloat32' 12176 `-mno-float64' 12177 Use 32-bit `float'. 12178 12179 `-mabshi' 12180 Use `abshi2' pattern. This is the default. 12181 12182 `-mno-abshi' 12183 Do not use `abshi2' pattern. 12184 12185 `-mbranch-expensive' 12186 Pretend that branches are expensive. This is for experimenting 12187 with code generation only. 12188 12189 `-mbranch-cheap' 12190 Do not pretend that branches are expensive. This is the default. 12191 12192 `-msplit' 12193 Generate code for a system with split I&D. 12194 12195 `-mno-split' 12196 Generate code for a system without split I&D. This is the default. 12197 12198 `-munix-asm' 12199 Use Unix assembler syntax. This is the default when configured for 12200 `pdp11-*-bsd'. 12201 12202 `-mdec-asm' 12203 Use DEC assembler syntax. This is the default when configured for 12204 any PDP-11 target other than `pdp11-*-bsd'. 12205 12206 12207 File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 12208 12209 3.17.26 PowerPC Options 12210 ----------------------- 12211 12212 These are listed under *Note RS/6000 and PowerPC Options::. 12213 12214 12215 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: S/390 and zSeries Options, Prev: PowerPC Options, Up: Submodel Options 12216 12217 3.17.27 IBM RS/6000 and PowerPC Options 12218 --------------------------------------- 12219 12220 These `-m' options are defined for the IBM RS/6000 and PowerPC: 12221 `-mpower' 12222 `-mno-power' 12223 `-mpower2' 12224 `-mno-power2' 12225 `-mpowerpc' 12226 `-mno-powerpc' 12227 `-mpowerpc-gpopt' 12228 `-mno-powerpc-gpopt' 12229 `-mpowerpc-gfxopt' 12230 `-mno-powerpc-gfxopt' 12231 `-mpowerpc64' 12232 `-mno-powerpc64' 12233 `-mmfcrf' 12234 `-mno-mfcrf' 12235 `-mpopcntb' 12236 `-mno-popcntb' 12237 `-mfprnd' 12238 `-mno-fprnd' 12239 `-mcmpb' 12240 `-mno-cmpb' 12241 `-mmfpgpr' 12242 `-mno-mfpgpr' 12243 `-mhard-dfp' 12244 `-mno-hard-dfp' 12245 GCC supports two related instruction set architectures for the 12246 RS/6000 and PowerPC. The "POWER" instruction set are those 12247 instructions supported by the `rios' chip set used in the original 12248 RS/6000 systems and the "PowerPC" instruction set is the 12249 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 12250 microprocessors, and the IBM 4xx, 6xx, and follow-on 12251 microprocessors. 12252 12253 Neither architecture is a subset of the other. However there is a 12254 large common subset of instructions supported by both. An MQ 12255 register is included in processors supporting the POWER 12256 architecture. 12257 12258 You use these options to specify which instructions are available 12259 on the processor you are using. The default value of these 12260 options is determined when configuring GCC. Specifying the 12261 `-mcpu=CPU_TYPE' overrides the specification of these options. We 12262 recommend you use the `-mcpu=CPU_TYPE' option rather than the 12263 options listed above. 12264 12265 The `-mpower' option allows GCC to generate instructions that are 12266 found only in the POWER architecture and to use the MQ register. 12267 Specifying `-mpower2' implies `-power' and also allows GCC to 12268 generate instructions that are present in the POWER2 architecture 12269 but not the original POWER architecture. 12270 12271 The `-mpowerpc' option allows GCC to generate instructions that 12272 are found only in the 32-bit subset of the PowerPC architecture. 12273 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 12274 GCC to use the optional PowerPC architecture instructions in the 12275 General Purpose group, including floating-point square root. 12276 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 12277 GCC to use the optional PowerPC architecture instructions in the 12278 Graphics group, including floating-point select. 12279 12280 The `-mmfcrf' option allows GCC to generate the move from 12281 condition register field instruction implemented on the POWER4 12282 processor and other processors that support the PowerPC V2.01 12283 architecture. The `-mpopcntb' option allows GCC to generate the 12284 popcount and double precision FP reciprocal estimate instruction 12285 implemented on the POWER5 processor and other processors that 12286 support the PowerPC V2.02 architecture. The `-mfprnd' option 12287 allows GCC to generate the FP round to integer instructions 12288 implemented on the POWER5+ processor and other processors that 12289 support the PowerPC V2.03 architecture. The `-mcmpb' option 12290 allows GCC to generate the compare bytes instruction implemented 12291 on the POWER6 processor and other processors that support the 12292 PowerPC V2.05 architecture. The `-mmfpgpr' option allows GCC to 12293 generate the FP move to/from general purpose register instructions 12294 implemented on the POWER6X processor and other processors that 12295 support the extended PowerPC V2.05 architecture. The `-mhard-dfp' 12296 option allows GCC to generate the decimal floating point 12297 instructions implemented on some POWER processors. 12298 12299 The `-mpowerpc64' option allows GCC to generate the additional 12300 64-bit instructions that are found in the full PowerPC64 12301 architecture and to treat GPRs as 64-bit, doubleword quantities. 12302 GCC defaults to `-mno-powerpc64'. 12303 12304 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 12305 only the instructions in the common subset of both architectures 12306 plus some special AIX common-mode calls, and will not use the MQ 12307 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 12308 to use any instruction from either architecture and to allow use 12309 of the MQ register; specify this for the Motorola MPC601. 12310 12311 `-mnew-mnemonics' 12312 `-mold-mnemonics' 12313 Select which mnemonics to use in the generated assembler code. 12314 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 12315 for the PowerPC architecture. With `-mold-mnemonics' it uses the 12316 assembler mnemonics defined for the POWER architecture. 12317 Instructions defined in only one architecture have only one 12318 mnemonic; GCC uses that mnemonic irrespective of which of these 12319 options is specified. 12320 12321 GCC defaults to the mnemonics appropriate for the architecture in 12322 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 12323 these option. Unless you are building a cross-compiler, you 12324 should normally not specify either `-mnew-mnemonics' or 12325 `-mold-mnemonics', but should instead accept the default. 12326 12327 `-mcpu=CPU_TYPE' 12328 Set architecture type, register usage, choice of mnemonics, and 12329 instruction scheduling parameters for machine type CPU_TYPE. 12330 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 12331 `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e', 12332 `620', `630', `740', `7400', `7450', `750', `801', `821', `823', 12333 `860', `970', `8540', `ec603e', `G3', `G4', `G5', `power', 12334 `power2', `power3', `power4', `power5', `power5+', `power6', 12335 `power6x', `common', `powerpc', `powerpc64', `rios', `rios1', 12336 `rios2', `rsc', and `rs64'. 12337 12338 `-mcpu=common' selects a completely generic processor. Code 12339 generated under this option will run on any POWER or PowerPC 12340 processor. GCC will use only the instructions in the common 12341 subset of both architectures, and will not use the MQ register. 12342 GCC assumes a generic processor model for scheduling purposes. 12343 12344 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 12345 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 12346 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 12347 types, with an appropriate, generic processor model assumed for 12348 scheduling purposes. 12349 12350 The other options specify a specific processor. Code generated 12351 under those options will run best on that processor, and may not 12352 run at all on others. 12353 12354 The `-mcpu' options automatically enable or disable the following 12355 options: 12356 12357 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 12358 -mnew-mnemonics -mpopcntb -mpower -mpower2 -mpowerpc64 12359 -mpowerpc-gpopt -mpowerpc-gfxopt -mstring -mmulhw -mdlmzb -mmfpgpr 12360 12361 The particular options set for any particular CPU will vary between 12362 compiler versions, depending on what setting seems to produce 12363 optimal code for that CPU; it doesn't necessarily reflect the 12364 actual hardware's capabilities. If you wish to set an individual 12365 option to a particular value, you may specify it after the `-mcpu' 12366 option, like `-mcpu=970 -mno-altivec'. 12367 12368 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 12369 or disabled by the `-mcpu' option at present because AIX does not 12370 have full support for these options. You may still enable or 12371 disable them individually if you're sure it'll work in your 12372 environment. 12373 12374 `-mtune=CPU_TYPE' 12375 Set the instruction scheduling parameters for machine type 12376 CPU_TYPE, but do not set the architecture type, register usage, or 12377 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 12378 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 12379 specified, the code generated will use the architecture, 12380 registers, and mnemonics set by `-mcpu', but the scheduling 12381 parameters set by `-mtune'. 12382 12383 `-mswdiv' 12384 `-mno-swdiv' 12385 Generate code to compute division as reciprocal estimate and 12386 iterative refinement, creating opportunities for increased 12387 throughput. This feature requires: optional PowerPC Graphics 12388 instruction set for single precision and FRE instruction for 12389 double precision, assuming divides cannot generate user-visible 12390 traps, and the domain values not include Infinities, denormals or 12391 zero denominator. 12392 12393 `-maltivec' 12394 `-mno-altivec' 12395 Generate code that uses (does not use) AltiVec instructions, and 12396 also enable the use of built-in functions that allow more direct 12397 access to the AltiVec instruction set. You may also need to set 12398 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 12399 enhancements. 12400 12401 `-mvrsave' 12402 12403 `-mno-vrsave' 12404 Generate VRSAVE instructions when generating AltiVec code. 12405 12406 `-msecure-plt' 12407 Generate code that allows ld and ld.so to build executables and 12408 shared libraries with non-exec .plt and .got sections. This is a 12409 PowerPC 32-bit SYSV ABI option. 12410 12411 `-mbss-plt' 12412 Generate code that uses a BSS .plt section that ld.so fills in, and 12413 requires .plt and .got sections that are both writable and 12414 executable. This is a PowerPC 32-bit SYSV ABI option. 12415 12416 `-misel' 12417 `-mno-isel' 12418 This switch enables or disables the generation of ISEL 12419 instructions. 12420 12421 `-misel=YES/NO' 12422 This switch has been deprecated. Use `-misel' and `-mno-isel' 12423 instead. 12424 12425 `-mspe' 12426 `-mno-spe' 12427 This switch enables or disables the generation of SPE simd 12428 instructions. 12429 12430 `-mpaired' 12431 `-mno-paired' 12432 This switch enables or disables the generation of PAIRED simd 12433 instructions. 12434 12435 `-mspe=YES/NO' 12436 This option has been deprecated. Use `-mspe' and `-mno-spe' 12437 instead. 12438 12439 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 12440 `-mfloat-gprs' 12441 This switch enables or disables the generation of floating point 12442 operations on the general purpose registers for architectures that 12443 support it. 12444 12445 The argument YES or SINGLE enables the use of single-precision 12446 floating point operations. 12447 12448 The argument DOUBLE enables the use of single and double-precision 12449 floating point operations. 12450 12451 The argument NO disables floating point operations on the general 12452 purpose registers. 12453 12454 This option is currently only available on the MPC854x. 12455 12456 `-m32' 12457 `-m64' 12458 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 12459 targets (including GNU/Linux). The 32-bit environment sets int, 12460 long and pointer to 32 bits and generates code that runs on any 12461 PowerPC variant. The 64-bit environment sets int to 32 bits and 12462 long and pointer to 64 bits, and generates code for PowerPC64, as 12463 for `-mpowerpc64'. 12464 12465 `-mfull-toc' 12466 `-mno-fp-in-toc' 12467 `-mno-sum-in-toc' 12468 `-mminimal-toc' 12469 Modify generation of the TOC (Table Of Contents), which is created 12470 for every executable file. The `-mfull-toc' option is selected by 12471 default. In that case, GCC will allocate at least one TOC entry 12472 for each unique non-automatic variable reference in your program. 12473 GCC will also place floating-point constants in the TOC. However, 12474 only 16,384 entries are available in the TOC. 12475 12476 If you receive a linker error message that saying you have 12477 overflowed the available TOC space, you can reduce the amount of 12478 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 12479 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 12480 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 12481 code to calculate the sum of an address and a constant at run-time 12482 instead of putting that sum into the TOC. You may specify one or 12483 both of these options. Each causes GCC to produce very slightly 12484 slower and larger code at the expense of conserving TOC space. 12485 12486 If you still run out of space in the TOC even when you specify 12487 both of these options, specify `-mminimal-toc' instead. This 12488 option causes GCC to make only one TOC entry for every file. When 12489 you specify this option, GCC will produce code that is slower and 12490 larger but which uses extremely little TOC space. You may wish to 12491 use this option only on files that contain less frequently 12492 executed code. 12493 12494 `-maix64' 12495 `-maix32' 12496 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 12497 64-bit `long' type, and the infrastructure needed to support them. 12498 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 12499 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 12500 GCC defaults to `-maix32'. 12501 12502 `-mxl-compat' 12503 `-mno-xl-compat' 12504 Produce code that conforms more closely to IBM XL compiler 12505 semantics when using AIX-compatible ABI. Pass floating-point 12506 arguments to prototyped functions beyond the register save area 12507 (RSA) on the stack in addition to argument FPRs. Do not assume 12508 that most significant double in 128-bit long double value is 12509 properly rounded when comparing values and converting to double. 12510 Use XL symbol names for long double support routines. 12511 12512 The AIX calling convention was extended but not initially 12513 documented to handle an obscure K&R C case of calling a function 12514 that takes the address of its arguments with fewer arguments than 12515 declared. IBM XL compilers access floating point arguments which 12516 do not fit in the RSA from the stack when a subroutine is compiled 12517 without optimization. Because always storing floating-point 12518 arguments on the stack is inefficient and rarely needed, this 12519 option is not enabled by default and only is necessary when 12520 calling subroutines compiled by IBM XL compilers without 12521 optimization. 12522 12523 `-mpe' 12524 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 12525 application written to use message passing with special startup 12526 code to enable the application to run. The system must have PE 12527 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 12528 `specs' file must be overridden with the `-specs=' option to 12529 specify the appropriate directory location. The Parallel 12530 Environment does not support threads, so the `-mpe' option and the 12531 `-pthread' option are incompatible. 12532 12533 `-malign-natural' 12534 `-malign-power' 12535 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 12536 `-malign-natural' overrides the ABI-defined alignment of larger 12537 types, such as floating-point doubles, on their natural size-based 12538 boundary. The option `-malign-power' instructs GCC to follow the 12539 ABI-specified alignment rules. GCC defaults to the standard 12540 alignment defined in the ABI. 12541 12542 On 64-bit Darwin, natural alignment is the default, and 12543 `-malign-power' is not supported. 12544 12545 `-msoft-float' 12546 `-mhard-float' 12547 Generate code that does not use (uses) the floating-point register 12548 set. Software floating point emulation is provided if you use the 12549 `-msoft-float' option, and pass the option to GCC when linking. 12550 12551 `-mmultiple' 12552 `-mno-multiple' 12553 Generate code that uses (does not use) the load multiple word 12554 instructions and the store multiple word instructions. These 12555 instructions are generated by default on POWER systems, and not 12556 generated on PowerPC systems. Do not use `-mmultiple' on little 12557 endian PowerPC systems, since those instructions do not work when 12558 the processor is in little endian mode. The exceptions are PPC740 12559 and PPC750 which permit the instructions usage in little endian 12560 mode. 12561 12562 `-mstring' 12563 `-mno-string' 12564 Generate code that uses (does not use) the load string instructions 12565 and the store string word instructions to save multiple registers 12566 and do small block moves. These instructions are generated by 12567 default on POWER systems, and not generated on PowerPC systems. 12568 Do not use `-mstring' on little endian PowerPC systems, since those 12569 instructions do not work when the processor is in little endian 12570 mode. The exceptions are PPC740 and PPC750 which permit the 12571 instructions usage in little endian mode. 12572 12573 `-mupdate' 12574 `-mno-update' 12575 Generate code that uses (does not use) the load or store 12576 instructions that update the base register to the address of the 12577 calculated memory location. These instructions are generated by 12578 default. If you use `-mno-update', there is a small window 12579 between the time that the stack pointer is updated and the address 12580 of the previous frame is stored, which means code that walks the 12581 stack frame across interrupts or signals may get corrupted data. 12582 12583 `-mfused-madd' 12584 `-mno-fused-madd' 12585 Generate code that uses (does not use) the floating point multiply 12586 and accumulate instructions. These instructions are generated by 12587 default if hardware floating is used. 12588 12589 `-mmulhw' 12590 `-mno-mulhw' 12591 Generate code that uses (does not use) the half-word multiply and 12592 multiply-accumulate instructions on the IBM 405 and 440 processors. 12593 These instructions are generated by default when targetting those 12594 processors. 12595 12596 `-mdlmzb' 12597 `-mno-dlmzb' 12598 Generate code that uses (does not use) the string-search `dlmzb' 12599 instruction on the IBM 405 and 440 processors. This instruction is 12600 generated by default when targetting those processors. 12601 12602 `-mno-bit-align' 12603 `-mbit-align' 12604 On System V.4 and embedded PowerPC systems do not (do) force 12605 structures and unions that contain bit-fields to be aligned to the 12606 base type of the bit-field. 12607 12608 For example, by default a structure containing nothing but 8 12609 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 12610 boundary and have a size of 4 bytes. By using `-mno-bit-align', 12611 the structure would be aligned to a 1 byte boundary and be one 12612 byte in size. 12613 12614 `-mno-strict-align' 12615 `-mstrict-align' 12616 On System V.4 and embedded PowerPC systems do not (do) assume that 12617 unaligned memory references will be handled by the system. 12618 12619 `-mrelocatable' 12620 `-mno-relocatable' 12621 On embedded PowerPC systems generate code that allows (does not 12622 allow) the program to be relocated to a different address at 12623 runtime. If you use `-mrelocatable' on any module, all objects 12624 linked together must be compiled with `-mrelocatable' or 12625 `-mrelocatable-lib'. 12626 12627 `-mrelocatable-lib' 12628 `-mno-relocatable-lib' 12629 On embedded PowerPC systems generate code that allows (does not 12630 allow) the program to be relocated to a different address at 12631 runtime. Modules compiled with `-mrelocatable-lib' can be linked 12632 with either modules compiled without `-mrelocatable' and 12633 `-mrelocatable-lib' or with modules compiled with the 12634 `-mrelocatable' options. 12635 12636 `-mno-toc' 12637 `-mtoc' 12638 On System V.4 and embedded PowerPC systems do not (do) assume that 12639 register 2 contains a pointer to a global area pointing to the 12640 addresses used in the program. 12641 12642 `-mlittle' 12643 `-mlittle-endian' 12644 On System V.4 and embedded PowerPC systems compile code for the 12645 processor in little endian mode. The `-mlittle-endian' option is 12646 the same as `-mlittle'. 12647 12648 `-mbig' 12649 `-mbig-endian' 12650 On System V.4 and embedded PowerPC systems compile code for the 12651 processor in big endian mode. The `-mbig-endian' option is the 12652 same as `-mbig'. 12653 12654 `-mdynamic-no-pic' 12655 On Darwin and Mac OS X systems, compile code so that it is not 12656 relocatable, but that its external references are relocatable. The 12657 resulting code is suitable for applications, but not shared 12658 libraries. 12659 12660 `-mprioritize-restricted-insns=PRIORITY' 12661 This option controls the priority that is assigned to 12662 dispatch-slot restricted instructions during the second scheduling 12663 pass. The argument PRIORITY takes the value 0/1/2 to assign 12664 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 12665 instructions. 12666 12667 `-msched-costly-dep=DEPENDENCE_TYPE' 12668 This option controls which dependences are considered costly by 12669 the target during instruction scheduling. The argument 12670 DEPENDENCE_TYPE takes one of the following values: NO: no 12671 dependence is costly, ALL: all dependences are costly, 12672 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 12673 STORE_TO_LOAD: any dependence from store to load is costly, 12674 NUMBER: any dependence which latency >= NUMBER is costly. 12675 12676 `-minsert-sched-nops=SCHEME' 12677 This option controls which nop insertion scheme will be used during 12678 the second scheduling pass. The argument SCHEME takes one of the 12679 following values: NO: Don't insert nops. PAD: Pad with nops any 12680 dispatch group which has vacant issue slots, according to the 12681 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 12682 dependent insns into separate groups. Insert exactly as many nops 12683 as needed to force an insn to a new group, according to the 12684 estimated processor grouping. NUMBER: Insert nops to force costly 12685 dependent insns into separate groups. Insert NUMBER nops to force 12686 an insn to a new group. 12687 12688 `-mcall-sysv' 12689 On System V.4 and embedded PowerPC systems compile code using 12690 calling conventions that adheres to the March 1995 draft of the 12691 System V Application Binary Interface, PowerPC processor 12692 supplement. This is the default unless you configured GCC using 12693 `powerpc-*-eabiaix'. 12694 12695 `-mcall-sysv-eabi' 12696 Specify both `-mcall-sysv' and `-meabi' options. 12697 12698 `-mcall-sysv-noeabi' 12699 Specify both `-mcall-sysv' and `-mno-eabi' options. 12700 12701 `-mcall-solaris' 12702 On System V.4 and embedded PowerPC systems compile code for the 12703 Solaris operating system. 12704 12705 `-mcall-linux' 12706 On System V.4 and embedded PowerPC systems compile code for the 12707 Linux-based GNU system. 12708 12709 `-mcall-gnu' 12710 On System V.4 and embedded PowerPC systems compile code for the 12711 Hurd-based GNU system. 12712 12713 `-mcall-netbsd' 12714 On System V.4 and embedded PowerPC systems compile code for the 12715 NetBSD operating system. 12716 12717 `-maix-struct-return' 12718 Return all structures in memory (as specified by the AIX ABI). 12719 12720 `-msvr4-struct-return' 12721 Return structures smaller than 8 bytes in registers (as specified 12722 by the SVR4 ABI). 12723 12724 `-mabi=ABI-TYPE' 12725 Extend the current ABI with a particular extension, or remove such 12726 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 12727 IBMLONGDOUBLE, IEEELONGDOUBLE. 12728 12729 `-mabi=spe' 12730 Extend the current ABI with SPE ABI extensions. This does not 12731 change the default ABI, instead it adds the SPE ABI extensions to 12732 the current ABI. 12733 12734 `-mabi=no-spe' 12735 Disable Booke SPE ABI extensions for the current ABI. 12736 12737 `-mabi=ibmlongdouble' 12738 Change the current ABI to use IBM extended precision long double. 12739 This is a PowerPC 32-bit SYSV ABI option. 12740 12741 `-mabi=ieeelongdouble' 12742 Change the current ABI to use IEEE extended precision long double. 12743 This is a PowerPC 32-bit Linux ABI option. 12744 12745 `-mprototype' 12746 `-mno-prototype' 12747 On System V.4 and embedded PowerPC systems assume that all calls to 12748 variable argument functions are properly prototyped. Otherwise, 12749 the compiler must insert an instruction before every non 12750 prototyped call to set or clear bit 6 of the condition code 12751 register (CR) to indicate whether floating point values were 12752 passed in the floating point registers in case the function takes 12753 a variable arguments. With `-mprototype', only calls to 12754 prototyped variable argument functions will set or clear the bit. 12755 12756 `-msim' 12757 On embedded PowerPC systems, assume that the startup module is 12758 called `sim-crt0.o' and that the standard C libraries are 12759 `libsim.a' and `libc.a'. This is the default for 12760 `powerpc-*-eabisim' configurations. 12761 12762 `-mmvme' 12763 On embedded PowerPC systems, assume that the startup module is 12764 called `crt0.o' and the standard C libraries are `libmvme.a' and 12765 `libc.a'. 12766 12767 `-mads' 12768 On embedded PowerPC systems, assume that the startup module is 12769 called `crt0.o' and the standard C libraries are `libads.a' and 12770 `libc.a'. 12771 12772 `-myellowknife' 12773 On embedded PowerPC systems, assume that the startup module is 12774 called `crt0.o' and the standard C libraries are `libyk.a' and 12775 `libc.a'. 12776 12777 `-mvxworks' 12778 On System V.4 and embedded PowerPC systems, specify that you are 12779 compiling for a VxWorks system. 12780 12781 `-mwindiss' 12782 Specify that you are compiling for the WindISS simulation 12783 environment. 12784 12785 `-memb' 12786 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 12787 header to indicate that `eabi' extended relocations are used. 12788 12789 `-meabi' 12790 `-mno-eabi' 12791 On System V.4 and embedded PowerPC systems do (do not) adhere to 12792 the Embedded Applications Binary Interface (eabi) which is a set of 12793 modifications to the System V.4 specifications. Selecting `-meabi' 12794 means that the stack is aligned to an 8 byte boundary, a function 12795 `__eabi' is called to from `main' to set up the eabi environment, 12796 and the `-msdata' option can use both `r2' and `r13' to point to 12797 two separate small data areas. Selecting `-mno-eabi' means that 12798 the stack is aligned to a 16 byte boundary, do not call an 12799 initialization function from `main', and the `-msdata' option will 12800 only use `r13' to point to a single small data area. The `-meabi' 12801 option is on by default if you configured GCC using one of the 12802 `powerpc*-*-eabi*' options. 12803 12804 `-msdata=eabi' 12805 On System V.4 and embedded PowerPC systems, put small initialized 12806 `const' global and static data in the `.sdata2' section, which is 12807 pointed to by register `r2'. Put small initialized non-`const' 12808 global and static data in the `.sdata' section, which is pointed 12809 to by register `r13'. Put small uninitialized global and static 12810 data in the `.sbss' section, which is adjacent to the `.sdata' 12811 section. The `-msdata=eabi' option is incompatible with the 12812 `-mrelocatable' option. The `-msdata=eabi' option also sets the 12813 `-memb' option. 12814 12815 `-msdata=sysv' 12816 On System V.4 and embedded PowerPC systems, put small global and 12817 static data in the `.sdata' section, which is pointed to by 12818 register `r13'. Put small uninitialized global and static data in 12819 the `.sbss' section, which is adjacent to the `.sdata' section. 12820 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 12821 option. 12822 12823 `-msdata=default' 12824 `-msdata' 12825 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 12826 compile code the same as `-msdata=eabi', otherwise compile code the 12827 same as `-msdata=sysv'. 12828 12829 `-msdata-data' 12830 On System V.4 and embedded PowerPC systems, put small global data 12831 in the `.sdata' section. Put small uninitialized global data in 12832 the `.sbss' section. Do not use register `r13' to address small 12833 data however. This is the default behavior unless other `-msdata' 12834 options are used. 12835 12836 `-msdata=none' 12837 `-mno-sdata' 12838 On embedded PowerPC systems, put all initialized global and static 12839 data in the `.data' section, and all uninitialized data in the 12840 `.bss' section. 12841 12842 `-G NUM' 12843 On embedded PowerPC systems, put global and static items less than 12844 or equal to NUM bytes into the small data or bss sections instead 12845 of the normal data or bss section. By default, NUM is 8. The `-G 12846 NUM' switch is also passed to the linker. All modules should be 12847 compiled with the same `-G NUM' value. 12848 12849 `-mregnames' 12850 `-mno-regnames' 12851 On System V.4 and embedded PowerPC systems do (do not) emit 12852 register names in the assembly language output using symbolic 12853 forms. 12854 12855 `-mlongcall' 12856 `-mno-longcall' 12857 By default assume that all calls are far away so that a longer more 12858 expensive calling sequence is required. This is required for calls 12859 further than 32 megabytes (33,554,432 bytes) from the current 12860 location. A short call will be generated if the compiler knows 12861 the call cannot be that far away. This setting can be overridden 12862 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 12863 12864 Some linkers are capable of detecting out-of-range calls and 12865 generating glue code on the fly. On these systems, long calls are 12866 unnecessary and generate slower code. As of this writing, the AIX 12867 linker can do this, as can the GNU linker for PowerPC/64. It is 12868 planned to add this feature to the GNU linker for 32-bit PowerPC 12869 systems as well. 12870 12871 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 12872 callee, L42", plus a "branch island" (glue code). The two target 12873 addresses represent the callee and the "branch island". The 12874 Darwin/PPC linker will prefer the first address and generate a "bl 12875 callee" if the PPC "bl" instruction will reach the callee directly; 12876 otherwise, the linker will generate "bl L42" to call the "branch 12877 island". The "branch island" is appended to the body of the 12878 calling function; it computes the full 32-bit address of the callee 12879 and jumps to it. 12880 12881 On Mach-O (Darwin) systems, this option directs the compiler emit 12882 to the glue for every direct call, and the Darwin linker decides 12883 whether to use or discard it. 12884 12885 In the future, we may cause GCC to ignore all longcall 12886 specifications when the linker is known to generate glue. 12887 12888 `-pthread' 12889 Adds support for multithreading with the "pthreads" library. This 12890 option sets flags for both the preprocessor and linker. 12891 12892 12893 12894 File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 12895 12896 3.17.28 S/390 and zSeries Options 12897 --------------------------------- 12898 12899 These are the `-m' options defined for the S/390 and zSeries 12900 architecture. 12901 12902 `-mhard-float' 12903 `-msoft-float' 12904 Use (do not use) the hardware floating-point instructions and 12905 registers for floating-point operations. When `-msoft-float' is 12906 specified, functions in `libgcc.a' will be used to perform 12907 floating-point operations. When `-mhard-float' is specified, the 12908 compiler generates IEEE floating-point instructions. This is the 12909 default. 12910 12911 `-mlong-double-64' 12912 `-mlong-double-128' 12913 These switches control the size of `long double' type. A size of 12914 64bit makes the `long double' type equivalent to the `double' 12915 type. This is the default. 12916 12917 `-mbackchain' 12918 `-mno-backchain' 12919 Store (do not store) the address of the caller's frame as 12920 backchain pointer into the callee's stack frame. A backchain may 12921 be needed to allow debugging using tools that do not understand 12922 DWARF-2 call frame information. When `-mno-packed-stack' is in 12923 effect, the backchain pointer is stored at the bottom of the stack 12924 frame; when `-mpacked-stack' is in effect, the backchain is placed 12925 into the topmost word of the 96/160 byte register save area. 12926 12927 In general, code compiled with `-mbackchain' is call-compatible 12928 with code compiled with `-mmo-backchain'; however, use of the 12929 backchain for debugging purposes usually requires that the whole 12930 binary is built with `-mbackchain'. Note that the combination of 12931 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 12932 supported. In order to build a linux kernel use `-msoft-float'. 12933 12934 The default is to not maintain the backchain. 12935 12936 `-mpacked-stack' 12937 12938 `-mno-packed-stack' 12939 Use (do not use) the packed stack layout. When 12940 `-mno-packed-stack' is specified, the compiler uses the all fields 12941 of the 96/160 byte register save area only for their default 12942 purpose; unused fields still take up stack space. When 12943 `-mpacked-stack' is specified, register save slots are densely 12944 packed at the top of the register save area; unused space is 12945 reused for other purposes, allowing for more efficient use of the 12946 available stack space. However, when `-mbackchain' is also in 12947 effect, the topmost word of the save area is always used to store 12948 the backchain, and the return address register is always saved two 12949 words below the backchain. 12950 12951 As long as the stack frame backchain is not used, code generated 12952 with `-mpacked-stack' is call-compatible with code generated with 12953 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 12954 for S/390 or zSeries generated code that uses the stack frame 12955 backchain at run time, not just for debugging purposes. Such code 12956 is not call-compatible with code compiled with `-mpacked-stack'. 12957 Also, note that the combination of `-mbackchain', `-mpacked-stack' 12958 and `-mhard-float' is not supported. In order to build a linux 12959 kernel use `-msoft-float'. 12960 12961 The default is to not use the packed stack layout. 12962 12963 `-msmall-exec' 12964 `-mno-small-exec' 12965 Generate (or do not generate) code using the `bras' instruction to 12966 do subroutine calls. This only works reliably if the total 12967 executable size does not exceed 64k. The default is to use the 12968 `basr' instruction instead, which does not have this limitation. 12969 12970 `-m64' 12971 `-m31' 12972 When `-m31' is specified, generate code compliant to the GNU/Linux 12973 for S/390 ABI. When `-m64' is specified, generate code compliant 12974 to the GNU/Linux for zSeries ABI. This allows GCC in particular 12975 to generate 64-bit instructions. For the `s390' targets, the 12976 default is `-m31', while the `s390x' targets default to `-m64'. 12977 12978 `-mzarch' 12979 `-mesa' 12980 When `-mzarch' is specified, generate code using the instructions 12981 available on z/Architecture. When `-mesa' is specified, generate 12982 code using the instructions available on ESA/390. Note that 12983 `-mesa' is not possible with `-m64'. When generating code 12984 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 12985 When generating code compliant to the GNU/Linux for zSeries ABI, 12986 the default is `-mzarch'. 12987 12988 `-mmvcle' 12989 `-mno-mvcle' 12990 Generate (or do not generate) code using the `mvcle' instruction 12991 to perform block moves. When `-mno-mvcle' is specified, use a 12992 `mvc' loop instead. This is the default unless optimizing for 12993 size. 12994 12995 `-mdebug' 12996 `-mno-debug' 12997 Print (or do not print) additional debug information when 12998 compiling. The default is to not print debug information. 12999 13000 `-march=CPU-TYPE' 13001 Generate code that will run on CPU-TYPE, which is the name of a 13002 system representing a certain processor type. Possible values for 13003 CPU-TYPE are `g5', `g6', `z900', and `z990'. When generating code 13004 using the instructions available on z/Architecture, the default is 13005 `-march=z900'. Otherwise, the default is `-march=g5'. 13006 13007 `-mtune=CPU-TYPE' 13008 Tune to CPU-TYPE everything applicable about the generated code, 13009 except for the ABI and the set of available instructions. The 13010 list of CPU-TYPE values is the same as for `-march'. The default 13011 is the value used for `-march'. 13012 13013 `-mtpf-trace' 13014 `-mno-tpf-trace' 13015 Generate code that adds (does not add) in TPF OS specific branches 13016 to trace routines in the operating system. This option is off by 13017 default, even when compiling for the TPF OS. 13018 13019 `-mfused-madd' 13020 `-mno-fused-madd' 13021 Generate code that uses (does not use) the floating point multiply 13022 and accumulate instructions. These instructions are generated by 13023 default if hardware floating point is used. 13024 13025 `-mwarn-framesize=FRAMESIZE' 13026 Emit a warning if the current function exceeds the given frame 13027 size. Because this is a compile time check it doesn't need to be 13028 a real problem when the program runs. It is intended to identify 13029 functions which most probably cause a stack overflow. It is 13030 useful to be used in an environment with limited stack size e.g. 13031 the linux kernel. 13032 13033 `-mwarn-dynamicstack' 13034 Emit a warning if the function calls alloca or uses dynamically 13035 sized arrays. This is generally a bad idea with a limited stack 13036 size. 13037 13038 `-mstack-guard=STACK-GUARD' 13039 13040 `-mstack-size=STACK-SIZE' 13041 If these options are provided the s390 back end emits additional 13042 instructions in the function prologue which trigger a trap if the 13043 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 13044 that the stack on s390 grows downward). If the STACK-GUARD option 13045 is omitted the smallest power of 2 larger than the frame size of 13046 the compiled function is chosen. These options are intended to be 13047 used to help debugging stack overflow problems. The additionally 13048 emitted code causes only little overhead and hence can also be 13049 used in production like systems without greater performance 13050 degradation. The given values have to be exact powers of 2 and 13051 STACK-SIZE has to be greater than STACK-GUARD without exceeding 13052 64k. In order to be efficient the extra code makes the assumption 13053 that the stack starts at an address aligned to the value given by 13054 STACK-SIZE. The STACK-GUARD option can only be used in 13055 conjunction with STACK-SIZE. 13056 13057 13058 File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 13059 13060 3.17.29 Score Options 13061 --------------------- 13062 13063 These options are defined for Score implementations: 13064 13065 `-meb' 13066 Compile code for big endian mode. This is the default. 13067 13068 `-mel' 13069 Compile code for little endian mode. 13070 13071 `-mnhwloop' 13072 Disable generate bcnz instruction. 13073 13074 `-muls' 13075 Enable generate unaligned load and store instruction. 13076 13077 `-mmac' 13078 Enable the use of multiply-accumulate instructions. Disabled by 13079 default. 13080 13081 `-mscore5' 13082 Specify the SCORE5 as the target architecture. 13083 13084 `-mscore5u' 13085 Specify the SCORE5U of the target architecture. 13086 13087 `-mscore7' 13088 Specify the SCORE7 as the target architecture. This is the default. 13089 13090 `-mscore7d' 13091 Specify the SCORE7D as the target architecture. 13092 13093 13094 File: gcc.info, Node: SH Options, Next: SPARC Options, Prev: Score Options, Up: Submodel Options 13095 13096 3.17.30 SH Options 13097 ------------------ 13098 13099 These `-m' options are defined for the SH implementations: 13100 13101 `-m1' 13102 Generate code for the SH1. 13103 13104 `-m2' 13105 Generate code for the SH2. 13106 13107 `-m2e' 13108 Generate code for the SH2e. 13109 13110 `-m3' 13111 Generate code for the SH3. 13112 13113 `-m3e' 13114 Generate code for the SH3e. 13115 13116 `-m4-nofpu' 13117 Generate code for the SH4 without a floating-point unit. 13118 13119 `-m4-single-only' 13120 Generate code for the SH4 with a floating-point unit that only 13121 supports single-precision arithmetic. 13122 13123 `-m4-single' 13124 Generate code for the SH4 assuming the floating-point unit is in 13125 single-precision mode by default. 13126 13127 `-m4' 13128 Generate code for the SH4. 13129 13130 `-m4a-nofpu' 13131 Generate code for the SH4al-dsp, or for a SH4a in such a way that 13132 the floating-point unit is not used. 13133 13134 `-m4a-single-only' 13135 Generate code for the SH4a, in such a way that no double-precision 13136 floating point operations are used. 13137 13138 `-m4a-single' 13139 Generate code for the SH4a assuming the floating-point unit is in 13140 single-precision mode by default. 13141 13142 `-m4a' 13143 Generate code for the SH4a. 13144 13145 `-m4al' 13146 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 13147 the assembler. GCC doesn't generate any DSP instructions at the 13148 moment. 13149 13150 `-mb' 13151 Compile code for the processor in big endian mode. 13152 13153 `-ml' 13154 Compile code for the processor in little endian mode. 13155 13156 `-mdalign' 13157 Align doubles at 64-bit boundaries. Note that this changes the 13158 calling conventions, and thus some functions from the standard C 13159 library will not work unless you recompile it first with 13160 `-mdalign'. 13161 13162 `-mrelax' 13163 Shorten some address references at link time, when possible; uses 13164 the linker option `-relax'. 13165 13166 `-mbigtable' 13167 Use 32-bit offsets in `switch' tables. The default is to use 13168 16-bit offsets. 13169 13170 `-mfmovd' 13171 Enable the use of the instruction `fmovd'. 13172 13173 `-mhitachi' 13174 Comply with the calling conventions defined by Renesas. 13175 13176 `-mrenesas' 13177 Comply with the calling conventions defined by Renesas. 13178 13179 `-mno-renesas' 13180 Comply with the calling conventions defined for GCC before the 13181 Renesas conventions were available. This option is the default 13182 for all targets of the SH toolchain except for `sh-symbianelf'. 13183 13184 `-mnomacsave' 13185 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 13186 given. 13187 13188 `-mieee' 13189 Increase IEEE-compliance of floating-point code. At the moment, 13190 this is equivalent to `-fno-finite-math-only'. When generating 16 13191 bit SH opcodes, getting IEEE-conforming results for comparisons of 13192 NANs / infinities incurs extra overhead in every floating point 13193 comparison, therefore the default is set to `-ffinite-math-only'. 13194 13195 `-minline-ic_invalidate' 13196 Inline code to invalidate instruction cache entries after setting 13197 up nested function trampolines. This option has no effect if 13198 -musermode is in effect and the selected code generation option 13199 (e.g. -m4) does not allow the use of the icbi instruction. If the 13200 selected code generation option does not allow the use of the icbi 13201 instruction, and -musermode is not in effect, the inlined code will 13202 manipulate the instruction cache address array directly with an 13203 associative write. This not only requires privileged mode, but it 13204 will also fail if the cache line had been mapped via the TLB and 13205 has become unmapped. 13206 13207 `-misize' 13208 Dump instruction size and location in the assembly code. 13209 13210 `-mpadstruct' 13211 This option is deprecated. It pads structures to multiple of 4 13212 bytes, which is incompatible with the SH ABI. 13213 13214 `-mspace' 13215 Optimize for space instead of speed. Implied by `-Os'. 13216 13217 `-mprefergot' 13218 When generating position-independent code, emit function calls 13219 using the Global Offset Table instead of the Procedure Linkage 13220 Table. 13221 13222 `-musermode' 13223 Don't generate privileged mode only code; implies 13224 -mno-inline-ic_invalidate if the inlined code would not work in 13225 user mode. This is the default when the target is `sh-*-linux*'. 13226 13227 `-multcost=NUMBER' 13228 Set the cost to assume for a multiply insn. 13229 13230 `-mdiv=STRATEGY' 13231 Set the division strategy to use for SHmedia code. STRATEGY must 13232 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 13233 inv:call, inv:call2, inv:fp . "fp" performs the operation in 13234 floating point. This has a very high latency, but needs only a 13235 few instructions, so it might be a good choice if your code has 13236 enough easily exploitable ILP to allow the compiler to schedule 13237 the floating point instructions together with other instructions. 13238 Division by zero causes a floating point exception. "inv" uses 13239 integer operations to calculate the inverse of the divisor, and 13240 then multiplies the dividend with the inverse. This strategy 13241 allows cse and hoisting of the inverse calculation. Division by 13242 zero calculates an unspecified result, but does not trap. 13243 "inv:minlat" is a variant of "inv" where if no cse / hoisting 13244 opportunities have been found, or if the entire operation has been 13245 hoisted to the same place, the last stages of the inverse 13246 calculation are intertwined with the final multiply to reduce the 13247 overall latency, at the expense of using a few more instructions, 13248 and thus offering fewer scheduling opportunities with other code. 13249 "call" calls a library function that usually implements the 13250 inv:minlat strategy. This gives high code density for 13251 m5-*media-nofpu compilations. "call2" uses a different entry 13252 point of the same library function, where it assumes that a 13253 pointer to a lookup table has already been set up, which exposes 13254 the pointer load to cse / code hoisting optimizations. 13255 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 13256 for initial code generation, but if the code stays unoptimized, 13257 revert to the "call", "call2", or "fp" strategies, respectively. 13258 Note that the potentially-trapping side effect of division by zero 13259 is carried by a separate instruction, so it is possible that all 13260 the integer instructions are hoisted out, but the marker for the 13261 side effect stays where it is. A recombination to fp operations 13262 or a call is not possible in that case. "inv20u" and "inv20l" are 13263 variants of the "inv:minlat" strategy. In the case that the 13264 inverse calculation was nor separated from the multiply, they speed 13265 up division where the dividend fits into 20 bits (plus sign where 13266 applicable), by inserting a test to skip a number of operations in 13267 this case; this test slows down the case of larger dividends. 13268 inv20u assumes the case of a such a small dividend to be unlikely, 13269 and inv20l assumes it to be likely. 13270 13271 `-mdivsi3_libfunc=NAME' 13272 Set the name of the library function used for 32 bit signed 13273 division to NAME. This only affect the name used in the call and 13274 inv:call division strategies, and the compiler will still expect 13275 the same sets of input/output/clobbered registers as if this 13276 option was not present. 13277 13278 `-madjust-unroll' 13279 Throttle unrolling to avoid thrashing target registers. This 13280 option only has an effect if the gcc code base supports the 13281 TARGET_ADJUST_UNROLL_MAX target hook. 13282 13283 `-mindexed-addressing' 13284 Enable the use of the indexed addressing mode for 13285 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 13286 implement 32 bit wrap-around semantics for the indexed addressing 13287 mode. The architecture allows the implementation of processors 13288 with 64 bit MMU, which the OS could use to get 32 bit addressing, 13289 but since no current hardware implementation supports this or any 13290 other way to make the indexed addressing mode safe to use in the 13291 32 bit ABI, the default is -mno-indexed-addressing. 13292 13293 `-mgettrcost=NUMBER' 13294 Set the cost assumed for the gettr instruction to NUMBER. The 13295 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 13296 13297 `-mpt-fixed' 13298 Assume pt* instructions won't trap. This will generally generate 13299 better scheduled code, but is unsafe on current hardware. The 13300 current architecture definition says that ptabs and ptrel trap 13301 when the target anded with 3 is 3. This has the unintentional 13302 effect of making it unsafe to schedule ptabs / ptrel before a 13303 branch, or hoist it out of a loop. For example, 13304 __do_global_ctors, a part of libgcc that runs constructors at 13305 program startup, calls functions in a list which is delimited by 13306 -1. With the -mpt-fixed option, the ptabs will be done before 13307 testing against -1. That means that all the constructors will be 13308 run a bit quicker, but when the loop comes to the end of the list, 13309 the program crashes because ptabs loads -1 into a target register. 13310 Since this option is unsafe for any hardware implementing the 13311 current architecture specification, the default is -mno-pt-fixed. 13312 Unless the user specifies a specific cost with `-mgettrcost', 13313 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 13314 allocation using target registers for storing ordinary integers. 13315 13316 `-minvalid-symbols' 13317 Assume symbols might be invalid. Ordinary function symbols 13318 generated by the compiler will always be valid to load with 13319 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 13320 linker tricks it is possible to generate symbols that will cause 13321 ptabs / ptrel to trap. This option is only meaningful when 13322 `-mno-pt-fixed' is in effect. It will then prevent 13323 cross-basic-block cse, hoisting and most scheduling of symbol 13324 loads. The default is `-mno-invalid-symbols'. 13325 13326 13327 File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: SH Options, Up: Submodel Options 13328 13329 3.17.31 SPARC Options 13330 --------------------- 13331 13332 These `-m' options are supported on the SPARC: 13333 13334 `-mno-app-regs' 13335 `-mapp-regs' 13336 Specify `-mapp-regs' to generate output using the global registers 13337 2 through 4, which the SPARC SVR4 ABI reserves for applications. 13338 This is the default. 13339 13340 To be fully SVR4 ABI compliant at the cost of some performance 13341 loss, specify `-mno-app-regs'. You should compile libraries and 13342 system software with this option. 13343 13344 `-mfpu' 13345 `-mhard-float' 13346 Generate output containing floating point instructions. This is 13347 the default. 13348 13349 `-mno-fpu' 13350 `-msoft-float' 13351 Generate output containing library calls for floating point. 13352 *Warning:* the requisite libraries are not available for all SPARC 13353 targets. Normally the facilities of the machine's usual C 13354 compiler are used, but this cannot be done directly in 13355 cross-compilation. You must make your own arrangements to provide 13356 suitable library functions for cross-compilation. The embedded 13357 targets `sparc-*-aout' and `sparclite-*-*' do provide software 13358 floating point support. 13359 13360 `-msoft-float' changes the calling convention in the output file; 13361 therefore, it is only useful if you compile _all_ of a program with 13362 this option. In particular, you need to compile `libgcc.a', the 13363 library that comes with GCC, with `-msoft-float' in order for this 13364 to work. 13365 13366 `-mhard-quad-float' 13367 Generate output containing quad-word (long double) floating point 13368 instructions. 13369 13370 `-msoft-quad-float' 13371 Generate output containing library calls for quad-word (long 13372 double) floating point instructions. The functions called are 13373 those specified in the SPARC ABI. This is the default. 13374 13375 As of this writing, there are no SPARC implementations that have 13376 hardware support for the quad-word floating point instructions. 13377 They all invoke a trap handler for one of these instructions, and 13378 then the trap handler emulates the effect of the instruction. 13379 Because of the trap handler overhead, this is much slower than 13380 calling the ABI library routines. Thus the `-msoft-quad-float' 13381 option is the default. 13382 13383 `-mno-unaligned-doubles' 13384 `-munaligned-doubles' 13385 Assume that doubles have 8 byte alignment. This is the default. 13386 13387 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 13388 alignment only if they are contained in another type, or if they 13389 have an absolute address. Otherwise, it assumes they have 4 byte 13390 alignment. Specifying this option avoids some rare compatibility 13391 problems with code generated by other compilers. It is not the 13392 default because it results in a performance loss, especially for 13393 floating point code. 13394 13395 `-mno-faster-structs' 13396 `-mfaster-structs' 13397 With `-mfaster-structs', the compiler assumes that structures 13398 should have 8 byte alignment. This enables the use of pairs of 13399 `ldd' and `std' instructions for copies in structure assignment, 13400 in place of twice as many `ld' and `st' pairs. However, the use 13401 of this changed alignment directly violates the SPARC ABI. Thus, 13402 it's intended only for use on targets where the developer 13403 acknowledges that their resulting code will not be directly in 13404 line with the rules of the ABI. 13405 13406 `-mimpure-text' 13407 `-mimpure-text', used in addition to `-shared', tells the compiler 13408 to not pass `-z text' to the linker when linking a shared object. 13409 Using this option, you can link position-dependent code into a 13410 shared object. 13411 13412 `-mimpure-text' suppresses the "relocations remain against 13413 allocatable but non-writable sections" linker error message. 13414 However, the necessary relocations will trigger copy-on-write, and 13415 the shared object is not actually shared across processes. 13416 Instead of using `-mimpure-text', you should compile all source 13417 code with `-fpic' or `-fPIC'. 13418 13419 This option is only available on SunOS and Solaris. 13420 13421 `-mcpu=CPU_TYPE' 13422 Set the instruction set, register set, and instruction scheduling 13423 parameters for machine type CPU_TYPE. Supported values for 13424 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', 13425 `f930', `f934', `hypersparc', `sparclite86x', `sparclet', 13426 `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and 13427 `niagara2'. 13428 13429 Default instruction scheduling parameters are used for values that 13430 select an architecture and not an implementation. These are `v7', 13431 `v8', `sparclite', `sparclet', `v9'. 13432 13433 Here is a list of each supported architecture and their supported 13434 implementations. 13435 13436 v7: cypress 13437 v8: supersparc, hypersparc 13438 sparclite: f930, f934, sparclite86x 13439 sparclet: tsc701 13440 v9: ultrasparc, ultrasparc3, niagara, niagara2 13441 13442 By default (unless configured otherwise), GCC generates code for 13443 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 13444 the compiler additionally optimizes it for the Cypress CY7C602 13445 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 13446 also appropriate for the older SPARCStation 1, 2, IPX etc. 13447 13448 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 13449 architecture. The only difference from V7 code is that the 13450 compiler emits the integer multiply and integer divide 13451 instructions which exist in SPARC-V8 but not in SPARC-V7. With 13452 `-mcpu=supersparc', the compiler additionally optimizes it for the 13453 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 13454 series. 13455 13456 With `-mcpu=sparclite', GCC generates code for the SPARClite 13457 variant of the SPARC architecture. This adds the integer 13458 multiply, integer divide step and scan (`ffs') instructions which 13459 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 13460 compiler additionally optimizes it for the Fujitsu MB86930 chip, 13461 which is the original SPARClite, with no FPU. With `-mcpu=f934', 13462 the compiler additionally optimizes it for the Fujitsu MB86934 13463 chip, which is the more recent SPARClite with FPU. 13464 13465 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 13466 of the SPARC architecture. This adds the integer multiply, 13467 multiply/accumulate, integer divide step and scan (`ffs') 13468 instructions which exist in SPARClet but not in SPARC-V7. With 13469 `-mcpu=tsc701', the compiler additionally optimizes it for the 13470 TEMIC SPARClet chip. 13471 13472 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 13473 architecture. This adds 64-bit integer and floating-point move 13474 instructions, 3 additional floating-point condition code registers 13475 and conditional move instructions. With `-mcpu=ultrasparc', the 13476 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 13477 chips. With `-mcpu=ultrasparc3', the compiler additionally 13478 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 13479 chips. With `-mcpu=niagara', the compiler additionally optimizes 13480 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 13481 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 13482 13483 `-mtune=CPU_TYPE' 13484 Set the instruction scheduling parameters for machine type 13485 CPU_TYPE, but do not set the instruction set or register set that 13486 the option `-mcpu=CPU_TYPE' would. 13487 13488 The same values for `-mcpu=CPU_TYPE' can be used for 13489 `-mtune=CPU_TYPE', but the only useful values are those that 13490 select a particular cpu implementation. Those are `cypress', 13491 `supersparc', `hypersparc', `f930', `f934', `sparclite86x', 13492 `tsc701', `ultrasparc', `ultrasparc3', `niagara', and `niagara2'. 13493 13494 `-mv8plus' 13495 `-mno-v8plus' 13496 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 13497 difference from the V8 ABI is that the global and out registers are 13498 considered 64-bit wide. This is enabled by default on Solaris in 13499 32-bit mode for all SPARC-V9 processors. 13500 13501 `-mvis' 13502 `-mno-vis' 13503 With `-mvis', GCC generates code that takes advantage of the 13504 UltraSPARC Visual Instruction Set extensions. The default is 13505 `-mno-vis'. 13506 13507 These `-m' options are supported in addition to the above on SPARC-V9 13508 processors in 64-bit environments: 13509 13510 `-mlittle-endian' 13511 Generate code for a processor running in little-endian mode. It 13512 is only available for a few configurations and most notably not on 13513 Solaris and Linux. 13514 13515 `-m32' 13516 `-m64' 13517 Generate code for a 32-bit or 64-bit environment. The 32-bit 13518 environment sets int, long and pointer to 32 bits. The 64-bit 13519 environment sets int to 32 bits and long and pointer to 64 bits. 13520 13521 `-mcmodel=medlow' 13522 Generate code for the Medium/Low code model: 64-bit addresses, 13523 programs must be linked in the low 32 bits of memory. Programs 13524 can be statically or dynamically linked. 13525 13526 `-mcmodel=medmid' 13527 Generate code for the Medium/Middle code model: 64-bit addresses, 13528 programs must be linked in the low 44 bits of memory, the text and 13529 data segments must be less than 2GB in size and the data segment 13530 must be located within 2GB of the text segment. 13531 13532 `-mcmodel=medany' 13533 Generate code for the Medium/Anywhere code model: 64-bit 13534 addresses, programs may be linked anywhere in memory, the text and 13535 data segments must be less than 2GB in size and the data segment 13536 must be located within 2GB of the text segment. 13537 13538 `-mcmodel=embmedany' 13539 Generate code for the Medium/Anywhere code model for embedded 13540 systems: 64-bit addresses, the text and data segments must be less 13541 than 2GB in size, both starting anywhere in memory (determined at 13542 link time). The global register %g4 points to the base of the 13543 data segment. Programs are statically linked and PIC is not 13544 supported. 13545 13546 `-mstack-bias' 13547 `-mno-stack-bias' 13548 With `-mstack-bias', GCC assumes that the stack pointer, and frame 13549 pointer if present, are offset by -2047 which must be added back 13550 when making stack frame references. This is the default in 64-bit 13551 mode. Otherwise, assume no such offset is present. 13552 13553 These switches are supported in addition to the above on Solaris: 13554 13555 `-threads' 13556 Add support for multithreading using the Solaris threads library. 13557 This option sets flags for both the preprocessor and linker. This 13558 option does not affect the thread safety of object code produced 13559 by the compiler or that of libraries supplied with it. 13560 13561 `-pthreads' 13562 Add support for multithreading using the POSIX threads library. 13563 This option sets flags for both the preprocessor and linker. This 13564 option does not affect the thread safety of object code produced 13565 by the compiler or that of libraries supplied with it. 13566 13567 `-pthread' 13568 This is a synonym for `-pthreads'. 13569 13570 13571 File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 13572 13573 3.17.32 SPU Options 13574 ------------------- 13575 13576 These `-m' options are supported on the SPU: 13577 13578 `-mwarn-reloc' 13579 `-merror-reloc' 13580 The loader for SPU does not handle dynamic relocations. By 13581 default, GCC will give an error when it generates code that 13582 requires a dynamic relocation. `-mno-error-reloc' disables the 13583 error, `-mwarn-reloc' will generate a warning instead. 13584 13585 `-msafe-dma' 13586 `-munsafe-dma' 13587 Instructions which initiate or test completion of DMA must not be 13588 reordered with respect to loads and stores of the memory which is 13589 being accessed. Users typically address this problem using the 13590 volatile keyword, but that can lead to inefficient code in places 13591 where the memory is known to not change. Rather than mark the 13592 memory as volatile we treat the DMA instructions as potentially 13593 effecting all memory. With `-munsafe-dma' users must use the 13594 volatile keyword to protect memory accesses. 13595 13596 `-mbranch-hints' 13597 By default, GCC will generate a branch hint instruction to avoid 13598 pipeline stalls for always taken or probably taken branches. A 13599 hint will not be generated closer than 8 instructions away from 13600 its branch. There is little reason to disable them, except for 13601 debugging purposes, or to make an object a little bit smaller. 13602 13603 `-msmall-mem' 13604 `-mlarge-mem' 13605 By default, GCC generates code assuming that addresses are never 13606 larger than 18 bits. With `-mlarge-mem' code is generated that 13607 assumes a full 32 bit address. 13608 13609 `-mstdmain' 13610 By default, GCC links against startup code that assumes the 13611 SPU-style main function interface (which has an unconventional 13612 parameter list). With `-mstdmain', GCC will link your program 13613 against startup code that assumes a C99-style interface to `main', 13614 including a local copy of `argv' strings. 13615 13616 `-mfixed-range=REGISTER-RANGE' 13617 Generate code treating the given register range as fixed registers. 13618 A fixed register is one that the register allocator can not use. 13619 This is useful when compiling kernel code. A register range is 13620 specified as two registers separated by a dash. Multiple register 13621 ranges can be specified separated by a comma. 13622 13623 13624 13625 File: gcc.info, Node: System V Options, Next: V850 Options, Prev: SPU Options, Up: Submodel Options 13626 13627 3.17.33 Options for System V 13628 ---------------------------- 13629 13630 These additional options are available on System V Release 4 for 13631 compatibility with other compilers on those systems: 13632 13633 `-G' 13634 Create a shared object. It is recommended that `-symbolic' or 13635 `-shared' be used instead. 13636 13637 `-Qy' 13638 Identify the versions of each tool used by the compiler, in a 13639 `.ident' assembler directive in the output. 13640 13641 `-Qn' 13642 Refrain from adding `.ident' directives to the output file (this is 13643 the default). 13644 13645 `-YP,DIRS' 13646 Search the directories DIRS, and no others, for libraries 13647 specified with `-l'. 13648 13649 `-Ym,DIR' 13650 Look in the directory DIR to find the M4 preprocessor. The 13651 assembler uses this option. 13652 13653 13654 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: System V Options, Up: Submodel Options 13655 13656 3.17.34 V850 Options 13657 -------------------- 13658 13659 These `-m' options are defined for V850 implementations: 13660 13661 `-mlong-calls' 13662 `-mno-long-calls' 13663 Treat all calls as being far away (near). If calls are assumed to 13664 be far away, the compiler will always load the functions address 13665 up into a register, and call indirect through the pointer. 13666 13667 `-mno-ep' 13668 `-mep' 13669 Do not optimize (do optimize) basic blocks that use the same index 13670 pointer 4 or more times to copy pointer into the `ep' register, and 13671 use the shorter `sld' and `sst' instructions. The `-mep' option 13672 is on by default if you optimize. 13673 13674 `-mno-prolog-function' 13675 `-mprolog-function' 13676 Do not use (do use) external functions to save and restore 13677 registers at the prologue and epilogue of a function. The 13678 external functions are slower, but use less code space if more 13679 than one function saves the same number of registers. The 13680 `-mprolog-function' option is on by default if you optimize. 13681 13682 `-mspace' 13683 Try to make the code as small as possible. At present, this just 13684 turns on the `-mep' and `-mprolog-function' options. 13685 13686 `-mtda=N' 13687 Put static or global variables whose size is N bytes or less into 13688 the tiny data area that register `ep' points to. The tiny data 13689 area can hold up to 256 bytes in total (128 bytes for byte 13690 references). 13691 13692 `-msda=N' 13693 Put static or global variables whose size is N bytes or less into 13694 the small data area that register `gp' points to. The small data 13695 area can hold up to 64 kilobytes. 13696 13697 `-mzda=N' 13698 Put static or global variables whose size is N bytes or less into 13699 the first 32 kilobytes of memory. 13700 13701 `-mv850' 13702 Specify that the target processor is the V850. 13703 13704 `-mbig-switch' 13705 Generate code suitable for big switch tables. Use this option 13706 only if the assembler/linker complain about out of range branches 13707 within a switch table. 13708 13709 `-mapp-regs' 13710 This option will cause r2 and r5 to be used in the code generated 13711 by the compiler. This setting is the default. 13712 13713 `-mno-app-regs' 13714 This option will cause r2 and r5 to be treated as fixed registers. 13715 13716 `-mv850e1' 13717 Specify that the target processor is the V850E1. The preprocessor 13718 constants `__v850e1__' and `__v850e__' will be defined if this 13719 option is used. 13720 13721 `-mv850e' 13722 Specify that the target processor is the V850E. The preprocessor 13723 constant `__v850e__' will be defined if this option is used. 13724 13725 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then 13726 a default target processor will be chosen and the relevant 13727 `__v850*__' preprocessor constant will be defined. 13728 13729 The preprocessor constants `__v850' and `__v851__' are always 13730 defined, regardless of which processor variant is the target. 13731 13732 `-mdisable-callt' 13733 This option will suppress generation of the CALLT instruction for 13734 the v850e and v850e1 flavors of the v850 architecture. The 13735 default is `-mno-disable-callt' which allows the CALLT instruction 13736 to be used. 13737 13738 13739 13740 File: gcc.info, Node: VAX Options, Next: VxWorks Options, Prev: V850 Options, Up: Submodel Options 13741 13742 3.17.35 VAX Options 13743 ------------------- 13744 13745 These `-m' options are defined for the VAX: 13746 13747 `-munix' 13748 Do not output certain jump instructions (`aobleq' and so on) that 13749 the Unix assembler for the VAX cannot handle across long ranges. 13750 13751 `-mgnu' 13752 Do output those jump instructions, on the assumption that you will 13753 assemble with the GNU assembler. 13754 13755 `-mg' 13756 Output code for g-format floating point numbers instead of 13757 d-format. 13758 13759 13760 File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VAX Options, Up: Submodel Options 13761 13762 3.17.36 VxWorks Options 13763 ----------------------- 13764 13765 The options in this section are defined for all VxWorks targets. 13766 Options specific to the target hardware are listed with the other 13767 options for that target. 13768 13769 `-mrtp' 13770 GCC can generate code for both VxWorks kernels and real time 13771 processes (RTPs). This option switches from the former to the 13772 latter. It also defines the preprocessor macro `__RTP__'. 13773 13774 `-non-static' 13775 Link an RTP executable against shared libraries rather than static 13776 libraries. The options `-static' and `-shared' can also be used 13777 for RTPs (*note Link Options::); `-static' is the default. 13778 13779 `-Bstatic' 13780 `-Bdynamic' 13781 These options are passed down to the linker. They are defined for 13782 compatibility with Diab. 13783 13784 `-Xbind-lazy' 13785 Enable lazy binding of function calls. This option is equivalent 13786 to `-Wl,-z,now' and is defined for compatibility with Diab. 13787 13788 `-Xbind-now' 13789 Disable lazy binding of function calls. This option is the 13790 default and is defined for compatibility with Diab. 13791 13792 13793 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 13794 13795 3.17.37 x86-64 Options 13796 ---------------------- 13797 13798 These are listed under *Note i386 and x86-64 Options::. 13799 13800 13801 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 13802 13803 3.17.38 Xstormy16 Options 13804 ------------------------- 13805 13806 These options are defined for Xstormy16: 13807 13808 `-msim' 13809 Choose startup files and linker script suitable for the simulator. 13810 13811 13812 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 13813 13814 3.17.39 Xtensa Options 13815 ---------------------- 13816 13817 These options are supported for Xtensa targets: 13818 13819 `-mconst16' 13820 `-mno-const16' 13821 Enable or disable use of `CONST16' instructions for loading 13822 constant values. The `CONST16' instruction is currently not a 13823 standard option from Tensilica. When enabled, `CONST16' 13824 instructions are always used in place of the standard `L32R' 13825 instructions. The use of `CONST16' is enabled by default only if 13826 the `L32R' instruction is not available. 13827 13828 `-mfused-madd' 13829 `-mno-fused-madd' 13830 Enable or disable use of fused multiply/add and multiply/subtract 13831 instructions in the floating-point option. This has no effect if 13832 the floating-point option is not also enabled. Disabling fused 13833 multiply/add and multiply/subtract instructions forces the 13834 compiler to use separate instructions for the multiply and 13835 add/subtract operations. This may be desirable in some cases 13836 where strict IEEE 754-compliant results are required: the fused 13837 multiply add/subtract instructions do not round the intermediate 13838 result, thereby producing results with _more_ bits of precision 13839 than specified by the IEEE standard. Disabling fused multiply 13840 add/subtract instructions also ensures that the program output is 13841 not sensitive to the compiler's ability to combine multiply and 13842 add/subtract operations. 13843 13844 `-mtext-section-literals' 13845 `-mno-text-section-literals' 13846 Control the treatment of literal pools. The default is 13847 `-mno-text-section-literals', which places literals in a separate 13848 section in the output file. This allows the literal pool to be 13849 placed in a data RAM/ROM, and it also allows the linker to combine 13850 literal pools from separate object files to remove redundant 13851 literals and improve code size. With `-mtext-section-literals', 13852 the literals are interspersed in the text section in order to keep 13853 them as close as possible to their references. This may be 13854 necessary for large assembly files. 13855 13856 `-mtarget-align' 13857 `-mno-target-align' 13858 When this option is enabled, GCC instructs the assembler to 13859 automatically align instructions to reduce branch penalties at the 13860 expense of some code density. The assembler attempts to widen 13861 density instructions to align branch targets and the instructions 13862 following call instructions. If there are not enough preceding 13863 safe density instructions to align a target, no widening will be 13864 performed. The default is `-mtarget-align'. These options do not 13865 affect the treatment of auto-aligned instructions like `LOOP', 13866 which the assembler will always align, either by widening density 13867 instructions or by inserting no-op instructions. 13868 13869 `-mlongcalls' 13870 `-mno-longcalls' 13871 When this option is enabled, GCC instructs the assembler to 13872 translate direct calls to indirect calls unless it can determine 13873 that the target of a direct call is in the range allowed by the 13874 call instruction. This translation typically occurs for calls to 13875 functions in other source files. Specifically, the assembler 13876 translates a direct `CALL' instruction into an `L32R' followed by 13877 a `CALLX' instruction. The default is `-mno-longcalls'. This 13878 option should be used in programs where the call target can 13879 potentially be out of range. This option is implemented in the 13880 assembler, not the compiler, so the assembly code generated by GCC 13881 will still show direct call instructions--look at the disassembled 13882 object code to see the actual instructions. Note that the 13883 assembler will use an indirect call for every cross-file call, not 13884 just those that really will be out of range. 13885 13886 13887 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 13888 13889 3.17.40 zSeries Options 13890 ----------------------- 13891 13892 These are listed under *Note S/390 and zSeries Options::. 13893 13894 13895 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 13896 13897 3.18 Options for Code Generation Conventions 13898 ============================================ 13899 13900 These machine-independent options control the interface conventions 13901 used in code generation. 13902 13903 Most of them have both positive and negative forms; the negative form 13904 of `-ffoo' would be `-fno-foo'. In the table below, only one of the 13905 forms is listed--the one which is not the default. You can figure out 13906 the other form by either removing `no-' or adding it. 13907 13908 `-fbounds-check' 13909 For front-ends that support it, generate additional code to check 13910 that indices used to access arrays are within the declared range. 13911 This is currently only supported by the Java and Fortran 13912 front-ends, where this option defaults to true and false 13913 respectively. 13914 13915 `-ftrapv' 13916 This option generates traps for signed overflow on addition, 13917 subtraction, multiplication operations. 13918 13919 `-fwrapv' 13920 This option instructs the compiler to assume that signed arithmetic 13921 overflow of addition, subtraction and multiplication wraps around 13922 using twos-complement representation. This flag enables some 13923 optimizations and disables others. This option is enabled by 13924 default for the Java front-end, as required by the Java language 13925 specification. 13926 13927 `-fexceptions' 13928 Enable exception handling. Generates extra code needed to 13929 propagate exceptions. For some targets, this implies GCC will 13930 generate frame unwind information for all functions, which can 13931 produce significant data size overhead, although it does not 13932 affect execution. If you do not specify this option, GCC will 13933 enable it by default for languages like C++ which normally require 13934 exception handling, and disable it for languages like C that do 13935 not normally require it. However, you may need to enable this 13936 option when compiling C code that needs to interoperate properly 13937 with exception handlers written in C++. You may also wish to 13938 disable this option if you are compiling older C++ programs that 13939 don't use exception handling. 13940 13941 `-fnon-call-exceptions' 13942 Generate code that allows trapping instructions to throw 13943 exceptions. Note that this requires platform-specific runtime 13944 support that does not exist everywhere. Moreover, it only allows 13945 _trapping_ instructions to throw exceptions, i.e. memory 13946 references or floating point instructions. It does not allow 13947 exceptions to be thrown from arbitrary signal handlers such as 13948 `SIGALRM'. 13949 13950 `-funwind-tables' 13951 Similar to `-fexceptions', except that it will just generate any 13952 needed static data, but will not affect the generated code in any 13953 other way. You will normally not enable this option; instead, a 13954 language processor that needs this handling would enable it on 13955 your behalf. 13956 13957 `-fasynchronous-unwind-tables' 13958 Generate unwind table in dwarf2 format, if supported by target 13959 machine. The table is exact at each instruction boundary, so it 13960 can be used for stack unwinding from asynchronous events (such as 13961 debugger or garbage collector). 13962 13963 `-fpcc-struct-return' 13964 Return "short" `struct' and `union' values in memory like longer 13965 ones, rather than in registers. This convention is less 13966 efficient, but it has the advantage of allowing intercallability 13967 between GCC-compiled files and files compiled with other 13968 compilers, particularly the Portable C Compiler (pcc). 13969 13970 The precise convention for returning structures in memory depends 13971 on the target configuration macros. 13972 13973 Short structures and unions are those whose size and alignment 13974 match that of some integer type. 13975 13976 *Warning:* code compiled with the `-fpcc-struct-return' switch is 13977 not binary compatible with code compiled with the 13978 `-freg-struct-return' switch. Use it to conform to a non-default 13979 application binary interface. 13980 13981 `-freg-struct-return' 13982 Return `struct' and `union' values in registers when possible. 13983 This is more efficient for small structures than 13984 `-fpcc-struct-return'. 13985 13986 If you specify neither `-fpcc-struct-return' nor 13987 `-freg-struct-return', GCC defaults to whichever convention is 13988 standard for the target. If there is no standard convention, GCC 13989 defaults to `-fpcc-struct-return', except on targets where GCC is 13990 the principal compiler. In those cases, we can choose the 13991 standard, and we chose the more efficient register return 13992 alternative. 13993 13994 *Warning:* code compiled with the `-freg-struct-return' switch is 13995 not binary compatible with code compiled with the 13996 `-fpcc-struct-return' switch. Use it to conform to a non-default 13997 application binary interface. 13998 13999 `-fshort-enums' 14000 Allocate to an `enum' type only as many bytes as it needs for the 14001 declared range of possible values. Specifically, the `enum' type 14002 will be equivalent to the smallest integer type which has enough 14003 room. 14004 14005 *Warning:* the `-fshort-enums' switch causes GCC to generate code 14006 that is not binary compatible with code generated without that 14007 switch. Use it to conform to a non-default application binary 14008 interface. 14009 14010 `-fshort-double' 14011 Use the same size for `double' as for `float'. 14012 14013 *Warning:* the `-fshort-double' switch causes GCC to generate code 14014 that is not binary compatible with code generated without that 14015 switch. Use it to conform to a non-default application binary 14016 interface. 14017 14018 `-fshort-wchar' 14019 Override the underlying type for `wchar_t' to be `short unsigned 14020 int' instead of the default for the target. This option is useful 14021 for building programs to run under WINE. 14022 14023 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 14024 that is not binary compatible with code generated without that 14025 switch. Use it to conform to a non-default application binary 14026 interface. 14027 14028 `-fno-common' 14029 In C, allocate even uninitialized global variables in the data 14030 section of the object file, rather than generating them as common 14031 blocks. This has the effect that if the same variable is declared 14032 (without `extern') in two different compilations, you will get an 14033 error when you link them. The only reason this might be useful is 14034 if you wish to verify that the program will work on other systems 14035 which always work this way. 14036 14037 `-fno-ident' 14038 Ignore the `#ident' directive. 14039 14040 `-finhibit-size-directive' 14041 Don't output a `.size' assembler directive, or anything else that 14042 would cause trouble if the function is split in the middle, and the 14043 two halves are placed at locations far apart in memory. This 14044 option is used when compiling `crtstuff.c'; you should not need to 14045 use it for anything else. 14046 14047 `-fverbose-asm' 14048 Put extra commentary information in the generated assembly code to 14049 make it more readable. This option is generally only of use to 14050 those who actually need to read the generated assembly code 14051 (perhaps while debugging the compiler itself). 14052 14053 `-fno-verbose-asm', the default, causes the extra information to 14054 be omitted and is useful when comparing two assembler files. 14055 14056 `-frecord-gcc-switches' 14057 This switch causes the command line that was used to invoke the 14058 compiler to be recorded into the object file that is being created. 14059 This switch is only implemented on some targets and the exact 14060 format of the recording is target and binary file format 14061 dependent, but it usually takes the form of a section containing 14062 ASCII text. This switch is related to the `-fverbose-asm' switch, 14063 but that switch only records information in the assembler output 14064 file as comments, so it never reaches the object file. 14065 14066 `-fpic' 14067 Generate position-independent code (PIC) suitable for use in a 14068 shared library, if supported for the target machine. Such code 14069 accesses all constant addresses through a global offset table 14070 (GOT). The dynamic loader resolves the GOT entries when the 14071 program starts (the dynamic loader is not part of GCC; it is part 14072 of the operating system). If the GOT size for the linked 14073 executable exceeds a machine-specific maximum size, you get an 14074 error message from the linker indicating that `-fpic' does not 14075 work; in that case, recompile with `-fPIC' instead. (These 14076 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 14077 386 has no such limit.) 14078 14079 Position-independent code requires special support, and therefore 14080 works only on certain machines. For the 386, GCC supports PIC for 14081 System V but not for the Sun 386i. Code generated for the IBM 14082 RS/6000 is always position-independent. 14083 14084 When this flag is set, the macros `__pic__' and `__PIC__' are 14085 defined to 1. 14086 14087 `-fPIC' 14088 If supported for the target machine, emit position-independent 14089 code, suitable for dynamic linking and avoiding any limit on the 14090 size of the global offset table. This option makes a difference 14091 on the m68k, PowerPC and SPARC. 14092 14093 Position-independent code requires special support, and therefore 14094 works only on certain machines. 14095 14096 When this flag is set, the macros `__pic__' and `__PIC__' are 14097 defined to 2. 14098 14099 `-fpie' 14100 `-fPIE' 14101 These options are similar to `-fpic' and `-fPIC', but generated 14102 position independent code can be only linked into executables. 14103 Usually these options are used when `-pie' GCC option will be used 14104 during linking. 14105 14106 `-fpie' and `-fPIE' both define the macros `__pie__' and 14107 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 14108 `-fPIE'. 14109 14110 `-fno-jump-tables' 14111 Do not use jump tables for switch statements even where it would be 14112 more efficient than other code generation strategies. This option 14113 is of use in conjunction with `-fpic' or `-fPIC' for building code 14114 which forms part of a dynamic linker and cannot reference the 14115 address of a jump table. On some targets, jump tables do not 14116 require a GOT and this option is not needed. 14117 14118 `-ffixed-REG' 14119 Treat the register named REG as a fixed register; generated code 14120 should never refer to it (except perhaps as a stack pointer, frame 14121 pointer or in some other fixed role). 14122 14123 REG must be the name of a register. The register names accepted 14124 are machine-specific and are defined in the `REGISTER_NAMES' macro 14125 in the machine description macro file. 14126 14127 This flag does not have a negative form, because it specifies a 14128 three-way choice. 14129 14130 `-fcall-used-REG' 14131 Treat the register named REG as an allocable register that is 14132 clobbered by function calls. It may be allocated for temporaries 14133 or variables that do not live across a call. Functions compiled 14134 this way will not save and restore the register REG. 14135 14136 It is an error to used this flag with the frame pointer or stack 14137 pointer. Use of this flag for other registers that have fixed 14138 pervasive roles in the machine's execution model will produce 14139 disastrous results. 14140 14141 This flag does not have a negative form, because it specifies a 14142 three-way choice. 14143 14144 `-fcall-saved-REG' 14145 Treat the register named REG as an allocable register saved by 14146 functions. It may be allocated even for temporaries or variables 14147 that live across a call. Functions compiled this way will save 14148 and restore the register REG if they use it. 14149 14150 It is an error to used this flag with the frame pointer or stack 14151 pointer. Use of this flag for other registers that have fixed 14152 pervasive roles in the machine's execution model will produce 14153 disastrous results. 14154 14155 A different sort of disaster will result from the use of this flag 14156 for a register in which function values may be returned. 14157 14158 This flag does not have a negative form, because it specifies a 14159 three-way choice. 14160 14161 `-fpack-struct[=N]' 14162 Without a value specified, pack all structure members together 14163 without holes. When a value is specified (which must be a small 14164 power of two), pack structure members according to this value, 14165 representing the maximum alignment (that is, objects with default 14166 alignment requirements larger than this will be output potentially 14167 unaligned at the next fitting location. 14168 14169 *Warning:* the `-fpack-struct' switch causes GCC to generate code 14170 that is not binary compatible with code generated without that 14171 switch. Additionally, it makes the code suboptimal. Use it to 14172 conform to a non-default application binary interface. 14173 14174 `-finstrument-functions' 14175 Generate instrumentation calls for entry and exit to functions. 14176 Just after function entry and just before function exit, the 14177 following profiling functions will be called with the address of 14178 the current function and its call site. (On some platforms, 14179 `__builtin_return_address' does not work beyond the current 14180 function, so the call site information may not be available to the 14181 profiling functions otherwise.) 14182 14183 void __cyg_profile_func_enter (void *this_fn, 14184 void *call_site); 14185 void __cyg_profile_func_exit (void *this_fn, 14186 void *call_site); 14187 14188 The first argument is the address of the start of the current 14189 function, which may be looked up exactly in the symbol table. 14190 14191 This instrumentation is also done for functions expanded inline in 14192 other functions. The profiling calls will indicate where, 14193 conceptually, the inline function is entered and exited. This 14194 means that addressable versions of such functions must be 14195 available. If all your uses of a function are expanded inline, 14196 this may mean an additional expansion of code size. If you use 14197 `extern inline' in your C code, an addressable version of such 14198 functions must be provided. (This is normally the case anyways, 14199 but if you get lucky and the optimizer always expands the 14200 functions inline, you might have gotten away without providing 14201 static copies.) 14202 14203 A function may be given the attribute `no_instrument_function', in 14204 which case this instrumentation will not be done. This can be 14205 used, for example, for the profiling functions listed above, 14206 high-priority interrupt routines, and any functions from which the 14207 profiling functions cannot safely be called (perhaps signal 14208 handlers, if the profiling routines generate output or allocate 14209 memory). 14210 14211 `-finstrument-functions-exclude-file-list=FILE,FILE,...' 14212 Set the list of functions that are excluded from instrumentation 14213 (see the description of `-finstrument-functions'). If the file 14214 that contains a function definition matches with one of FILE, then 14215 that function is not instrumented. The match is done on 14216 substrings: if the FILE parameter is a substring of the file name, 14217 it is considered to be a match. 14218 14219 For example, 14220 `-finstrument-functions-exclude-file-list=/bits/stl,include/sys' 14221 will exclude any inline function defined in files whose pathnames 14222 contain `/bits/stl' or `include/sys'. 14223 14224 If, for some reason, you want to include letter `','' in one of 14225 SYM, write `'\,''. For example, 14226 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 14227 single quote surrounding the option). 14228 14229 `-finstrument-functions-exclude-function-list=SYM,SYM,...' 14230 This is similar to `-finstrument-functions-exclude-file-list', but 14231 this option sets the list of function names to be excluded from 14232 instrumentation. The function name to be matched is its 14233 user-visible name, such as `vector<int> blah(const vector<int> 14234 &)', not the internal mangled name (e.g., 14235 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 14236 the SYM parameter is a substring of the function name, it is 14237 considered to be a match. 14238 14239 `-fstack-check' 14240 Generate code to verify that you do not go beyond the boundary of 14241 the stack. You should specify this flag if you are running in an 14242 environment with multiple threads, but only rarely need to specify 14243 it in a single-threaded environment since stack overflow is 14244 automatically detected on nearly all systems if there is only one 14245 stack. 14246 14247 Note that this switch does not actually cause checking to be done; 14248 the operating system must do that. The switch causes generation 14249 of code to ensure that the operating system sees the stack being 14250 extended. 14251 14252 `-fstack-limit-register=REG' 14253 `-fstack-limit-symbol=SYM' 14254 `-fno-stack-limit' 14255 Generate code to ensure that the stack does not grow beyond a 14256 certain value, either the value of a register or the address of a 14257 symbol. If the stack would grow beyond the value, a signal is 14258 raised. For most targets, the signal is raised before the stack 14259 overruns the boundary, so it is possible to catch the signal 14260 without taking special precautions. 14261 14262 For instance, if the stack starts at absolute address `0x80000000' 14263 and grows downwards, you can use the flags 14264 `-fstack-limit-symbol=__stack_limit' and 14265 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 14266 of 128KB. Note that this may only work with the GNU linker. 14267 14268 `-fargument-alias' 14269 `-fargument-noalias' 14270 `-fargument-noalias-global' 14271 `-fargument-noalias-anything' 14272 Specify the possible relationships among parameters and between 14273 parameters and global data. 14274 14275 `-fargument-alias' specifies that arguments (parameters) may alias 14276 each other and may alias global storage. 14277 `-fargument-noalias' specifies that arguments do not alias each 14278 other, but may alias global storage. 14279 `-fargument-noalias-global' specifies that arguments do not alias 14280 each other and do not alias global storage. 14281 `-fargument-noalias-anything' specifies that arguments do not 14282 alias any other storage. 14283 14284 Each language will automatically use whatever option is required by 14285 the language standard. You should not need to use these options 14286 yourself. 14287 14288 `-fleading-underscore' 14289 This option and its counterpart, `-fno-leading-underscore', 14290 forcibly change the way C symbols are represented in the object 14291 file. One use is to help link with legacy assembly code. 14292 14293 *Warning:* the `-fleading-underscore' switch causes GCC to 14294 generate code that is not binary compatible with code generated 14295 without that switch. Use it to conform to a non-default 14296 application binary interface. Not all targets provide complete 14297 support for this switch. 14298 14299 `-ftls-model=MODEL' 14300 Alter the thread-local storage model to be used (*note 14301 Thread-Local::). The MODEL argument should be one of 14302 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 14303 14304 The default without `-fpic' is `initial-exec'; with `-fpic' the 14305 default is `global-dynamic'. 14306 14307 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 14308 Set the default ELF image symbol visibility to the specified 14309 option--all symbols will be marked with this unless overridden 14310 within the code. Using this feature can very substantially 14311 improve linking and load times of shared object libraries, produce 14312 more optimized code, provide near-perfect API export and prevent 14313 symbol clashes. It is *strongly* recommended that you use this in 14314 any shared objects you distribute. 14315 14316 Despite the nomenclature, `default' always means public ie; 14317 available to be linked against from outside the shared object. 14318 `protected' and `internal' are pretty useless in real-world usage 14319 so the only other commonly used option will be `hidden'. The 14320 default if `-fvisibility' isn't specified is `default', i.e., make 14321 every symbol public--this causes the same behavior as previous 14322 versions of GCC. 14323 14324 A good explanation of the benefits offered by ensuring ELF symbols 14325 have the correct visibility is given by "How To Write Shared 14326 Libraries" by Ulrich Drepper (which can be found at 14327 `http://people.redhat.com/~drepper/')--however a superior solution 14328 made possible by this option to marking things hidden when the 14329 default is public is to make the default hidden and mark things 14330 public. This is the norm with DLL's on Windows and with 14331 `-fvisibility=hidden' and `__attribute__ 14332 ((visibility("default")))' instead of `__declspec(dllexport)' you 14333 get almost identical semantics with identical syntax. This is a 14334 great boon to those working with cross-platform projects. 14335 14336 For those adding visibility support to existing code, you may find 14337 `#pragma GCC visibility' of use. This works by you enclosing the 14338 declarations you wish to set visibility for with (for example) 14339 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 14340 pop'. Bear in mind that symbol visibility should be viewed *as 14341 part of the API interface contract* and thus all new code should 14342 always specify visibility when it is not the default ie; 14343 declarations only for use within the local DSO should *always* be 14344 marked explicitly as hidden as so to avoid PLT indirection 14345 overheads--making this abundantly clear also aids readability and 14346 self-documentation of the code. Note that due to ISO C++ 14347 specification requirements, operator new and operator delete must 14348 always be of default visibility. 14349 14350 Be aware that headers from outside your project, in particular 14351 system headers and headers from any other library you use, may not 14352 be expecting to be compiled with visibility other than the 14353 default. You may need to explicitly say `#pragma GCC visibility 14354 push(default)' before including any such headers. 14355 14356 `extern' declarations are not affected by `-fvisibility', so a lot 14357 of code can be recompiled with `-fvisibility=hidden' with no 14358 modifications. However, this means that calls to `extern' 14359 functions with no explicit visibility will use the PLT, so it is 14360 more effective to use `__attribute ((visibility))' and/or `#pragma 14361 GCC visibility' to tell the compiler which `extern' declarations 14362 should be treated as hidden. 14363 14364 Note that `-fvisibility' does affect C++ vague linkage entities. 14365 This means that, for instance, an exception class that will be 14366 thrown between DSOs must be explicitly marked with default 14367 visibility so that the `type_info' nodes will be unified between 14368 the DSOs. 14369 14370 An overview of these techniques, their benefits and how to use them 14371 is at `http://gcc.gnu.org/wiki/Visibility'. 14372 14373 14374 14375 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 14376 14377 3.19 Environment Variables Affecting GCC 14378 ======================================== 14379 14380 This section describes several environment variables that affect how GCC 14381 operates. Some of them work by specifying directories or prefixes to 14382 use when searching for various kinds of files. Some are used to 14383 specify other aspects of the compilation environment. 14384 14385 Note that you can also specify places to search using options such as 14386 `-B', `-I' and `-L' (*note Directory Options::). These take precedence 14387 over places specified using environment variables, which in turn take 14388 precedence over those specified by the configuration of GCC. *Note 14389 Controlling the Compilation Driver `gcc': (gccint)Driver. 14390 14391 `LANG' 14392 `LC_CTYPE' 14393 `LC_MESSAGES' 14394 `LC_ALL' 14395 These environment variables control the way that GCC uses 14396 localization information that allow GCC to work with different 14397 national conventions. GCC inspects the locale categories 14398 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 14399 These locale categories can be set to any value supported by your 14400 installation. A typical value is `en_GB.UTF-8' for English in the 14401 United Kingdom encoded in UTF-8. 14402 14403 The `LC_CTYPE' environment variable specifies character 14404 classification. GCC uses it to determine the character boundaries 14405 in a string; this is needed for some multibyte encodings that 14406 contain quote and escape characters that would otherwise be 14407 interpreted as a string end or escape. 14408 14409 The `LC_MESSAGES' environment variable specifies the language to 14410 use in diagnostic messages. 14411 14412 If the `LC_ALL' environment variable is set, it overrides the value 14413 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 14414 `LC_MESSAGES' default to the value of the `LANG' environment 14415 variable. If none of these variables are set, GCC defaults to 14416 traditional C English behavior. 14417 14418 `TMPDIR' 14419 If `TMPDIR' is set, it specifies the directory to use for temporary 14420 files. GCC uses temporary files to hold the output of one stage of 14421 compilation which is to be used as input to the next stage: for 14422 example, the output of the preprocessor, which is the input to the 14423 compiler proper. 14424 14425 `GCC_EXEC_PREFIX' 14426 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 14427 names of the subprograms executed by the compiler. No slash is 14428 added when this prefix is combined with the name of a subprogram, 14429 but you can specify a prefix that ends with a slash if you wish. 14430 14431 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 14432 appropriate prefix to use based on the pathname it was invoked 14433 with. 14434 14435 If GCC cannot find the subprogram using the specified prefix, it 14436 tries looking in the usual places for the subprogram. 14437 14438 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 14439 PREFIX is the prefix to the installed compiler. In many cases 14440 PREFIX is the value of `prefix' when you ran the `configure' 14441 script. 14442 14443 Other prefixes specified with `-B' take precedence over this 14444 prefix. 14445 14446 This prefix is also used for finding files such as `crt0.o' that 14447 are used for linking. 14448 14449 In addition, the prefix is used in an unusual way in finding the 14450 directories to search for header files. For each of the standard 14451 directories whose name normally begins with `/usr/local/lib/gcc' 14452 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 14453 replacing that beginning with the specified prefix to produce an 14454 alternate directory name. Thus, with `-Bfoo/', GCC will search 14455 `foo/bar' where it would normally search `/usr/local/lib/bar'. 14456 These alternate directories are searched first; the standard 14457 directories come next. If a standard directory begins with the 14458 configured PREFIX then the value of PREFIX is replaced by 14459 `GCC_EXEC_PREFIX' when looking for header files. 14460 14461 `COMPILER_PATH' 14462 The value of `COMPILER_PATH' is a colon-separated list of 14463 directories, much like `PATH'. GCC tries the directories thus 14464 specified when searching for subprograms, if it can't find the 14465 subprograms using `GCC_EXEC_PREFIX'. 14466 14467 `LIBRARY_PATH' 14468 The value of `LIBRARY_PATH' is a colon-separated list of 14469 directories, much like `PATH'. When configured as a native 14470 compiler, GCC tries the directories thus specified when searching 14471 for special linker files, if it can't find them using 14472 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 14473 when searching for ordinary libraries for the `-l' option (but 14474 directories specified with `-L' come first). 14475 14476 `LANG' 14477 This variable is used to pass locale information to the compiler. 14478 One way in which this information is used is to determine the 14479 character set to be used when character literals, string literals 14480 and comments are parsed in C and C++. When the compiler is 14481 configured to allow multibyte characters, the following values for 14482 `LANG' are recognized: 14483 14484 `C-JIS' 14485 Recognize JIS characters. 14486 14487 `C-SJIS' 14488 Recognize SJIS characters. 14489 14490 `C-EUCJP' 14491 Recognize EUCJP characters. 14492 14493 If `LANG' is not defined, or if it has some other value, then the 14494 compiler will use mblen and mbtowc as defined by the default 14495 locale to recognize and translate multibyte characters. 14496 14497 Some additional environments variables affect the behavior of the 14498 preprocessor. 14499 14500 `CPATH' 14501 `C_INCLUDE_PATH' 14502 `CPLUS_INCLUDE_PATH' 14503 `OBJC_INCLUDE_PATH' 14504 Each variable's value is a list of directories separated by a 14505 special character, much like `PATH', in which to look for header 14506 files. The special character, `PATH_SEPARATOR', is 14507 target-dependent and determined at GCC build time. For Microsoft 14508 Windows-based targets it is a semicolon, and for almost all other 14509 targets it is a colon. 14510 14511 `CPATH' specifies a list of directories to be searched as if 14512 specified with `-I', but after any paths given with `-I' options 14513 on the command line. This environment variable is used regardless 14514 of which language is being preprocessed. 14515 14516 The remaining environment variables apply only when preprocessing 14517 the particular language indicated. Each specifies a list of 14518 directories to be searched as if specified with `-isystem', but 14519 after any paths given with `-isystem' options on the command line. 14520 14521 In all these variables, an empty element instructs the compiler to 14522 search its current working directory. Empty elements can appear 14523 at the beginning or end of a path. For instance, if the value of 14524 `CPATH' is `:/special/include', that has the same effect as 14525 `-I. -I/special/include'. 14526 14527 `DEPENDENCIES_OUTPUT' 14528 If this variable is set, its value specifies how to output 14529 dependencies for Make based on the non-system header files 14530 processed by the compiler. System header files are ignored in the 14531 dependency output. 14532 14533 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 14534 which case the Make rules are written to that file, guessing the 14535 target name from the source file name. Or the value can have the 14536 form `FILE TARGET', in which case the rules are written to file 14537 FILE using TARGET as the target name. 14538 14539 In other words, this environment variable is equivalent to 14540 combining the options `-MM' and `-MF' (*note Preprocessor 14541 Options::), with an optional `-MT' switch too. 14542 14543 `SUNPRO_DEPENDENCIES' 14544 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 14545 except that system header files are not ignored, so it implies 14546 `-M' rather than `-MM'. However, the dependence on the main input 14547 file is omitted. *Note Preprocessor Options::. 14548 14549 14550 File: gcc.info, Node: Precompiled Headers, Next: Running Protoize, Prev: Environment Variables, Up: Invoking GCC 14551 14552 3.20 Using Precompiled Headers 14553 ============================== 14554 14555 Often large projects have many header files that are included in every 14556 source file. The time the compiler takes to process these header files 14557 over and over again can account for nearly all of the time required to 14558 build the project. To make builds faster, GCC allows users to 14559 `precompile' a header file; then, if builds can use the precompiled 14560 header file they will be much faster. 14561 14562 To create a precompiled header file, simply compile it as you would any 14563 other file, if necessary using the `-x' option to make the driver treat 14564 it as a C or C++ header file. You will probably want to use a tool 14565 like `make' to keep the precompiled header up-to-date when the headers 14566 it contains change. 14567 14568 A precompiled header file will be searched for when `#include' is seen 14569 in the compilation. As it searches for the included file (*note Search 14570 Path: (cpp)Search Path.) the compiler looks for a precompiled header in 14571 each directory just before it looks for the include file in that 14572 directory. The name searched for is the name specified in the 14573 `#include' with `.gch' appended. If the precompiled header file can't 14574 be used, it is ignored. 14575 14576 For instance, if you have `#include "all.h"', and you have `all.h.gch' 14577 in the same directory as `all.h', then the precompiled header file will 14578 be used if possible, and the original header will be used otherwise. 14579 14580 Alternatively, you might decide to put the precompiled header file in a 14581 directory and use `-I' to ensure that directory is searched before (or 14582 instead of) the directory containing the original header. Then, if you 14583 want to check that the precompiled header file is always used, you can 14584 put a file of the same name as the original header in this directory 14585 containing an `#error' command. 14586 14587 This also works with `-include'. So yet another way to use 14588 precompiled headers, good for projects not designed with precompiled 14589 header files in mind, is to simply take most of the header files used by 14590 a project, include them from another header file, precompile that header 14591 file, and `-include' the precompiled header. If the header files have 14592 guards against multiple inclusion, they will be skipped because they've 14593 already been included (in the precompiled header). 14594 14595 If you need to precompile the same header file for different 14596 languages, targets, or compiler options, you can instead make a 14597 _directory_ named like `all.h.gch', and put each precompiled header in 14598 the directory, perhaps using `-o'. It doesn't matter what you call the 14599 files in the directory, every precompiled header in the directory will 14600 be considered. The first precompiled header encountered in the 14601 directory that is valid for this compilation will be used; they're 14602 searched in no particular order. 14603 14604 There are many other possibilities, limited only by your imagination, 14605 good sense, and the constraints of your build system. 14606 14607 A precompiled header file can be used only when these conditions apply: 14608 14609 * Only one precompiled header can be used in a particular 14610 compilation. 14611 14612 * A precompiled header can't be used once the first C token is seen. 14613 You can have preprocessor directives before a precompiled header; 14614 you can even include a precompiled header from inside another 14615 header, so long as there are no C tokens before the `#include'. 14616 14617 * The precompiled header file must be produced for the same language 14618 as the current compilation. You can't use a C precompiled header 14619 for a C++ compilation. 14620 14621 * The precompiled header file must have been produced by the same 14622 compiler binary as the current compilation is using. 14623 14624 * Any macros defined before the precompiled header is included must 14625 either be defined in the same way as when the precompiled header 14626 was generated, or must not affect the precompiled header, which 14627 usually means that they don't appear in the precompiled header at 14628 all. 14629 14630 The `-D' option is one way to define a macro before a precompiled 14631 header is included; using a `#define' can also do it. There are 14632 also some options that define macros implicitly, like `-O' and 14633 `-Wdeprecated'; the same rule applies to macros defined this way. 14634 14635 * If debugging information is output when using the precompiled 14636 header, using `-g' or similar, the same kind of debugging 14637 information must have been output when building the precompiled 14638 header. However, a precompiled header built using `-g' can be 14639 used in a compilation when no debugging information is being 14640 output. 14641 14642 * The same `-m' options must generally be used when building and 14643 using the precompiled header. *Note Submodel Options::, for any 14644 cases where this rule is relaxed. 14645 14646 * Each of the following options must be the same when building and 14647 using the precompiled header: 14648 14649 -fexceptions -funit-at-a-time 14650 14651 * Some other command-line options starting with `-f', `-p', or `-O' 14652 must be defined in the same way as when the precompiled header was 14653 generated. At present, it's not clear which options are safe to 14654 change and which are not; the safest choice is to use exactly the 14655 same options when generating and using the precompiled header. 14656 The following are known to be safe: 14657 14658 -fmessage-length= -fpreprocessed -fsched-interblock 14659 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 14660 -fsched-verbose=<number> -fschedule-insns -fvisibility= 14661 -pedantic-errors 14662 14663 14664 For all of these except the last, the compiler will automatically 14665 ignore the precompiled header if the conditions aren't met. If you 14666 find an option combination that doesn't work and doesn't cause the 14667 precompiled header to be ignored, please consider filing a bug report, 14668 see *Note Bugs::. 14669 14670 If you do use differing options when generating and using the 14671 precompiled header, the actual behavior will be a mixture of the 14672 behavior for the options. For instance, if you use `-g' to generate 14673 the precompiled header but not when using it, you may or may not get 14674 debugging information for routines in the precompiled header. 14675 14676 14677 File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC 14678 14679 3.21 Running Protoize 14680 ===================== 14681 14682 The program `protoize' is an optional part of GCC. You can use it to 14683 add prototypes to a program, thus converting the program to ISO C in 14684 one respect. The companion program `unprotoize' does the reverse: it 14685 removes argument types from any prototypes that are found. 14686 14687 When you run these programs, you must specify a set of source files as 14688 command line arguments. The conversion programs start out by compiling 14689 these files to see what functions they define. The information gathered 14690 about a file FOO is saved in a file named `FOO.X'. 14691 14692 After scanning comes actual conversion. The specified files are all 14693 eligible to be converted; any files they include (whether sources or 14694 just headers) are eligible as well. 14695 14696 But not all the eligible files are converted. By default, `protoize' 14697 and `unprotoize' convert only source and header files in the current 14698 directory. You can specify additional directories whose files should 14699 be converted with the `-d DIRECTORY' option. You can also specify 14700 particular files to exclude with the `-x FILE' option. A file is 14701 converted if it is eligible, its directory name matches one of the 14702 specified directory names, and its name within the directory has not 14703 been excluded. 14704 14705 Basic conversion with `protoize' consists of rewriting most function 14706 definitions and function declarations to specify the types of the 14707 arguments. The only ones not rewritten are those for varargs functions. 14708 14709 `protoize' optionally inserts prototype declarations at the beginning 14710 of the source file, to make them available for any calls that precede 14711 the function's definition. Or it can insert prototype declarations 14712 with block scope in the blocks where undeclared functions are called. 14713 14714 Basic conversion with `unprotoize' consists of rewriting most function 14715 declarations to remove any argument types, and rewriting function 14716 definitions to the old-style pre-ISO form. 14717 14718 Both conversion programs print a warning for any function declaration 14719 or definition that they can't convert. You can suppress these warnings 14720 with `-q'. 14721 14722 The output from `protoize' or `unprotoize' replaces the original 14723 source file. The original file is renamed to a name ending with 14724 `.save' (for DOS, the saved filename ends in `.sav' without the 14725 original `.c' suffix). If the `.save' (`.sav' for DOS) file already 14726 exists, then the source file is simply discarded. 14727 14728 `protoize' and `unprotoize' both depend on GCC itself to scan the 14729 program and collect information about the functions it uses. So 14730 neither of these programs will work until GCC is installed. 14731 14732 Here is a table of the options you can use with `protoize' and 14733 `unprotoize'. Each option works with both programs unless otherwise 14734 stated. 14735 14736 `-B DIRECTORY' 14737 Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the 14738 usual directory (normally `/usr/local/lib'). This file contains 14739 prototype information about standard system functions. This option 14740 applies only to `protoize'. 14741 14742 `-c COMPILATION-OPTIONS' 14743 Use COMPILATION-OPTIONS as the options when running `gcc' to 14744 produce the `.X' files. The special option `-aux-info' is always 14745 passed in addition, to tell `gcc' to write a `.X' file. 14746 14747 Note that the compilation options must be given as a single 14748 argument to `protoize' or `unprotoize'. If you want to specify 14749 several `gcc' options, you must quote the entire set of 14750 compilation options to make them a single word in the shell. 14751 14752 There are certain `gcc' arguments that you cannot use, because they 14753 would produce the wrong kind of output. These include `-g', `-O', 14754 `-c', `-S', and `-o' If you include these in the 14755 COMPILATION-OPTIONS, they are ignored. 14756 14757 `-C' 14758 Rename files to end in `.C' (`.cc' for DOS-based file systems) 14759 instead of `.c'. This is convenient if you are converting a C 14760 program to C++. This option applies only to `protoize'. 14761 14762 `-g' 14763 Add explicit global declarations. This means inserting explicit 14764 declarations at the beginning of each source file for each function 14765 that is called in the file and was not declared. These 14766 declarations precede the first function definition that contains a 14767 call to an undeclared function. This option applies only to 14768 `protoize'. 14769 14770 `-i STRING' 14771 Indent old-style parameter declarations with the string STRING. 14772 This option applies only to `protoize'. 14773 14774 `unprotoize' converts prototyped function definitions to old-style 14775 function definitions, where the arguments are declared between the 14776 argument list and the initial `{'. By default, `unprotoize' uses 14777 five spaces as the indentation. If you want to indent with just 14778 one space instead, use `-i " "'. 14779 14780 `-k' 14781 Keep the `.X' files. Normally, they are deleted after conversion 14782 is finished. 14783 14784 `-l' 14785 Add explicit local declarations. `protoize' with `-l' inserts a 14786 prototype declaration for each function in each block which calls 14787 the function without any declaration. This option applies only to 14788 `protoize'. 14789 14790 `-n' 14791 Make no real changes. This mode just prints information about the 14792 conversions that would have been done without `-n'. 14793 14794 `-N' 14795 Make no `.save' files. The original files are simply deleted. 14796 Use this option with caution. 14797 14798 `-p PROGRAM' 14799 Use the program PROGRAM as the compiler. Normally, the name `gcc' 14800 is used. 14801 14802 `-q' 14803 Work quietly. Most warnings are suppressed. 14804 14805 `-v' 14806 Print the version number, just like `-v' for `gcc'. 14807 14808 If you need special compiler options to compile one of your program's 14809 source files, then you should generate that file's `.X' file specially, 14810 by running `gcc' on that source file with the appropriate options and 14811 the option `-aux-info'. Then run `protoize' on the entire set of 14812 files. `protoize' will use the existing `.X' file because it is newer 14813 than the source file. For example: 14814 14815 gcc -Dfoo=bar file1.c -aux-info file1.X 14816 protoize *.c 14817 14818 You need to include the special files along with the rest in the 14819 `protoize' command, even though their `.X' files already exist, because 14820 otherwise they won't get converted. 14821 14822 *Note Protoize Caveats::, for more information on how to use 14823 `protoize' successfully. 14824 14825 14826 File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 14827 14828 4 C Implementation-defined behavior 14829 *********************************** 14830 14831 A conforming implementation of ISO C is required to document its choice 14832 of behavior in each of the areas that are designated "implementation 14833 defined". The following lists all such areas, along with the section 14834 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 14835 Some areas are only implementation-defined in one version of the 14836 standard. 14837 14838 Some choices depend on the externally determined ABI for the platform 14839 (including standard character encodings) which GCC follows; these are 14840 listed as "determined by ABI" below. *Note Binary Compatibility: 14841 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 14842 are documented in the preprocessor manual. *Note 14843 Implementation-defined behavior: (cpp)Implementation-defined behavior. 14844 Some choices are made by the library and operating system (or other 14845 environment when compiling for a freestanding environment); refer to 14846 their documentation for details. 14847 14848 * Menu: 14849 14850 * Translation implementation:: 14851 * Environment implementation:: 14852 * Identifiers implementation:: 14853 * Characters implementation:: 14854 * Integers implementation:: 14855 * Floating point implementation:: 14856 * Arrays and pointers implementation:: 14857 * Hints implementation:: 14858 * Structures unions enumerations and bit-fields implementation:: 14859 * Qualifiers implementation:: 14860 * Declarators implementation:: 14861 * Statements implementation:: 14862 * Preprocessing directives implementation:: 14863 * Library functions implementation:: 14864 * Architecture implementation:: 14865 * Locale-specific behavior implementation:: 14866 14867 14868 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 14869 14870 4.1 Translation 14871 =============== 14872 14873 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 14874 5.1.1.3).' 14875 14876 Diagnostics consist of all the output sent to stderr by GCC. 14877 14878 * `Whether each nonempty sequence of white-space characters other 14879 than new-line is retained or replaced by one space character in 14880 translation phase 3 (C90 and C99 5.1.1.2).' 14881 14882 *Note Implementation-defined behavior: (cpp)Implementation-defined 14883 behavior. 14884 14885 14886 14887 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 14888 14889 4.2 Environment 14890 =============== 14891 14892 The behavior of most of these points are dependent on the implementation 14893 of the C library, and are not defined by GCC itself. 14894 14895 * `The mapping between physical source file multibyte characters and 14896 the source character set in translation phase 1 (C90 and C99 14897 5.1.1.2).' 14898 14899 *Note Implementation-defined behavior: (cpp)Implementation-defined 14900 behavior. 14901 14902 14903 14904 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 14905 14906 4.3 Identifiers 14907 =============== 14908 14909 * `Which additional multibyte characters may appear in identifiers 14910 and their correspondence to universal character names (C99 6.4.2).' 14911 14912 *Note Implementation-defined behavior: (cpp)Implementation-defined 14913 behavior. 14914 14915 * `The number of significant initial characters in an identifier 14916 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 14917 14918 For internal names, all characters are significant. For external 14919 names, the number of significant characters are defined by the 14920 linker; for almost all targets, all characters are significant. 14921 14922 * `Whether case distinctions are significant in an identifier with 14923 external linkage (C90 6.1.2).' 14924 14925 This is a property of the linker. C99 requires that case 14926 distinctions are always significant in identifiers with external 14927 linkage and systems without this property are not supported by GCC. 14928 14929 14930 14931 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 14932 14933 4.4 Characters 14934 ============== 14935 14936 * `The number of bits in a byte (C90 3.4, C99 3.6).' 14937 14938 Determined by ABI. 14939 14940 * `The values of the members of the execution character set (C90 and 14941 C99 5.2.1).' 14942 14943 Determined by ABI. 14944 14945 * `The unique value of the member of the execution character set 14946 produced for each of the standard alphabetic escape sequences (C90 14947 and C99 5.2.2).' 14948 14949 Determined by ABI. 14950 14951 * `The value of a `char' object into which has been stored any 14952 character other than a member of the basic execution character set 14953 (C90 6.1.2.5, C99 6.2.5).' 14954 14955 Determined by ABI. 14956 14957 * `Which of `signed char' or `unsigned char' has the same range, 14958 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 14959 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 14960 14961 Determined by ABI. The options `-funsigned-char' and 14962 `-fsigned-char' change the default. *Note Options Controlling C 14963 Dialect: C Dialect Options. 14964 14965 * `The mapping of members of the source character set (in character 14966 constants and string literals) to members of the execution 14967 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 14968 14969 Determined by ABI. 14970 14971 * `The value of an integer character constant containing more than 14972 one character or containing a character or escape sequence that 14973 does not map to a single-byte execution character (C90 6.1.3.4, 14974 C99 6.4.4.4).' 14975 14976 *Note Implementation-defined behavior: (cpp)Implementation-defined 14977 behavior. 14978 14979 * `The value of a wide character constant containing more than one 14980 multibyte character, or containing a multibyte character or escape 14981 sequence not represented in the extended execution character set 14982 (C90 6.1.3.4, C99 6.4.4.4).' 14983 14984 *Note Implementation-defined behavior: (cpp)Implementation-defined 14985 behavior. 14986 14987 * `The current locale used to convert a wide character constant 14988 consisting of a single multibyte character that maps to a member 14989 of the extended execution character set into a corresponding wide 14990 character code (C90 6.1.3.4, C99 6.4.4.4).' 14991 14992 *Note Implementation-defined behavior: (cpp)Implementation-defined 14993 behavior. 14994 14995 * `The current locale used to convert a wide string literal into 14996 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 14997 14998 *Note Implementation-defined behavior: (cpp)Implementation-defined 14999 behavior. 15000 15001 * `The value of a string literal containing a multibyte character or 15002 escape sequence not represented in the execution character set 15003 (C90 6.1.4, C99 6.4.5).' 15004 15005 *Note Implementation-defined behavior: (cpp)Implementation-defined 15006 behavior. 15007 15008 15009 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 15010 15011 4.5 Integers 15012 ============ 15013 15014 * `Any extended integer types that exist in the implementation (C99 15015 6.2.5).' 15016 15017 GCC does not support any extended integer types. 15018 15019 * `Whether signed integer types are represented using sign and 15020 magnitude, two's complement, or one's complement, and whether the 15021 extraordinary value is a trap representation or an ordinary value 15022 (C99 6.2.6.2).' 15023 15024 GCC supports only two's complement integer types, and all bit 15025 patterns are ordinary values. 15026 15027 * `The rank of any extended integer type relative to another extended 15028 integer type with the same precision (C99 6.3.1.1).' 15029 15030 GCC does not support any extended integer types. 15031 15032 * `The result of, or the signal raised by, converting an integer to a 15033 signed integer type when the value cannot be represented in an 15034 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 15035 15036 For conversion to a type of width N, the value is reduced modulo 15037 2^N to be within range of the type; no signal is raised. 15038 15039 * `The results of some bitwise operations on signed integers (C90 15040 6.3, C99 6.5).' 15041 15042 Bitwise operators act on the representation of the value including 15043 both the sign and value bits, where the sign bit is considered 15044 immediately above the highest-value value bit. Signed `>>' acts 15045 on negative numbers by sign extension. 15046 15047 GCC does not use the latitude given in C99 only to treat certain 15048 aspects of signed `<<' as undefined, but this is subject to change. 15049 15050 * `The sign of the remainder on integer division (C90 6.3.5).' 15051 15052 GCC always follows the C99 requirement that the result of division 15053 is truncated towards zero. 15054 15055 15056 15057 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 15058 15059 4.6 Floating point 15060 ================== 15061 15062 * `The accuracy of the floating-point operations and of the library 15063 functions in `<math.h>' and `<complex.h>' that return 15064 floating-point results (C90 and C99 5.2.4.2.2).' 15065 15066 The accuracy is unknown. 15067 15068 * `The rounding behaviors characterized by non-standard values of 15069 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 15070 15071 GCC does not use such values. 15072 15073 * `The evaluation methods characterized by non-standard negative 15074 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 15075 15076 GCC does not use such values. 15077 15078 * `The direction of rounding when an integer is converted to a 15079 floating-point number that cannot exactly represent the original 15080 value (C90 6.2.1.3, C99 6.3.1.4).' 15081 15082 C99 Annex F is followed. 15083 15084 * `The direction of rounding when a floating-point number is 15085 converted to a narrower floating-point number (C90 6.2.1.4, C99 15086 6.3.1.5).' 15087 15088 C99 Annex F is followed. 15089 15090 * `How the nearest representable value or the larger or smaller 15091 representable value immediately adjacent to the nearest 15092 representable value is chosen for certain floating constants (C90 15093 6.1.3.1, C99 6.4.4.2).' 15094 15095 C99 Annex F is followed. 15096 15097 * `Whether and how floating expressions are contracted when not 15098 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 15099 15100 Expressions are currently only contracted if 15101 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 15102 subject to change. 15103 15104 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 15105 15106 This pragma is not implemented, but the default is to "off" unless 15107 `-frounding-math' is used in which case it is "on". 15108 15109 * `Additional floating-point exceptions, rounding modes, 15110 environments, and classifications, and their macro names (C99 7.6, 15111 C99 7.12).' 15112 15113 This is dependent on the implementation of the C library, and is 15114 not defined by GCC itself. 15115 15116 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 15117 15118 This pragma is not implemented. Expressions are currently only 15119 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 15120 used. This is subject to change. 15121 15122 * `Whether the "inexact" floating-point exception can be raised when 15123 the rounded result actually does equal the mathematical result in 15124 an IEC 60559 conformant implementation (C99 F.9).' 15125 15126 This is dependent on the implementation of the C library, and is 15127 not defined by GCC itself. 15128 15129 * `Whether the "underflow" (and "inexact") floating-point exception 15130 can be raised when a result is tiny but not inexact in an IEC 15131 60559 conformant implementation (C99 F.9).' 15132 15133 This is dependent on the implementation of the C library, and is 15134 not defined by GCC itself. 15135 15136 15137 15138 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 15139 15140 4.7 Arrays and pointers 15141 ======================= 15142 15143 * `The result of converting a pointer to an integer or vice versa 15144 (C90 6.3.4, C99 6.3.2.3).' 15145 15146 A cast from pointer to integer discards most-significant bits if 15147 the pointer representation is larger than the integer type, 15148 sign-extends(1) if the pointer representation is smaller than the 15149 integer type, otherwise the bits are unchanged. 15150 15151 A cast from integer to pointer discards most-significant bits if 15152 the pointer representation is smaller than the integer type, 15153 extends according to the signedness of the integer type if the 15154 pointer representation is larger than the integer type, otherwise 15155 the bits are unchanged. 15156 15157 When casting from pointer to integer and back again, the resulting 15158 pointer must reference the same object as the original pointer, 15159 otherwise the behavior is undefined. That is, one may not use 15160 integer arithmetic to avoid the undefined behavior of pointer 15161 arithmetic as proscribed in C99 6.5.6/8. 15162 15163 * `The size of the result of subtracting two pointers to elements of 15164 the same array (C90 6.3.6, C99 6.5.6).' 15165 15166 The value is as specified in the standard and the type is 15167 determined by the ABI. 15168 15169 15170 ---------- Footnotes ---------- 15171 15172 (1) Future versions of GCC may zero-extend, or use a target-defined 15173 `ptr_extend' pattern. Do not rely on sign extension. 15174 15175 15176 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 15177 15178 4.8 Hints 15179 ========= 15180 15181 * `The extent to which suggestions made by using the `register' 15182 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 15183 15184 The `register' specifier affects code generation only in these 15185 ways: 15186 15187 * When used as part of the register variable extension, see 15188 *Note Explicit Reg Vars::. 15189 15190 * When `-O0' is in use, the compiler allocates distinct stack 15191 memory for all variables that do not have the `register' 15192 storage-class specifier; if `register' is specified, the 15193 variable may have a shorter lifespan than the code would 15194 indicate and may never be placed in memory. 15195 15196 * On some rare x86 targets, `setjmp' doesn't save the registers 15197 in all circumstances. In those cases, GCC doesn't allocate 15198 any variables in registers unless they are marked `register'. 15199 15200 15201 * `The extent to which suggestions made by using the inline function 15202 specifier are effective (C99 6.7.4).' 15203 15204 GCC will not inline any functions if the `-fno-inline' option is 15205 used or if `-O0' is used. Otherwise, GCC may still be unable to 15206 inline a function for many reasons; the `-Winline' option may be 15207 used to determine if a function has not been inlined and why not. 15208 15209 15210 15211 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 15212 15213 4.9 Structures, unions, enumerations, and bit-fields 15214 ==================================================== 15215 15216 * `A member of a union object is accessed using a member of a 15217 different type (C90 6.3.2.3).' 15218 15219 The relevant bytes of the representation of the object are treated 15220 as an object of the type used for the access. This may be a trap 15221 representation. 15222 15223 * `Whether a "plain" `int' bit-field is treated as a `signed int' 15224 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 15225 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 15226 15227 By default it is treated as `signed int' but this may be changed 15228 by the `-funsigned-bitfields' option. 15229 15230 * `Allowable bit-field types other than `_Bool', `signed int', and 15231 `unsigned int' (C99 6.7.2.1).' 15232 15233 No other types are permitted in strictly conforming mode. 15234 15235 * `Whether a bit-field can straddle a storage-unit boundary (C90 15236 6.5.2.1, C99 6.7.2.1).' 15237 15238 Determined by ABI. 15239 15240 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 15241 C99 6.7.2.1).' 15242 15243 Determined by ABI. 15244 15245 * `The alignment of non-bit-field members of structures (C90 15246 6.5.2.1, C99 6.7.2.1).' 15247 15248 Determined by ABI. 15249 15250 * `The integer type compatible with each enumerated type (C90 15251 6.5.2.2, C99 6.7.2.2).' 15252 15253 Normally, the type is `unsigned int' if there are no negative 15254 values in the enumeration, otherwise `int'. If `-fshort-enums' is 15255 specified, then if there are negative values it is the first of 15256 `signed char', `short' and `int' that can represent all the 15257 values, otherwise it is the first of `unsigned char', `unsigned 15258 short' and `unsigned int' that can represent all the values. 15259 15260 On some targets, `-fshort-enums' is the default; this is 15261 determined by the ABI. 15262 15263 15264 15265 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 15266 15267 4.10 Qualifiers 15268 =============== 15269 15270 * `What constitutes an access to an object that has 15271 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 15272 15273 Such an object is normally accessed by pointers and used for 15274 accessing hardware. In most expressions, it is intuitively 15275 obvious what is a read and what is a write. For example 15276 15277 volatile int *dst = SOMEVALUE; 15278 volatile int *src = SOMEOTHERVALUE; 15279 *dst = *src; 15280 15281 will cause a read of the volatile object pointed to by SRC and 15282 store the value into the volatile object pointed to by DST. There 15283 is no guarantee that these reads and writes are atomic, especially 15284 for objects larger than `int'. 15285 15286 However, if the volatile storage is not being modified, and the 15287 value of the volatile storage is not used, then the situation is 15288 less obvious. For example 15289 15290 volatile int *src = SOMEVALUE; 15291 *src; 15292 15293 According to the C standard, such an expression is an rvalue whose 15294 type is the unqualified version of its original type, i.e. `int'. 15295 Whether GCC interprets this as a read of the volatile object being 15296 pointed to or only as a request to evaluate the expression for its 15297 side-effects depends on this type. 15298 15299 If it is a scalar type, or on most targets an aggregate type whose 15300 only member object is of a scalar type, or a union type whose 15301 member objects are of scalar types, the expression is interpreted 15302 by GCC as a read of the volatile object; in the other cases, the 15303 expression is only evaluated for its side-effects. 15304 15305 15306 15307 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 15308 15309 4.11 Declarators 15310 ================ 15311 15312 * `The maximum number of declarators that may modify an arithmetic, 15313 structure or union type (C90 6.5.4).' 15314 15315 GCC is only limited by available memory. 15316 15317 15318 15319 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 15320 15321 4.12 Statements 15322 =============== 15323 15324 * `The maximum number of `case' values in a `switch' statement (C90 15325 6.6.4.2).' 15326 15327 GCC is only limited by available memory. 15328 15329 15330 15331 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 15332 15333 4.13 Preprocessing directives 15334 ============================= 15335 15336 *Note Implementation-defined behavior: (cpp)Implementation-defined 15337 behavior, for details of these aspects of implementation-defined 15338 behavior. 15339 15340 * `How sequences in both forms of header names are mapped to headers 15341 or external source file names (C90 6.1.7, C99 6.4.7).' 15342 15343 * `Whether the value of a character constant in a constant expression 15344 that controls conditional inclusion matches the value of the same 15345 character constant in the execution character set (C90 6.8.1, C99 15346 6.10.1).' 15347 15348 * `Whether the value of a single-character character constant in a 15349 constant expression that controls conditional inclusion may have a 15350 negative value (C90 6.8.1, C99 6.10.1).' 15351 15352 * `The places that are searched for an included `<>' delimited 15353 header, and how the places are specified or the header is 15354 identified (C90 6.8.2, C99 6.10.2).' 15355 15356 * `How the named source file is searched for in an included `""' 15357 delimited header (C90 6.8.2, C99 6.10.2).' 15358 15359 * `The method by which preprocessing tokens (possibly resulting from 15360 macro expansion) in a `#include' directive are combined into a 15361 header name (C90 6.8.2, C99 6.10.2).' 15362 15363 * `The nesting limit for `#include' processing (C90 6.8.2, C99 15364 6.10.2).' 15365 15366 * `Whether the `#' operator inserts a `\' character before the `\' 15367 character that begins a universal character name in a character 15368 constant or string literal (C99 6.10.3.2).' 15369 15370 * `The behavior on each recognized non-`STDC #pragma' directive (C90 15371 6.8.6, C99 6.10.6).' 15372 15373 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 15374 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 15375 details of target-specific pragmas. 15376 15377 * `The definitions for `__DATE__' and `__TIME__' when respectively, 15378 the date and time of translation are not available (C90 6.8.8, C99 15379 6.10.8).' 15380 15381 15382 15383 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 15384 15385 4.14 Library functions 15386 ====================== 15387 15388 The behavior of most of these points are dependent on the implementation 15389 of the C library, and are not defined by GCC itself. 15390 15391 * `The null pointer constant to which the macro `NULL' expands (C90 15392 7.1.6, C99 7.17).' 15393 15394 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 15395 provide the other headers which define `NULL' and some library 15396 implementations may use other definitions in those headers. 15397 15398 15399 15400 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 15401 15402 4.15 Architecture 15403 ================= 15404 15405 * `The values or expressions assigned to the macros specified in the 15406 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 15407 5.2.4.2, C99 7.18.2, C99 7.18.3).' 15408 15409 Determined by ABI. 15410 15411 * `The number, order, and encoding of bytes in any object (when not 15412 explicitly specified in this International Standard) (C99 15413 6.2.6.1).' 15414 15415 Determined by ABI. 15416 15417 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 15418 C99 6.5.3.4).' 15419 15420 Determined by ABI. 15421 15422 15423 15424 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 15425 15426 4.16 Locale-specific behavior 15427 ============================= 15428 15429 The behavior of these points are dependent on the implementation of the 15430 C library, and are not defined by GCC itself. 15431 15432 15433 File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top 15434 15435 5 Extensions to the C Language Family 15436 ************************************* 15437 15438 GNU C provides several language features not found in ISO standard C. 15439 (The `-pedantic' option directs GCC to print a warning message if any 15440 of these features is used.) To test for the availability of these 15441 features in conditional compilation, check for a predefined macro 15442 `__GNUC__', which is always defined under GCC. 15443 15444 These extensions are available in C and Objective-C. Most of them are 15445 also available in C++. *Note Extensions to the C++ Language: C++ 15446 Extensions, for extensions that apply _only_ to C++. 15447 15448 Some features that are in ISO C99 but not C89 or C++ are also, as 15449 extensions, accepted by GCC in C89 mode and in C++. 15450 15451 * Menu: 15452 15453 * Statement Exprs:: Putting statements and declarations inside expressions. 15454 * Local Labels:: Labels local to a block. 15455 * Labels as Values:: Getting pointers to labels, and computed gotos. 15456 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 15457 * Constructing Calls:: Dispatching a call to another function. 15458 * Typeof:: `typeof': referring to the type of an expression. 15459 * Conditionals:: Omitting the middle operand of a `?:' expression. 15460 * Long Long:: Double-word integers---`long long int'. 15461 * Complex:: Data types for complex numbers. 15462 * Floating Types:: Additional Floating Types. 15463 * Decimal Float:: Decimal Floating Types. 15464 * Hex Floats:: Hexadecimal floating-point constants. 15465 * Fixed-Point:: Fixed-Point Types. 15466 * Zero Length:: Zero-length arrays. 15467 * Variable Length:: Arrays whose length is computed at run time. 15468 * Empty Structures:: Structures with no members. 15469 * Variadic Macros:: Macros with a variable number of arguments. 15470 * Escaped Newlines:: Slightly looser rules for escaped newlines. 15471 * Subscripting:: Any array can be subscripted, even if not an lvalue. 15472 * Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 15473 * Initializers:: Non-constant initializers. 15474 * Compound Literals:: Compound literals give structures, unions 15475 or arrays as values. 15476 * Designated Inits:: Labeling elements of initializers. 15477 * Cast to Union:: Casting to union type from any member of the union. 15478 * Case Ranges:: `case 1 ... 9' and such. 15479 * Mixed Declarations:: Mixing declarations and code. 15480 * Function Attributes:: Declaring that functions have no side effects, 15481 or that they can never return. 15482 * Attribute Syntax:: Formal syntax for attributes. 15483 * Function Prototypes:: Prototype declarations and old-style definitions. 15484 * C++ Comments:: C++ comments are recognized. 15485 * Dollar Signs:: Dollar sign is allowed in identifiers. 15486 * Character Escapes:: `\e' stands for the character <ESC>. 15487 * Variable Attributes:: Specifying attributes of variables. 15488 * Type Attributes:: Specifying attributes of types. 15489 * Alignment:: Inquiring about the alignment of a type or variable. 15490 * Inline:: Defining inline functions (as fast as macros). 15491 * Extended Asm:: Assembler instructions with C expressions as operands. 15492 (With them you can define ``built-in'' functions.) 15493 * Constraints:: Constraints for asm operands 15494 * Asm Labels:: Specifying the assembler name to use for a C symbol. 15495 * Explicit Reg Vars:: Defining variables residing in specified registers. 15496 * Alternate Keywords:: `__const__', `__asm__', etc., for header files. 15497 * Incomplete Enums:: `enum foo;', with details to follow. 15498 * Function Names:: Printable strings which are the name of the current 15499 function. 15500 * Return Address:: Getting the return or frame address of a function. 15501 * Vector Extensions:: Using vector instructions through built-in functions. 15502 * Offsetof:: Special syntax for implementing `offsetof'. 15503 * Atomic Builtins:: Built-in functions for atomic memory access. 15504 * Object Size Checking:: Built-in functions for limited buffer overflow 15505 checking. 15506 * Other Builtins:: Other built-in functions. 15507 * Target Builtins:: Built-in functions specific to particular targets. 15508 * Target Format Checks:: Format checks specific to particular targets. 15509 * Pragmas:: Pragmas accepted by GCC. 15510 * Unnamed Fields:: Unnamed struct/union fields within structs/unions. 15511 * Thread-Local:: Per-thread variables. 15512 * Binary constants:: Binary constants using the `0b' prefix. 15513 15514 15515 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 15516 15517 5.1 Statements and Declarations in Expressions 15518 ============================================== 15519 15520 A compound statement enclosed in parentheses may appear as an expression 15521 in GNU C. This allows you to use loops, switches, and local variables 15522 within an expression. 15523 15524 Recall that a compound statement is a sequence of statements surrounded 15525 by braces; in this construct, parentheses go around the braces. For 15526 example: 15527 15528 ({ int y = foo (); int z; 15529 if (y > 0) z = y; 15530 else z = - y; 15531 z; }) 15532 15533 is a valid (though slightly more complex than necessary) expression for 15534 the absolute value of `foo ()'. 15535 15536 The last thing in the compound statement should be an expression 15537 followed by a semicolon; the value of this subexpression serves as the 15538 value of the entire construct. (If you use some other kind of statement 15539 last within the braces, the construct has type `void', and thus 15540 effectively no value.) 15541 15542 This feature is especially useful in making macro definitions "safe" 15543 (so that they evaluate each operand exactly once). For example, the 15544 "maximum" function is commonly defined as a macro in standard C as 15545 follows: 15546 15547 #define max(a,b) ((a) > (b) ? (a) : (b)) 15548 15549 But this definition computes either A or B twice, with bad results if 15550 the operand has side effects. In GNU C, if you know the type of the 15551 operands (here taken as `int'), you can define the macro safely as 15552 follows: 15553 15554 #define maxint(a,b) \ 15555 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 15556 15557 Embedded statements are not allowed in constant expressions, such as 15558 the value of an enumeration constant, the width of a bit-field, or the 15559 initial value of a static variable. 15560 15561 If you don't know the type of the operand, you can still do this, but 15562 you must use `typeof' (*note Typeof::). 15563 15564 In G++, the result value of a statement expression undergoes array and 15565 function pointer decay, and is returned by value to the enclosing 15566 expression. For instance, if `A' is a class, then 15567 15568 A a; 15569 15570 ({a;}).Foo () 15571 15572 will construct a temporary `A' object to hold the result of the 15573 statement expression, and that will be used to invoke `Foo'. Therefore 15574 the `this' pointer observed by `Foo' will not be the address of `a'. 15575 15576 Any temporaries created within a statement within a statement 15577 expression will be destroyed at the statement's end. This makes 15578 statement expressions inside macros slightly different from function 15579 calls. In the latter case temporaries introduced during argument 15580 evaluation will be destroyed at the end of the statement that includes 15581 the function call. In the statement expression case they will be 15582 destroyed during the statement expression. For instance, 15583 15584 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 15585 template<typename T> T function(T a) { T b = a; return b + 3; } 15586 15587 void foo () 15588 { 15589 macro (X ()); 15590 function (X ()); 15591 } 15592 15593 will have different places where temporaries are destroyed. For the 15594 `macro' case, the temporary `X' will be destroyed just after the 15595 initialization of `b'. In the `function' case that temporary will be 15596 destroyed when the function returns. 15597 15598 These considerations mean that it is probably a bad idea to use 15599 statement-expressions of this form in header files that are designed to 15600 work with C++. (Note that some versions of the GNU C Library contained 15601 header files using statement-expression that lead to precisely this 15602 bug.) 15603 15604 Jumping into a statement expression with `goto' or using a `switch' 15605 statement outside the statement expression with a `case' or `default' 15606 label inside the statement expression is not permitted. Jumping into a 15607 statement expression with a computed `goto' (*note Labels as Values::) 15608 yields undefined behavior. Jumping out of a statement expression is 15609 permitted, but if the statement expression is part of a larger 15610 expression then it is unspecified which other subexpressions of that 15611 expression have been evaluated except where the language definition 15612 requires certain subexpressions to be evaluated before or after the 15613 statement expression. In any case, as with a function call the 15614 evaluation of a statement expression is not interleaved with the 15615 evaluation of other parts of the containing expression. For example, 15616 15617 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 15618 15619 will call `foo' and `bar1' and will not call `baz' but may or may not 15620 call `bar2'. If `bar2' is called, it will be called after `foo' and 15621 before `bar1' 15622 15623 15624 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 15625 15626 5.2 Locally Declared Labels 15627 =========================== 15628 15629 GCC allows you to declare "local labels" in any nested block scope. A 15630 local label is just like an ordinary label, but you can only reference 15631 it (with a `goto' statement, or by taking its address) within the block 15632 in which it was declared. 15633 15634 A local label declaration looks like this: 15635 15636 __label__ LABEL; 15637 15638 or 15639 15640 __label__ LABEL1, LABEL2, /* ... */; 15641 15642 Local label declarations must come at the beginning of the block, 15643 before any ordinary declarations or statements. 15644 15645 The label declaration defines the label _name_, but does not define 15646 the label itself. You must do this in the usual way, with `LABEL:', 15647 within the statements of the statement expression. 15648 15649 The local label feature is useful for complex macros. If a macro 15650 contains nested loops, a `goto' can be useful for breaking out of them. 15651 However, an ordinary label whose scope is the whole function cannot be 15652 used: if the macro can be expanded several times in one function, the 15653 label will be multiply defined in that function. A local label avoids 15654 this problem. For example: 15655 15656 #define SEARCH(value, array, target) \ 15657 do { \ 15658 __label__ found; \ 15659 typeof (target) _SEARCH_target = (target); \ 15660 typeof (*(array)) *_SEARCH_array = (array); \ 15661 int i, j; \ 15662 int value; \ 15663 for (i = 0; i < max; i++) \ 15664 for (j = 0; j < max; j++) \ 15665 if (_SEARCH_array[i][j] == _SEARCH_target) \ 15666 { (value) = i; goto found; } \ 15667 (value) = -1; \ 15668 found:; \ 15669 } while (0) 15670 15671 This could also be written using a statement-expression: 15672 15673 #define SEARCH(array, target) \ 15674 ({ \ 15675 __label__ found; \ 15676 typeof (target) _SEARCH_target = (target); \ 15677 typeof (*(array)) *_SEARCH_array = (array); \ 15678 int i, j; \ 15679 int value; \ 15680 for (i = 0; i < max; i++) \ 15681 for (j = 0; j < max; j++) \ 15682 if (_SEARCH_array[i][j] == _SEARCH_target) \ 15683 { value = i; goto found; } \ 15684 value = -1; \ 15685 found: \ 15686 value; \ 15687 }) 15688 15689 Local label declarations also make the labels they declare visible to 15690 nested functions, if there are any. *Note Nested Functions::, for 15691 details. 15692 15693 15694 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 15695 15696 5.3 Labels as Values 15697 ==================== 15698 15699 You can get the address of a label defined in the current function (or 15700 a containing function) with the unary operator `&&'. The value has 15701 type `void *'. This value is a constant and can be used wherever a 15702 constant of that type is valid. For example: 15703 15704 void *ptr; 15705 /* ... */ 15706 ptr = &&foo; 15707 15708 To use these values, you need to be able to jump to one. This is done 15709 with the computed goto statement(1), `goto *EXP;'. For example, 15710 15711 goto *ptr; 15712 15713 Any expression of type `void *' is allowed. 15714 15715 One way of using these constants is in initializing a static array that 15716 will serve as a jump table: 15717 15718 static void *array[] = { &&foo, &&bar, &&hack }; 15719 15720 Then you can select a label with indexing, like this: 15721 15722 goto *array[i]; 15723 15724 Note that this does not check whether the subscript is in bounds--array 15725 indexing in C never does that. 15726 15727 Such an array of label values serves a purpose much like that of the 15728 `switch' statement. The `switch' statement is cleaner, so use that 15729 rather than an array unless the problem does not fit a `switch' 15730 statement very well. 15731 15732 Another use of label values is in an interpreter for threaded code. 15733 The labels within the interpreter function can be stored in the 15734 threaded code for super-fast dispatching. 15735 15736 You may not use this mechanism to jump to code in a different function. 15737 If you do that, totally unpredictable things will happen. The best way 15738 to avoid this is to store the label address only in automatic variables 15739 and never pass it as an argument. 15740 15741 An alternate way to write the above example is 15742 15743 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 15744 &&hack - &&foo }; 15745 goto *(&&foo + array[i]); 15746 15747 This is more friendly to code living in shared libraries, as it reduces 15748 the number of dynamic relocations that are needed, and by consequence, 15749 allows the data to be read-only. 15750 15751 The `&&foo' expressions for the same label might have different values 15752 if the containing function is inlined or cloned. If a program relies on 15753 them being always the same, `__attribute__((__noinline__))' should be 15754 used to prevent inlining. If `&&foo' is used in a static variable 15755 initializer, inlining is forbidden. 15756 15757 ---------- Footnotes ---------- 15758 15759 (1) The analogous feature in Fortran is called an assigned goto, but 15760 that name seems inappropriate in C, where one can do more than simply 15761 store label addresses in label variables. 15762 15763 15764 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 15765 15766 5.4 Nested Functions 15767 ==================== 15768 15769 A "nested function" is a function defined inside another function. 15770 (Nested functions are not supported for GNU C++.) The nested function's 15771 name is local to the block where it is defined. For example, here we 15772 define a nested function named `square', and call it twice: 15773 15774 foo (double a, double b) 15775 { 15776 double square (double z) { return z * z; } 15777 15778 return square (a) + square (b); 15779 } 15780 15781 The nested function can access all the variables of the containing 15782 function that are visible at the point of its definition. This is 15783 called "lexical scoping". For example, here we show a nested function 15784 which uses an inherited variable named `offset': 15785 15786 bar (int *array, int offset, int size) 15787 { 15788 int access (int *array, int index) 15789 { return array[index + offset]; } 15790 int i; 15791 /* ... */ 15792 for (i = 0; i < size; i++) 15793 /* ... */ access (array, i) /* ... */ 15794 } 15795 15796 Nested function definitions are permitted within functions in the 15797 places where variable definitions are allowed; that is, in any block, 15798 mixed with the other declarations and statements in the block. 15799 15800 It is possible to call the nested function from outside the scope of 15801 its name by storing its address or passing the address to another 15802 function: 15803 15804 hack (int *array, int size) 15805 { 15806 void store (int index, int value) 15807 { array[index] = value; } 15808 15809 intermediate (store, size); 15810 } 15811 15812 Here, the function `intermediate' receives the address of `store' as 15813 an argument. If `intermediate' calls `store', the arguments given to 15814 `store' are used to store into `array'. But this technique works only 15815 so long as the containing function (`hack', in this example) does not 15816 exit. 15817 15818 If you try to call the nested function through its address after the 15819 containing function has exited, all hell will break loose. If you try 15820 to call it after a containing scope level has exited, and if it refers 15821 to some of the variables that are no longer in scope, you may be lucky, 15822 but it's not wise to take the risk. If, however, the nested function 15823 does not refer to anything that has gone out of scope, you should be 15824 safe. 15825 15826 GCC implements taking the address of a nested function using a 15827 technique called "trampolines". A paper describing them is available as 15828 15829 `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'. 15830 15831 A nested function can jump to a label inherited from a containing 15832 function, provided the label was explicitly declared in the containing 15833 function (*note Local Labels::). Such a jump returns instantly to the 15834 containing function, exiting the nested function which did the `goto' 15835 and any intermediate functions as well. Here is an example: 15836 15837 bar (int *array, int offset, int size) 15838 { 15839 __label__ failure; 15840 int access (int *array, int index) 15841 { 15842 if (index > size) 15843 goto failure; 15844 return array[index + offset]; 15845 } 15846 int i; 15847 /* ... */ 15848 for (i = 0; i < size; i++) 15849 /* ... */ access (array, i) /* ... */ 15850 /* ... */ 15851 return 0; 15852 15853 /* Control comes here from `access' 15854 if it detects an error. */ 15855 failure: 15856 return -1; 15857 } 15858 15859 A nested function always has no linkage. Declaring one with `extern' 15860 or `static' is erroneous. If you need to declare the nested function 15861 before its definition, use `auto' (which is otherwise meaningless for 15862 function declarations). 15863 15864 bar (int *array, int offset, int size) 15865 { 15866 __label__ failure; 15867 auto int access (int *, int); 15868 /* ... */ 15869 int access (int *array, int index) 15870 { 15871 if (index > size) 15872 goto failure; 15873 return array[index + offset]; 15874 } 15875 /* ... */ 15876 } 15877 15878 15879 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 15880 15881 5.5 Constructing Function Calls 15882 =============================== 15883 15884 Using the built-in functions described below, you can record the 15885 arguments a function received, and call another function with the same 15886 arguments, without knowing the number or types of the arguments. 15887 15888 You can also record the return value of that function call, and later 15889 return that value, without knowing what data type the function tried to 15890 return (as long as your caller expects that data type). 15891 15892 However, these built-in functions may interact badly with some 15893 sophisticated features or other extensions of the language. It is, 15894 therefore, not recommended to use them outside very simple functions 15895 acting as mere forwarders for their arguments. 15896 15897 -- Built-in Function: void * __builtin_apply_args () 15898 This built-in function returns a pointer to data describing how to 15899 perform a call with the same arguments as were passed to the 15900 current function. 15901 15902 The function saves the arg pointer register, structure value 15903 address, and all registers that might be used to pass arguments to 15904 a function into a block of memory allocated on the stack. Then it 15905 returns the address of that block. 15906 15907 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 15908 *ARGUMENTS, size_t SIZE) 15909 This built-in function invokes FUNCTION with a copy of the 15910 parameters described by ARGUMENTS and SIZE. 15911 15912 The value of ARGUMENTS should be the value returned by 15913 `__builtin_apply_args'. The argument SIZE specifies the size of 15914 the stack argument data, in bytes. 15915 15916 This function returns a pointer to data describing how to return 15917 whatever value was returned by FUNCTION. The data is saved in a 15918 block of memory allocated on the stack. 15919 15920 It is not always simple to compute the proper value for SIZE. The 15921 value is used by `__builtin_apply' to compute the amount of data 15922 that should be pushed on the stack and copied from the incoming 15923 argument area. 15924 15925 -- Built-in Function: void __builtin_return (void *RESULT) 15926 This built-in function returns the value described by RESULT from 15927 the containing function. You should specify, for RESULT, a value 15928 returned by `__builtin_apply'. 15929 15930 -- Built-in Function: __builtin_va_arg_pack () 15931 This built-in function represents all anonymous arguments of an 15932 inline function. It can be used only in inline functions which 15933 will be always inlined, never compiled as a separate function, 15934 such as those using `__attribute__ ((__always_inline__))' or 15935 `__attribute__ ((__gnu_inline__))' extern inline functions. It 15936 must be only passed as last argument to some other function with 15937 variable arguments. This is useful for writing small wrapper 15938 inlines for variable argument functions, when using preprocessor 15939 macros is undesirable. For example: 15940 extern int myprintf (FILE *f, const char *format, ...); 15941 extern inline __attribute__ ((__gnu_inline__)) int 15942 myprintf (FILE *f, const char *format, ...) 15943 { 15944 int r = fprintf (f, "myprintf: "); 15945 if (r < 0) 15946 return r; 15947 int s = fprintf (f, format, __builtin_va_arg_pack ()); 15948 if (s < 0) 15949 return s; 15950 return r + s; 15951 } 15952 15953 -- Built-in Function: __builtin_va_arg_pack_len () 15954 This built-in function returns the number of anonymous arguments of 15955 an inline function. It can be used only in inline functions which 15956 will be always inlined, never compiled as a separate function, such 15957 as those using `__attribute__ ((__always_inline__))' or 15958 `__attribute__ ((__gnu_inline__))' extern inline functions. For 15959 example following will do link or runtime checking of open 15960 arguments for optimized code: 15961 #ifdef __OPTIMIZE__ 15962 extern inline __attribute__((__gnu_inline__)) int 15963 myopen (const char *path, int oflag, ...) 15964 { 15965 if (__builtin_va_arg_pack_len () > 1) 15966 warn_open_too_many_arguments (); 15967 15968 if (__builtin_constant_p (oflag)) 15969 { 15970 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 15971 { 15972 warn_open_missing_mode (); 15973 return __open_2 (path, oflag); 15974 } 15975 return open (path, oflag, __builtin_va_arg_pack ()); 15976 } 15977 15978 if (__builtin_va_arg_pack_len () < 1) 15979 return __open_2 (path, oflag); 15980 15981 return open (path, oflag, __builtin_va_arg_pack ()); 15982 } 15983 #endif 15984 15985 15986 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 15987 15988 5.6 Referring to a Type with `typeof' 15989 ===================================== 15990 15991 Another way to refer to the type of an expression is with `typeof'. 15992 The syntax of using of this keyword looks like `sizeof', but the 15993 construct acts semantically like a type name defined with `typedef'. 15994 15995 There are two ways of writing the argument to `typeof': with an 15996 expression or with a type. Here is an example with an expression: 15997 15998 typeof (x[0](1)) 15999 16000 This assumes that `x' is an array of pointers to functions; the type 16001 described is that of the values of the functions. 16002 16003 Here is an example with a typename as the argument: 16004 16005 typeof (int *) 16006 16007 Here the type described is that of pointers to `int'. 16008 16009 If you are writing a header file that must work when included in ISO C 16010 programs, write `__typeof__' instead of `typeof'. *Note Alternate 16011 Keywords::. 16012 16013 A `typeof'-construct can be used anywhere a typedef name could be 16014 used. For example, you can use it in a declaration, in a cast, or 16015 inside of `sizeof' or `typeof'. 16016 16017 `typeof' is often useful in conjunction with the 16018 statements-within-expressions feature. Here is how the two together can 16019 be used to define a safe "maximum" macro that operates on any 16020 arithmetic type and evaluates each of its arguments exactly once: 16021 16022 #define max(a,b) \ 16023 ({ typeof (a) _a = (a); \ 16024 typeof (b) _b = (b); \ 16025 _a > _b ? _a : _b; }) 16026 16027 The reason for using names that start with underscores for the local 16028 variables is to avoid conflicts with variable names that occur within 16029 the expressions that are substituted for `a' and `b'. Eventually we 16030 hope to design a new form of declaration syntax that allows you to 16031 declare variables whose scopes start only after their initializers; 16032 this will be a more reliable way to prevent such conflicts. 16033 16034 Some more examples of the use of `typeof': 16035 16036 * This declares `y' with the type of what `x' points to. 16037 16038 typeof (*x) y; 16039 16040 * This declares `y' as an array of such values. 16041 16042 typeof (*x) y[4]; 16043 16044 * This declares `y' as an array of pointers to characters: 16045 16046 typeof (typeof (char *)[4]) y; 16047 16048 It is equivalent to the following traditional C declaration: 16049 16050 char *y[4]; 16051 16052 To see the meaning of the declaration using `typeof', and why it 16053 might be a useful way to write, rewrite it with these macros: 16054 16055 #define pointer(T) typeof(T *) 16056 #define array(T, N) typeof(T [N]) 16057 16058 Now the declaration can be rewritten this way: 16059 16060 array (pointer (char), 4) y; 16061 16062 Thus, `array (pointer (char), 4)' is the type of arrays of 4 16063 pointers to `char'. 16064 16065 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 16066 limited extension which permitted one to write 16067 16068 typedef T = EXPR; 16069 16070 with the effect of declaring T to have the type of the expression EXPR. 16071 This extension does not work with GCC 3 (versions between 3.0 and 3.2 16072 will crash; 3.2.1 and later give an error). Code which relies on it 16073 should be rewritten to use `typeof': 16074 16075 typedef typeof(EXPR) T; 16076 16077 This will work with all versions of GCC. 16078 16079 16080 File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 16081 16082 5.7 Conditionals with Omitted Operands 16083 ====================================== 16084 16085 The middle operand in a conditional expression may be omitted. Then if 16086 the first operand is nonzero, its value is the value of the conditional 16087 expression. 16088 16089 Therefore, the expression 16090 16091 x ? : y 16092 16093 has the value of `x' if that is nonzero; otherwise, the value of `y'. 16094 16095 This example is perfectly equivalent to 16096 16097 x ? x : y 16098 16099 In this simple case, the ability to omit the middle operand is not 16100 especially useful. When it becomes useful is when the first operand 16101 does, or may (if it is a macro argument), contain a side effect. Then 16102 repeating the operand in the middle would perform the side effect 16103 twice. Omitting the middle operand uses the value already computed 16104 without the undesirable effects of recomputing it. 16105 16106 16107 File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions 16108 16109 5.8 Double-Word Integers 16110 ======================== 16111 16112 ISO C99 supports data types for integers that are at least 64 bits wide, 16113 and as an extension GCC supports them in C89 mode and in C++. Simply 16114 write `long long int' for a signed integer, or `unsigned long long int' 16115 for an unsigned integer. To make an integer constant of type `long 16116 long int', add the suffix `LL' to the integer. To make an integer 16117 constant of type `unsigned long long int', add the suffix `ULL' to the 16118 integer. 16119 16120 You can use these types in arithmetic like any other integer types. 16121 Addition, subtraction, and bitwise boolean operations on these types 16122 are open-coded on all types of machines. Multiplication is open-coded 16123 if the machine supports fullword-to-doubleword a widening multiply 16124 instruction. Division and shifts are open-coded only on machines that 16125 provide special support. The operations that are not open-coded use 16126 special library routines that come with GCC. 16127 16128 There may be pitfalls when you use `long long' types for function 16129 arguments, unless you declare function prototypes. If a function 16130 expects type `int' for its argument, and you pass a value of type `long 16131 long int', confusion will result because the caller and the subroutine 16132 will disagree about the number of bytes for the argument. Likewise, if 16133 the function expects `long long int' and you pass `int'. The best way 16134 to avoid such problems is to use prototypes. 16135 16136 16137 File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 16138 16139 5.9 Complex Numbers 16140 =================== 16141 16142 ISO C99 supports complex floating data types, and as an extension GCC 16143 supports them in C89 mode and in C++, and supports complex integer data 16144 types which are not part of ISO C99. You can declare complex types 16145 using the keyword `_Complex'. As an extension, the older GNU keyword 16146 `__complex__' is also supported. 16147 16148 For example, `_Complex double x;' declares `x' as a variable whose 16149 real part and imaginary part are both of type `double'. `_Complex 16150 short int y;' declares `y' to have real and imaginary parts of type 16151 `short int'; this is not likely to be useful, but it shows that the set 16152 of complex types is complete. 16153 16154 To write a constant with a complex data type, use the suffix `i' or 16155 `j' (either one; they are equivalent). For example, `2.5fi' has type 16156 `_Complex float' and `3i' has type `_Complex int'. Such a constant 16157 always has a pure imaginary value, but you can form any complex value 16158 you like by adding one to a real constant. This is a GNU extension; if 16159 you have an ISO C99 conforming C library (such as GNU libc), and want 16160 to construct complex constants of floating type, you should include 16161 `<complex.h>' and use the macros `I' or `_Complex_I' instead. 16162 16163 To extract the real part of a complex-valued expression EXP, write 16164 `__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 16165 part. This is a GNU extension; for values of floating type, you should 16166 use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 16167 `cimag' and `cimagl', declared in `<complex.h>' and also provided as 16168 built-in functions by GCC. 16169 16170 The operator `~' performs complex conjugation when used on a value 16171 with a complex type. This is a GNU extension; for values of floating 16172 type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 16173 declared in `<complex.h>' and also provided as built-in functions by 16174 GCC. 16175 16176 GCC can allocate complex automatic variables in a noncontiguous 16177 fashion; it's even possible for the real part to be in a register while 16178 the imaginary part is on the stack (or vice-versa). Only the DWARF2 16179 debug info format can represent this, so use of DWARF2 is recommended. 16180 If you are using the stabs debug info format, GCC describes a 16181 noncontiguous complex variable as if it were two separate variables of 16182 noncomplex type. If the variable's actual name is `foo', the two 16183 fictitious variables are named `foo$real' and `foo$imag'. You can 16184 examine and set these two fictitious variables with your debugger. 16185 16186 16187 File: gcc.info, Node: Floating Types, Next: Decimal Float, Prev: Complex, Up: C Extensions 16188 16189 5.10 Additional Floating Types 16190 ============================== 16191 16192 As an extension, the GNU C compiler supports additional floating types, 16193 `__float80' and `__float128' to support 80bit (`XFmode') and 128 bit 16194 (`TFmode') floating types. Support for additional types includes the 16195 arithmetic operators: add, subtract, multiply, divide; unary arithmetic 16196 operators; relational operators; equality operators; and conversions to 16197 and from integer and other floating types. Use a suffix `w' or `W' in 16198 a literal constant of type `__float80' and `q' or `Q' for `_float128'. 16199 You can declare complex types using the corresponding internal complex 16200 type, `XCmode' for `__float80' type and `TCmode' for `__float128' type: 16201 16202 typedef _Complex float __attribute__((mode(TC))) _Complex128; 16203 typedef _Complex float __attribute__((mode(XC))) _Complex80; 16204 16205 Not all targets support additional floating point types. `__float80' 16206 is supported on i386, x86_64 and ia64 targets and target `__float128' 16207 is supported on x86_64 and ia64 targets. 16208 16209 16210 File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Floating Types, Up: C Extensions 16211 16212 5.11 Decimal Floating Types 16213 =========================== 16214 16215 As an extension, the GNU C compiler supports decimal floating types as 16216 defined in the N1176 draft of ISO/IEC WDTR24732. Support for decimal 16217 floating types in GCC will evolve as the draft technical report changes. 16218 Calling conventions for any target might also change. Not all targets 16219 support decimal floating types. 16220 16221 The decimal floating types are `_Decimal32', `_Decimal64', and 16222 `_Decimal128'. They use a radix of ten, unlike the floating types 16223 `float', `double', and `long double' whose radix is not specified by 16224 the C standard but is usually two. 16225 16226 Support for decimal floating types includes the arithmetic operators 16227 add, subtract, multiply, divide; unary arithmetic operators; relational 16228 operators; equality operators; and conversions to and from integer and 16229 other floating types. Use a suffix `df' or `DF' in a literal constant 16230 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 16231 for `_Decimal128'. 16232 16233 GCC support of decimal float as specified by the draft technical report 16234 is incomplete: 16235 16236 * Translation time data type (TTDT) is not supported. 16237 16238 * When the value of a decimal floating type cannot be represented in 16239 the integer type to which it is being converted, the result is 16240 undefined rather than the result value specified by the draft 16241 technical report. 16242 16243 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 16244 the DWARF2 debug information format. 16245 16246 16247 File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 16248 16249 5.12 Hex Floats 16250 =============== 16251 16252 ISO C99 supports floating-point numbers written not only in the usual 16253 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 16254 written in hexadecimal format. As a GNU extension, GCC supports this 16255 in C89 mode (except in some cases when strictly conforming) and in C++. 16256 In that format the `0x' hex introducer and the `p' or `P' exponent 16257 field are mandatory. The exponent is a decimal number that indicates 16258 the power of 2 by which the significant part will be multiplied. Thus 16259 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 16260 is the same as `1.55e1'. 16261 16262 Unlike for floating-point numbers in the decimal notation the exponent 16263 is always required in the hexadecimal notation. Otherwise the compiler 16264 would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 16265 could mean `1.0f' or `1.9375' since `f' is also the extension for 16266 floating-point constants of type `float'. 16267 16268 16269 File: gcc.info, Node: Fixed-Point, Next: Zero Length, Prev: Hex Floats, Up: C Extensions 16270 16271 5.13 Fixed-Point Types 16272 ====================== 16273 16274 As an extension, the GNU C compiler supports fixed-point types as 16275 defined in the N1169 draft of ISO/IEC DTR 18037. Support for 16276 fixed-point types in GCC will evolve as the draft technical report 16277 changes. Calling conventions for any target might also change. Not 16278 all targets support fixed-point types. 16279 16280 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 16281 `long long _Fract', `unsigned short _Fract', `unsigned _Fract', 16282 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short 16283 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 16284 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 16285 long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 16286 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 16287 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 16288 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 16289 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 16290 unsigned long _Accum', `_Sat unsigned long long _Accum'. Fixed-point 16291 data values contain fractional and optional integral parts. The format 16292 of fixed-point data varies and depends on the target machine. 16293 16294 Support for fixed-point types includes prefix and postfix increment 16295 and decrement operators (`++', `--'); unary arithmetic operators (`+', 16296 `-', `!'); binary arithmetic operators (`+', `-', `*', `/'); binary 16297 shift operators (`<<', `>>'); relational operators (`<', `<=', `>=', 16298 `>'); equality operators (`==', `!='); assignment operators (`+=', 16299 `-=', `*=', `/=', `<<=', `>>='); and conversions to and from integer, 16300 floating-point, or fixed-point types. 16301 16302 Use a suffix `hr' or `HR' in a literal constant of type `short _Fract' 16303 and `_Sat short _Fract', `r' or `R' for `_Fract' and `_Sat _Fract', 16304 `lr' or `LR' for `long _Fract' and `_Sat long _Fract', `llr' or `LLR' 16305 for `long long _Fract' and `_Sat long long _Fract', `uhr' or `UHR' for 16306 `unsigned short _Fract' and `_Sat unsigned short _Fract', `ur' or `UR' 16307 for `unsigned _Fract' and `_Sat unsigned _Fract', `ulr' or `ULR' for 16308 `unsigned long _Fract' and `_Sat unsigned long _Fract', `ullr' or 16309 `ULLR' for `unsigned long long _Fract' and `_Sat unsigned long long 16310 _Fract', `hk' or `HK' for `short _Accum' and `_Sat short _Accum', `k' 16311 or `K' for `_Accum' and `_Sat _Accum', `lk' or `LK' for `long _Accum' 16312 and `_Sat long _Accum', `llk' or `LLK' for `long long _Accum' and `_Sat 16313 long long _Accum', `uhk' or `UHK' for `unsigned short _Accum' and `_Sat 16314 unsigned short _Accum', `uk' or `UK' for `unsigned _Accum' and `_Sat 16315 unsigned _Accum', `ulk' or `ULK' for `unsigned long _Accum' and `_Sat 16316 unsigned long _Accum', and `ullk' or `ULLK' for `unsigned long long 16317 _Accum' and `_Sat unsigned long long _Accum'. 16318 16319 GCC support of fixed-point types as specified by the draft technical 16320 report is incomplete: 16321 16322 * Pragmas to control overflow and rounding behaviors are not 16323 implemented. 16324 16325 Fixed-point types are supported by the DWARF2 debug information format. 16326 16327 16328 File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Fixed-Point, Up: C Extensions 16329 16330 5.14 Arrays of Length Zero 16331 ========================== 16332 16333 Zero-length arrays are allowed in GNU C. They are very useful as the 16334 last element of a structure which is really a header for a 16335 variable-length object: 16336 16337 struct line { 16338 int length; 16339 char contents[0]; 16340 }; 16341 16342 struct line *thisline = (struct line *) 16343 malloc (sizeof (struct line) + this_length); 16344 thisline->length = this_length; 16345 16346 In ISO C90, you would have to give `contents' a length of 1, which 16347 means either you waste space or complicate the argument to `malloc'. 16348 16349 In ISO C99, you would use a "flexible array member", which is slightly 16350 different in syntax and semantics: 16351 16352 * Flexible array members are written as `contents[]' without the `0'. 16353 16354 * Flexible array members have incomplete type, and so the `sizeof' 16355 operator may not be applied. As a quirk of the original 16356 implementation of zero-length arrays, `sizeof' evaluates to zero. 16357 16358 * Flexible array members may only appear as the last member of a 16359 `struct' that is otherwise non-empty. 16360 16361 * A structure containing a flexible array member, or a union 16362 containing such a structure (possibly recursively), may not be a 16363 member of a structure or an element of an array. (However, these 16364 uses are permitted by GCC as extensions.) 16365 16366 GCC versions before 3.0 allowed zero-length arrays to be statically 16367 initialized, as if they were flexible arrays. In addition to those 16368 cases that were useful, it also allowed initializations in situations 16369 that would corrupt later data. Non-empty initialization of zero-length 16370 arrays is now treated like any case where there are more initializer 16371 elements than the array holds, in that a suitable warning about "excess 16372 elements in array" is given, and the excess elements (all of them, in 16373 this case) are ignored. 16374 16375 Instead GCC allows static initialization of flexible array members. 16376 This is equivalent to defining a new structure containing the original 16377 structure followed by an array of sufficient size to contain the data. 16378 I.e. in the following, `f1' is constructed as if it were declared like 16379 `f2'. 16380 16381 struct f1 { 16382 int x; int y[]; 16383 } f1 = { 1, { 2, 3, 4 } }; 16384 16385 struct f2 { 16386 struct f1 f1; int data[3]; 16387 } f2 = { { 1 }, { 2, 3, 4 } }; 16388 16389 The convenience of this extension is that `f1' has the desired type, 16390 eliminating the need to consistently refer to `f2.f1'. 16391 16392 This has symmetry with normal static arrays, in that an array of 16393 unknown size is also written with `[]'. 16394 16395 Of course, this extension only makes sense if the extra data comes at 16396 the end of a top-level object, as otherwise we would be overwriting 16397 data at subsequent offsets. To avoid undue complication and confusion 16398 with initialization of deeply nested arrays, we simply disallow any 16399 non-empty initialization except when the structure is the top-level 16400 object. For example: 16401 16402 struct foo { int x; int y[]; }; 16403 struct bar { struct foo z; }; 16404 16405 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 16406 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 16407 struct bar c = { { 1, { } } }; // Valid. 16408 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 16409 16410 16411 File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 16412 16413 5.15 Structures With No Members 16414 =============================== 16415 16416 GCC permits a C structure to have no members: 16417 16418 struct empty { 16419 }; 16420 16421 The structure will have size zero. In C++, empty structures are part 16422 of the language. G++ treats empty structures as if they had a single 16423 member of type `char'. 16424 16425 16426 File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 16427 16428 5.16 Arrays of Variable Length 16429 ============================== 16430 16431 Variable-length automatic arrays are allowed in ISO C99, and as an 16432 extension GCC accepts them in C89 mode and in C++. (However, GCC's 16433 implementation of variable-length arrays does not yet conform in detail 16434 to the ISO C99 standard.) These arrays are declared like any other 16435 automatic arrays, but with a length that is not a constant expression. 16436 The storage is allocated at the point of declaration and deallocated 16437 when the brace-level is exited. For example: 16438 16439 FILE * 16440 concat_fopen (char *s1, char *s2, char *mode) 16441 { 16442 char str[strlen (s1) + strlen (s2) + 1]; 16443 strcpy (str, s1); 16444 strcat (str, s2); 16445 return fopen (str, mode); 16446 } 16447 16448 Jumping or breaking out of the scope of the array name deallocates the 16449 storage. Jumping into the scope is not allowed; you get an error 16450 message for it. 16451 16452 You can use the function `alloca' to get an effect much like 16453 variable-length arrays. The function `alloca' is available in many 16454 other C implementations (but not in all). On the other hand, 16455 variable-length arrays are more elegant. 16456 16457 There are other differences between these two methods. Space allocated 16458 with `alloca' exists until the containing _function_ returns. The 16459 space for a variable-length array is deallocated as soon as the array 16460 name's scope ends. (If you use both variable-length arrays and 16461 `alloca' in the same function, deallocation of a variable-length array 16462 will also deallocate anything more recently allocated with `alloca'.) 16463 16464 You can also use variable-length arrays as arguments to functions: 16465 16466 struct entry 16467 tester (int len, char data[len][len]) 16468 { 16469 /* ... */ 16470 } 16471 16472 The length of an array is computed once when the storage is allocated 16473 and is remembered for the scope of the array in case you access it with 16474 `sizeof'. 16475 16476 If you want to pass the array first and the length afterward, you can 16477 use a forward declaration in the parameter list--another GNU extension. 16478 16479 struct entry 16480 tester (int len; char data[len][len], int len) 16481 { 16482 /* ... */ 16483 } 16484 16485 The `int len' before the semicolon is a "parameter forward 16486 declaration", and it serves the purpose of making the name `len' known 16487 when the declaration of `data' is parsed. 16488 16489 You can write any number of such parameter forward declarations in the 16490 parameter list. They can be separated by commas or semicolons, but the 16491 last one must end with a semicolon, which is followed by the "real" 16492 parameter declarations. Each forward declaration must match a "real" 16493 declaration in parameter name and data type. ISO C99 does not support 16494 parameter forward declarations. 16495 16496 16497 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 16498 16499 5.17 Macros with a Variable Number of Arguments. 16500 ================================================ 16501 16502 In the ISO C standard of 1999, a macro can be declared to accept a 16503 variable number of arguments much as a function can. The syntax for 16504 defining the macro is similar to that of a function. Here is an 16505 example: 16506 16507 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 16508 16509 Here `...' is a "variable argument". In the invocation of such a 16510 macro, it represents the zero or more tokens until the closing 16511 parenthesis that ends the invocation, including any commas. This set of 16512 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 16513 it appears. See the CPP manual for more information. 16514 16515 GCC has long supported variadic macros, and used a different syntax 16516 that allowed you to give a name to the variable arguments just like any 16517 other argument. Here is an example: 16518 16519 #define debug(format, args...) fprintf (stderr, format, args) 16520 16521 This is in all ways equivalent to the ISO C example above, but arguably 16522 more readable and descriptive. 16523 16524 GNU CPP has two further variadic macro extensions, and permits them to 16525 be used with either of the above forms of macro definition. 16526 16527 In standard C, you are not allowed to leave the variable argument out 16528 entirely; but you are allowed to pass an empty argument. For example, 16529 this invocation is invalid in ISO C, because there is no comma after 16530 the string: 16531 16532 debug ("A message") 16533 16534 GNU CPP permits you to completely omit the variable arguments in this 16535 way. In the above examples, the compiler would complain, though since 16536 the expansion of the macro still has the extra comma after the format 16537 string. 16538 16539 To help solve this problem, CPP behaves specially for variable 16540 arguments used with the token paste operator, `##'. If instead you 16541 write 16542 16543 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 16544 16545 and if the variable arguments are omitted or empty, the `##' operator 16546 causes the preprocessor to remove the comma before it. If you do 16547 provide some variable arguments in your macro invocation, GNU CPP does 16548 not complain about the paste operation and instead places the variable 16549 arguments after the comma. Just like any other pasted macro argument, 16550 these arguments are not macro expanded. 16551 16552 16553 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 16554 16555 5.18 Slightly Looser Rules for Escaped Newlines 16556 =============================================== 16557 16558 Recently, the preprocessor has relaxed its treatment of escaped 16559 newlines. Previously, the newline had to immediately follow a 16560 backslash. The current implementation allows whitespace in the form of 16561 spaces, horizontal and vertical tabs, and form feeds between the 16562 backslash and the subsequent newline. The preprocessor issues a 16563 warning, but treats it as a valid escaped newline and combines the two 16564 lines to form a single logical line. This works within comments and 16565 tokens, as well as between tokens. Comments are _not_ treated as 16566 whitespace for the purposes of this relaxation, since they have not yet 16567 been replaced with spaces. 16568 16569 16570 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 16571 16572 5.19 Non-Lvalue Arrays May Have Subscripts 16573 ========================================== 16574 16575 In ISO C99, arrays that are not lvalues still decay to pointers, and 16576 may be subscripted, although they may not be modified or used after the 16577 next sequence point and the unary `&' operator may not be applied to 16578 them. As an extension, GCC allows such arrays to be subscripted in C89 16579 mode, though otherwise they do not decay to pointers outside C99 mode. 16580 For example, this is valid in GNU C though not valid in C89: 16581 16582 struct foo {int a[4];}; 16583 16584 struct foo f(); 16585 16586 bar (int index) 16587 { 16588 return f().a[index]; 16589 } 16590 16591 16592 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 16593 16594 5.20 Arithmetic on `void'- and Function-Pointers 16595 ================================================ 16596 16597 In GNU C, addition and subtraction operations are supported on pointers 16598 to `void' and on pointers to functions. This is done by treating the 16599 size of a `void' or of a function as 1. 16600 16601 A consequence of this is that `sizeof' is also allowed on `void' and 16602 on function types, and returns 1. 16603 16604 The option `-Wpointer-arith' requests a warning if these extensions 16605 are used. 16606 16607 16608 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 16609 16610 5.21 Non-Constant Initializers 16611 ============================== 16612 16613 As in standard C++ and ISO C99, the elements of an aggregate 16614 initializer for an automatic variable are not required to be constant 16615 expressions in GNU C. Here is an example of an initializer with 16616 run-time varying elements: 16617 16618 foo (float f, float g) 16619 { 16620 float beat_freqs[2] = { f-g, f+g }; 16621 /* ... */ 16622 } 16623 16624 16625 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 16626 16627 5.22 Compound Literals 16628 ====================== 16629 16630 ISO C99 supports compound literals. A compound literal looks like a 16631 cast containing an initializer. Its value is an object of the type 16632 specified in the cast, containing the elements specified in the 16633 initializer; it is an lvalue. As an extension, GCC supports compound 16634 literals in C89 mode and in C++. 16635 16636 Usually, the specified type is a structure. Assume that `struct foo' 16637 and `structure' are declared as shown: 16638 16639 struct foo {int a; char b[2];} structure; 16640 16641 Here is an example of constructing a `struct foo' with a compound 16642 literal: 16643 16644 structure = ((struct foo) {x + y, 'a', 0}); 16645 16646 This is equivalent to writing the following: 16647 16648 { 16649 struct foo temp = {x + y, 'a', 0}; 16650 structure = temp; 16651 } 16652 16653 You can also construct an array. If all the elements of the compound 16654 literal are (made up of) simple constant expressions, suitable for use 16655 in initializers of objects of static storage duration, then the compound 16656 literal can be coerced to a pointer to its first element and used in 16657 such an initializer, as shown here: 16658 16659 char **foo = (char *[]) { "x", "y", "z" }; 16660 16661 Compound literals for scalar types and union types are is also 16662 allowed, but then the compound literal is equivalent to a cast. 16663 16664 As a GNU extension, GCC allows initialization of objects with static 16665 storage duration by compound literals (which is not possible in ISO 16666 C99, because the initializer is not a constant). It is handled as if 16667 the object was initialized only with the bracket enclosed list if the 16668 types of the compound literal and the object match. The initializer 16669 list of the compound literal must be constant. If the object being 16670 initialized has array type of unknown size, the size is determined by 16671 compound literal size. 16672 16673 static struct foo x = (struct foo) {1, 'a', 'b'}; 16674 static int y[] = (int []) {1, 2, 3}; 16675 static int z[] = (int [3]) {1}; 16676 16677 The above lines are equivalent to the following: 16678 static struct foo x = {1, 'a', 'b'}; 16679 static int y[] = {1, 2, 3}; 16680 static int z[] = {1, 0, 0}; 16681 16682 16683 File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 16684 16685 5.23 Designated Initializers 16686 ============================ 16687 16688 Standard C89 requires the elements of an initializer to appear in a 16689 fixed order, the same as the order of the elements in the array or 16690 structure being initialized. 16691 16692 In ISO C99 you can give the elements in any order, specifying the array 16693 indices or structure field names they apply to, and GNU C allows this as 16694 an extension in C89 mode as well. This extension is not implemented in 16695 GNU C++. 16696 16697 To specify an array index, write `[INDEX] =' before the element value. 16698 For example, 16699 16700 int a[6] = { [4] = 29, [2] = 15 }; 16701 16702 is equivalent to 16703 16704 int a[6] = { 0, 0, 15, 0, 29, 0 }; 16705 16706 The index values must be constant expressions, even if the array being 16707 initialized is automatic. 16708 16709 An alternative syntax for this which has been obsolete since GCC 2.5 16710 but GCC still accepts is to write `[INDEX]' before the element value, 16711 with no `='. 16712 16713 To initialize a range of elements to the same value, write `[FIRST ... 16714 LAST] = VALUE'. This is a GNU extension. For example, 16715 16716 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 16717 16718 If the value in it has side-effects, the side-effects will happen only 16719 once, not for each initialized field by the range initializer. 16720 16721 Note that the length of the array is the highest value specified plus 16722 one. 16723 16724 In a structure initializer, specify the name of a field to initialize 16725 with `.FIELDNAME =' before the element value. For example, given the 16726 following structure, 16727 16728 struct point { int x, y; }; 16729 16730 the following initialization 16731 16732 struct point p = { .y = yvalue, .x = xvalue }; 16733 16734 is equivalent to 16735 16736 struct point p = { xvalue, yvalue }; 16737 16738 Another syntax which has the same meaning, obsolete since GCC 2.5, is 16739 `FIELDNAME:', as shown here: 16740 16741 struct point p = { y: yvalue, x: xvalue }; 16742 16743 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 16744 also use a designator (or the obsolete colon syntax) when initializing 16745 a union, to specify which element of the union should be used. For 16746 example, 16747 16748 union foo { int i; double d; }; 16749 16750 union foo f = { .d = 4 }; 16751 16752 will convert 4 to a `double' to store it in the union using the second 16753 element. By contrast, casting 4 to type `union foo' would store it 16754 into the union as the integer `i', since it is an integer. (*Note Cast 16755 to Union::.) 16756 16757 You can combine this technique of naming elements with ordinary C 16758 initialization of successive elements. Each initializer element that 16759 does not have a designator applies to the next consecutive element of 16760 the array or structure. For example, 16761 16762 int a[6] = { [1] = v1, v2, [4] = v4 }; 16763 16764 is equivalent to 16765 16766 int a[6] = { 0, v1, v2, 0, v4, 0 }; 16767 16768 Labeling the elements of an array initializer is especially useful 16769 when the indices are characters or belong to an `enum' type. For 16770 example: 16771 16772 int whitespace[256] 16773 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 16774 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 16775 16776 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 16777 before an `=' to specify a nested subobject to initialize; the list is 16778 taken relative to the subobject corresponding to the closest 16779 surrounding brace pair. For example, with the `struct point' 16780 declaration above: 16781 16782 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 16783 16784 If the same field is initialized multiple times, it will have value from 16785 the last initialization. If any such overridden initialization has 16786 side-effect, it is unspecified whether the side-effect happens or not. 16787 Currently, GCC will discard them and issue a warning. 16788 16789 16790 File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 16791 16792 5.24 Case Ranges 16793 ================ 16794 16795 You can specify a range of consecutive values in a single `case' label, 16796 like this: 16797 16798 case LOW ... HIGH: 16799 16800 This has the same effect as the proper number of individual `case' 16801 labels, one for each integer value from LOW to HIGH, inclusive. 16802 16803 This feature is especially useful for ranges of ASCII character codes: 16804 16805 case 'A' ... 'Z': 16806 16807 *Be careful:* Write spaces around the `...', for otherwise it may be 16808 parsed wrong when you use it with integer values. For example, write 16809 this: 16810 16811 case 1 ... 5: 16812 16813 rather than this: 16814 16815 case 1...5: 16816 16817 16818 File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 16819 16820 5.25 Cast to a Union Type 16821 ========================= 16822 16823 A cast to union type is similar to other casts, except that the type 16824 specified is a union type. You can specify the type either with `union 16825 TAG' or with a typedef name. A cast to union is actually a constructor 16826 though, not a cast, and hence does not yield an lvalue like normal 16827 casts. (*Note Compound Literals::.) 16828 16829 The types that may be cast to the union type are those of the members 16830 of the union. Thus, given the following union and variables: 16831 16832 union foo { int i; double d; }; 16833 int x; 16834 double y; 16835 16836 both `x' and `y' can be cast to type `union foo'. 16837 16838 Using the cast as the right-hand side of an assignment to a variable of 16839 union type is equivalent to storing in a member of the union: 16840 16841 union foo u; 16842 /* ... */ 16843 u = (union foo) x == u.i = x 16844 u = (union foo) y == u.d = y 16845 16846 You can also use the union cast as a function argument: 16847 16848 void hack (union foo); 16849 /* ... */ 16850 hack ((union foo) x); 16851 16852 16853 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 16854 16855 5.26 Mixed Declarations and Code 16856 ================================ 16857 16858 ISO C99 and ISO C++ allow declarations and code to be freely mixed 16859 within compound statements. As an extension, GCC also allows this in 16860 C89 mode. For example, you could do: 16861 16862 int i; 16863 /* ... */ 16864 i++; 16865 int j = i + 2; 16866 16867 Each identifier is visible from where it is declared until the end of 16868 the enclosing block. 16869 16870 16871 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 16872 16873 5.27 Declaring Attributes of Functions 16874 ====================================== 16875 16876 In GNU C, you declare certain things about functions called in your 16877 program which help the compiler optimize function calls and check your 16878 code more carefully. 16879 16880 The keyword `__attribute__' allows you to specify special attributes 16881 when making a declaration. This keyword is followed by an attribute 16882 specification inside double parentheses. The following attributes are 16883 currently defined for functions on all targets: `aligned', 16884 `alloc_size', `noreturn', `returns_twice', `noinline', `always_inline', 16885 `flatten', `pure', `const', `nothrow', `sentinel', `format', 16886 `format_arg', `no_instrument_function', `section', `constructor', 16887 `destructor', `used', `unused', `deprecated', `weak', `malloc', 16888 `alias', `warn_unused_result', `nonnull', `gnu_inline', 16889 `externally_visible', `hot', `cold', `artificial', `error' and 16890 `warning'. Several other attributes are defined for functions on 16891 particular target systems. Other attributes, including `section' are 16892 supported for variables declarations (*note Variable Attributes::) and 16893 for types (*note Type Attributes::). 16894 16895 You may also specify attributes with `__' preceding and following each 16896 keyword. This allows you to use them in header files without being 16897 concerned about a possible macro of the same name. For example, you 16898 may use `__noreturn__' instead of `noreturn'. 16899 16900 *Note Attribute Syntax::, for details of the exact syntax for using 16901 attributes. 16902 16903 `alias ("TARGET")' 16904 The `alias' attribute causes the declaration to be emitted as an 16905 alias for another symbol, which must be specified. For instance, 16906 16907 void __f () { /* Do something. */; } 16908 void f () __attribute__ ((weak, alias ("__f"))); 16909 16910 defines `f' to be a weak alias for `__f'. In C++, the mangled 16911 name for the target must be used. It is an error if `__f' is not 16912 defined in the same translation unit. 16913 16914 Not all target machines support this attribute. 16915 16916 `aligned (ALIGNMENT)' 16917 This attribute specifies a minimum alignment for the function, 16918 measured in bytes. 16919 16920 You cannot use this attribute to decrease the alignment of a 16921 function, only to increase it. However, when you explicitly 16922 specify a function alignment this will override the effect of the 16923 `-falign-functions' (*note Optimize Options::) option for this 16924 function. 16925 16926 Note that the effectiveness of `aligned' attributes may be limited 16927 by inherent limitations in your linker. On many systems, the 16928 linker is only able to arrange for functions to be aligned up to a 16929 certain maximum alignment. (For some linkers, the maximum 16930 supported alignment may be very very small.) See your linker 16931 documentation for further information. 16932 16933 The `aligned' attribute can also be used for variables and fields 16934 (*note Variable Attributes::.) 16935 16936 `alloc_size' 16937 The `alloc_size' attribute is used to tell the compiler that the 16938 function return value points to memory, where the size is given by 16939 one or two of the functions parameters. GCC uses this information 16940 to improve the correctness of `__builtin_object_size'. 16941 16942 The function parameter(s) denoting the allocated size are 16943 specified by one or two integer arguments supplied to the 16944 attribute. The allocated size is either the value of the single 16945 function argument specified or the product of the two function 16946 arguments specified. Argument numbering starts at one. 16947 16948 For instance, 16949 16950 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 16951 void my_realloc(void* size_t) __attribute__((alloc_size(2))) 16952 16953 declares that my_calloc will return memory of the size given by 16954 the product of parameter 1 and 2 and that my_realloc will return 16955 memory of the size given by parameter 2. 16956 16957 `always_inline' 16958 Generally, functions are not inlined unless optimization is 16959 specified. For functions declared inline, this attribute inlines 16960 the function even if no optimization level was specified. 16961 16962 `gnu_inline' 16963 This attribute should be used with a function which is also 16964 declared with the `inline' keyword. It directs GCC to treat the 16965 function as if it were defined in gnu89 mode even when compiling 16966 in C99 or gnu99 mode. 16967 16968 If the function is declared `extern', then this definition of the 16969 function is used only for inlining. In no case is the function 16970 compiled as a standalone function, not even if you take its address 16971 explicitly. Such an address becomes an external reference, as if 16972 you had only declared the function, and had not defined it. This 16973 has almost the effect of a macro. The way to use this is to put a 16974 function definition in a header file with this attribute, and put 16975 another copy of the function, without `extern', in a library file. 16976 The definition in the header file will cause most calls to the 16977 function to be inlined. If any uses of the function remain, they 16978 will refer to the single copy in the library. Note that the two 16979 definitions of the functions need not be precisely the same, 16980 although if they do not have the same effect your program may 16981 behave oddly. 16982 16983 In C, if the function is neither `extern' nor `static', then the 16984 function is compiled as a standalone function, as well as being 16985 inlined where possible. 16986 16987 This is how GCC traditionally handled functions declared `inline'. 16988 Since ISO C99 specifies a different semantics for `inline', this 16989 function attribute is provided as a transition measure and as a 16990 useful feature in its own right. This attribute is available in 16991 GCC 4.1.3 and later. It is available if either of the 16992 preprocessor macros `__GNUC_GNU_INLINE__' or 16993 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 16994 As Fast As a Macro: Inline. 16995 16996 In C++, this attribute does not depend on `extern' in any way, but 16997 it still requires the `inline' keyword to enable its special 16998 behavior. 16999 17000 `artificial' 17001 This attribute is useful for small inline wrappers which if 17002 possible should appear during debugging as a unit, depending on 17003 the debug info format it will either mean marking the function as 17004 artificial or using the caller location for all instructions 17005 within the inlined body. 17006 17007 `flatten' 17008 Generally, inlining into a function is limited. For a function 17009 marked with this attribute, every call inside this function will 17010 be inlined, if possible. Whether the function itself is 17011 considered for inlining depends on its size and the current 17012 inlining parameters. The `flatten' attribute only works reliably 17013 in unit-at-a-time mode. 17014 17015 `error ("MESSAGE")' 17016 If this attribute is used on a function declaration and a call to 17017 such a function is not eliminated through dead code elimination or 17018 other optimizations, an error which will include MESSAGE will be 17019 diagnosed. This is useful for compile time checking, especially 17020 together with `__builtin_constant_p' and inline functions where 17021 checking the inline function arguments is not possible through 17022 `extern char [(condition) ? 1 : -1];' tricks. While it is 17023 possible to leave the function undefined and thus invoke a link 17024 failure, when using this attribute the problem will be diagnosed 17025 earlier and with exact location of the call even in presence of 17026 inline functions or when not emitting debugging information. 17027 17028 `warning ("MESSAGE")' 17029 If this attribute is used on a function declaration and a call to 17030 such a function is not eliminated through dead code elimination or 17031 other optimizations, a warning which will include MESSAGE will be 17032 diagnosed. This is useful for compile time checking, especially 17033 together with `__builtin_constant_p' and inline functions. While 17034 it is possible to define the function with a message in 17035 `.gnu.warning*' section, when using this attribute the problem 17036 will be diagnosed earlier and with exact location of the call even 17037 in presence of inline functions or when not emitting debugging 17038 information. 17039 17040 `cdecl' 17041 On the Intel 386, the `cdecl' attribute causes the compiler to 17042 assume that the calling function will pop off the stack space used 17043 to pass arguments. This is useful to override the effects of the 17044 `-mrtd' switch. 17045 17046 `const' 17047 Many functions do not examine any values except their arguments, 17048 and have no effects except the return value. Basically this is 17049 just slightly more strict class than the `pure' attribute below, 17050 since function is not allowed to read global memory. 17051 17052 Note that a function that has pointer arguments and examines the 17053 data pointed to must _not_ be declared `const'. Likewise, a 17054 function that calls a non-`const' function usually must not be 17055 `const'. It does not make sense for a `const' function to return 17056 `void'. 17057 17058 The attribute `const' is not implemented in GCC versions earlier 17059 than 2.5. An alternative way to declare that a function has no 17060 side effects, which works in the current version and in some older 17061 versions, is as follows: 17062 17063 typedef int intfn (); 17064 17065 extern const intfn square; 17066 17067 This approach does not work in GNU C++ from 2.6.0 on, since the 17068 language specifies that the `const' must be attached to the return 17069 value. 17070 17071 `constructor' 17072 `destructor' 17073 `constructor (PRIORITY)' 17074 `destructor (PRIORITY)' 17075 The `constructor' attribute causes the function to be called 17076 automatically before execution enters `main ()'. Similarly, the 17077 `destructor' attribute causes the function to be called 17078 automatically after `main ()' has completed or `exit ()' has been 17079 called. Functions with these attributes are useful for 17080 initializing data that will be used implicitly during the 17081 execution of the program. 17082 17083 You may provide an optional integer priority to control the order 17084 in which constructor and destructor functions are run. A 17085 constructor with a smaller priority number runs before a 17086 constructor with a larger priority number; the opposite 17087 relationship holds for destructors. So, if you have a constructor 17088 that allocates a resource and a destructor that deallocates the 17089 same resource, both functions typically have the same priority. 17090 The priorities for constructor and destructor functions are the 17091 same as those specified for namespace-scope C++ objects (*note C++ 17092 Attributes::). 17093 17094 These attributes are not currently implemented for Objective-C. 17095 17096 `deprecated' 17097 The `deprecated' attribute results in a warning if the function is 17098 used anywhere in the source file. This is useful when identifying 17099 functions that are expected to be removed in a future version of a 17100 program. The warning also includes the location of the declaration 17101 of the deprecated function, to enable users to easily find further 17102 information about why the function is deprecated, or what they 17103 should do instead. Note that the warnings only occurs for uses: 17104 17105 int old_fn () __attribute__ ((deprecated)); 17106 int old_fn (); 17107 int (*fn_ptr)() = old_fn; 17108 17109 results in a warning on line 3 but not line 2. 17110 17111 The `deprecated' attribute can also be used for variables and 17112 types (*note Variable Attributes::, *note Type Attributes::.) 17113 17114 `dllexport' 17115 On Microsoft Windows targets and Symbian OS targets the 17116 `dllexport' attribute causes the compiler to provide a global 17117 pointer to a pointer in a DLL, so that it can be referenced with 17118 the `dllimport' attribute. On Microsoft Windows targets, the 17119 pointer name is formed by combining `_imp__' and the function or 17120 variable name. 17121 17122 You can use `__declspec(dllexport)' as a synonym for 17123 `__attribute__ ((dllexport))' for compatibility with other 17124 compilers. 17125 17126 On systems that support the `visibility' attribute, this attribute 17127 also implies "default" visibility. It is an error to explicitly 17128 specify any other visibility. 17129 17130 Currently, the `dllexport' attribute is ignored for inlined 17131 functions, unless the `-fkeep-inline-functions' flag has been 17132 used. The attribute is also ignored for undefined symbols. 17133 17134 When applied to C++ classes, the attribute marks defined 17135 non-inlined member functions and static data members as exports. 17136 Static consts initialized in-class are not marked unless they are 17137 also defined out-of-class. 17138 17139 For Microsoft Windows targets there are alternative methods for 17140 including the symbol in the DLL's export table such as using a 17141 `.def' file with an `EXPORTS' section or, with GNU ld, using the 17142 `--export-all' linker flag. 17143 17144 `dllimport' 17145 On Microsoft Windows and Symbian OS targets, the `dllimport' 17146 attribute causes the compiler to reference a function or variable 17147 via a global pointer to a pointer that is set up by the DLL 17148 exporting the symbol. The attribute implies `extern'. On 17149 Microsoft Windows targets, the pointer name is formed by combining 17150 `_imp__' and the function or variable name. 17151 17152 You can use `__declspec(dllimport)' as a synonym for 17153 `__attribute__ ((dllimport))' for compatibility with other 17154 compilers. 17155 17156 On systems that support the `visibility' attribute, this attribute 17157 also implies "default" visibility. It is an error to explicitly 17158 specify any other visibility. 17159 17160 Currently, the attribute is ignored for inlined functions. If the 17161 attribute is applied to a symbol _definition_, an error is 17162 reported. If a symbol previously declared `dllimport' is later 17163 defined, the attribute is ignored in subsequent references, and a 17164 warning is emitted. The attribute is also overridden by a 17165 subsequent declaration as `dllexport'. 17166 17167 When applied to C++ classes, the attribute marks non-inlined 17168 member functions and static data members as imports. However, the 17169 attribute is ignored for virtual methods to allow creation of 17170 vtables using thunks. 17171 17172 On the SH Symbian OS target the `dllimport' attribute also has 17173 another affect--it can cause the vtable and run-time type 17174 information for a class to be exported. This happens when the 17175 class has a dllimport'ed constructor or a non-inline, non-pure 17176 virtual function and, for either of those two conditions, the 17177 class also has a inline constructor or destructor and has a key 17178 function that is defined in the current translation unit. 17179 17180 For Microsoft Windows based targets the use of the `dllimport' 17181 attribute on functions is not necessary, but provides a small 17182 performance benefit by eliminating a thunk in the DLL. The use of 17183 the `dllimport' attribute on imported variables was required on 17184 older versions of the GNU linker, but can now be avoided by 17185 passing the `--enable-auto-import' switch to the GNU linker. As 17186 with functions, using the attribute for a variable eliminates a 17187 thunk in the DLL. 17188 17189 One drawback to using this attribute is that a pointer to a 17190 _variable_ marked as `dllimport' cannot be used as a constant 17191 address. However, a pointer to a _function_ with the `dllimport' 17192 attribute can be used as a constant initializer; in this case, the 17193 address of a stub function in the import lib is referenced. On 17194 Microsoft Windows targets, the attribute can be disabled for 17195 functions by setting the `-mnop-fun-dllimport' flag. 17196 17197 `eightbit_data' 17198 Use this attribute on the H8/300, H8/300H, and H8S to indicate 17199 that the specified variable should be placed into the eight bit 17200 data section. The compiler will generate more efficient code for 17201 certain operations on data in the eight bit data area. Note the 17202 eight bit data area is limited to 256 bytes of data. 17203 17204 You must use GAS and GLD from GNU binutils version 2.7 or later for 17205 this attribute to work correctly. 17206 17207 `exception_handler' 17208 Use this attribute on the Blackfin to indicate that the specified 17209 function is an exception handler. The compiler will generate 17210 function entry and exit sequences suitable for use in an exception 17211 handler when this attribute is present. 17212 17213 `far' 17214 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 17215 use a calling convention that takes care of switching memory banks 17216 when entering and leaving a function. This calling convention is 17217 also the default when using the `-mlong-calls' option. 17218 17219 On 68HC12 the compiler will use the `call' and `rtc' instructions 17220 to call and return from a function. 17221 17222 On 68HC11 the compiler will generate a sequence of instructions to 17223 invoke a board-specific routine to switch the memory bank and call 17224 the real function. The board-specific routine simulates a `call'. 17225 At the end of a function, it will jump to a board-specific routine 17226 instead of using `rts'. The board-specific return routine 17227 simulates the `rtc'. 17228 17229 `fastcall' 17230 On the Intel 386, the `fastcall' attribute causes the compiler to 17231 pass the first argument (if of integral type) in the register ECX 17232 and the second argument (if of integral type) in the register EDX. 17233 Subsequent and other typed arguments are passed on the stack. 17234 The called function will pop the arguments off the stack. If the 17235 number of arguments is variable all arguments are pushed on the 17236 stack. 17237 17238 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 17239 The `format' attribute specifies that a function takes `printf', 17240 `scanf', `strftime' or `strfmon' style arguments which should be 17241 type-checked against a format string. For example, the 17242 declaration: 17243 17244 extern int 17245 my_printf (void *my_object, const char *my_format, ...) 17246 __attribute__ ((format (printf, 2, 3))); 17247 17248 causes the compiler to check the arguments in calls to `my_printf' 17249 for consistency with the `printf' style format string argument 17250 `my_format'. 17251 17252 The parameter ARCHETYPE determines how the format string is 17253 interpreted, and should be `printf', `scanf', `strftime' or 17254 `strfmon'. (You can also use `__printf__', `__scanf__', 17255 `__strftime__' or `__strfmon__'.) The parameter STRING-INDEX 17256 specifies which argument is the format string argument (starting 17257 from 1), while FIRST-TO-CHECK is the number of the first argument 17258 to check against the format string. For functions where the 17259 arguments are not available to be checked (such as `vprintf'), 17260 specify the third parameter as zero. In this case the compiler 17261 only checks the format string for consistency. For `strftime' 17262 formats, the third parameter is required to be zero. Since 17263 non-static C++ methods have an implicit `this' argument, the 17264 arguments of such methods should be counted from two, not one, when 17265 giving values for STRING-INDEX and FIRST-TO-CHECK. 17266 17267 In the example above, the format string (`my_format') is the second 17268 argument of the function `my_print', and the arguments to check 17269 start with the third argument, so the correct parameters for the 17270 format attribute are 2 and 3. 17271 17272 The `format' attribute allows you to identify your own functions 17273 which take format strings as arguments, so that GCC can check the 17274 calls to these functions for errors. The compiler always (unless 17275 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 17276 standard library functions `printf', `fprintf', `sprintf', 17277 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 17278 `vsprintf' whenever such warnings are requested (using 17279 `-Wformat'), so there is no need to modify the header file 17280 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 17281 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 17282 strictly conforming C standard modes, the X/Open function 17283 `strfmon' is also checked as are `printf_unlocked' and 17284 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 17285 Dialect Options. 17286 17287 The target may provide additional types of format checks. *Note 17288 Format Checks Specific to Particular Target Machines: Target 17289 Format Checks. 17290 17291 `format_arg (STRING-INDEX)' 17292 The `format_arg' attribute specifies that a function takes a format 17293 string for a `printf', `scanf', `strftime' or `strfmon' style 17294 function and modifies it (for example, to translate it into 17295 another language), so the result can be passed to a `printf', 17296 `scanf', `strftime' or `strfmon' style function (with the 17297 remaining arguments to the format function the same as they would 17298 have been for the unmodified string). For example, the 17299 declaration: 17300 17301 extern char * 17302 my_dgettext (char *my_domain, const char *my_format) 17303 __attribute__ ((format_arg (2))); 17304 17305 causes the compiler to check the arguments in calls to a `printf', 17306 `scanf', `strftime' or `strfmon' type function, whose format 17307 string argument is a call to the `my_dgettext' function, for 17308 consistency with the format string argument `my_format'. If the 17309 `format_arg' attribute had not been specified, all the compiler 17310 could tell in such calls to format functions would be that the 17311 format string argument is not constant; this would generate a 17312 warning when `-Wformat-nonliteral' is used, but the calls could 17313 not be checked without the attribute. 17314 17315 The parameter STRING-INDEX specifies which argument is the format 17316 string argument (starting from one). Since non-static C++ methods 17317 have an implicit `this' argument, the arguments of such methods 17318 should be counted from two. 17319 17320 The `format-arg' attribute allows you to identify your own 17321 functions which modify format strings, so that GCC can check the 17322 calls to `printf', `scanf', `strftime' or `strfmon' type function 17323 whose operands are a call to one of your own function. The 17324 compiler always treats `gettext', `dgettext', and `dcgettext' in 17325 this manner except when strict ISO C support is requested by 17326 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 17327 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 17328 Dialect Options. 17329 17330 `function_vector' 17331 Use this attribute on the H8/300, H8/300H, and H8S to indicate 17332 that the specified function should be called through the function 17333 vector. Calling a function through the function vector will 17334 reduce code size, however; the function vector has a limited size 17335 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 17336 and H8S) and shares space with the interrupt vector. 17337 17338 You must use GAS and GLD from GNU binutils version 2.7 or later for 17339 this attribute to work correctly. 17340 17341 On M16C/M32C targets, the `function_vector' attribute declares a 17342 special page subroutine call function. Use of this attribute 17343 reduces the code size by 2 bytes for each call generated to the 17344 subroutine. The argument to the attribute is the vector number 17345 entry from the special page vector table which contains the 16 17346 low-order bits of the subroutine's entry address. Each vector 17347 table has special page number (18 to 255) which are used in `jsrs' 17348 instruction. Jump addresses of the routines are generated by 17349 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 17350 M32C targets), to the 2 byte addresses set in the vector table. 17351 Therefore you need to ensure that all the special page vector 17352 routines should get mapped within the address range 0x0F0000 to 17353 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 17354 17355 In the following example 2 bytes will be saved for each call to 17356 function `foo'. 17357 17358 void foo (void) __attribute__((function_vector(0x18))); 17359 void foo (void) 17360 { 17361 } 17362 17363 void bar (void) 17364 { 17365 foo(); 17366 } 17367 17368 If functions are defined in one file and are called in another 17369 file, then be sure to write this declaration in both files. 17370 17371 This attribute is ignored for R8C target. 17372 17373 `interrupt' 17374 Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MS1, 17375 and Xstormy16 ports to indicate that the specified function is an 17376 interrupt handler. The compiler will generate function entry and 17377 exit sequences suitable for use in an interrupt handler when this 17378 attribute is present. 17379 17380 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 17381 and SH processors can be specified via the `interrupt_handler' 17382 attribute. 17383 17384 Note, on the AVR, interrupts will be enabled inside the function. 17385 17386 Note, for the ARM, you can specify the kind of interrupt to be 17387 handled by adding an optional parameter to the interrupt attribute 17388 like this: 17389 17390 void f () __attribute__ ((interrupt ("IRQ"))); 17391 17392 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 17393 and UNDEF. 17394 17395 On ARMv7-M the interrupt type is ignored, and the attribute means 17396 the function may be called with a word aligned stack pointer. 17397 17398 `interrupt_handler' 17399 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 17400 and SH to indicate that the specified function is an interrupt 17401 handler. The compiler will generate function entry and exit 17402 sequences suitable for use in an interrupt handler when this 17403 attribute is present. 17404 17405 `interrupt_thread' 17406 Use this attribute on fido, a subarchitecture of the m68k, to 17407 indicate that the specified function is an interrupt handler that 17408 is designed to run as a thread. The compiler omits generate 17409 prologue/epilogue sequences and replaces the return instruction 17410 with a `sleep' instruction. This attribute is available only on 17411 fido. 17412 17413 `kspisusp' 17414 When used together with `interrupt_handler', `exception_handler' 17415 or `nmi_handler', code will be generated to load the stack pointer 17416 from the USP register in the function prologue. 17417 17418 `l1_text' 17419 This attribute specifies a function to be placed into L1 17420 Instruction SRAM. The function will be put into a specific section 17421 named `.l1.text'. With `-mfdpic', function calls with a such 17422 function as the callee or caller will use inlined PLT. 17423 17424 `long_call/short_call' 17425 This attribute specifies how a particular function is called on 17426 ARM. Both attributes override the `-mlong-calls' (*note ARM 17427 Options::) command line switch and `#pragma long_calls' settings. 17428 The `long_call' attribute indicates that the function might be far 17429 away from the call site and require a different (more expensive) 17430 calling sequence. The `short_call' attribute always places the 17431 offset to the function from the call site into the `BL' 17432 instruction directly. 17433 17434 `longcall/shortcall' 17435 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 17436 indicates that the function might be far away from the call site 17437 and require a different (more expensive) calling sequence. The 17438 `shortcall' attribute indicates that the function is always close 17439 enough for the shorter calling sequence to be used. These 17440 attributes override both the `-mlongcall' switch and, on the 17441 RS/6000 and PowerPC, the `#pragma longcall' setting. 17442 17443 *Note RS/6000 and PowerPC Options::, for more information on 17444 whether long calls are necessary. 17445 17446 `long_call/near/far' 17447 These attributes specify how a particular function is called on 17448 MIPS. The attributes override the `-mlong-calls' (*note MIPS 17449 Options::) command-line switch. The `long_call' and `far' 17450 attributes are synonyms, and cause the compiler to always call the 17451 function by first loading its address into a register, and then 17452 using the contents of that register. The `near' attribute has the 17453 opposite effect; it specifies that non-PIC calls should be made 17454 using the more efficient `jal' instruction. 17455 17456 `malloc' 17457 The `malloc' attribute is used to tell the compiler that a function 17458 may be treated as if any non-`NULL' pointer it returns cannot 17459 alias any other pointer valid when the function returns. This 17460 will often improve optimization. Standard functions with this 17461 property include `malloc' and `calloc'. `realloc'-like functions 17462 have this property as long as the old pointer is never referred to 17463 (including comparing it to the new pointer) after the function 17464 returns a non-`NULL' value. 17465 17466 `mips16/nomips16' 17467 On MIPS targets, you can use the `mips16' and `nomips16' function 17468 attributes to locally select or turn off MIPS16 code generation. 17469 A function with the `mips16' attribute is emitted as MIPS16 code, 17470 while MIPS16 code generation is disabled for functions with the 17471 `nomips16' attribute. These attributes override the `-mips16' and 17472 `-mno-mips16' options on the command line (*note MIPS Options::). 17473 17474 When compiling files containing mixed MIPS16 and non-MIPS16 code, 17475 the preprocessor symbol `__mips16' reflects the setting on the 17476 command line, not that within individual functions. Mixed MIPS16 17477 and non-MIPS16 code may interact badly with some GCC extensions 17478 such as `__builtin_apply' (*note Constructing Calls::). 17479 17480 `model (MODEL-NAME)' 17481 On the M32R/D, use this attribute to set the addressability of an 17482 object, and of the code generated for a function. The identifier 17483 MODEL-NAME is one of `small', `medium', or `large', representing 17484 each of the code models. 17485 17486 Small model objects live in the lower 16MB of memory (so that their 17487 addresses can be loaded with the `ld24' instruction), and are 17488 callable with the `bl' instruction. 17489 17490 Medium model objects may live anywhere in the 32-bit address space 17491 (the compiler will generate `seth/add3' instructions to load their 17492 addresses), and are callable with the `bl' instruction. 17493 17494 Large model objects may live anywhere in the 32-bit address space 17495 (the compiler will generate `seth/add3' instructions to load their 17496 addresses), and may not be reachable with the `bl' instruction 17497 (the compiler will generate the much slower `seth/add3/jl' 17498 instruction sequence). 17499 17500 On IA-64, use this attribute to set the addressability of an 17501 object. At present, the only supported identifier for MODEL-NAME 17502 is `small', indicating addressability via "small" (22-bit) 17503 addresses (so that their addresses can be loaded with the `addl' 17504 instruction). Caveat: such addressing is by definition not 17505 position independent and hence this attribute must not be used for 17506 objects defined by shared libraries. 17507 17508 `naked' 17509 Use this attribute on the ARM, AVR, IP2K and SPU ports to indicate 17510 that the specified function does not need prologue/epilogue 17511 sequences generated by the compiler. It is up to the programmer 17512 to provide these sequences. 17513 17514 `near' 17515 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 17516 use the normal calling convention based on `jsr' and `rts'. This 17517 attribute can be used to cancel the effect of the `-mlong-calls' 17518 option. 17519 17520 `nesting' 17521 Use this attribute together with `interrupt_handler', 17522 `exception_handler' or `nmi_handler' to indicate that the function 17523 entry code should enable nested interrupts or exceptions. 17524 17525 `nmi_handler' 17526 Use this attribute on the Blackfin to indicate that the specified 17527 function is an NMI handler. The compiler will generate function 17528 entry and exit sequences suitable for use in an NMI handler when 17529 this attribute is present. 17530 17531 `no_instrument_function' 17532 If `-finstrument-functions' is given, profiling function calls will 17533 be generated at entry and exit of most user-compiled functions. 17534 Functions with this attribute will not be so instrumented. 17535 17536 `noinline' 17537 This function attribute prevents a function from being considered 17538 for inlining. If the function does not have side-effects, there 17539 are optimizations other than inlining that causes function calls 17540 to be optimized away, although the function call is live. To keep 17541 such calls from being optimized away, put 17542 asm (""); 17543 (*note Extended Asm::) in the called function, to serve as a 17544 special side-effect. 17545 17546 `nonnull (ARG-INDEX, ...)' 17547 The `nonnull' attribute specifies that some function parameters 17548 should be non-null pointers. For instance, the declaration: 17549 17550 extern void * 17551 my_memcpy (void *dest, const void *src, size_t len) 17552 __attribute__((nonnull (1, 2))); 17553 17554 causes the compiler to check that, in calls to `my_memcpy', 17555 arguments DEST and SRC are non-null. If the compiler determines 17556 that a null pointer is passed in an argument slot marked as 17557 non-null, and the `-Wnonnull' option is enabled, a warning is 17558 issued. The compiler may also choose to make optimizations based 17559 on the knowledge that certain function arguments will not be null. 17560 17561 If no argument index list is given to the `nonnull' attribute, all 17562 pointer arguments are marked as non-null. To illustrate, the 17563 following declaration is equivalent to the previous example: 17564 17565 extern void * 17566 my_memcpy (void *dest, const void *src, size_t len) 17567 __attribute__((nonnull)); 17568 17569 `noreturn' 17570 A few standard library functions, such as `abort' and `exit', 17571 cannot return. GCC knows this automatically. Some programs define 17572 their own functions that never return. You can declare them 17573 `noreturn' to tell the compiler this fact. For example, 17574 17575 void fatal () __attribute__ ((noreturn)); 17576 17577 void 17578 fatal (/* ... */) 17579 { 17580 /* ... */ /* Print error message. */ /* ... */ 17581 exit (1); 17582 } 17583 17584 The `noreturn' keyword tells the compiler to assume that `fatal' 17585 cannot return. It can then optimize without regard to what would 17586 happen if `fatal' ever did return. This makes slightly better 17587 code. More importantly, it helps avoid spurious warnings of 17588 uninitialized variables. 17589 17590 The `noreturn' keyword does not affect the exceptional path when 17591 that applies: a `noreturn'-marked function may still return to the 17592 caller by throwing an exception or calling `longjmp'. 17593 17594 Do not assume that registers saved by the calling function are 17595 restored before calling the `noreturn' function. 17596 17597 It does not make sense for a `noreturn' function to have a return 17598 type other than `void'. 17599 17600 The attribute `noreturn' is not implemented in GCC versions 17601 earlier than 2.5. An alternative way to declare that a function 17602 does not return, which works in the current version and in some 17603 older versions, is as follows: 17604 17605 typedef void voidfn (); 17606 17607 volatile voidfn fatal; 17608 17609 This approach does not work in GNU C++. 17610 17611 `nothrow' 17612 The `nothrow' attribute is used to inform the compiler that a 17613 function cannot throw an exception. For example, most functions in 17614 the standard C library can be guaranteed not to throw an exception 17615 with the notable exceptions of `qsort' and `bsearch' that take 17616 function pointer arguments. The `nothrow' attribute is not 17617 implemented in GCC versions earlier than 3.3. 17618 17619 `pure' 17620 Many functions have no effects except the return value and their 17621 return value depends only on the parameters and/or global 17622 variables. Such a function can be subject to common subexpression 17623 elimination and loop optimization just as an arithmetic operator 17624 would be. These functions should be declared with the attribute 17625 `pure'. For example, 17626 17627 int square (int) __attribute__ ((pure)); 17628 17629 says that the hypothetical function `square' is safe to call fewer 17630 times than the program says. 17631 17632 Some of common examples of pure functions are `strlen' or `memcmp'. 17633 Interesting non-pure functions are functions with infinite loops 17634 or those depending on volatile memory or other system resource, 17635 that may change between two consecutive calls (such as `feof' in a 17636 multithreading environment). 17637 17638 The attribute `pure' is not implemented in GCC versions earlier 17639 than 2.96. 17640 17641 `hot' 17642 The `hot' attribute is used to inform the compiler that a function 17643 is a hot spot of the compiled program. The function is optimized 17644 more aggressively and on many target it is placed into special 17645 subsection of the text section so all hot functions appears close 17646 together improving locality. 17647 17648 When profile feedback is available, via `-fprofile-use', hot 17649 functions are automatically detected and this attribute is ignored. 17650 17651 The `hot' attribute is not implemented in GCC versions earlier 17652 than 4.3. 17653 17654 `cold' 17655 The `cold' attribute is used to inform the compiler that a 17656 function is unlikely executed. The function is optimized for size 17657 rather than speed and on many targets it is placed into special 17658 subsection of the text section so all cold functions appears close 17659 together improving code locality of non-cold parts of program. 17660 The paths leading to call of cold functions within code are marked 17661 as unlikely by the branch prediction mechanism. It is thus useful 17662 to mark functions used to handle unlikely conditions, such as 17663 `perror', as cold to improve optimization of hot functions that do 17664 call marked functions in rare occasions. 17665 17666 When profile feedback is available, via `-fprofile-use', hot 17667 functions are automatically detected and this attribute is ignored. 17668 17669 The `hot' attribute is not implemented in GCC versions earlier 17670 than 4.3. 17671 17672 `regparm (NUMBER)' 17673 On the Intel 386, the `regparm' attribute causes the compiler to 17674 pass arguments number one to NUMBER if they are of integral type 17675 in registers EAX, EDX, and ECX instead of on the stack. Functions 17676 that take a variable number of arguments will continue to be 17677 passed all of their arguments on the stack. 17678 17679 Beware that on some ELF systems this attribute is unsuitable for 17680 global functions in shared libraries with lazy binding (which is 17681 the default). Lazy binding will send the first call via resolving 17682 code in the loader, which might assume EAX, EDX and ECX can be 17683 clobbered, as per the standard calling conventions. Solaris 8 is 17684 affected by this. GNU systems with GLIBC 2.1 or higher, and 17685 FreeBSD, are believed to be safe since the loaders there save all 17686 registers. (Lazy binding can be disabled with the linker or the 17687 loader if desired, to avoid the problem.) 17688 17689 `sseregparm' 17690 On the Intel 386 with SSE support, the `sseregparm' attribute 17691 causes the compiler to pass up to 3 floating point arguments in 17692 SSE registers instead of on the stack. Functions that take a 17693 variable number of arguments will continue to pass all of their 17694 floating point arguments on the stack. 17695 17696 `force_align_arg_pointer' 17697 On the Intel x86, the `force_align_arg_pointer' attribute may be 17698 applied to individual function definitions, generating an alternate 17699 prologue and epilogue that realigns the runtime stack. This 17700 supports mixing legacy codes that run with a 4-byte aligned stack 17701 with modern codes that keep a 16-byte stack for SSE compatibility. 17702 The alternate prologue and epilogue are slower and bigger than 17703 the regular ones, and the alternate prologue requires a scratch 17704 register; this lowers the number of registers available if used in 17705 conjunction with the `regparm' attribute. The 17706 `force_align_arg_pointer' attribute is incompatible with nested 17707 functions; this is considered a hard error. 17708 17709 `returns_twice' 17710 The `returns_twice' attribute tells the compiler that a function 17711 may return more than one time. The compiler will ensure that all 17712 registers are dead before calling such a function and will emit a 17713 warning about the variables that may be clobbered after the second 17714 return from the function. Examples of such functions are `setjmp' 17715 and `vfork'. The `longjmp'-like counterpart of such function, if 17716 any, might need to be marked with the `noreturn' attribute. 17717 17718 `saveall' 17719 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 17720 indicate that all registers except the stack pointer should be 17721 saved in the prologue regardless of whether they are used or not. 17722 17723 `section ("SECTION-NAME")' 17724 Normally, the compiler places the code it generates in the `text' 17725 section. Sometimes, however, you need additional sections, or you 17726 need certain particular functions to appear in special sections. 17727 The `section' attribute specifies that a function lives in a 17728 particular section. For example, the declaration: 17729 17730 extern void foobar (void) __attribute__ ((section ("bar"))); 17731 17732 puts the function `foobar' in the `bar' section. 17733 17734 Some file formats do not support arbitrary sections so the 17735 `section' attribute is not available on all platforms. If you 17736 need to map the entire contents of a module to a particular 17737 section, consider using the facilities of the linker instead. 17738 17739 `sentinel' 17740 This function attribute ensures that a parameter in a function 17741 call is an explicit `NULL'. The attribute is only valid on 17742 variadic functions. By default, the sentinel is located at 17743 position zero, the last parameter of the function call. If an 17744 optional integer position argument P is supplied to the attribute, 17745 the sentinel must be located at position P counting backwards from 17746 the end of the argument list. 17747 17748 __attribute__ ((sentinel)) 17749 is equivalent to 17750 __attribute__ ((sentinel(0))) 17751 17752 The attribute is automatically set with a position of 0 for the 17753 built-in functions `execl' and `execlp'. The built-in function 17754 `execle' has the attribute set with a position of 1. 17755 17756 A valid `NULL' in this context is defined as zero with any pointer 17757 type. If your system defines the `NULL' macro with an integer type 17758 then you need to add an explicit cast. GCC replaces `stddef.h' 17759 with a copy that redefines NULL appropriately. 17760 17761 The warnings for missing or incorrect sentinels are enabled with 17762 `-Wformat'. 17763 17764 `short_call' 17765 See long_call/short_call. 17766 17767 `shortcall' 17768 See longcall/shortcall. 17769 17770 `signal' 17771 Use this attribute on the AVR to indicate that the specified 17772 function is a signal handler. The compiler will generate function 17773 entry and exit sequences suitable for use in a signal handler when 17774 this attribute is present. Interrupts will be disabled inside the 17775 function. 17776 17777 `sp_switch' 17778 Use this attribute on the SH to indicate an `interrupt_handler' 17779 function should switch to an alternate stack. It expects a string 17780 argument that names a global variable holding the address of the 17781 alternate stack. 17782 17783 void *alt_stack; 17784 void f () __attribute__ ((interrupt_handler, 17785 sp_switch ("alt_stack"))); 17786 17787 `stdcall' 17788 On the Intel 386, the `stdcall' attribute causes the compiler to 17789 assume that the called function will pop off the stack space used 17790 to pass arguments, unless it takes a variable number of arguments. 17791 17792 `tiny_data' 17793 Use this attribute on the H8/300H and H8S to indicate that the 17794 specified variable should be placed into the tiny data section. 17795 The compiler will generate more efficient code for loads and stores 17796 on data in the tiny data section. Note the tiny data area is 17797 limited to slightly under 32kbytes of data. 17798 17799 `trap_exit' 17800 Use this attribute on the SH for an `interrupt_handler' to return 17801 using `trapa' instead of `rte'. This attribute expects an integer 17802 argument specifying the trap number to be used. 17803 17804 `unused' 17805 This attribute, attached to a function, means that the function is 17806 meant to be possibly unused. GCC will not produce a warning for 17807 this function. 17808 17809 `used' 17810 This attribute, attached to a function, means that code must be 17811 emitted for the function even if it appears that the function is 17812 not referenced. This is useful, for example, when the function is 17813 referenced only in inline assembly. 17814 17815 `version_id' 17816 This attribute, attached to a global variable or function, renames 17817 a symbol to contain a version string, thus allowing for function 17818 level versioning. HP-UX system header files may use version level 17819 functioning for some system calls. 17820 17821 extern int foo () __attribute__((version_id ("20040821"))); 17822 17823 Calls to FOO will be mapped to calls to FOO{20040821}. 17824 17825 `visibility ("VISIBILITY_TYPE")' 17826 This attribute affects the linkage of the declaration to which it 17827 is attached. There are four supported VISIBILITY_TYPE values: 17828 default, hidden, protected or internal visibility. 17829 17830 void __attribute__ ((visibility ("protected"))) 17831 f () { /* Do something. */; } 17832 int i __attribute__ ((visibility ("hidden"))); 17833 17834 The possible values of VISIBILITY_TYPE correspond to the 17835 visibility settings in the ELF gABI. 17836 17837 "default" 17838 Default visibility is the normal case for the object file 17839 format. This value is available for the visibility attribute 17840 to override other options that may change the assumed 17841 visibility of entities. 17842 17843 On ELF, default visibility means that the declaration is 17844 visible to other modules and, in shared libraries, means that 17845 the declared entity may be overridden. 17846 17847 On Darwin, default visibility means that the declaration is 17848 visible to other modules. 17849 17850 Default visibility corresponds to "external linkage" in the 17851 language. 17852 17853 "hidden" 17854 Hidden visibility indicates that the entity declared will 17855 have a new form of linkage, which we'll call "hidden 17856 linkage". Two declarations of an object with hidden linkage 17857 refer to the same object if they are in the same shared 17858 object. 17859 17860 "internal" 17861 Internal visibility is like hidden visibility, but with 17862 additional processor specific semantics. Unless otherwise 17863 specified by the psABI, GCC defines internal visibility to 17864 mean that a function is _never_ called from another module. 17865 Compare this with hidden functions which, while they cannot 17866 be referenced directly by other modules, can be referenced 17867 indirectly via function pointers. By indicating that a 17868 function cannot be called from outside the module, GCC may 17869 for instance omit the load of a PIC register since it is known 17870 that the calling function loaded the correct value. 17871 17872 "protected" 17873 Protected visibility is like default visibility except that it 17874 indicates that references within the defining module will 17875 bind to the definition in that module. That is, the declared 17876 entity cannot be overridden by another module. 17877 17878 17879 All visibilities are supported on many, but not all, ELF targets 17880 (supported when the assembler supports the `.visibility' 17881 pseudo-op). Default visibility is supported everywhere. Hidden 17882 visibility is supported on Darwin targets. 17883 17884 The visibility attribute should be applied only to declarations 17885 which would otherwise have external linkage. The attribute should 17886 be applied consistently, so that the same entity should not be 17887 declared with different settings of the attribute. 17888 17889 In C++, the visibility attribute applies to types as well as 17890 functions and objects, because in C++ types have linkage. A class 17891 must not have greater visibility than its non-static data member 17892 types and bases, and class members default to the visibility of 17893 their class. Also, a declaration without explicit visibility is 17894 limited to the visibility of its type. 17895 17896 In C++, you can mark member functions and static member variables 17897 of a class with the visibility attribute. This is useful if if 17898 you know a particular method or static member variable should only 17899 be used from one shared object; then you can mark it hidden while 17900 the rest of the class has default visibility. Care must be taken 17901 to avoid breaking the One Definition Rule; for example, it is 17902 usually not useful to mark an inline method as hidden without 17903 marking the whole class as hidden. 17904 17905 A C++ namespace declaration can also have the visibility attribute. 17906 This attribute applies only to the particular namespace body, not 17907 to other definitions of the same namespace; it is equivalent to 17908 using `#pragma GCC visibility' before and after the namespace 17909 definition (*note Visibility Pragmas::). 17910 17911 In C++, if a template argument has limited visibility, this 17912 restriction is implicitly propagated to the template instantiation. 17913 Otherwise, template instantiations and specializations default to 17914 the visibility of their template. 17915 17916 If both the template and enclosing class have explicit visibility, 17917 the visibility from the template is used. 17918 17919 `warn_unused_result' 17920 The `warn_unused_result' attribute causes a warning to be emitted 17921 if a caller of the function with this attribute does not use its 17922 return value. This is useful for functions where not checking the 17923 result is either a security problem or always a bug, such as 17924 `realloc'. 17925 17926 int fn () __attribute__ ((warn_unused_result)); 17927 int foo () 17928 { 17929 if (fn () < 0) return -1; 17930 fn (); 17931 return 0; 17932 } 17933 17934 results in warning on line 5. 17935 17936 `weak' 17937 The `weak' attribute causes the declaration to be emitted as a weak 17938 symbol rather than a global. This is primarily useful in defining 17939 library functions which can be overridden in user code, though it 17940 can also be used with non-function declarations. Weak symbols are 17941 supported for ELF targets, and also for a.out targets when using 17942 the GNU assembler and linker. 17943 17944 `weakref' 17945 `weakref ("TARGET")' 17946 The `weakref' attribute marks a declaration as a weak reference. 17947 Without arguments, it should be accompanied by an `alias' attribute 17948 naming the target symbol. Optionally, the TARGET may be given as 17949 an argument to `weakref' itself. In either case, `weakref' 17950 implicitly marks the declaration as `weak'. Without a TARGET, 17951 given as an argument to `weakref' or to `alias', `weakref' is 17952 equivalent to `weak'. 17953 17954 static int x() __attribute__ ((weakref ("y"))); 17955 /* is equivalent to... */ 17956 static int x() __attribute__ ((weak, weakref, alias ("y"))); 17957 /* and to... */ 17958 static int x() __attribute__ ((weakref)); 17959 static int x() __attribute__ ((alias ("y"))); 17960 17961 A weak reference is an alias that does not by itself require a 17962 definition to be given for the target symbol. If the target 17963 symbol is only referenced through weak references, then the 17964 becomes a `weak' undefined symbol. If it is directly referenced, 17965 however, then such strong references prevail, and a definition 17966 will be required for the symbol, not necessarily in the same 17967 translation unit. 17968 17969 The effect is equivalent to moving all references to the alias to a 17970 separate translation unit, renaming the alias to the aliased 17971 symbol, declaring it as weak, compiling the two separate 17972 translation units and performing a reloadable link on them. 17973 17974 At present, a declaration to which `weakref' is attached can only 17975 be `static'. 17976 17977 `externally_visible' 17978 This attribute, attached to a global variable or function nullify 17979 effect of `-fwhole-program' command line option, so the object 17980 remain visible outside the current compilation unit 17981 17982 17983 You can specify multiple attributes in a declaration by separating them 17984 by commas within the double parentheses or by immediately following an 17985 attribute declaration with another attribute declaration. 17986 17987 Some people object to the `__attribute__' feature, suggesting that ISO 17988 C's `#pragma' should be used instead. At the time `__attribute__' was 17989 designed, there were two reasons for not doing this. 17990 17991 1. It is impossible to generate `#pragma' commands from a macro. 17992 17993 2. There is no telling what the same `#pragma' might mean in another 17994 compiler. 17995 17996 These two reasons applied to almost any application that might have 17997 been proposed for `#pragma'. It was basically a mistake to use 17998 `#pragma' for _anything_. 17999 18000 The ISO C99 standard includes `_Pragma', which now allows pragmas to 18001 be generated from macros. In addition, a `#pragma GCC' namespace is 18002 now in use for GCC-specific pragmas. However, it has been found 18003 convenient to use `__attribute__' to achieve a natural attachment of 18004 attributes to their corresponding declarations, whereas `#pragma GCC' 18005 is of use for constructs that do not naturally form part of the 18006 grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 18007 Directives. 18008 18009 18010 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 18011 18012 5.28 Attribute Syntax 18013 ===================== 18014 18015 This section describes the syntax with which `__attribute__' may be 18016 used, and the constructs to which attribute specifiers bind, for the C 18017 language. Some details may vary for C++ and Objective-C. Because of 18018 infelicities in the grammar for attributes, some forms described here 18019 may not be successfully parsed in all cases. 18020 18021 There are some problems with the semantics of attributes in C++. For 18022 example, there are no manglings for attributes, although they may affect 18023 code generation, so problems may arise when attributed types are used in 18024 conjunction with templates or overloading. Similarly, `typeid' does 18025 not distinguish between types with different attributes. Support for 18026 attributes in C++ may be restricted in future to attributes on 18027 declarations only, but not on nested declarators. 18028 18029 *Note Function Attributes::, for details of the semantics of attributes 18030 applying to functions. *Note Variable Attributes::, for details of the 18031 semantics of attributes applying to variables. *Note Type Attributes::, 18032 for details of the semantics of attributes applying to structure, union 18033 and enumerated types. 18034 18035 An "attribute specifier" is of the form `__attribute__ 18036 ((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 18037 comma-separated sequence of "attributes", where each attribute is one 18038 of the following: 18039 18040 * Empty. Empty attributes are ignored. 18041 18042 * A word (which may be an identifier such as `unused', or a reserved 18043 word such as `const'). 18044 18045 * A word, followed by, in parentheses, parameters for the attribute. 18046 These parameters take one of the following forms: 18047 18048 * An identifier. For example, `mode' attributes use this form. 18049 18050 * An identifier followed by a comma and a non-empty 18051 comma-separated list of expressions. For example, `format' 18052 attributes use this form. 18053 18054 * A possibly empty comma-separated list of expressions. For 18055 example, `format_arg' attributes use this form with the list 18056 being a single integer constant expression, and `alias' 18057 attributes use this form with the list being a single string 18058 constant. 18059 18060 An "attribute specifier list" is a sequence of one or more attribute 18061 specifiers, not separated by any other tokens. 18062 18063 In GNU C, an attribute specifier list may appear after the colon 18064 following a label, other than a `case' or `default' label. The only 18065 attribute it makes sense to use after a label is `unused'. This 18066 feature is intended for code generated by programs which contains labels 18067 that may be unused but which is compiled with `-Wall'. It would not 18068 normally be appropriate to use in it human-written code, though it 18069 could be useful in cases where the code that jumps to the label is 18070 contained within an `#ifdef' conditional. GNU C++ does not permit such 18071 placement of attribute lists, as it is permissible for a declaration, 18072 which could begin with an attribute list, to be labelled in C++. 18073 Declarations cannot be labelled in C90 or C99, so the ambiguity does 18074 not arise there. 18075 18076 An attribute specifier list may appear as part of a `struct', `union' 18077 or `enum' specifier. It may go either immediately after the `struct', 18078 `union' or `enum' keyword, or after the closing brace. The former 18079 syntax is preferred. Where attribute specifiers follow the closing 18080 brace, they are considered to relate to the structure, union or 18081 enumerated type defined, not to any enclosing declaration the type 18082 specifier appears in, and the type defined is not complete until after 18083 the attribute specifiers. 18084 18085 Otherwise, an attribute specifier appears as part of a declaration, 18086 counting declarations of unnamed parameters and type names, and relates 18087 to that declaration (which may be nested in another declaration, for 18088 example in the case of a parameter declaration), or to a particular 18089 declarator within a declaration. Where an attribute specifier is 18090 applied to a parameter declared as a function or an array, it should 18091 apply to the function or array rather than the pointer to which the 18092 parameter is implicitly converted, but this is not yet correctly 18093 implemented. 18094 18095 Any list of specifiers and qualifiers at the start of a declaration may 18096 contain attribute specifiers, whether or not such a list may in that 18097 context contain storage class specifiers. (Some attributes, however, 18098 are essentially in the nature of storage class specifiers, and only make 18099 sense where storage class specifiers may be used; for example, 18100 `section'.) There is one necessary limitation to this syntax: the 18101 first old-style parameter declaration in a function definition cannot 18102 begin with an attribute specifier, because such an attribute applies to 18103 the function instead by syntax described below (which, however, is not 18104 yet implemented in this case). In some other cases, attribute 18105 specifiers are permitted by this grammar but not yet supported by the 18106 compiler. All attribute specifiers in this place relate to the 18107 declaration as a whole. In the obsolescent usage where a type of `int' 18108 is implied by the absence of type specifiers, such a list of specifiers 18109 and qualifiers may be an attribute specifier list with no other 18110 specifiers or qualifiers. 18111 18112 At present, the first parameter in a function prototype must have some 18113 type specifier which is not an attribute specifier; this resolves an 18114 ambiguity in the interpretation of `void f(int (__attribute__((foo)) 18115 x))', but is subject to change. At present, if the parentheses of a 18116 function declarator contain only attributes then those attributes are 18117 ignored, rather than yielding an error or warning or implying a single 18118 parameter of type int, but this is subject to change. 18119 18120 An attribute specifier list may appear immediately before a declarator 18121 (other than the first) in a comma-separated list of declarators in a 18122 declaration of more than one identifier using a single list of 18123 specifiers and qualifiers. Such attribute specifiers apply only to the 18124 identifier before whose declarator they appear. For example, in 18125 18126 __attribute__((noreturn)) void d0 (void), 18127 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 18128 d2 (void) 18129 18130 the `noreturn' attribute applies to all the functions declared; the 18131 `format' attribute only applies to `d1'. 18132 18133 An attribute specifier list may appear immediately before the comma, 18134 `=' or semicolon terminating the declaration of an identifier other 18135 than a function definition. Such attribute specifiers apply to the 18136 declared object or function. Where an assembler name for an object or 18137 function is specified (*note Asm Labels::), the attribute must follow 18138 the `asm' specification. 18139 18140 An attribute specifier list may, in future, be permitted to appear 18141 after the declarator in a function definition (before any old-style 18142 parameter declarations or the function body). 18143 18144 Attribute specifiers may be mixed with type qualifiers appearing inside 18145 the `[]' of a parameter array declarator, in the C99 construct by which 18146 such qualifiers are applied to the pointer to which the array is 18147 implicitly converted. Such attribute specifiers apply to the pointer, 18148 not to the array, but at present this is not implemented and they are 18149 ignored. 18150 18151 An attribute specifier list may appear at the start of a nested 18152 declarator. At present, there are some limitations in this usage: the 18153 attributes correctly apply to the declarator, but for most individual 18154 attributes the semantics this implies are not implemented. When 18155 attribute specifiers follow the `*' of a pointer declarator, they may 18156 be mixed with any type qualifiers present. The following describes the 18157 formal semantics of this syntax. It will make the most sense if you 18158 are familiar with the formal specification of declarators in the ISO C 18159 standard. 18160 18161 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 18162 where `T' contains declaration specifiers that specify a type TYPE 18163 (such as `int') and `D1' is a declarator that contains an identifier 18164 IDENT. The type specified for IDENT for derived declarators whose type 18165 does not include an attribute specifier is as in the ISO C standard. 18166 18167 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 18168 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 18169 TYPE" for IDENT, then `T D1' specifies the type 18170 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 18171 18172 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 18173 D', and the declaration `T D' specifies the type 18174 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 18175 the type "DERIVED-DECLARATOR-TYPE-LIST 18176 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 18177 18178 For example, 18179 18180 void (__attribute__((noreturn)) ****f) (void); 18181 18182 specifies the type "pointer to pointer to pointer to pointer to 18183 non-returning function returning `void'". As another example, 18184 18185 char *__attribute__((aligned(8))) *f; 18186 18187 specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 18188 again that this does not work with most attributes; for example, the 18189 usage of `aligned' and `noreturn' attributes given above is not yet 18190 supported. 18191 18192 For compatibility with existing code written for compiler versions that 18193 did not implement attributes on nested declarators, some laxity is 18194 allowed in the placing of attributes. If an attribute that only applies 18195 to types is applied to a declaration, it will be treated as applying to 18196 the type of that declaration. If an attribute that only applies to 18197 declarations is applied to the type of a declaration, it will be treated 18198 as applying to that declaration; and, for compatibility with code 18199 placing the attributes immediately before the identifier declared, such 18200 an attribute applied to a function return type will be treated as 18201 applying to the function type, and such an attribute applied to an array 18202 element type will be treated as applying to the array type. If an 18203 attribute that only applies to function types is applied to a 18204 pointer-to-function type, it will be treated as applying to the pointer 18205 target type; if such an attribute is applied to a function return type 18206 that is not a pointer-to-function type, it will be treated as applying 18207 to the function type. 18208 18209 18210 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 18211 18212 5.29 Prototypes and Old-Style Function Definitions 18213 ================================================== 18214 18215 GNU C extends ISO C to allow a function prototype to override a later 18216 old-style non-prototype definition. Consider the following example: 18217 18218 /* Use prototypes unless the compiler is old-fashioned. */ 18219 #ifdef __STDC__ 18220 #define P(x) x 18221 #else 18222 #define P(x) () 18223 #endif 18224 18225 /* Prototype function declaration. */ 18226 int isroot P((uid_t)); 18227 18228 /* Old-style function definition. */ 18229 int 18230 isroot (x) /* ??? lossage here ??? */ 18231 uid_t x; 18232 { 18233 return x == 0; 18234 } 18235 18236 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 18237 this example, because subword arguments in old-style non-prototype 18238 definitions are promoted. Therefore in this example the function 18239 definition's argument is really an `int', which does not match the 18240 prototype argument type of `short'. 18241 18242 This restriction of ISO C makes it hard to write code that is portable 18243 to traditional C compilers, because the programmer does not know 18244 whether the `uid_t' type is `short', `int', or `long'. Therefore, in 18245 cases like these GNU C allows a prototype to override a later old-style 18246 definition. More precisely, in GNU C, a function prototype argument 18247 type overrides the argument type specified by a later old-style 18248 definition if the former type is the same as the latter type before 18249 promotion. Thus in GNU C the above example is equivalent to the 18250 following: 18251 18252 int isroot (uid_t); 18253 18254 int 18255 isroot (uid_t x) 18256 { 18257 return x == 0; 18258 } 18259 18260 GNU C++ does not support old-style function definitions, so this 18261 extension is irrelevant. 18262 18263 18264 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 18265 18266 5.30 C++ Style Comments 18267 ======================= 18268 18269 In GNU C, you may use C++ style comments, which start with `//' and 18270 continue until the end of the line. Many other C implementations allow 18271 such comments, and they are included in the 1999 C standard. However, 18272 C++ style comments are not recognized if you specify an `-std' option 18273 specifying a version of ISO C before C99, or `-ansi' (equivalent to 18274 `-std=c89'). 18275 18276 18277 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 18278 18279 5.31 Dollar Signs in Identifier Names 18280 ===================================== 18281 18282 In GNU C, you may normally use dollar signs in identifier names. This 18283 is because many traditional C implementations allow such identifiers. 18284 However, dollar signs in identifiers are not supported on a few target 18285 machines, typically because the target assembler does not allow them. 18286 18287 18288 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 18289 18290 5.32 The Character <ESC> in Constants 18291 ===================================== 18292 18293 You can use the sequence `\e' in a string or character constant to 18294 stand for the ASCII character <ESC>. 18295 18296 18297 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 18298 18299 5.33 Inquiring on Alignment of Types or Variables 18300 ================================================= 18301 18302 The keyword `__alignof__' allows you to inquire about how an object is 18303 aligned, or the minimum alignment usually required by a type. Its 18304 syntax is just like `sizeof'. 18305 18306 For example, if the target machine requires a `double' value to be 18307 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 18308 is true on many RISC machines. On more traditional machine designs, 18309 `__alignof__ (double)' is 4 or even 2. 18310 18311 Some machines never actually require alignment; they allow reference 18312 to any data type even at an odd address. For these machines, 18313 `__alignof__' reports the smallest alignment that GCC will give the 18314 data type, usually as mandated by the target ABI. 18315 18316 If the operand of `__alignof__' is an lvalue rather than a type, its 18317 value is the required alignment for its type, taking into account any 18318 minimum alignment specified with GCC's `__attribute__' extension (*note 18319 Variable Attributes::). For example, after this declaration: 18320 18321 struct foo { int x; char y; } foo1; 18322 18323 the value of `__alignof__ (foo1.y)' is 1, even though its actual 18324 alignment is probably 2 or 4, the same as `__alignof__ (int)'. 18325 18326 It is an error to ask for the alignment of an incomplete type. 18327 18328 18329 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 18330 18331 5.34 Specifying Attributes of Variables 18332 ======================================= 18333 18334 The keyword `__attribute__' allows you to specify special attributes of 18335 variables or structure fields. This keyword is followed by an 18336 attribute specification inside double parentheses. Some attributes are 18337 currently defined generically for variables. Other attributes are 18338 defined for variables on particular target systems. Other attributes 18339 are available for functions (*note Function Attributes::) and for types 18340 (*note Type Attributes::). Other front ends might define more 18341 attributes (*note Extensions to the C++ Language: C++ Extensions.). 18342 18343 You may also specify attributes with `__' preceding and following each 18344 keyword. This allows you to use them in header files without being 18345 concerned about a possible macro of the same name. For example, you 18346 may use `__aligned__' instead of `aligned'. 18347 18348 *Note Attribute Syntax::, for details of the exact syntax for using 18349 attributes. 18350 18351 `aligned (ALIGNMENT)' 18352 This attribute specifies a minimum alignment for the variable or 18353 structure field, measured in bytes. For example, the declaration: 18354 18355 int x __attribute__ ((aligned (16))) = 0; 18356 18357 causes the compiler to allocate the global variable `x' on a 18358 16-byte boundary. On a 68040, this could be used in conjunction 18359 with an `asm' expression to access the `move16' instruction which 18360 requires 16-byte aligned operands. 18361 18362 You can also specify the alignment of structure fields. For 18363 example, to create a double-word aligned `int' pair, you could 18364 write: 18365 18366 struct foo { int x[2] __attribute__ ((aligned (8))); }; 18367 18368 This is an alternative to creating a union with a `double' member 18369 that forces the union to be double-word aligned. 18370 18371 As in the preceding examples, you can explicitly specify the 18372 alignment (in bytes) that you wish the compiler to use for a given 18373 variable or structure field. Alternatively, you can leave out the 18374 alignment factor and just ask the compiler to align a variable or 18375 field to the maximum useful alignment for the target machine you 18376 are compiling for. For example, you could write: 18377 18378 short array[3] __attribute__ ((aligned)); 18379 18380 Whenever you leave out the alignment factor in an `aligned' 18381 attribute specification, the compiler automatically sets the 18382 alignment for the declared variable or field to the largest 18383 alignment which is ever used for any data type on the target 18384 machine you are compiling for. Doing this can often make copy 18385 operations more efficient, because the compiler can use whatever 18386 instructions copy the biggest chunks of memory when performing 18387 copies to or from the variables or fields that you have aligned 18388 this way. 18389 18390 When used on a struct, or struct member, the `aligned' attribute 18391 can only increase the alignment; in order to decrease it, the 18392 `packed' attribute must be specified as well. When used as part 18393 of a typedef, the `aligned' attribute can both increase and 18394 decrease alignment, and specifying the `packed' attribute will 18395 generate a warning. 18396 18397 Note that the effectiveness of `aligned' attributes may be limited 18398 by inherent limitations in your linker. On many systems, the 18399 linker is only able to arrange for variables to be aligned up to a 18400 certain maximum alignment. (For some linkers, the maximum 18401 supported alignment may be very very small.) If your linker is 18402 only able to align variables up to a maximum of 8 byte alignment, 18403 then specifying `aligned(16)' in an `__attribute__' will still 18404 only provide you with 8 byte alignment. See your linker 18405 documentation for further information. 18406 18407 The `aligned' attribute can also be used for functions (*note 18408 Function Attributes::.) 18409 18410 `cleanup (CLEANUP_FUNCTION)' 18411 The `cleanup' attribute runs a function when the variable goes out 18412 of scope. This attribute can only be applied to auto function 18413 scope variables; it may not be applied to parameters or variables 18414 with static storage duration. The function must take one 18415 parameter, a pointer to a type compatible with the variable. The 18416 return value of the function (if any) is ignored. 18417 18418 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 18419 during the stack unwinding that happens during the processing of 18420 the exception. Note that the `cleanup' attribute does not allow 18421 the exception to be caught, only to perform an action. It is 18422 undefined what happens if CLEANUP_FUNCTION does not return 18423 normally. 18424 18425 `common' 18426 `nocommon' 18427 The `common' attribute requests GCC to place a variable in 18428 "common" storage. The `nocommon' attribute requests the 18429 opposite--to allocate space for it directly. 18430 18431 These attributes override the default chosen by the `-fno-common' 18432 and `-fcommon' flags respectively. 18433 18434 `deprecated' 18435 The `deprecated' attribute results in a warning if the variable is 18436 used anywhere in the source file. This is useful when identifying 18437 variables that are expected to be removed in a future version of a 18438 program. The warning also includes the location of the declaration 18439 of the deprecated variable, to enable users to easily find further 18440 information about why the variable is deprecated, or what they 18441 should do instead. Note that the warning only occurs for uses: 18442 18443 extern int old_var __attribute__ ((deprecated)); 18444 extern int old_var; 18445 int new_fn () { return old_var; } 18446 18447 results in a warning on line 3 but not line 2. 18448 18449 The `deprecated' attribute can also be used for functions and 18450 types (*note Function Attributes::, *note Type Attributes::.) 18451 18452 `mode (MODE)' 18453 This attribute specifies the data type for the 18454 declaration--whichever type corresponds to the mode MODE. This in 18455 effect lets you request an integer or floating point type 18456 according to its width. 18457 18458 You may also specify a mode of `byte' or `__byte__' to indicate 18459 the mode corresponding to a one-byte integer, `word' or `__word__' 18460 for the mode of a one-word integer, and `pointer' or `__pointer__' 18461 for the mode used to represent pointers. 18462 18463 `packed' 18464 The `packed' attribute specifies that a variable or structure field 18465 should have the smallest possible alignment--one byte for a 18466 variable, and one bit for a field, unless you specify a larger 18467 value with the `aligned' attribute. 18468 18469 Here is a structure in which the field `x' is packed, so that it 18470 immediately follows `a': 18471 18472 struct foo 18473 { 18474 char a; 18475 int x[2] __attribute__ ((packed)); 18476 }; 18477 18478 `section ("SECTION-NAME")' 18479 Normally, the compiler places the objects it generates in sections 18480 like `data' and `bss'. Sometimes, however, you need additional 18481 sections, or you need certain particular variables to appear in 18482 special sections, for example to map to special hardware. The 18483 `section' attribute specifies that a variable (or function) lives 18484 in a particular section. For example, this small program uses 18485 several specific section names: 18486 18487 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 18488 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 18489 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 18490 int init_data __attribute__ ((section ("INITDATA"))) = 0; 18491 18492 main() 18493 { 18494 /* Initialize stack pointer */ 18495 init_sp (stack + sizeof (stack)); 18496 18497 /* Initialize initialized data */ 18498 memcpy (&init_data, &data, &edata - &data); 18499 18500 /* Turn on the serial ports */ 18501 init_duart (&a); 18502 init_duart (&b); 18503 } 18504 18505 Use the `section' attribute with an _initialized_ definition of a 18506 _global_ variable, as shown in the example. GCC issues a warning 18507 and otherwise ignores the `section' attribute in uninitialized 18508 variable declarations. 18509 18510 You may only use the `section' attribute with a fully initialized 18511 global definition because of the way linkers work. The linker 18512 requires each object be defined once, with the exception that 18513 uninitialized variables tentatively go in the `common' (or `bss') 18514 section and can be multiply "defined". You can force a variable 18515 to be initialized with the `-fno-common' flag or the `nocommon' 18516 attribute. 18517 18518 Some file formats do not support arbitrary sections so the 18519 `section' attribute is not available on all platforms. If you 18520 need to map the entire contents of a module to a particular 18521 section, consider using the facilities of the linker instead. 18522 18523 `shared' 18524 On Microsoft Windows, in addition to putting variable definitions 18525 in a named section, the section can also be shared among all 18526 running copies of an executable or DLL. For example, this small 18527 program defines shared data by putting it in a named section 18528 `shared' and marking the section shareable: 18529 18530 int foo __attribute__((section ("shared"), shared)) = 0; 18531 18532 int 18533 main() 18534 { 18535 /* Read and write foo. All running 18536 copies see the same value. */ 18537 return 0; 18538 } 18539 18540 You may only use the `shared' attribute along with `section' 18541 attribute with a fully initialized global definition because of 18542 the way linkers work. See `section' attribute for more 18543 information. 18544 18545 The `shared' attribute is only available on Microsoft Windows. 18546 18547 `tls_model ("TLS_MODEL")' 18548 The `tls_model' attribute sets thread-local storage model (*note 18549 Thread-Local::) of a particular `__thread' variable, overriding 18550 `-ftls-model=' command line switch on a per-variable basis. The 18551 TLS_MODEL argument should be one of `global-dynamic', 18552 `local-dynamic', `initial-exec' or `local-exec'. 18553 18554 Not all targets support this attribute. 18555 18556 `unused' 18557 This attribute, attached to a variable, means that the variable is 18558 meant to be possibly unused. GCC will not produce a warning for 18559 this variable. 18560 18561 `used' 18562 This attribute, attached to a variable, means that the variable 18563 must be emitted even if it appears that the variable is not 18564 referenced. 18565 18566 `vector_size (BYTES)' 18567 This attribute specifies the vector size for the variable, 18568 measured in bytes. For example, the declaration: 18569 18570 int foo __attribute__ ((vector_size (16))); 18571 18572 causes the compiler to set the mode for `foo', to be 16 bytes, 18573 divided into `int' sized units. Assuming a 32-bit int (a vector of 18574 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 18575 18576 This attribute is only applicable to integral and float scalars, 18577 although arrays, pointers, and function return values are allowed 18578 in conjunction with this construct. 18579 18580 Aggregates with this attribute are invalid, even if they are of 18581 the same size as a corresponding scalar. For example, the 18582 declaration: 18583 18584 struct S { int a; }; 18585 struct S __attribute__ ((vector_size (16))) foo; 18586 18587 is invalid even if the size of the structure is the same as the 18588 size of the `int'. 18589 18590 `selectany' 18591 The `selectany' attribute causes an initialized global variable to 18592 have link-once semantics. When multiple definitions of the 18593 variable are encountered by the linker, the first is selected and 18594 the remainder are discarded. Following usage by the Microsoft 18595 compiler, the linker is told _not_ to warn about size or content 18596 differences of the multiple definitions. 18597 18598 Although the primary usage of this attribute is for POD types, the 18599 attribute can also be applied to global C++ objects that are 18600 initialized by a constructor. In this case, the static 18601 initialization and destruction code for the object is emitted in 18602 each translation defining the object, but the calls to the 18603 constructor and destructor are protected by a link-once guard 18604 variable. 18605 18606 The `selectany' attribute is only available on Microsoft Windows 18607 targets. You can use `__declspec (selectany)' as a synonym for 18608 `__attribute__ ((selectany))' for compatibility with other 18609 compilers. 18610 18611 `weak' 18612 The `weak' attribute is described in *Note Function Attributes::. 18613 18614 `dllimport' 18615 The `dllimport' attribute is described in *Note Function 18616 Attributes::. 18617 18618 `dllexport' 18619 The `dllexport' attribute is described in *Note Function 18620 Attributes::. 18621 18622 18623 5.34.1 Blackfin Variable Attributes 18624 ----------------------------------- 18625 18626 Three attributes are currently defined for the Blackfin. 18627 18628 `l1_data' 18629 18630 `l1_data_A' 18631 18632 `l1_data_B' 18633 Use these attributes on the Blackfin to place the variable into L1 18634 Data SRAM. Variables with `l1_data' attribute will be put into 18635 the specific section named `.l1.data'. Those with `l1_data_A' 18636 attribute will be put into the specific section named 18637 `.l1.data.A'. Those with `l1_data_B' attribute will be put into 18638 the specific section named `.l1.data.B'. 18639 18640 5.34.2 M32R/D Variable Attributes 18641 --------------------------------- 18642 18643 One attribute is currently defined for the M32R/D. 18644 18645 `model (MODEL-NAME)' 18646 Use this attribute on the M32R/D to set the addressability of an 18647 object. The identifier MODEL-NAME is one of `small', `medium', or 18648 `large', representing each of the code models. 18649 18650 Small model objects live in the lower 16MB of memory (so that their 18651 addresses can be loaded with the `ld24' instruction). 18652 18653 Medium and large model objects may live anywhere in the 32-bit 18654 address space (the compiler will generate `seth/add3' instructions 18655 to load their addresses). 18656 18657 5.34.3 i386 Variable Attributes 18658 ------------------------------- 18659 18660 Two attributes are currently defined for i386 configurations: 18661 `ms_struct' and `gcc_struct' 18662 18663 `ms_struct' 18664 `gcc_struct' 18665 If `packed' is used on a structure, or if bit-fields are used it 18666 may be that the Microsoft ABI packs them differently than GCC 18667 would normally pack them. Particularly when moving packed data 18668 between functions compiled with GCC and the native Microsoft 18669 compiler (either via function call or as data in a file), it may 18670 be necessary to access either format. 18671 18672 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 18673 Windows X86 compilers to match the native Microsoft compiler. 18674 18675 The Microsoft structure layout algorithm is fairly simple with the 18676 exception of the bitfield packing: 18677 18678 The padding and alignment of members of structures and whether a 18679 bit field can straddle a storage-unit boundary 18680 18681 1. Structure members are stored sequentially in the order in 18682 which they are declared: the first member has the lowest 18683 memory address and the last member the highest. 18684 18685 2. Every data object has an alignment-requirement. The 18686 alignment-requirement for all data except structures, unions, 18687 and arrays is either the size of the object or the current 18688 packing size (specified with either the aligned attribute or 18689 the pack pragma), whichever is less. For structures, unions, 18690 and arrays, the alignment-requirement is the largest 18691 alignment-requirement of its members. Every object is 18692 allocated an offset so that: 18693 18694 offset % alignment-requirement == 0 18695 18696 3. Adjacent bit fields are packed into the same 1-, 2-, or 18697 4-byte allocation unit if the integral types are the same 18698 size and if the next bit field fits into the current 18699 allocation unit without crossing the boundary imposed by the 18700 common alignment requirements of the bit fields. 18701 18702 Handling of zero-length bitfields: 18703 18704 MSVC interprets zero-length bitfields in the following ways: 18705 18706 1. If a zero-length bitfield is inserted between two bitfields 18707 that would normally be coalesced, the bitfields will not be 18708 coalesced. 18709 18710 For example: 18711 18712 struct 18713 { 18714 unsigned long bf_1 : 12; 18715 unsigned long : 0; 18716 unsigned long bf_2 : 12; 18717 } t1; 18718 18719 The size of `t1' would be 8 bytes with the zero-length 18720 bitfield. If the zero-length bitfield were removed, `t1''s 18721 size would be 4 bytes. 18722 18723 2. If a zero-length bitfield is inserted after a bitfield, 18724 `foo', and the alignment of the zero-length bitfield is 18725 greater than the member that follows it, `bar', `bar' will be 18726 aligned as the type of the zero-length bitfield. 18727 18728 For example: 18729 18730 struct 18731 { 18732 char foo : 4; 18733 short : 0; 18734 char bar; 18735 } t2; 18736 18737 struct 18738 { 18739 char foo : 4; 18740 short : 0; 18741 double bar; 18742 } t3; 18743 18744 For `t2', `bar' will be placed at offset 2, rather than 18745 offset 1. Accordingly, the size of `t2' will be 4. For 18746 `t3', the zero-length bitfield will not affect the alignment 18747 of `bar' or, as a result, the size of the structure. 18748 18749 Taking this into account, it is important to note the 18750 following: 18751 18752 1. If a zero-length bitfield follows a normal bitfield, the 18753 type of the zero-length bitfield may affect the 18754 alignment of the structure as whole. For example, `t2' 18755 has a size of 4 bytes, since the zero-length bitfield 18756 follows a normal bitfield, and is of type short. 18757 18758 2. Even if a zero-length bitfield is not followed by a 18759 normal bitfield, it may still affect the alignment of 18760 the structure: 18761 18762 struct 18763 { 18764 char foo : 6; 18765 long : 0; 18766 } t4; 18767 18768 Here, `t4' will take up 4 bytes. 18769 18770 3. Zero-length bitfields following non-bitfield members are 18771 ignored: 18772 18773 struct 18774 { 18775 char foo; 18776 long : 0; 18777 char bar; 18778 } t5; 18779 18780 Here, `t5' will take up 2 bytes. 18781 18782 5.34.4 PowerPC Variable Attributes 18783 ---------------------------------- 18784 18785 Three attributes currently are defined for PowerPC configurations: 18786 `altivec', `ms_struct' and `gcc_struct'. 18787 18788 For full documentation of the struct attributes please see the 18789 documentation in the *Note i386 Variable Attributes::, section. 18790 18791 For documentation of `altivec' attribute please see the documentation 18792 in the *Note PowerPC Type Attributes::, section. 18793 18794 5.34.5 SPU Variable Attributes 18795 ------------------------------ 18796 18797 The SPU supports the `spu_vector' attribute for variables. For 18798 documentation of this attribute please see the documentation in the 18799 *Note SPU Type Attributes::, section. 18800 18801 5.34.6 Xstormy16 Variable Attributes 18802 ------------------------------------ 18803 18804 One attribute is currently defined for xstormy16 configurations: 18805 `below100' 18806 18807 `below100' 18808 If a variable has the `below100' attribute (`BELOW100' is allowed 18809 also), GCC will place the variable in the first 0x100 bytes of 18810 memory and use special opcodes to access it. Such variables will 18811 be placed in either the `.bss_below100' section or the 18812 `.data_below100' section. 18813 18814 18815 5.34.7 AVR Variable Attributes 18816 ------------------------------ 18817 18818 `progmem' 18819 The `progmem' attribute is used on the AVR to place data in the 18820 Program Memory address space. The AVR is a Harvard Architecture 18821 processor and data normally resides in the Data Memory address 18822 space. 18823 18824 18825 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 18826 18827 5.35 Specifying Attributes of Types 18828 =================================== 18829 18830 The keyword `__attribute__' allows you to specify special attributes of 18831 `struct' and `union' types when you define such types. This keyword is 18832 followed by an attribute specification inside double parentheses. 18833 Seven attributes are currently defined for types: `aligned', `packed', 18834 `transparent_union', `unused', `deprecated', `visibility', and 18835 `may_alias'. Other attributes are defined for functions (*note 18836 Function Attributes::) and for variables (*note Variable Attributes::). 18837 18838 You may also specify any one of these attributes with `__' preceding 18839 and following its keyword. This allows you to use these attributes in 18840 header files without being concerned about a possible macro of the same 18841 name. For example, you may use `__aligned__' instead of `aligned'. 18842 18843 You may specify type attributes in an enum, struct or union type 18844 declaration or definition, or for other types in a `typedef' 18845 declaration. 18846 18847 For an enum, struct or union type, you may specify attributes either 18848 between the enum, struct or union tag and the name of the type, or just 18849 past the closing curly brace of the _definition_. The former syntax is 18850 preferred. 18851 18852 *Note Attribute Syntax::, for details of the exact syntax for using 18853 attributes. 18854 18855 `aligned (ALIGNMENT)' 18856 This attribute specifies a minimum alignment (in bytes) for 18857 variables of the specified type. For example, the declarations: 18858 18859 struct S { short f[3]; } __attribute__ ((aligned (8))); 18860 typedef int more_aligned_int __attribute__ ((aligned (8))); 18861 18862 force the compiler to insure (as far as it can) that each variable 18863 whose type is `struct S' or `more_aligned_int' will be allocated 18864 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 18865 all variables of type `struct S' aligned to 8-byte boundaries 18866 allows the compiler to use the `ldd' and `std' (doubleword load and 18867 store) instructions when copying one variable of type `struct S' to 18868 another, thus improving run-time efficiency. 18869 18870 Note that the alignment of any given `struct' or `union' type is 18871 required by the ISO C standard to be at least a perfect multiple of 18872 the lowest common multiple of the alignments of all of the members 18873 of the `struct' or `union' in question. This means that you _can_ 18874 effectively adjust the alignment of a `struct' or `union' type by 18875 attaching an `aligned' attribute to any one of the members of such 18876 a type, but the notation illustrated in the example above is a 18877 more obvious, intuitive, and readable way to request the compiler 18878 to adjust the alignment of an entire `struct' or `union' type. 18879 18880 As in the preceding example, you can explicitly specify the 18881 alignment (in bytes) that you wish the compiler to use for a given 18882 `struct' or `union' type. Alternatively, you can leave out the 18883 alignment factor and just ask the compiler to align a type to the 18884 maximum useful alignment for the target machine you are compiling 18885 for. For example, you could write: 18886 18887 struct S { short f[3]; } __attribute__ ((aligned)); 18888 18889 Whenever you leave out the alignment factor in an `aligned' 18890 attribute specification, the compiler automatically sets the 18891 alignment for the type to the largest alignment which is ever used 18892 for any data type on the target machine you are compiling for. 18893 Doing this can often make copy operations more efficient, because 18894 the compiler can use whatever instructions copy the biggest chunks 18895 of memory when performing copies to or from the variables which 18896 have types that you have aligned this way. 18897 18898 In the example above, if the size of each `short' is 2 bytes, then 18899 the size of the entire `struct S' type is 6 bytes. The smallest 18900 power of two which is greater than or equal to that is 8, so the 18901 compiler sets the alignment for the entire `struct S' type to 8 18902 bytes. 18903 18904 Note that although you can ask the compiler to select a 18905 time-efficient alignment for a given type and then declare only 18906 individual stand-alone objects of that type, the compiler's 18907 ability to select a time-efficient alignment is primarily useful 18908 only when you plan to create arrays of variables having the 18909 relevant (efficiently aligned) type. If you declare or use arrays 18910 of variables of an efficiently-aligned type, then it is likely 18911 that your program will also be doing pointer arithmetic (or 18912 subscripting, which amounts to the same thing) on pointers to the 18913 relevant type, and the code that the compiler generates for these 18914 pointer arithmetic operations will often be more efficient for 18915 efficiently-aligned types than for other types. 18916 18917 The `aligned' attribute can only increase the alignment; but you 18918 can decrease it by specifying `packed' as well. See below. 18919 18920 Note that the effectiveness of `aligned' attributes may be limited 18921 by inherent limitations in your linker. On many systems, the 18922 linker is only able to arrange for variables to be aligned up to a 18923 certain maximum alignment. (For some linkers, the maximum 18924 supported alignment may be very very small.) If your linker is 18925 only able to align variables up to a maximum of 8 byte alignment, 18926 then specifying `aligned(16)' in an `__attribute__' will still 18927 only provide you with 8 byte alignment. See your linker 18928 documentation for further information. 18929 18930 `packed' 18931 This attribute, attached to `struct' or `union' type definition, 18932 specifies that each member (other than zero-width bitfields) of 18933 the structure or union is placed to minimize the memory required. 18934 When attached to an `enum' definition, it indicates that the 18935 smallest integral type should be used. 18936 18937 Specifying this attribute for `struct' and `union' types is 18938 equivalent to specifying the `packed' attribute on each of the 18939 structure or union members. Specifying the `-fshort-enums' flag 18940 on the line is equivalent to specifying the `packed' attribute on 18941 all `enum' definitions. 18942 18943 In the following example `struct my_packed_struct''s members are 18944 packed closely together, but the internal layout of its `s' member 18945 is not packed--to do that, `struct my_unpacked_struct' would need 18946 to be packed too. 18947 18948 struct my_unpacked_struct 18949 { 18950 char c; 18951 int i; 18952 }; 18953 18954 struct __attribute__ ((__packed__)) my_packed_struct 18955 { 18956 char c; 18957 int i; 18958 struct my_unpacked_struct s; 18959 }; 18960 18961 You may only specify this attribute on the definition of a `enum', 18962 `struct' or `union', not on a `typedef' which does not also define 18963 the enumerated type, structure or union. 18964 18965 `transparent_union' 18966 This attribute, attached to a `union' type definition, indicates 18967 that any function parameter having that union type causes calls to 18968 that function to be treated in a special way. 18969 18970 First, the argument corresponding to a transparent union type can 18971 be of any type in the union; no cast is required. Also, if the 18972 union contains a pointer type, the corresponding argument can be a 18973 null pointer constant or a void pointer expression; and if the 18974 union contains a void pointer type, the corresponding argument can 18975 be any pointer expression. If the union member type is a pointer, 18976 qualifiers like `const' on the referenced type must be respected, 18977 just as with normal pointer conversions. 18978 18979 Second, the argument is passed to the function using the calling 18980 conventions of the first member of the transparent union, not the 18981 calling conventions of the union itself. All members of the union 18982 must have the same machine representation; this is necessary for 18983 this argument passing to work properly. 18984 18985 Transparent unions are designed for library functions that have 18986 multiple interfaces for compatibility reasons. For example, 18987 suppose the `wait' function must accept either a value of type 18988 `int *' to comply with Posix, or a value of type `union wait *' to 18989 comply with the 4.1BSD interface. If `wait''s parameter were 18990 `void *', `wait' would accept both kinds of arguments, but it 18991 would also accept any other pointer type and this would make 18992 argument type checking less useful. Instead, `<sys/wait.h>' might 18993 define the interface as follows: 18994 18995 typedef union __attribute__ ((__transparent_union__)) 18996 { 18997 int *__ip; 18998 union wait *__up; 18999 } wait_status_ptr_t; 19000 19001 pid_t wait (wait_status_ptr_t); 19002 19003 This interface allows either `int *' or `union wait *' arguments 19004 to be passed, using the `int *' calling convention. The program 19005 can call `wait' with arguments of either type: 19006 19007 int w1 () { int w; return wait (&w); } 19008 int w2 () { union wait w; return wait (&w); } 19009 19010 With this interface, `wait''s implementation might look like this: 19011 19012 pid_t wait (wait_status_ptr_t p) 19013 { 19014 return waitpid (-1, p.__ip, 0); 19015 } 19016 19017 `unused' 19018 When attached to a type (including a `union' or a `struct'), this 19019 attribute means that variables of that type are meant to appear 19020 possibly unused. GCC will not produce a warning for any variables 19021 of that type, even if the variable appears to do nothing. This is 19022 often the case with lock or thread classes, which are usually 19023 defined and then not referenced, but contain constructors and 19024 destructors that have nontrivial bookkeeping functions. 19025 19026 `deprecated' 19027 The `deprecated' attribute results in a warning if the type is 19028 used anywhere in the source file. This is useful when identifying 19029 types that are expected to be removed in a future version of a 19030 program. If possible, the warning also includes the location of 19031 the declaration of the deprecated type, to enable users to easily 19032 find further information about why the type is deprecated, or what 19033 they should do instead. Note that the warnings only occur for 19034 uses and then only if the type is being applied to an identifier 19035 that itself is not being declared as deprecated. 19036 19037 typedef int T1 __attribute__ ((deprecated)); 19038 T1 x; 19039 typedef T1 T2; 19040 T2 y; 19041 typedef T1 T3 __attribute__ ((deprecated)); 19042 T3 z __attribute__ ((deprecated)); 19043 19044 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 19045 warning is issued for line 4 because T2 is not explicitly 19046 deprecated. Line 5 has no warning because T3 is explicitly 19047 deprecated. Similarly for line 6. 19048 19049 The `deprecated' attribute can also be used for functions and 19050 variables (*note Function Attributes::, *note Variable 19051 Attributes::.) 19052 19053 `may_alias' 19054 Accesses to objects with types with this attribute are not 19055 subjected to type-based alias analysis, but are instead assumed to 19056 be able to alias any other type of objects, just like the `char' 19057 type. See `-fstrict-aliasing' for more information on aliasing 19058 issues. 19059 19060 Example of use: 19061 19062 typedef short __attribute__((__may_alias__)) short_a; 19063 19064 int 19065 main (void) 19066 { 19067 int a = 0x12345678; 19068 short_a *b = (short_a *) &a; 19069 19070 b[1] = 0; 19071 19072 if (a == 0x12345678) 19073 abort(); 19074 19075 exit(0); 19076 } 19077 19078 If you replaced `short_a' with `short' in the variable 19079 declaration, the above program would abort when compiled with 19080 `-fstrict-aliasing', which is on by default at `-O2' or above in 19081 recent GCC versions. 19082 19083 `visibility' 19084 In C++, attribute visibility (*note Function Attributes::) can 19085 also be applied to class, struct, union and enum types. Unlike 19086 other type attributes, the attribute must appear between the 19087 initial keyword and the name of the type; it cannot appear after 19088 the body of the type. 19089 19090 Note that the type visibility is applied to vague linkage entities 19091 associated with the class (vtable, typeinfo node, etc.). In 19092 particular, if a class is thrown as an exception in one shared 19093 object and caught in another, the class must have default 19094 visibility. Otherwise the two shared objects will be unable to 19095 use the same typeinfo node and exception handling will break. 19096 19097 5.35.1 ARM Type Attributes 19098 -------------------------- 19099 19100 On those ARM targets that support `dllimport' (such as Symbian 19101 OS), you can use the `notshared' attribute to indicate that the virtual 19102 table and other similar data for a class should not be exported from a 19103 DLL. For example: 19104 19105 class __declspec(notshared) C { 19106 public: 19107 __declspec(dllimport) C(); 19108 virtual void f(); 19109 } 19110 19111 __declspec(dllexport) 19112 C::C() {} 19113 19114 In this code, `C::C' is exported from the current DLL, but the 19115 virtual table for `C' is not exported. (You can use `__attribute__' 19116 instead of `__declspec' if you prefer, but most Symbian OS code uses 19117 `__declspec'.) 19118 19119 5.35.2 i386 Type Attributes 19120 --------------------------- 19121 19122 Two attributes are currently defined for i386 configurations: 19123 `ms_struct' and `gcc_struct' 19124 19125 `ms_struct' 19126 `gcc_struct' 19127 If `packed' is used on a structure, or if bit-fields are used it 19128 may be that the Microsoft ABI packs them differently than GCC 19129 would normally pack them. Particularly when moving packed data 19130 between functions compiled with GCC and the native Microsoft 19131 compiler (either via function call or as data in a file), it may 19132 be necessary to access either format. 19133 19134 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 19135 Windows X86 compilers to match the native Microsoft compiler. 19136 19137 To specify multiple attributes, separate them by commas within the 19138 double parentheses: for example, `__attribute__ ((aligned (16), 19139 packed))'. 19140 19141 5.35.3 PowerPC Type Attributes 19142 ------------------------------ 19143 19144 Three attributes currently are defined for PowerPC configurations: 19145 `altivec', `ms_struct' and `gcc_struct'. 19146 19147 For full documentation of the struct attributes please see the 19148 documentation in the *Note i386 Type Attributes::, section. 19149 19150 The `altivec' attribute allows one to declare AltiVec vector data 19151 types supported by the AltiVec Programming Interface Manual. The 19152 attribute requires an argument to specify one of three vector types: 19153 `vector__', `pixel__' (always followed by unsigned short), and `bool__' 19154 (always followed by unsigned). 19155 19156 __attribute__((altivec(vector__))) 19157 __attribute__((altivec(pixel__))) unsigned short 19158 __attribute__((altivec(bool__))) unsigned 19159 19160 These attributes mainly are intended to support the `__vector', 19161 `__pixel', and `__bool' AltiVec keywords. 19162 19163 5.35.4 SPU Type Attributes 19164 -------------------------- 19165 19166 The SPU supports the `spu_vector' attribute for types. This attribute 19167 allows one to declare vector data types supported by the 19168 Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 19169 to support the `__vector' keyword. 19170 19171 19172 File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions 19173 19174 5.36 An Inline Function is As Fast As a Macro 19175 ============================================= 19176 19177 By declaring a function inline, you can direct GCC to make calls to 19178 that function faster. One way GCC can achieve this is to integrate 19179 that function's code into the code for its callers. This makes 19180 execution faster by eliminating the function-call overhead; in 19181 addition, if any of the actual argument values are constant, their 19182 known values may permit simplifications at compile time so that not all 19183 of the inline function's code needs to be included. The effect on code 19184 size is less predictable; object code may be larger or smaller with 19185 function inlining, depending on the particular case. You can also 19186 direct GCC to try to integrate all "simple enough" functions into their 19187 callers with the option `-finline-functions'. 19188 19189 GCC implements three different semantics of declaring a function 19190 inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 19191 `gnu_inline' attribute is present on all inline declarations, another 19192 when `-std=c99' or `-std=gnu99' (without `-fgnu89-inline'), and the 19193 third is used when compiling C++. 19194 19195 To declare a function inline, use the `inline' keyword in its 19196 declaration, like this: 19197 19198 static inline int 19199 inc (int *a) 19200 { 19201 (*a)++; 19202 } 19203 19204 If you are writing a header file to be included in ISO C89 programs, 19205 write `__inline__' instead of `inline'. *Note Alternate Keywords::. 19206 19207 The three types of inlining behave similarly in two important cases: 19208 when the `inline' keyword is used on a `static' function, like the 19209 example above, and when a function is first declared without using the 19210 `inline' keyword and then is defined with `inline', like this: 19211 19212 extern int inc (int *a); 19213 inline int 19214 inc (int *a) 19215 { 19216 (*a)++; 19217 } 19218 19219 In both of these common cases, the program behaves the same as if you 19220 had not used the `inline' keyword, except for its speed. 19221 19222 When a function is both inline and `static', if all calls to the 19223 function are integrated into the caller, and the function's address is 19224 never used, then the function's own assembler code is never referenced. 19225 In this case, GCC does not actually output assembler code for the 19226 function, unless you specify the option `-fkeep-inline-functions'. 19227 Some calls cannot be integrated for various reasons (in particular, 19228 calls that precede the function's definition cannot be integrated, and 19229 neither can recursive calls within the definition). If there is a 19230 nonintegrated call, then the function is compiled to assembler code as 19231 usual. The function must also be compiled as usual if the program 19232 refers to its address, because that can't be inlined. 19233 19234 Note that certain usages in a function definition can make it 19235 unsuitable for inline substitution. Among these usages are: use of 19236 varargs, use of alloca, use of variable sized data types (*note 19237 Variable Length::), use of computed goto (*note Labels as Values::), 19238 use of nonlocal goto, and nested functions (*note Nested Functions::). 19239 Using `-Winline' will warn when a function marked `inline' could not be 19240 substituted, and will give the reason for the failure. 19241 19242 As required by ISO C++, GCC considers member functions defined within 19243 the body of a class to be marked inline even if they are not explicitly 19244 declared with the `inline' keyword. You can override this with 19245 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 19246 Dialect Options. 19247 19248 GCC does not inline any functions when not optimizing unless you 19249 specify the `always_inline' attribute for the function, like this: 19250 19251 /* Prototype. */ 19252 inline void foo (const char) __attribute__((always_inline)); 19253 19254 The remainder of this section is specific to GNU C89 inlining. 19255 19256 When an inline function is not `static', then the compiler must assume 19257 that there may be calls from other source files; since a global symbol 19258 can be defined only once in any program, the function must not be 19259 defined in the other source files, so the calls therein cannot be 19260 integrated. Therefore, a non-`static' inline function is always 19261 compiled on its own in the usual fashion. 19262 19263 If you specify both `inline' and `extern' in the function definition, 19264 then the definition is used only for inlining. In no case is the 19265 function compiled on its own, not even if you refer to its address 19266 explicitly. Such an address becomes an external reference, as if you 19267 had only declared the function, and had not defined it. 19268 19269 This combination of `inline' and `extern' has almost the effect of a 19270 macro. The way to use it is to put a function definition in a header 19271 file with these keywords, and put another copy of the definition 19272 (lacking `inline' and `extern') in a library file. The definition in 19273 the header file will cause most calls to the function to be inlined. 19274 If any uses of the function remain, they will refer to the single copy 19275 in the library. 19276 19277 19278 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions 19279 19280 5.37 Assembler Instructions with C Expression Operands 19281 ====================================================== 19282 19283 In an assembler instruction using `asm', you can specify the operands 19284 of the instruction using C expressions. This means you need not guess 19285 which registers or memory locations will contain the data you want to 19286 use. 19287 19288 You must specify an assembler instruction template much like what 19289 appears in a machine description, plus an operand constraint string for 19290 each operand. 19291 19292 For example, here is how to use the 68881's `fsinx' instruction: 19293 19294 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 19295 19296 Here `angle' is the C expression for the input operand while `result' 19297 is that of the output operand. Each has `"f"' as its operand 19298 constraint, saying that a floating point register is required. The `=' 19299 in `=f' indicates that the operand is an output; all output operands' 19300 constraints must use `='. The constraints use the same language used 19301 in the machine description (*note Constraints::). 19302 19303 Each operand is described by an operand-constraint string followed by 19304 the C expression in parentheses. A colon separates the assembler 19305 template from the first output operand and another separates the last 19306 output operand from the first input, if any. Commas separate the 19307 operands within each group. The total number of operands is currently 19308 limited to 30; this limitation may be lifted in some future version of 19309 GCC. 19310 19311 If there are no output operands but there are input operands, you must 19312 place two consecutive colons surrounding the place where the output 19313 operands would go. 19314 19315 As of GCC version 3.1, it is also possible to specify input and output 19316 operands using symbolic names which can be referenced within the 19317 assembler code. These names are specified inside square brackets 19318 preceding the constraint string, and can be referenced inside the 19319 assembler code using `%[NAME]' instead of a percentage sign followed by 19320 the operand number. Using named operands the above example could look 19321 like: 19322 19323 asm ("fsinx %[angle],%[output]" 19324 : [output] "=f" (result) 19325 : [angle] "f" (angle)); 19326 19327 Note that the symbolic operand names have no relation whatsoever to 19328 other C identifiers. You may use any name you like, even those of 19329 existing C symbols, but you must ensure that no two operands within the 19330 same assembler construct use the same symbolic name. 19331 19332 Output operand expressions must be lvalues; the compiler can check 19333 this. The input operands need not be lvalues. The compiler cannot 19334 check whether the operands have data types that are reasonable for the 19335 instruction being executed. It does not parse the assembler instruction 19336 template and does not know what it means or even whether it is valid 19337 assembler input. The extended `asm' feature is most often used for 19338 machine instructions the compiler itself does not know exist. If the 19339 output expression cannot be directly addressed (for example, it is a 19340 bit-field), your constraint must allow a register. In that case, GCC 19341 will use the register as the output of the `asm', and then store that 19342 register into the output. 19343 19344 The ordinary output operands must be write-only; GCC will assume that 19345 the values in these operands before the instruction are dead and need 19346 not be generated. Extended asm supports input-output or read-write 19347 operands. Use the constraint character `+' to indicate such an operand 19348 and list it with the output operands. You should only use read-write 19349 operands when the constraints for the operand (or the operand in which 19350 only some of the bits are to be changed) allow a register. 19351 19352 You may, as an alternative, logically split its function into two 19353 separate operands, one input operand and one write-only output operand. 19354 The connection between them is expressed by constraints which say they 19355 need to be in the same location when the instruction executes. You can 19356 use the same C expression for both operands, or different expressions. 19357 For example, here we write the (fictitious) `combine' instruction with 19358 `bar' as its read-only source operand and `foo' as its read-write 19359 destination: 19360 19361 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 19362 19363 The constraint `"0"' for operand 1 says that it must occupy the same 19364 location as operand 0. A number in constraint is allowed only in an 19365 input operand and it must refer to an output operand. 19366 19367 Only a number in the constraint can guarantee that one operand will be 19368 in the same place as another. The mere fact that `foo' is the value of 19369 both operands is not enough to guarantee that they will be in the same 19370 place in the generated assembler code. The following would not work 19371 reliably: 19372 19373 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 19374 19375 Various optimizations or reloading could cause operands 0 and 1 to be 19376 in different registers; GCC knows no reason not to do so. For example, 19377 the compiler might find a copy of the value of `foo' in one register and 19378 use it for operand 1, but generate the output operand 0 in a different 19379 register (copying it afterward to `foo''s own address). Of course, 19380 since the register for operand 1 is not even mentioned in the assembler 19381 code, the result will not work, but GCC can't tell that. 19382 19383 As of GCC version 3.1, one may write `[NAME]' instead of the operand 19384 number for a matching constraint. For example: 19385 19386 asm ("cmoveq %1,%2,%[result]" 19387 : [result] "=r"(result) 19388 : "r" (test), "r"(new), "[result]"(old)); 19389 19390 Sometimes you need to make an `asm' operand be a specific register, 19391 but there's no matching constraint letter for that register _by 19392 itself_. To force the operand into that register, use a local variable 19393 for the operand and specify the register in the variable declaration. 19394 *Note Explicit Reg Vars::. Then for the `asm' operand, use any 19395 register constraint letter that matches the register: 19396 19397 register int *p1 asm ("r0") = ...; 19398 register int *p2 asm ("r1") = ...; 19399 register int *result asm ("r0"); 19400 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 19401 19402 In the above example, beware that a register that is call-clobbered by 19403 the target ABI will be overwritten by any function call in the 19404 assignment, including library calls for arithmetic operators. Assuming 19405 it is a call-clobbered register, this may happen to `r0' above by the 19406 assignment to `p2'. If you have to use such a register, use temporary 19407 variables for expressions between the register assignment and use: 19408 19409 int t1 = ...; 19410 register int *p1 asm ("r0") = ...; 19411 register int *p2 asm ("r1") = t1; 19412 register int *result asm ("r0"); 19413 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 19414 19415 Some instructions clobber specific hard registers. To describe this, 19416 write a third colon after the input operands, followed by the names of 19417 the clobbered hard registers (given as strings). Here is a realistic 19418 example for the VAX: 19419 19420 asm volatile ("movc3 %0,%1,%2" 19421 : /* no outputs */ 19422 : "g" (from), "g" (to), "g" (count) 19423 : "r0", "r1", "r2", "r3", "r4", "r5"); 19424 19425 You may not write a clobber description in a way that overlaps with an 19426 input or output operand. For example, you may not have an operand 19427 describing a register class with one member if you mention that register 19428 in the clobber list. Variables declared to live in specific registers 19429 (*note Explicit Reg Vars::), and used as asm input or output operands 19430 must have no part mentioned in the clobber description. There is no 19431 way for you to specify that an input operand is modified without also 19432 specifying it as an output operand. Note that if all the output 19433 operands you specify are for this purpose (and hence unused), you will 19434 then also need to specify `volatile' for the `asm' construct, as 19435 described below, to prevent GCC from deleting the `asm' statement as 19436 unused. 19437 19438 If you refer to a particular hardware register from the assembler code, 19439 you will probably have to list the register after the third colon to 19440 tell the compiler the register's value is modified. In some assemblers, 19441 the register names begin with `%'; to produce one `%' in the assembler 19442 code, you must write `%%' in the input. 19443 19444 If your assembler instruction can alter the condition code register, 19445 add `cc' to the list of clobbered registers. GCC on some machines 19446 represents the condition codes as a specific hardware register; `cc' 19447 serves to name this register. On other machines, the condition code is 19448 handled differently, and specifying `cc' has no effect. But it is 19449 valid no matter what the machine. 19450 19451 If your assembler instructions access memory in an unpredictable 19452 fashion, add `memory' to the list of clobbered registers. This will 19453 cause GCC to not keep memory values cached in registers across the 19454 assembler instruction and not optimize stores or loads to that memory. 19455 You will also want to add the `volatile' keyword if the memory affected 19456 is not listed in the inputs or outputs of the `asm', as the `memory' 19457 clobber does not count as a side-effect of the `asm'. If you know how 19458 large the accessed memory is, you can add it as input or output but if 19459 this is not known, you should add `memory'. As an example, if you 19460 access ten bytes of a string, you can use a memory input like: 19461 19462 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 19463 19464 Note that in the following example the memory input is necessary, 19465 otherwise GCC might optimize the store to `x' away: 19466 int foo () 19467 { 19468 int x = 42; 19469 int *y = &x; 19470 int result; 19471 asm ("magic stuff accessing an 'int' pointed to by '%1'" 19472 "=&d" (r) : "a" (y), "m" (*y)); 19473 return result; 19474 } 19475 19476 You can put multiple assembler instructions together in a single `asm' 19477 template, separated by the characters normally used in assembly code 19478 for the system. A combination that works in most places is a newline 19479 to break the line, plus a tab character to move to the instruction field 19480 (written as `\n\t'). Sometimes semicolons can be used, if the 19481 assembler allows semicolons as a line-breaking character. Note that 19482 some assembler dialects use semicolons to start a comment. The input 19483 operands are guaranteed not to use any of the clobbered registers, and 19484 neither will the output operands' addresses, so you can read and write 19485 the clobbered registers as many times as you like. Here is an example 19486 of multiple instructions in a template; it assumes the subroutine 19487 `_foo' accepts arguments in registers 9 and 10: 19488 19489 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 19490 : /* no outputs */ 19491 : "g" (from), "g" (to) 19492 : "r9", "r10"); 19493 19494 Unless an output operand has the `&' constraint modifier, GCC may 19495 allocate it in the same register as an unrelated input operand, on the 19496 assumption the inputs are consumed before the outputs are produced. 19497 This assumption may be false if the assembler code actually consists of 19498 more than one instruction. In such a case, use `&' for each output 19499 operand that may not overlap an input. *Note Modifiers::. 19500 19501 If you want to test the condition code produced by an assembler 19502 instruction, you must include a branch and a label in the `asm' 19503 construct, as follows: 19504 19505 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 19506 : "g" (result) 19507 : "g" (input)); 19508 19509 This assumes your assembler supports local labels, as the GNU assembler 19510 and most Unix assemblers do. 19511 19512 Speaking of labels, jumps from one `asm' to another are not supported. 19513 The compiler's optimizers do not know about these jumps, and therefore 19514 they cannot take account of them when deciding how to optimize. 19515 19516 Usually the most convenient way to use these `asm' instructions is to 19517 encapsulate them in macros that look like functions. For example, 19518 19519 #define sin(x) \ 19520 ({ double __value, __arg = (x); \ 19521 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 19522 __value; }) 19523 19524 Here the variable `__arg' is used to make sure that the instruction 19525 operates on a proper `double' value, and to accept only those arguments 19526 `x' which can convert automatically to a `double'. 19527 19528 Another way to make sure the instruction operates on the correct data 19529 type is to use a cast in the `asm'. This is different from using a 19530 variable `__arg' in that it converts more different types. For 19531 example, if the desired type were `int', casting the argument to `int' 19532 would accept a pointer with no complaint, while assigning the argument 19533 to an `int' variable named `__arg' would warn about using a pointer 19534 unless the caller explicitly casts it. 19535 19536 If an `asm' has output operands, GCC assumes for optimization purposes 19537 the instruction has no side effects except to change the output 19538 operands. This does not mean instructions with a side effect cannot be 19539 used, but you must be careful, because the compiler may eliminate them 19540 if the output operands aren't used, or move them out of loops, or 19541 replace two with one if they constitute a common subexpression. Also, 19542 if your instruction does have a side effect on a variable that otherwise 19543 appears not to change, the old value of the variable may be reused later 19544 if it happens to be found in a register. 19545 19546 You can prevent an `asm' instruction from being deleted by writing the 19547 keyword `volatile' after the `asm'. For example: 19548 19549 #define get_and_set_priority(new) \ 19550 ({ int __old; \ 19551 asm volatile ("get_and_set_priority %0, %1" \ 19552 : "=g" (__old) : "g" (new)); \ 19553 __old; }) 19554 19555 The `volatile' keyword indicates that the instruction has important 19556 side-effects. GCC will not delete a volatile `asm' if it is reachable. 19557 (The instruction can still be deleted if GCC can prove that 19558 control-flow will never reach the location of the instruction.) Note 19559 that even a volatile `asm' instruction can be moved relative to other 19560 code, including across jump instructions. For example, on many targets 19561 there is a system register which can be set to control the rounding 19562 mode of floating point operations. You might try setting it with a 19563 volatile `asm', like this PowerPC example: 19564 19565 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 19566 sum = x + y; 19567 19568 This will not work reliably, as the compiler may move the addition back 19569 before the volatile `asm'. To make it work you need to add an 19570 artificial dependency to the `asm' referencing a variable in the code 19571 you don't want moved, for example: 19572 19573 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 19574 sum = x + y; 19575 19576 Similarly, you can't expect a sequence of volatile `asm' instructions 19577 to remain perfectly consecutive. If you want consecutive output, use a 19578 single `asm'. Also, GCC will perform some optimizations across a 19579 volatile `asm' instruction; GCC does not "forget everything" when it 19580 encounters a volatile `asm' instruction the way some other compilers do. 19581 19582 An `asm' instruction without any output operands will be treated 19583 identically to a volatile `asm' instruction. 19584 19585 It is a natural idea to look for a way to give access to the condition 19586 code left by the assembler instruction. However, when we attempted to 19587 implement this, we found no way to make it work reliably. The problem 19588 is that output operands might need reloading, which would result in 19589 additional following "store" instructions. On most machines, these 19590 instructions would alter the condition code before there was time to 19591 test it. This problem doesn't arise for ordinary "test" and "compare" 19592 instructions because they don't have any output operands. 19593 19594 For reasons similar to those described above, it is not possible to 19595 give an assembler instruction access to the condition code left by 19596 previous instructions. 19597 19598 If you are writing a header file that should be includable in ISO C 19599 programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 19600 19601 5.37.1 Size of an `asm' 19602 ----------------------- 19603 19604 Some targets require that GCC track the size of each instruction used in 19605 order to generate correct code. Because the final length of an `asm' 19606 is only known by the assembler, GCC must make an estimate as to how big 19607 it will be. The estimate is formed by counting the number of 19608 statements in the pattern of the `asm' and multiplying that by the 19609 length of the longest instruction on that processor. Statements in the 19610 `asm' are identified by newline characters and whatever statement 19611 separator characters are supported by the assembler; on most processors 19612 this is the ``;'' character. 19613 19614 Normally, GCC's estimate is perfectly adequate to ensure that correct 19615 code is generated, but it is possible to confuse the compiler if you use 19616 pseudo instructions or assembler macros that expand into multiple real 19617 instructions or if you use assembler directives that expand to more 19618 space in the object file than would be needed for a single instruction. 19619 If this happens then the assembler will produce a diagnostic saying that 19620 a label is unreachable. 19621 19622 5.37.2 i386 floating point asm operands 19623 --------------------------------------- 19624 19625 There are several rules on the usage of stack-like regs in asm_operands 19626 insns. These rules apply only to the operands that are stack-like regs: 19627 19628 1. Given a set of input regs that die in an asm_operands, it is 19629 necessary to know which are implicitly popped by the asm, and 19630 which must be explicitly popped by gcc. 19631 19632 An input reg that is implicitly popped by the asm must be 19633 explicitly clobbered, unless it is constrained to match an output 19634 operand. 19635 19636 2. For any input reg that is implicitly popped by an asm, it is 19637 necessary to know how to adjust the stack to compensate for the 19638 pop. If any non-popped input is closer to the top of the 19639 reg-stack than the implicitly popped reg, it would not be possible 19640 to know what the stack looked like--it's not clear how the rest of 19641 the stack "slides up". 19642 19643 All implicitly popped input regs must be closer to the top of the 19644 reg-stack than any input that is not implicitly popped. 19645 19646 It is possible that if an input dies in an insn, reload might use 19647 the input reg for an output reload. Consider this example: 19648 19649 asm ("foo" : "=t" (a) : "f" (b)); 19650 19651 This asm says that input B is not popped by the asm, and that the 19652 asm pushes a result onto the reg-stack, i.e., the stack is one 19653 deeper after the asm than it was before. But, it is possible that 19654 reload will think that it can use the same reg for both the input 19655 and the output, if input B dies in this insn. 19656 19657 If any input operand uses the `f' constraint, all output reg 19658 constraints must use the `&' earlyclobber. 19659 19660 The asm above would be written as 19661 19662 asm ("foo" : "=&t" (a) : "f" (b)); 19663 19664 3. Some operands need to be in particular places on the stack. All 19665 output operands fall in this category--there is no other way to 19666 know which regs the outputs appear in unless the user indicates 19667 this in the constraints. 19668 19669 Output operands must specifically indicate which reg an output 19670 appears in after an asm. `=f' is not allowed: the operand 19671 constraints must select a class with a single reg. 19672 19673 4. Output operands may not be "inserted" between existing stack regs. 19674 Since no 387 opcode uses a read/write operand, all output operands 19675 are dead before the asm_operands, and are pushed by the 19676 asm_operands. It makes no sense to push anywhere but the top of 19677 the reg-stack. 19678 19679 Output operands must start at the top of the reg-stack: output 19680 operands may not "skip" a reg. 19681 19682 5. Some asm statements may need extra stack space for internal 19683 calculations. This can be guaranteed by clobbering stack registers 19684 unrelated to the inputs and outputs. 19685 19686 19687 Here are a couple of reasonable asms to want to write. This asm takes 19688 one input, which is internally popped, and produces two outputs. 19689 19690 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 19691 19692 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 19693 and replaces them with one output. The user must code the `st(1)' 19694 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 19695 19696 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 19697 19698 19699 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 19700 19701 5.38 Constraints for `asm' Operands 19702 =================================== 19703 19704 Here are specific details on what constraint letters you can use with 19705 `asm' operands. Constraints can say whether an operand may be in a 19706 register, and which kinds of register; whether the operand can be a 19707 memory reference, and which kinds of address; whether the operand may 19708 be an immediate constant, and which possible values it may have. 19709 Constraints can also require two operands to match. 19710 19711 * Menu: 19712 19713 * Simple Constraints:: Basic use of constraints. 19714 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 19715 * Modifiers:: More precise control over effects of constraints. 19716 * Machine Constraints:: Special constraints for some particular machines. 19717 19718 19719 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 19720 19721 5.38.1 Simple Constraints 19722 ------------------------- 19723 19724 The simplest kind of constraint is a string full of letters, each of 19725 which describes one kind of operand that is permitted. Here are the 19726 letters that are allowed: 19727 19728 whitespace 19729 Whitespace characters are ignored and can be inserted at any 19730 position except the first. This enables each alternative for 19731 different operands to be visually aligned in the machine 19732 description even if they have different number of constraints and 19733 modifiers. 19734 19735 `m' 19736 A memory operand is allowed, with any kind of address that the 19737 machine supports in general. 19738 19739 `o' 19740 A memory operand is allowed, but only if the address is 19741 "offsettable". This means that adding a small integer (actually, 19742 the width in bytes of the operand, as determined by its machine 19743 mode) may be added to the address and the result is also a valid 19744 memory address. 19745 19746 For example, an address which is constant is offsettable; so is an 19747 address that is the sum of a register and a constant (as long as a 19748 slightly larger constant is also within the range of 19749 address-offsets supported by the machine); but an autoincrement or 19750 autodecrement address is not offsettable. More complicated 19751 indirect/indexed addresses may or may not be offsettable depending 19752 on the other addressing modes that the machine supports. 19753 19754 Note that in an output operand which can be matched by another 19755 operand, the constraint letter `o' is valid only when accompanied 19756 by both `<' (if the target machine has predecrement addressing) 19757 and `>' (if the target machine has preincrement addressing). 19758 19759 `V' 19760 A memory operand that is not offsettable. In other words, 19761 anything that would fit the `m' constraint but not the `o' 19762 constraint. 19763 19764 `<' 19765 A memory operand with autodecrement addressing (either 19766 predecrement or postdecrement) is allowed. 19767 19768 `>' 19769 A memory operand with autoincrement addressing (either 19770 preincrement or postincrement) is allowed. 19771 19772 `r' 19773 A register operand is allowed provided that it is in a general 19774 register. 19775 19776 `i' 19777 An immediate integer operand (one with constant value) is allowed. 19778 This includes symbolic constants whose values will be known only at 19779 assembly time or later. 19780 19781 `n' 19782 An immediate integer operand with a known numeric value is allowed. 19783 Many systems cannot support assembly-time constants for operands 19784 less than a word wide. Constraints for these operands should use 19785 `n' rather than `i'. 19786 19787 `I', `J', `K', ... `P' 19788 Other letters in the range `I' through `P' may be defined in a 19789 machine-dependent fashion to permit immediate integer operands with 19790 explicit integer values in specified ranges. For example, on the 19791 68000, `I' is defined to stand for the range of values 1 to 8. 19792 This is the range permitted as a shift count in the shift 19793 instructions. 19794 19795 `E' 19796 An immediate floating operand (expression code `const_double') is 19797 allowed, but only if the target floating point format is the same 19798 as that of the host machine (on which the compiler is running). 19799 19800 `F' 19801 An immediate floating operand (expression code `const_double' or 19802 `const_vector') is allowed. 19803 19804 `G', `H' 19805 `G' and `H' may be defined in a machine-dependent fashion to 19806 permit immediate floating operands in particular ranges of values. 19807 19808 `s' 19809 An immediate integer operand whose value is not an explicit 19810 integer is allowed. 19811 19812 This might appear strange; if an insn allows a constant operand 19813 with a value not known at compile time, it certainly must allow 19814 any known value. So why use `s' instead of `i'? Sometimes it 19815 allows better code to be generated. 19816 19817 For example, on the 68000 in a fullword instruction it is possible 19818 to use an immediate operand; but if the immediate value is between 19819 -128 and 127, better code results from loading the value into a 19820 register and using the register. This is because the load into 19821 the register can be done with a `moveq' instruction. We arrange 19822 for this to happen by defining the letter `K' to mean "any integer 19823 outside the range -128 to 127", and then specifying `Ks' in the 19824 operand constraints. 19825 19826 `g' 19827 Any register, memory or immediate integer operand is allowed, 19828 except for registers that are not general registers. 19829 19830 `X' 19831 Any operand whatsoever is allowed. 19832 19833 `0', `1', `2', ... `9' 19834 An operand that matches the specified operand number is allowed. 19835 If a digit is used together with letters within the same 19836 alternative, the digit should come last. 19837 19838 This number is allowed to be more than a single digit. If multiple 19839 digits are encountered consecutively, they are interpreted as a 19840 single decimal integer. There is scant chance for ambiguity, 19841 since to-date it has never been desirable that `10' be interpreted 19842 as matching either operand 1 _or_ operand 0. Should this be 19843 desired, one can use multiple alternatives instead. 19844 19845 This is called a "matching constraint" and what it really means is 19846 that the assembler has only a single operand that fills two roles 19847 which `asm' distinguishes. For example, an add instruction uses 19848 two input operands and an output operand, but on most CISC 19849 machines an add instruction really has only two operands, one of 19850 them an input-output operand: 19851 19852 addl #35,r12 19853 19854 Matching constraints are used in these circumstances. More 19855 precisely, the two operands that match must include one input-only 19856 operand and one output-only operand. Moreover, the digit must be a 19857 smaller number than the number of the operand that uses it in the 19858 constraint. 19859 19860 `p' 19861 An operand that is a valid memory address is allowed. This is for 19862 "load address" and "push address" instructions. 19863 19864 `p' in the constraint must be accompanied by `address_operand' as 19865 the predicate in the `match_operand'. This predicate interprets 19866 the mode specified in the `match_operand' as the mode of the memory 19867 reference for which the address would be valid. 19868 19869 OTHER-LETTERS 19870 Other letters can be defined in machine-dependent fashion to stand 19871 for particular classes of registers or other arbitrary operand 19872 types. `d', `a' and `f' are defined on the 68000/68020 to stand 19873 for data, address and floating point registers. 19874 19875 19876 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 19877 19878 5.38.2 Multiple Alternative Constraints 19879 --------------------------------------- 19880 19881 Sometimes a single instruction has multiple alternative sets of possible 19882 operands. For example, on the 68000, a logical-or instruction can 19883 combine register or an immediate value into memory, or it can combine 19884 any kind of operand into a register; but it cannot combine one memory 19885 location into another. 19886 19887 These constraints are represented as multiple alternatives. An 19888 alternative can be described by a series of letters for each operand. 19889 The overall constraint for an operand is made from the letters for this 19890 operand from the first alternative, a comma, the letters for this 19891 operand from the second alternative, a comma, and so on until the last 19892 alternative. 19893 19894 If all the operands fit any one alternative, the instruction is valid. 19895 Otherwise, for each alternative, the compiler counts how many 19896 instructions must be added to copy the operands so that that 19897 alternative applies. The alternative requiring the least copying is 19898 chosen. If two alternatives need the same amount of copying, the one 19899 that comes first is chosen. These choices can be altered with the `?' 19900 and `!' characters: 19901 19902 `?' 19903 Disparage slightly the alternative that the `?' appears in, as a 19904 choice when no alternative applies exactly. The compiler regards 19905 this alternative as one unit more costly for each `?' that appears 19906 in it. 19907 19908 `!' 19909 Disparage severely the alternative that the `!' appears in. This 19910 alternative can still be used if it fits without reloading, but if 19911 reloading is needed, some other alternative will be used. 19912 19913 19914 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 19915 19916 5.38.3 Constraint Modifier Characters 19917 ------------------------------------- 19918 19919 Here are constraint modifier characters. 19920 19921 `=' 19922 Means that this operand is write-only for this instruction: the 19923 previous value is discarded and replaced by output data. 19924 19925 `+' 19926 Means that this operand is both read and written by the 19927 instruction. 19928 19929 When the compiler fixes up the operands to satisfy the constraints, 19930 it needs to know which operands are inputs to the instruction and 19931 which are outputs from it. `=' identifies an output; `+' 19932 identifies an operand that is both input and output; all other 19933 operands are assumed to be input only. 19934 19935 If you specify `=' or `+' in a constraint, you put it in the first 19936 character of the constraint string. 19937 19938 `&' 19939 Means (in a particular alternative) that this operand is an 19940 "earlyclobber" operand, which is modified before the instruction is 19941 finished using the input operands. Therefore, this operand may 19942 not lie in a register that is used as an input operand or as part 19943 of any memory address. 19944 19945 `&' applies only to the alternative in which it is written. In 19946 constraints with multiple alternatives, sometimes one alternative 19947 requires `&' while others do not. See, for example, the `movdf' 19948 insn of the 68000. 19949 19950 An input operand can be tied to an earlyclobber operand if its only 19951 use as an input occurs before the early result is written. Adding 19952 alternatives of this form often allows GCC to produce better code 19953 when only some of the inputs can be affected by the earlyclobber. 19954 See, for example, the `mulsi3' insn of the ARM. 19955 19956 `&' does not obviate the need to write `='. 19957 19958 `%' 19959 Declares the instruction to be commutative for this operand and the 19960 following operand. This means that the compiler may interchange 19961 the two operands if that is the cheapest way to make all operands 19962 fit the constraints. GCC can only handle one commutative pair in 19963 an asm; if you use more, the compiler may fail. Note that you 19964 need not use the modifier if the two alternatives are strictly 19965 identical; this would only waste time in the reload pass. The 19966 modifier is not operational after register allocation, so the 19967 result of `define_peephole2' and `define_split's performed after 19968 reload cannot rely on `%' to make the intended insn match. 19969 19970 `#' 19971 Says that all following characters, up to the next comma, are to be 19972 ignored as a constraint. They are significant only for choosing 19973 register preferences. 19974 19975 `*' 19976 Says that the following character should be ignored when choosing 19977 register preferences. `*' has no effect on the meaning of the 19978 constraint as a constraint, and no effect on reloading. 19979 19980 19981 19982 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 19983 19984 5.38.4 Constraints for Particular Machines 19985 ------------------------------------------ 19986 19987 Whenever possible, you should use the general-purpose constraint letters 19988 in `asm' arguments, since they will convey meaning more readily to 19989 people reading your code. Failing that, use the constraint letters 19990 that usually have very similar meanings across architectures. The most 19991 commonly used constraints are `m' and `r' (for memory and 19992 general-purpose registers respectively; *note Simple Constraints::), and 19993 `I', usually the letter indicating the most common immediate-constant 19994 format. 19995 19996 Each architecture defines additional constraints. These constraints 19997 are used by the compiler itself for instruction generation, as well as 19998 for `asm' statements; therefore, some of the constraints are not 19999 particularly useful for `asm'. Here is a summary of some of the 20000 machine-dependent constraints available on some particular machines; it 20001 includes both constraints that are useful for `asm' and constraints 20002 that aren't. The compiler source file mentioned in the table heading 20003 for each architecture is the definitive reference for the meanings of 20004 that architecture's constraints. 20005 20006 _ARM family--`config/arm/arm.h'_ 20007 20008 `f' 20009 Floating-point register 20010 20011 `w' 20012 VFP floating-point register 20013 20014 `F' 20015 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 20016 4.0, 5.0 or 10.0 20017 20018 `G' 20019 Floating-point constant that would satisfy the constraint `F' 20020 if it were negated 20021 20022 `I' 20023 Integer that is valid as an immediate operand in a data 20024 processing instruction. That is, an integer in the range 0 20025 to 255 rotated by a multiple of 2 20026 20027 `J' 20028 Integer in the range -4095 to 4095 20029 20030 `K' 20031 Integer that satisfies constraint `I' when inverted (ones 20032 complement) 20033 20034 `L' 20035 Integer that satisfies constraint `I' when negated (twos 20036 complement) 20037 20038 `M' 20039 Integer in the range 0 to 32 20040 20041 `Q' 20042 A memory reference where the exact address is in a single 20043 register (``m'' is preferable for `asm' statements) 20044 20045 `R' 20046 An item in the constant pool 20047 20048 `S' 20049 A symbol in the text segment of the current file 20050 20051 `Uv' 20052 A memory reference suitable for VFP load/store insns 20053 (reg+constant offset) 20054 20055 `Uy' 20056 A memory reference suitable for iWMMXt load/store 20057 instructions. 20058 20059 `Uq' 20060 A memory reference suitable for the ARMv4 ldrsb instruction. 20061 20062 _AVR family--`config/avr/constraints.md'_ 20063 20064 `l' 20065 Registers from r0 to r15 20066 20067 `a' 20068 Registers from r16 to r23 20069 20070 `d' 20071 Registers from r16 to r31 20072 20073 `w' 20074 Registers from r24 to r31. These registers can be used in 20075 `adiw' command 20076 20077 `e' 20078 Pointer register (r26-r31) 20079 20080 `b' 20081 Base pointer register (r28-r31) 20082 20083 `q' 20084 Stack pointer register (SPH:SPL) 20085 20086 `t' 20087 Temporary register r0 20088 20089 `x' 20090 Register pair X (r27:r26) 20091 20092 `y' 20093 Register pair Y (r29:r28) 20094 20095 `z' 20096 Register pair Z (r31:r30) 20097 20098 `I' 20099 Constant greater than -1, less than 64 20100 20101 `J' 20102 Constant greater than -64, less than 1 20103 20104 `K' 20105 Constant integer 2 20106 20107 `L' 20108 Constant integer 0 20109 20110 `M' 20111 Constant that fits in 8 bits 20112 20113 `N' 20114 Constant integer -1 20115 20116 `O' 20117 Constant integer 8, 16, or 24 20118 20119 `P' 20120 Constant integer 1 20121 20122 `G' 20123 A floating point constant 0.0 20124 20125 `R' 20126 Integer constant in the range -6 ... 5. 20127 20128 `Q' 20129 A memory address based on Y or Z pointer with displacement. 20130 20131 _CRX Architecture--`config/crx/crx.h'_ 20132 20133 `b' 20134 Registers from r0 to r14 (registers without stack pointer) 20135 20136 `l' 20137 Register r16 (64-bit accumulator lo register) 20138 20139 `h' 20140 Register r17 (64-bit accumulator hi register) 20141 20142 `k' 20143 Register pair r16-r17. (64-bit accumulator lo-hi pair) 20144 20145 `I' 20146 Constant that fits in 3 bits 20147 20148 `J' 20149 Constant that fits in 4 bits 20150 20151 `K' 20152 Constant that fits in 5 bits 20153 20154 `L' 20155 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 20156 20157 `G' 20158 Floating point constant that is legal for store immediate 20159 20160 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 20161 20162 `a' 20163 General register 1 20164 20165 `f' 20166 Floating point register 20167 20168 `q' 20169 Shift amount register 20170 20171 `x' 20172 Floating point register (deprecated) 20173 20174 `y' 20175 Upper floating point register (32-bit), floating point 20176 register (64-bit) 20177 20178 `Z' 20179 Any register 20180 20181 `I' 20182 Signed 11-bit integer constant 20183 20184 `J' 20185 Signed 14-bit integer constant 20186 20187 `K' 20188 Integer constant that can be deposited with a `zdepi' 20189 instruction 20190 20191 `L' 20192 Signed 5-bit integer constant 20193 20194 `M' 20195 Integer constant 0 20196 20197 `N' 20198 Integer constant that can be loaded with a `ldil' instruction 20199 20200 `O' 20201 Integer constant whose value plus one is a power of 2 20202 20203 `P' 20204 Integer constant that can be used for `and' operations in 20205 `depi' and `extru' instructions 20206 20207 `S' 20208 Integer constant 31 20209 20210 `U' 20211 Integer constant 63 20212 20213 `G' 20214 Floating-point constant 0.0 20215 20216 `A' 20217 A `lo_sum' data-linkage-table memory operand 20218 20219 `Q' 20220 A memory operand that can be used as the destination operand 20221 of an integer store instruction 20222 20223 `R' 20224 A scaled or unscaled indexed memory operand 20225 20226 `T' 20227 A memory operand for floating-point loads and stores 20228 20229 `W' 20230 A register indirect memory operand 20231 20232 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 20233 20234 `b' 20235 Address base register 20236 20237 `f' 20238 Floating point register 20239 20240 `v' 20241 Vector register 20242 20243 `h' 20244 `MQ', `CTR', or `LINK' register 20245 20246 `q' 20247 `MQ' register 20248 20249 `c' 20250 `CTR' register 20251 20252 `l' 20253 `LINK' register 20254 20255 `x' 20256 `CR' register (condition register) number 0 20257 20258 `y' 20259 `CR' register (condition register) 20260 20261 `z' 20262 `FPMEM' stack memory for FPR-GPR transfers 20263 20264 `I' 20265 Signed 16-bit constant 20266 20267 `J' 20268 Unsigned 16-bit constant shifted left 16 bits (use `L' 20269 instead for `SImode' constants) 20270 20271 `K' 20272 Unsigned 16-bit constant 20273 20274 `L' 20275 Signed 16-bit constant shifted left 16 bits 20276 20277 `M' 20278 Constant larger than 31 20279 20280 `N' 20281 Exact power of 2 20282 20283 `O' 20284 Zero 20285 20286 `P' 20287 Constant whose negation is a signed 16-bit constant 20288 20289 `G' 20290 Floating point constant that can be loaded into a register 20291 with one instruction per word 20292 20293 `H' 20294 Integer/Floating point constant that can be loaded into a 20295 register using three instructions 20296 20297 `Q' 20298 Memory operand that is an offset from a register (`m' is 20299 preferable for `asm' statements) 20300 20301 `Z' 20302 Memory operand that is an indexed or indirect from a register 20303 (`m' is preferable for `asm' statements) 20304 20305 `R' 20306 AIX TOC entry 20307 20308 `a' 20309 Address operand that is an indexed or indirect from a 20310 register (`p' is preferable for `asm' statements) 20311 20312 `S' 20313 Constant suitable as a 64-bit mask operand 20314 20315 `T' 20316 Constant suitable as a 32-bit mask operand 20317 20318 `U' 20319 System V Release 4 small data area reference 20320 20321 `t' 20322 AND masks that can be performed by two rldic{l, r} 20323 instructions 20324 20325 `W' 20326 Vector constant that does not require memory 20327 20328 20329 _MorphoTech family--`config/mt/mt.h'_ 20330 20331 `I' 20332 Constant for an arithmetic insn (16-bit signed integer). 20333 20334 `J' 20335 The constant 0. 20336 20337 `K' 20338 Constant for a logical insn (16-bit zero-extended integer). 20339 20340 `L' 20341 A constant that can be loaded with `lui' (i.e. the bottom 16 20342 bits are zero). 20343 20344 `M' 20345 A constant that takes two words to load (i.e. not matched by 20346 `I', `K', or `L'). 20347 20348 `N' 20349 Negative 16-bit constants other than -65536. 20350 20351 `O' 20352 A 15-bit signed integer constant. 20353 20354 `P' 20355 A positive 16-bit constant. 20356 20357 _Intel 386--`config/i386/constraints.md'_ 20358 20359 `R' 20360 Legacy register--the eight integer registers available on all 20361 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 20362 20363 `q' 20364 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 20365 `c', and `d'; in 64-bit mode, any integer register. 20366 20367 `Q' 20368 Any register accessible as `Rh': `a', `b', `c', and `d'. 20369 20370 `a' 20371 The `a' register. 20372 20373 `b' 20374 The `b' register. 20375 20376 `c' 20377 The `c' register. 20378 20379 `d' 20380 The `d' register. 20381 20382 `S' 20383 The `si' register. 20384 20385 `D' 20386 The `di' register. 20387 20388 `A' 20389 The `a' and `d' registers, as a pair (for instructions that 20390 return half the result in one and half in the other). 20391 20392 `f' 20393 Any 80387 floating-point (stack) register. 20394 20395 `t' 20396 Top of 80387 floating-point stack (`%st(0)'). 20397 20398 `u' 20399 Second from top of 80387 floating-point stack (`%st(1)'). 20400 20401 `y' 20402 Any MMX register. 20403 20404 `x' 20405 Any SSE register. 20406 20407 `I' 20408 Integer constant in the range 0 ... 31, for 32-bit shifts. 20409 20410 `J' 20411 Integer constant in the range 0 ... 63, for 64-bit shifts. 20412 20413 `K' 20414 Signed 8-bit integer constant. 20415 20416 `L' 20417 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 20418 20419 `M' 20420 0, 1, 2, or 3 (shifts for the `lea' instruction). 20421 20422 `N' 20423 Unsigned 8-bit integer constant (for `in' and `out' 20424 instructions). 20425 20426 `G' 20427 Standard 80387 floating point constant. 20428 20429 `C' 20430 Standard SSE floating point constant. 20431 20432 `e' 20433 32-bit signed integer constant, or a symbolic reference known 20434 to fit that range (for immediate operands in sign-extending 20435 x86-64 instructions). 20436 20437 `Z' 20438 32-bit unsigned integer constant, or a symbolic reference 20439 known to fit that range (for immediate operands in 20440 zero-extending x86-64 instructions). 20441 20442 20443 _Intel IA-64--`config/ia64/ia64.h'_ 20444 20445 `a' 20446 General register `r0' to `r3' for `addl' instruction 20447 20448 `b' 20449 Branch register 20450 20451 `c' 20452 Predicate register (`c' as in "conditional") 20453 20454 `d' 20455 Application register residing in M-unit 20456 20457 `e' 20458 Application register residing in I-unit 20459 20460 `f' 20461 Floating-point register 20462 20463 `m' 20464 Memory operand. Remember that `m' allows postincrement and 20465 postdecrement which require printing with `%Pn' on IA-64. 20466 Use `S' to disallow postincrement and postdecrement. 20467 20468 `G' 20469 Floating-point constant 0.0 or 1.0 20470 20471 `I' 20472 14-bit signed integer constant 20473 20474 `J' 20475 22-bit signed integer constant 20476 20477 `K' 20478 8-bit signed integer constant for logical instructions 20479 20480 `L' 20481 8-bit adjusted signed integer constant for compare pseudo-ops 20482 20483 `M' 20484 6-bit unsigned integer constant for shift counts 20485 20486 `N' 20487 9-bit signed integer constant for load and store 20488 postincrements 20489 20490 `O' 20491 The constant zero 20492 20493 `P' 20494 0 or -1 for `dep' instruction 20495 20496 `Q' 20497 Non-volatile memory for floating-point loads and stores 20498 20499 `R' 20500 Integer constant in the range 1 to 4 for `shladd' instruction 20501 20502 `S' 20503 Memory operand except postincrement and postdecrement 20504 20505 _FRV--`config/frv/frv.h'_ 20506 20507 `a' 20508 Register in the class `ACC_REGS' (`acc0' to `acc7'). 20509 20510 `b' 20511 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 20512 20513 `c' 20514 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 20515 to `icc3'). 20516 20517 `d' 20518 Register in the class `GPR_REGS' (`gr0' to `gr63'). 20519 20520 `e' 20521 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 20522 registers are excluded not in the class but through the use 20523 of a machine mode larger than 4 bytes. 20524 20525 `f' 20526 Register in the class `FPR_REGS' (`fr0' to `fr63'). 20527 20528 `h' 20529 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 20530 registers are excluded not in the class but through the use 20531 of a machine mode larger than 4 bytes. 20532 20533 `l' 20534 Register in the class `LR_REG' (the `lr' register). 20535 20536 `q' 20537 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 20538 Register numbers not divisible by 4 are excluded not in the 20539 class but through the use of a machine mode larger than 8 20540 bytes. 20541 20542 `t' 20543 Register in the class `ICC_REGS' (`icc0' to `icc3'). 20544 20545 `u' 20546 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 20547 20548 `v' 20549 Register in the class `ICR_REGS' (`cc4' to `cc7'). 20550 20551 `w' 20552 Register in the class `FCR_REGS' (`cc0' to `cc3'). 20553 20554 `x' 20555 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 20556 Register numbers not divisible by 4 are excluded not in the 20557 class but through the use of a machine mode larger than 8 20558 bytes. 20559 20560 `z' 20561 Register in the class `SPR_REGS' (`lcr' and `lr'). 20562 20563 `A' 20564 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 20565 20566 `B' 20567 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 20568 20569 `C' 20570 Register in the class `CR_REGS' (`cc0' to `cc7'). 20571 20572 `G' 20573 Floating point constant zero 20574 20575 `I' 20576 6-bit signed integer constant 20577 20578 `J' 20579 10-bit signed integer constant 20580 20581 `L' 20582 16-bit signed integer constant 20583 20584 `M' 20585 16-bit unsigned integer constant 20586 20587 `N' 20588 12-bit signed integer constant that is negative--i.e. in the 20589 range of -2048 to -1 20590 20591 `O' 20592 Constant zero 20593 20594 `P' 20595 12-bit signed integer constant that is greater than 20596 zero--i.e. in the range of 1 to 2047. 20597 20598 20599 _Blackfin family--`config/bfin/bfin.h'_ 20600 20601 `a' 20602 P register 20603 20604 `d' 20605 D register 20606 20607 `z' 20608 A call clobbered P register. 20609 20610 `qN' 20611 A single register. If N is in the range 0 to 7, the 20612 corresponding D register. If it is `A', then the register P0. 20613 20614 `D' 20615 Even-numbered D register 20616 20617 `W' 20618 Odd-numbered D register 20619 20620 `e' 20621 Accumulator register. 20622 20623 `A' 20624 Even-numbered accumulator register. 20625 20626 `B' 20627 Odd-numbered accumulator register. 20628 20629 `b' 20630 I register 20631 20632 `v' 20633 B register 20634 20635 `f' 20636 M register 20637 20638 `c' 20639 Registers used for circular buffering, i.e. I, B, or L 20640 registers. 20641 20642 `C' 20643 The CC register. 20644 20645 `t' 20646 LT0 or LT1. 20647 20648 `k' 20649 LC0 or LC1. 20650 20651 `u' 20652 LB0 or LB1. 20653 20654 `x' 20655 Any D, P, B, M, I or L register. 20656 20657 `y' 20658 Additional registers typically used only in prologues and 20659 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 20660 USP. 20661 20662 `w' 20663 Any register except accumulators or CC. 20664 20665 `Ksh' 20666 Signed 16 bit integer (in the range -32768 to 32767) 20667 20668 `Kuh' 20669 Unsigned 16 bit integer (in the range 0 to 65535) 20670 20671 `Ks7' 20672 Signed 7 bit integer (in the range -64 to 63) 20673 20674 `Ku7' 20675 Unsigned 7 bit integer (in the range 0 to 127) 20676 20677 `Ku5' 20678 Unsigned 5 bit integer (in the range 0 to 31) 20679 20680 `Ks4' 20681 Signed 4 bit integer (in the range -8 to 7) 20682 20683 `Ks3' 20684 Signed 3 bit integer (in the range -3 to 4) 20685 20686 `Ku3' 20687 Unsigned 3 bit integer (in the range 0 to 7) 20688 20689 `PN' 20690 Constant N, where N is a single-digit constant in the range 0 20691 to 4. 20692 20693 `PA' 20694 An integer equal to one of the MACFLAG_XXX constants that is 20695 suitable for use with either accumulator. 20696 20697 `PB' 20698 An integer equal to one of the MACFLAG_XXX constants that is 20699 suitable for use only with accumulator A1. 20700 20701 `M1' 20702 Constant 255. 20703 20704 `M2' 20705 Constant 65535. 20706 20707 `J' 20708 An integer constant with exactly a single bit set. 20709 20710 `L' 20711 An integer constant with all bits set except exactly one. 20712 20713 `H' 20714 20715 `Q' 20716 Any SYMBOL_REF. 20717 20718 _M32C--`config/m32c/m32c.c'_ 20719 20720 `Rsp' 20721 `Rfb' 20722 `Rsb' 20723 `$sp', `$fb', `$sb'. 20724 20725 `Rcr' 20726 Any control register, when they're 16 bits wide (nothing if 20727 control registers are 24 bits wide) 20728 20729 `Rcl' 20730 Any control register, when they're 24 bits wide. 20731 20732 `R0w' 20733 `R1w' 20734 `R2w' 20735 `R3w' 20736 $r0, $r1, $r2, $r3. 20737 20738 `R02' 20739 $r0 or $r2, or $r2r0 for 32 bit values. 20740 20741 `R13' 20742 $r1 or $r3, or $r3r1 for 32 bit values. 20743 20744 `Rdi' 20745 A register that can hold a 64 bit value. 20746 20747 `Rhl' 20748 $r0 or $r1 (registers with addressable high/low bytes) 20749 20750 `R23' 20751 $r2 or $r3 20752 20753 `Raa' 20754 Address registers 20755 20756 `Raw' 20757 Address registers when they're 16 bits wide. 20758 20759 `Ral' 20760 Address registers when they're 24 bits wide. 20761 20762 `Rqi' 20763 Registers that can hold QI values. 20764 20765 `Rad' 20766 Registers that can be used with displacements ($a0, $a1, $sb). 20767 20768 `Rsi' 20769 Registers that can hold 32 bit values. 20770 20771 `Rhi' 20772 Registers that can hold 16 bit values. 20773 20774 `Rhc' 20775 Registers chat can hold 16 bit values, including all control 20776 registers. 20777 20778 `Rra' 20779 $r0 through R1, plus $a0 and $a1. 20780 20781 `Rfl' 20782 The flags register. 20783 20784 `Rmm' 20785 The memory-based pseudo-registers $mem0 through $mem15. 20786 20787 `Rpi' 20788 Registers that can hold pointers (16 bit registers for r8c, 20789 m16c; 24 bit registers for m32cm, m32c). 20790 20791 `Rpa' 20792 Matches multiple registers in a PARALLEL to form a larger 20793 register. Used to match function return values. 20794 20795 `Is3' 20796 -8 ... 7 20797 20798 `IS1' 20799 -128 ... 127 20800 20801 `IS2' 20802 -32768 ... 32767 20803 20804 `IU2' 20805 0 ... 65535 20806 20807 `In4' 20808 -8 ... -1 or 1 ... 8 20809 20810 `In5' 20811 -16 ... -1 or 1 ... 16 20812 20813 `In6' 20814 -32 ... -1 or 1 ... 32 20815 20816 `IM2' 20817 -65536 ... -1 20818 20819 `Ilb' 20820 An 8 bit value with exactly one bit set. 20821 20822 `Ilw' 20823 A 16 bit value with exactly one bit set. 20824 20825 `Sd' 20826 The common src/dest memory addressing modes. 20827 20828 `Sa' 20829 Memory addressed using $a0 or $a1. 20830 20831 `Si' 20832 Memory addressed with immediate addresses. 20833 20834 `Ss' 20835 Memory addressed using the stack pointer ($sp). 20836 20837 `Sf' 20838 Memory addressed using the frame base register ($fb). 20839 20840 `Ss' 20841 Memory addressed using the small base register ($sb). 20842 20843 `S1' 20844 $r1h 20845 20846 _MIPS--`config/mips/constraints.md'_ 20847 20848 `d' 20849 An address register. This is equivalent to `r' unless 20850 generating MIPS16 code. 20851 20852 `f' 20853 A floating-point register (if available). 20854 20855 `h' 20856 The `hi' register. 20857 20858 `l' 20859 The `lo' register. 20860 20861 `x' 20862 The `hi' and `lo' registers. 20863 20864 `c' 20865 A register suitable for use in an indirect jump. This will 20866 always be `$25' for `-mabicalls'. 20867 20868 `y' 20869 Equivalent to `r'; retained for backwards compatibility. 20870 20871 `z' 20872 A floating-point condition code register. 20873 20874 `I' 20875 A signed 16-bit constant (for arithmetic instructions). 20876 20877 `J' 20878 Integer zero. 20879 20880 `K' 20881 An unsigned 16-bit constant (for logic instructions). 20882 20883 `L' 20884 A signed 32-bit constant in which the lower 16 bits are zero. 20885 Such constants can be loaded using `lui'. 20886 20887 `M' 20888 A constant that cannot be loaded using `lui', `addiu' or 20889 `ori'. 20890 20891 `N' 20892 A constant in the range -65535 to -1 (inclusive). 20893 20894 `O' 20895 A signed 15-bit constant. 20896 20897 `P' 20898 A constant in the range 1 to 65535 (inclusive). 20899 20900 `G' 20901 Floating-point zero. 20902 20903 `R' 20904 An address that can be used in a non-macro load or store. 20905 20906 _Motorola 680x0--`config/m68k/constraints.md'_ 20907 20908 `a' 20909 Address register 20910 20911 `d' 20912 Data register 20913 20914 `f' 20915 68881 floating-point register, if available 20916 20917 `I' 20918 Integer in the range 1 to 8 20919 20920 `J' 20921 16-bit signed number 20922 20923 `K' 20924 Signed number whose magnitude is greater than 0x80 20925 20926 `L' 20927 Integer in the range -8 to -1 20928 20929 `M' 20930 Signed number whose magnitude is greater than 0x100 20931 20932 `N' 20933 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 20934 20935 `O' 20936 16 (for rotate using swap) 20937 20938 `P' 20939 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 20940 20941 `R' 20942 Numbers that mov3q can handle 20943 20944 `G' 20945 Floating point constant that is not a 68881 constant 20946 20947 `S' 20948 Operands that satisfy 'm' when -mpcrel is in effect 20949 20950 `T' 20951 Operands that satisfy 's' when -mpcrel is not in effect 20952 20953 `Q' 20954 Address register indirect addressing mode 20955 20956 `U' 20957 Register offset addressing 20958 20959 `W' 20960 const_call_operand 20961 20962 `Cs' 20963 symbol_ref or const 20964 20965 `Ci' 20966 const_int 20967 20968 `C0' 20969 const_int 0 20970 20971 `Cj' 20972 Range of signed numbers that don't fit in 16 bits 20973 20974 `Cmvq' 20975 Integers valid for mvq 20976 20977 `Capsw' 20978 Integers valid for a moveq followed by a swap 20979 20980 `Cmvz' 20981 Integers valid for mvz 20982 20983 `Cmvs' 20984 Integers valid for mvs 20985 20986 `Ap' 20987 push_operand 20988 20989 `Ac' 20990 Non-register operands allowed in clr 20991 20992 20993 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 20994 20995 `a' 20996 Register `a' 20997 20998 `b' 20999 Register `b' 21000 21001 `d' 21002 Register `d' 21003 21004 `q' 21005 An 8-bit register 21006 21007 `t' 21008 Temporary soft register _.tmp 21009 21010 `u' 21011 A soft register _.d1 to _.d31 21012 21013 `w' 21014 Stack pointer register 21015 21016 `x' 21017 Register `x' 21018 21019 `y' 21020 Register `y' 21021 21022 `z' 21023 Pseudo register `z' (replaced by `x' or `y' at the end) 21024 21025 `A' 21026 An address register: x, y or z 21027 21028 `B' 21029 An address register: x or y 21030 21031 `D' 21032 Register pair (x:d) to form a 32-bit value 21033 21034 `L' 21035 Constants in the range -65536 to 65535 21036 21037 `M' 21038 Constants whose 16-bit low part is zero 21039 21040 `N' 21041 Constant integer 1 or -1 21042 21043 `O' 21044 Constant integer 16 21045 21046 `P' 21047 Constants in the range -8 to 2 21048 21049 21050 _SPARC--`config/sparc/sparc.h'_ 21051 21052 `f' 21053 Floating-point register on the SPARC-V8 architecture and 21054 lower floating-point register on the SPARC-V9 architecture. 21055 21056 `e' 21057 Floating-point register. It is equivalent to `f' on the 21058 SPARC-V8 architecture and contains both lower and upper 21059 floating-point registers on the SPARC-V9 architecture. 21060 21061 `c' 21062 Floating-point condition code register. 21063 21064 `d' 21065 Lower floating-point register. It is only valid on the 21066 SPARC-V9 architecture when the Visual Instruction Set is 21067 available. 21068 21069 `b' 21070 Floating-point register. It is only valid on the SPARC-V9 21071 architecture when the Visual Instruction Set is available. 21072 21073 `h' 21074 64-bit global or out register for the SPARC-V8+ architecture. 21075 21076 `I' 21077 Signed 13-bit constant 21078 21079 `J' 21080 Zero 21081 21082 `K' 21083 32-bit constant with the low 12 bits clear (a constant that 21084 can be loaded with the `sethi' instruction) 21085 21086 `L' 21087 A constant in the range supported by `movcc' instructions 21088 21089 `M' 21090 A constant in the range supported by `movrcc' instructions 21091 21092 `N' 21093 Same as `K', except that it verifies that bits that are not 21094 in the lower 32-bit range are all zero. Must be used instead 21095 of `K' for modes wider than `SImode' 21096 21097 `O' 21098 The constant 4096 21099 21100 `G' 21101 Floating-point zero 21102 21103 `H' 21104 Signed 13-bit constant, sign-extended to 32 or 64 bits 21105 21106 `Q' 21107 Floating-point constant whose integral representation can be 21108 moved into an integer register using a single sethi 21109 instruction 21110 21111 `R' 21112 Floating-point constant whose integral representation can be 21113 moved into an integer register using a single mov instruction 21114 21115 `S' 21116 Floating-point constant whose integral representation can be 21117 moved into an integer register using a high/lo_sum 21118 instruction sequence 21119 21120 `T' 21121 Memory address aligned to an 8-byte boundary 21122 21123 `U' 21124 Even register 21125 21126 `W' 21127 Memory address for `e' constraint registers 21128 21129 `Y' 21130 Vector zero 21131 21132 21133 _SPU--`config/spu/spu.h'_ 21134 21135 `a' 21136 An immediate which can be loaded with the il/ila/ilh/ilhu 21137 instructions. const_int is treated as a 64 bit value. 21138 21139 `c' 21140 An immediate for and/xor/or instructions. const_int is 21141 treated as a 64 bit value. 21142 21143 `d' 21144 An immediate for the `iohl' instruction. const_int is 21145 treated as a 64 bit value. 21146 21147 `f' 21148 An immediate which can be loaded with `fsmbi'. 21149 21150 `A' 21151 An immediate which can be loaded with the il/ila/ilh/ilhu 21152 instructions. const_int is treated as a 32 bit value. 21153 21154 `B' 21155 An immediate for most arithmetic instructions. const_int is 21156 treated as a 32 bit value. 21157 21158 `C' 21159 An immediate for and/xor/or instructions. const_int is 21160 treated as a 32 bit value. 21161 21162 `D' 21163 An immediate for the `iohl' instruction. const_int is 21164 treated as a 32 bit value. 21165 21166 `I' 21167 A constant in the range [-64, 63] for shift/rotate 21168 instructions. 21169 21170 `J' 21171 An unsigned 7-bit constant for conversion/nop/channel 21172 instructions. 21173 21174 `K' 21175 A signed 10-bit constant for most arithmetic instructions. 21176 21177 `M' 21178 A signed 16 bit immediate for `stop'. 21179 21180 `N' 21181 An unsigned 16-bit constant for `iohl' and `fsmbi'. 21182 21183 `O' 21184 An unsigned 7-bit constant whose 3 least significant bits are 21185 0. 21186 21187 `P' 21188 An unsigned 3-bit constant for 16-byte rotates and shifts 21189 21190 `R' 21191 Call operand, reg, for indirect calls 21192 21193 `S' 21194 Call operand, symbol, for relative calls. 21195 21196 `T' 21197 Call operand, const_int, for absolute calls. 21198 21199 `U' 21200 An immediate which can be loaded with the il/ila/ilh/ilhu 21201 instructions. const_int is sign extended to 128 bit. 21202 21203 `W' 21204 An immediate for shift and rotate instructions. const_int is 21205 treated as a 32 bit value. 21206 21207 `Y' 21208 An immediate for and/xor/or instructions. const_int is sign 21209 extended as a 128 bit. 21210 21211 `Z' 21212 An immediate for the `iohl' instruction. const_int is sign 21213 extended to 128 bit. 21214 21215 21216 _S/390 and zSeries--`config/s390/s390.h'_ 21217 21218 `a' 21219 Address register (general purpose register except r0) 21220 21221 `c' 21222 Condition code register 21223 21224 `d' 21225 Data register (arbitrary general purpose register) 21226 21227 `f' 21228 Floating-point register 21229 21230 `I' 21231 Unsigned 8-bit constant (0-255) 21232 21233 `J' 21234 Unsigned 12-bit constant (0-4095) 21235 21236 `K' 21237 Signed 16-bit constant (-32768-32767) 21238 21239 `L' 21240 Value appropriate as displacement. 21241 `(0..4095)' 21242 for short displacement 21243 21244 `(-524288..524287)' 21245 for long displacement 21246 21247 `M' 21248 Constant integer with a value of 0x7fffffff. 21249 21250 `N' 21251 Multiple letter constraint followed by 4 parameter letters. 21252 `0..9:' 21253 number of the part counting from most to least 21254 significant 21255 21256 `H,Q:' 21257 mode of the part 21258 21259 `D,S,H:' 21260 mode of the containing operand 21261 21262 `0,F:' 21263 value of the other parts (F--all bits set) 21264 The constraint matches if the specified part of a constant 21265 has a value different from its other parts. 21266 21267 `Q' 21268 Memory reference without index register and with short 21269 displacement. 21270 21271 `R' 21272 Memory reference with index register and short displacement. 21273 21274 `S' 21275 Memory reference without index register but with long 21276 displacement. 21277 21278 `T' 21279 Memory reference with index register and long displacement. 21280 21281 `U' 21282 Pointer with short displacement. 21283 21284 `W' 21285 Pointer with long displacement. 21286 21287 `Y' 21288 Shift count operand. 21289 21290 21291 _Score family--`config/score/score.h'_ 21292 21293 `d' 21294 Registers from r0 to r32. 21295 21296 `e' 21297 Registers from r0 to r16. 21298 21299 `t' 21300 r8--r11 or r22--r27 registers. 21301 21302 `h' 21303 hi register. 21304 21305 `l' 21306 lo register. 21307 21308 `x' 21309 hi + lo register. 21310 21311 `q' 21312 cnt register. 21313 21314 `y' 21315 lcb register. 21316 21317 `z' 21318 scb register. 21319 21320 `a' 21321 cnt + lcb + scb register. 21322 21323 `c' 21324 cr0--cr15 register. 21325 21326 `b' 21327 cp1 registers. 21328 21329 `f' 21330 cp2 registers. 21331 21332 `i' 21333 cp3 registers. 21334 21335 `j' 21336 cp1 + cp2 + cp3 registers. 21337 21338 `I' 21339 High 16-bit constant (32-bit constant with 16 LSBs zero). 21340 21341 `J' 21342 Unsigned 5 bit integer (in the range 0 to 31). 21343 21344 `K' 21345 Unsigned 16 bit integer (in the range 0 to 65535). 21346 21347 `L' 21348 Signed 16 bit integer (in the range -32768 to 32767). 21349 21350 `M' 21351 Unsigned 14 bit integer (in the range 0 to 16383). 21352 21353 `N' 21354 Signed 14 bit integer (in the range -8192 to 8191). 21355 21356 `Z' 21357 Any SYMBOL_REF. 21358 21359 _Xstormy16--`config/stormy16/stormy16.h'_ 21360 21361 `a' 21362 Register r0. 21363 21364 `b' 21365 Register r1. 21366 21367 `c' 21368 Register r2. 21369 21370 `d' 21371 Register r8. 21372 21373 `e' 21374 Registers r0 through r7. 21375 21376 `t' 21377 Registers r0 and r1. 21378 21379 `y' 21380 The carry register. 21381 21382 `z' 21383 Registers r8 and r9. 21384 21385 `I' 21386 A constant between 0 and 3 inclusive. 21387 21388 `J' 21389 A constant that has exactly one bit set. 21390 21391 `K' 21392 A constant that has exactly one bit clear. 21393 21394 `L' 21395 A constant between 0 and 255 inclusive. 21396 21397 `M' 21398 A constant between -255 and 0 inclusive. 21399 21400 `N' 21401 A constant between -3 and 0 inclusive. 21402 21403 `O' 21404 A constant between 1 and 4 inclusive. 21405 21406 `P' 21407 A constant between -4 and -1 inclusive. 21408 21409 `Q' 21410 A memory reference that is a stack push. 21411 21412 `R' 21413 A memory reference that is a stack pop. 21414 21415 `S' 21416 A memory reference that refers to a constant address of known 21417 value. 21418 21419 `T' 21420 The register indicated by Rx (not implemented yet). 21421 21422 `U' 21423 A constant that is not between 2 and 15 inclusive. 21424 21425 `Z' 21426 The constant 0. 21427 21428 21429 _Xtensa--`config/xtensa/constraints.md'_ 21430 21431 `a' 21432 General-purpose 32-bit register 21433 21434 `b' 21435 One-bit boolean register 21436 21437 `A' 21438 MAC16 40-bit accumulator register 21439 21440 `I' 21441 Signed 12-bit integer constant, for use in MOVI instructions 21442 21443 `J' 21444 Signed 8-bit integer constant, for use in ADDI instructions 21445 21446 `K' 21447 Integer constant valid for BccI instructions 21448 21449 `L' 21450 Unsigned constant valid for BccUI instructions 21451 21452 21453 21454 21455 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 21456 21457 5.39 Controlling Names Used in Assembler Code 21458 ============================================= 21459 21460 You can specify the name to be used in the assembler code for a C 21461 function or variable by writing the `asm' (or `__asm__') keyword after 21462 the declarator as follows: 21463 21464 int foo asm ("myfoo") = 2; 21465 21466 This specifies that the name to be used for the variable `foo' in the 21467 assembler code should be `myfoo' rather than the usual `_foo'. 21468 21469 On systems where an underscore is normally prepended to the name of a C 21470 function or variable, this feature allows you to define names for the 21471 linker that do not start with an underscore. 21472 21473 It does not make sense to use this feature with a non-static local 21474 variable since such variables do not have assembler names. If you are 21475 trying to put the variable in a particular register, see *Note Explicit 21476 Reg Vars::. GCC presently accepts such code with a warning, but will 21477 probably be changed to issue an error, rather than a warning, in the 21478 future. 21479 21480 You cannot use `asm' in this way in a function _definition_; but you 21481 can get the same effect by writing a declaration for the function 21482 before its definition and putting `asm' there, like this: 21483 21484 extern func () asm ("FUNC"); 21485 21486 func (x, y) 21487 int x, y; 21488 /* ... */ 21489 21490 It is up to you to make sure that the assembler names you choose do not 21491 conflict with any other assembler symbols. Also, you must not use a 21492 register name; that would produce completely invalid assembler code. 21493 GCC does not as yet have the ability to store static variables in 21494 registers. Perhaps that will be added. 21495 21496 21497 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 21498 21499 5.40 Variables in Specified Registers 21500 ===================================== 21501 21502 GNU C allows you to put a few global variables into specified hardware 21503 registers. You can also specify the register in which an ordinary 21504 register variable should be allocated. 21505 21506 * Global register variables reserve registers throughout the program. 21507 This may be useful in programs such as programming language 21508 interpreters which have a couple of global variables that are 21509 accessed very often. 21510 21511 * Local register variables in specific registers do not reserve the 21512 registers, except at the point where they are used as input or 21513 output operands in an `asm' statement and the `asm' statement 21514 itself is not deleted. The compiler's data flow analysis is 21515 capable of determining where the specified registers contain live 21516 values, and where they are available for other uses. Stores into 21517 local register variables may be deleted when they appear to be 21518 dead according to dataflow analysis. References to local register 21519 variables may be deleted or moved or simplified. 21520 21521 These local variables are sometimes convenient for use with the 21522 extended `asm' feature (*note Extended Asm::), if you want to 21523 write one output of the assembler instruction directly into a 21524 particular register. (This will work provided the register you 21525 specify fits the constraints specified for that operand in the 21526 `asm'.) 21527 21528 * Menu: 21529 21530 * Global Reg Vars:: 21531 * Local Reg Vars:: 21532 21533 21534 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 21535 21536 5.40.1 Defining Global Register Variables 21537 ----------------------------------------- 21538 21539 You can define a global register variable in GNU C like this: 21540 21541 register int *foo asm ("a5"); 21542 21543 Here `a5' is the name of the register which should be used. Choose a 21544 register which is normally saved and restored by function calls on your 21545 machine, so that library routines will not clobber it. 21546 21547 Naturally the register name is cpu-dependent, so you would need to 21548 conditionalize your program according to cpu type. The register `a5' 21549 would be a good choice on a 68000 for a variable of pointer type. On 21550 machines with register windows, be sure to choose a "global" register 21551 that is not affected magically by the function call mechanism. 21552 21553 In addition, operating systems on one type of cpu may differ in how 21554 they name the registers; then you would need additional conditionals. 21555 For example, some 68000 operating systems call this register `%a5'. 21556 21557 Eventually there may be a way of asking the compiler to choose a 21558 register automatically, but first we need to figure out how it should 21559 choose and how to enable you to guide the choice. No solution is 21560 evident. 21561 21562 Defining a global register variable in a certain register reserves that 21563 register entirely for this use, at least within the current compilation. 21564 The register will not be allocated for any other purpose in the 21565 functions in the current compilation. The register will not be saved 21566 and restored by these functions. Stores into this register are never 21567 deleted even if they would appear to be dead, but references may be 21568 deleted or moved or simplified. 21569 21570 It is not safe to access the global register variables from signal 21571 handlers, or from more than one thread of control, because the system 21572 library routines may temporarily use the register for other things 21573 (unless you recompile them specially for the task at hand). 21574 21575 It is not safe for one function that uses a global register variable to 21576 call another such function `foo' by way of a third function `lose' that 21577 was compiled without knowledge of this variable (i.e. in a different 21578 source file in which the variable wasn't declared). This is because 21579 `lose' might save the register and put some other value there. For 21580 example, you can't expect a global register variable to be available in 21581 the comparison-function that you pass to `qsort', since `qsort' might 21582 have put something else in that register. (If you are prepared to 21583 recompile `qsort' with the same global register variable, you can solve 21584 this problem.) 21585 21586 If you want to recompile `qsort' or other source files which do not 21587 actually use your global register variable, so that they will not use 21588 that register for any other purpose, then it suffices to specify the 21589 compiler option `-ffixed-REG'. You need not actually add a global 21590 register declaration to their source code. 21591 21592 A function which can alter the value of a global register variable 21593 cannot safely be called from a function compiled without this variable, 21594 because it could clobber the value the caller expects to find there on 21595 return. Therefore, the function which is the entry point into the part 21596 of the program that uses the global register variable must explicitly 21597 save and restore the value which belongs to its caller. 21598 21599 On most machines, `longjmp' will restore to each global register 21600 variable the value it had at the time of the `setjmp'. On some 21601 machines, however, `longjmp' will not change the value of global 21602 register variables. To be portable, the function that called `setjmp' 21603 should make other arrangements to save the values of the global register 21604 variables, and to restore them in a `longjmp'. This way, the same 21605 thing will happen regardless of what `longjmp' does. 21606 21607 All global register variable declarations must precede all function 21608 definitions. If such a declaration could appear after function 21609 definitions, the declaration would be too late to prevent the register 21610 from being used for other purposes in the preceding functions. 21611 21612 Global register variables may not have initial values, because an 21613 executable file has no means to supply initial contents for a register. 21614 21615 On the SPARC, there are reports that g3 ... g7 are suitable registers, 21616 but certain library functions, such as `getwd', as well as the 21617 subroutines for division and remainder, modify g3 and g4. g1 and g2 21618 are local temporaries. 21619 21620 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 21621 course, it will not do to use more than a few of those. 21622 21623 21624 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 21625 21626 5.40.2 Specifying Registers for Local Variables 21627 ----------------------------------------------- 21628 21629 You can define a local register variable with a specified register like 21630 this: 21631 21632 register int *foo asm ("a5"); 21633 21634 Here `a5' is the name of the register which should be used. Note that 21635 this is the same syntax used for defining global register variables, 21636 but for a local variable it would appear within a function. 21637 21638 Naturally the register name is cpu-dependent, but this is not a 21639 problem, since specific registers are most often useful with explicit 21640 assembler instructions (*note Extended Asm::). Both of these things 21641 generally require that you conditionalize your program according to cpu 21642 type. 21643 21644 In addition, operating systems on one type of cpu may differ in how 21645 they name the registers; then you would need additional conditionals. 21646 For example, some 68000 operating systems call this register `%a5'. 21647 21648 Defining such a register variable does not reserve the register; it 21649 remains available for other uses in places where flow control determines 21650 the variable's value is not live. 21651 21652 This option does not guarantee that GCC will generate code that has 21653 this variable in the register you specify at all times. You may not 21654 code an explicit reference to this register in the _assembler 21655 instruction template_ part of an `asm' statement and assume it will 21656 always refer to this variable. However, using the variable as an `asm' 21657 _operand_ guarantees that the specified register is used for the 21658 operand. 21659 21660 Stores into local register variables may be deleted when they appear 21661 to be dead according to dataflow analysis. References to local 21662 register variables may be deleted or moved or simplified. 21663 21664 As for global register variables, it's recommended that you choose a 21665 register which is normally saved and restored by function calls on your 21666 machine, so that library routines will not clobber it. A common 21667 pitfall is to initialize multiple call-clobbered registers with 21668 arbitrary expressions, where a function call or library call for an 21669 arithmetic operator will overwrite a register value from a previous 21670 assignment, for example `r0' below: 21671 register int *p1 asm ("r0") = ...; 21672 register int *p2 asm ("r1") = ...; 21673 In those cases, a solution is to use a temporary variable for each 21674 arbitrary expression. *Note Example of asm with clobbered asm reg::. 21675 21676 21677 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 21678 21679 5.41 Alternate Keywords 21680 ======================= 21681 21682 `-ansi' and the various `-std' options disable certain keywords. This 21683 causes trouble when you want to use GNU C extensions, or a 21684 general-purpose header file that should be usable by all programs, 21685 including ISO C programs. The keywords `asm', `typeof' and `inline' 21686 are not available in programs compiled with `-ansi' or `-std' (although 21687 `inline' can be used in a program compiled with `-std=c99'). The ISO 21688 C99 keyword `restrict' is only available when `-std=gnu99' (which will 21689 eventually be the default) or `-std=c99' (or the equivalent 21690 `-std=iso9899:1999') is used. 21691 21692 The way to solve these problems is to put `__' at the beginning and 21693 end of each problematical keyword. For example, use `__asm__' instead 21694 of `asm', and `__inline__' instead of `inline'. 21695 21696 Other C compilers won't accept these alternative keywords; if you want 21697 to compile with another compiler, you can define the alternate keywords 21698 as macros to replace them with the customary keywords. It looks like 21699 this: 21700 21701 #ifndef __GNUC__ 21702 #define __asm__ asm 21703 #endif 21704 21705 `-pedantic' and other options cause warnings for many GNU C extensions. 21706 You can prevent such warnings within one expression by writing 21707 `__extension__' before the expression. `__extension__' has no effect 21708 aside from this. 21709 21710 21711 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 21712 21713 5.42 Incomplete `enum' Types 21714 ============================ 21715 21716 You can define an `enum' tag without specifying its possible values. 21717 This results in an incomplete type, much like what you get if you write 21718 `struct foo' without describing the elements. A later declaration 21719 which does specify the possible values completes the type. 21720 21721 You can't allocate variables or storage using the type while it is 21722 incomplete. However, you can work with pointers to that type. 21723 21724 This extension may not be very useful, but it makes the handling of 21725 `enum' more consistent with the way `struct' and `union' are handled. 21726 21727 This extension is not supported by GNU C++. 21728 21729 21730 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 21731 21732 5.43 Function Names as Strings 21733 ============================== 21734 21735 GCC provides three magic variables which hold the name of the current 21736 function, as a string. The first of these is `__func__', which is part 21737 of the C99 standard: 21738 21739 The identifier `__func__' is implicitly declared by the translator 21740 as if, immediately following the opening brace of each function 21741 definition, the declaration 21742 static const char __func__[] = "function-name"; 21743 21744 appeared, where function-name is the name of the lexically-enclosing 21745 function. This name is the unadorned name of the function. 21746 21747 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 21748 recognize only this name. However, it is not standardized. For 21749 maximum portability, we recommend you use `__func__', but provide a 21750 fallback definition with the preprocessor: 21751 21752 #if __STDC_VERSION__ < 199901L 21753 # if __GNUC__ >= 2 21754 # define __func__ __FUNCTION__ 21755 # else 21756 # define __func__ "<unknown>" 21757 # endif 21758 #endif 21759 21760 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 21761 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 21762 the function as well as its bare name. For example, this program: 21763 21764 extern "C" { 21765 extern int printf (char *, ...); 21766 } 21767 21768 class a { 21769 public: 21770 void sub (int i) 21771 { 21772 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 21773 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 21774 } 21775 }; 21776 21777 int 21778 main (void) 21779 { 21780 a ax; 21781 ax.sub (0); 21782 return 0; 21783 } 21784 21785 gives this output: 21786 21787 __FUNCTION__ = sub 21788 __PRETTY_FUNCTION__ = void a::sub(int) 21789 21790 These identifiers are not preprocessor macros. In GCC 3.3 and 21791 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 21792 treated as string literals; they could be used to initialize `char' 21793 arrays, and they could be concatenated with other string literals. GCC 21794 3.4 and later treat them as variables, like `__func__'. In C++, 21795 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 21796 21797 21798 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 21799 21800 5.44 Getting the Return or Frame Address of a Function 21801 ====================================================== 21802 21803 These functions may be used to get information about the callers of a 21804 function. 21805 21806 -- Built-in Function: void * __builtin_return_address (unsigned int 21807 LEVEL) 21808 This function returns the return address of the current function, 21809 or of one of its callers. The LEVEL argument is number of frames 21810 to scan up the call stack. A value of `0' yields the return 21811 address of the current function, a value of `1' yields the return 21812 address of the caller of the current function, and so forth. When 21813 inlining the expected behavior is that the function will return 21814 the address of the function that will be returned to. To work 21815 around this behavior use the `noinline' function attribute. 21816 21817 The LEVEL argument must be a constant integer. 21818 21819 On some machines it may be impossible to determine the return 21820 address of any function other than the current one; in such cases, 21821 or when the top of the stack has been reached, this function will 21822 return `0' or a random value. In addition, 21823 `__builtin_frame_address' may be used to determine if the top of 21824 the stack has been reached. 21825 21826 This function should only be used with a nonzero argument for 21827 debugging purposes. 21828 21829 -- Built-in Function: void * __builtin_frame_address (unsigned int 21830 LEVEL) 21831 This function is similar to `__builtin_return_address', but it 21832 returns the address of the function frame rather than the return 21833 address of the function. Calling `__builtin_frame_address' with a 21834 value of `0' yields the frame address of the current function, a 21835 value of `1' yields the frame address of the caller of the current 21836 function, and so forth. 21837 21838 The frame is the area on the stack which holds local variables and 21839 saved registers. The frame address is normally the address of the 21840 first word pushed on to the stack by the function. However, the 21841 exact definition depends upon the processor and the calling 21842 convention. If the processor has a dedicated frame pointer 21843 register, and the function has a frame, then 21844 `__builtin_frame_address' will return the value of the frame 21845 pointer register. 21846 21847 On some machines it may be impossible to determine the frame 21848 address of any function other than the current one; in such cases, 21849 or when the top of the stack has been reached, this function will 21850 return `0' if the first frame pointer is properly initialized by 21851 the startup code. 21852 21853 This function should only be used with a nonzero argument for 21854 debugging purposes. 21855 21856 21857 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 21858 21859 5.45 Using vector instructions through built-in functions 21860 ========================================================= 21861 21862 On some targets, the instruction set contains SIMD vector instructions 21863 that operate on multiple values contained in one large register at the 21864 same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions 21865 can be used this way. 21866 21867 The first step in using these extensions is to provide the necessary 21868 data types. This should be done using an appropriate `typedef': 21869 21870 typedef int v4si __attribute__ ((vector_size (16))); 21871 21872 The `int' type specifies the base type, while the attribute specifies 21873 the vector size for the variable, measured in bytes. For example, the 21874 declaration above causes the compiler to set the mode for the `v4si' 21875 type to be 16 bytes wide and divided into `int' sized units. For a 21876 32-bit `int' this means a vector of 4 units of 4 bytes, and the 21877 corresponding mode of `foo' will be V4SI. 21878 21879 The `vector_size' attribute is only applicable to integral and float 21880 scalars, although arrays, pointers, and function return values are 21881 allowed in conjunction with this construct. 21882 21883 All the basic integer types can be used as base types, both as signed 21884 and as unsigned: `char', `short', `int', `long', `long long'. In 21885 addition, `float' and `double' can be used to build floating-point 21886 vector types. 21887 21888 Specifying a combination that is not valid for the current architecture 21889 will cause GCC to synthesize the instructions using a narrower mode. 21890 For example, if you specify a variable of type `V4SI' and your 21891 architecture does not allow for this specific SIMD type, GCC will 21892 produce code that uses 4 `SIs'. 21893 21894 The types defined in this manner can be used with a subset of normal C 21895 operations. Currently, GCC will allow using the following operators on 21896 these types: `+, -, *, /, unary minus, ^, |, &, ~'. 21897 21898 The operations behave like C++ `valarrays'. Addition is defined as 21899 the addition of the corresponding elements of the operands. For 21900 example, in the code below, each of the 4 elements in A will be added 21901 to the corresponding 4 elements in B and the resulting vector will be 21902 stored in C. 21903 21904 typedef int v4si __attribute__ ((vector_size (16))); 21905 21906 v4si a, b, c; 21907 21908 c = a + b; 21909 21910 Subtraction, multiplication, division, and the logical operations 21911 operate in a similar manner. Likewise, the result of using the unary 21912 minus or complement operators on a vector type is a vector whose 21913 elements are the negative or complemented values of the corresponding 21914 elements in the operand. 21915 21916 You can declare variables and use them in function calls and returns, 21917 as well as in assignments and some casts. You can specify a vector 21918 type as a return type for a function. Vector types can also be used as 21919 function arguments. It is possible to cast from one vector type to 21920 another, provided they are of the same size (in fact, you can also cast 21921 vectors to and from other datatypes of the same size). 21922 21923 You cannot operate between vectors of different lengths or different 21924 signedness without a cast. 21925 21926 A port that supports hardware vector operations, usually provides a set 21927 of built-in functions that can be used to operate on vectors. For 21928 example, a function to add two vectors and multiply the result by a 21929 third could look like this: 21930 21931 v4si f (v4si a, v4si b, v4si c) 21932 { 21933 v4si tmp = __builtin_addv4si (a, b); 21934 return __builtin_mulv4si (tmp, c); 21935 } 21936 21937 21938 File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 21939 21940 5.46 Offsetof 21941 ============= 21942 21943 GCC implements for both C and C++ a syntactic extension to implement 21944 the `offsetof' macro. 21945 21946 primary: 21947 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 21948 21949 offsetof_member_designator: 21950 `identifier' 21951 | offsetof_member_designator "." `identifier' 21952 | offsetof_member_designator "[" `expr' "]" 21953 21954 This extension is sufficient such that 21955 21956 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 21957 21958 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 21959 dependent. In either case, MEMBER may consist of a single identifier, 21960 or a sequence of member accesses and array references. 21961 21962 21963 File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 21964 21965 5.47 Built-in functions for atomic memory access 21966 ================================================ 21967 21968 The following builtins are intended to be compatible with those 21969 described in the `Intel Itanium Processor-specific Application Binary 21970 Interface', section 7.4. As such, they depart from the normal GCC 21971 practice of using the "__builtin_" prefix, and further that they are 21972 overloaded such that they work on multiple types. 21973 21974 The definition given in the Intel documentation allows only for the 21975 use of the types `int', `long', `long long' as well as their unsigned 21976 counterparts. GCC will allow any integral scalar or pointer type that 21977 is 1, 2, 4 or 8 bytes in length. 21978 21979 Not all operations are supported by all target processors. If a 21980 particular operation cannot be implemented on the target processor, a 21981 warning will be generated and a call an external function will be 21982 generated. The external function will carry the same name as the 21983 builtin, with an additional suffix `_N' where N is the size of the data 21984 type. 21985 21986 In most cases, these builtins are considered a "full barrier". That 21987 is, no memory operand will be moved across the operation, either 21988 forward or backward. Further, instructions will be issued as necessary 21989 to prevent the processor from speculating loads across the operation 21990 and from queuing stores after the operation. 21991 21992 All of the routines are are described in the Intel documentation to 21993 take "an optional list of variables protected by the memory barrier". 21994 It's not clear what is meant by that; it could mean that _only_ the 21995 following variables are protected, or it could mean that these variables 21996 should in addition be protected. At present GCC ignores this list and 21997 protects all variables which are globally accessible. If in the future 21998 we make some use of this list, an empty list will continue to mean all 21999 globally accessible variables. 22000 22001 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 22002 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 22003 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 22004 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 22005 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 22006 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 22007 These builtins perform the operation suggested by the name, and 22008 returns the value that had previously been in memory. That is, 22009 22010 { tmp = *ptr; *ptr OP= value; return tmp; } 22011 { tmp = *ptr; *ptr = ~tmp & value; return tmp; } // nand 22012 22013 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 22014 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 22015 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 22016 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 22017 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 22018 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 22019 These builtins perform the operation suggested by the name, and 22020 return the new value. That is, 22021 22022 { *ptr OP= value; return *ptr; } 22023 { *ptr = ~*ptr & value; return *ptr; } // nand 22024 22025 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 22026 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 22027 These builtins perform an atomic compare and swap. That is, if 22028 the current value of `*PTR' is OLDVAL, then write NEWVAL into 22029 `*PTR'. 22030 22031 The "bool" version returns true if the comparison is successful and 22032 NEWVAL was written. The "val" version returns the contents of 22033 `*PTR' before the operation. 22034 22035 `__sync_synchronize (...)' 22036 This builtin issues a full memory barrier. 22037 22038 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 22039 This builtin, as described by Intel, is not a traditional 22040 test-and-set operation, but rather an atomic exchange operation. 22041 It writes VALUE into `*PTR', and returns the previous contents of 22042 `*PTR'. 22043 22044 Many targets have only minimal support for such locks, and do not 22045 support a full exchange operation. In this case, a target may 22046 support reduced functionality here by which the _only_ valid value 22047 to store is the immediate constant 1. The exact value actually 22048 stored in `*PTR' is implementation defined. 22049 22050 This builtin is not a full barrier, but rather an "acquire 22051 barrier". This means that references after the builtin cannot 22052 move to (or be speculated to) before the builtin, but previous 22053 memory stores may not be globally visible yet, and previous memory 22054 loads may not yet be satisfied. 22055 22056 `void __sync_lock_release (TYPE *ptr, ...)' 22057 This builtin releases the lock acquired by 22058 `__sync_lock_test_and_set'. Normally this means writing the 22059 constant 0 to `*PTR'. 22060 22061 This builtin is not a full barrier, but rather a "release barrier". 22062 This means that all previous memory stores are globally visible, 22063 and all previous memory loads have been satisfied, but following 22064 memory reads are not prevented from being speculated to before the 22065 barrier. 22066 22067 22068 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 22069 22070 5.48 Object Size Checking Builtins 22071 ================================== 22072 22073 GCC implements a limited buffer overflow protection mechanism that can 22074 prevent some buffer overflow attacks. 22075 22076 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 22077 TYPE) 22078 is a built-in construct that returns a constant number of bytes 22079 from PTR to the end of the object PTR pointer points to (if known 22080 at compile time). `__builtin_object_size' never evaluates its 22081 arguments for side-effects. If there are any side-effects in 22082 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 22083 for TYPE 2 or 3. If there are multiple objects PTR can point to 22084 and all of them are known at compile time, the returned number is 22085 the maximum of remaining byte counts in those objects if TYPE & 2 22086 is 0 and minimum if nonzero. If it is not possible to determine 22087 which objects PTR points to at compile time, 22088 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 22089 1 and `(size_t) 0' for TYPE 2 or 3. 22090 22091 TYPE is an integer constant from 0 to 3. If the least significant 22092 bit is clear, objects are whole variables, if it is set, a closest 22093 surrounding subobject is considered the object a pointer points to. 22094 The second bit determines if maximum or minimum of remaining bytes 22095 is computed. 22096 22097 struct V { char buf1[10]; int b; char buf2[10]; } var; 22098 char *p = &var.buf1[1], *q = &var.b; 22099 22100 /* Here the object p points to is var. */ 22101 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 22102 /* The subobject p points to is var.buf1. */ 22103 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 22104 /* The object q points to is var. */ 22105 assert (__builtin_object_size (q, 0) 22106 == (char *) (&var + 1) - (char *) &var.b); 22107 /* The subobject q points to is var.b. */ 22108 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 22109 22110 There are built-in functions added for many common string operation 22111 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 22112 provided. This built-in has an additional last argument, which is the 22113 number of bytes remaining in object the DEST argument points to or 22114 `(size_t) -1' if the size is not known. 22115 22116 The built-in functions are optimized into the normal string functions 22117 like `memcpy' if the last argument is `(size_t) -1' or if it is known 22118 at compile time that the destination object will not be overflown. If 22119 the compiler can determine at compile time the object will be always 22120 overflown, it issues a warning. 22121 22122 The intended use can be e.g. 22123 22124 #undef memcpy 22125 #define bos0(dest) __builtin_object_size (dest, 0) 22126 #define memcpy(dest, src, n) \ 22127 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 22128 22129 char *volatile p; 22130 char buf[10]; 22131 /* It is unknown what object p points to, so this is optimized 22132 into plain memcpy - no checking is possible. */ 22133 memcpy (p, "abcde", n); 22134 /* Destination is known and length too. It is known at compile 22135 time there will be no overflow. */ 22136 memcpy (&buf[5], "abcde", 5); 22137 /* Destination is known, but the length is not known at compile time. 22138 This will result in __memcpy_chk call that can check for overflow 22139 at runtime. */ 22140 memcpy (&buf[5], "abcde", n); 22141 /* Destination is known and it is known at compile time there will 22142 be overflow. There will be a warning and __memcpy_chk call that 22143 will abort the program at runtime. */ 22144 memcpy (&buf[6], "abcde", 5); 22145 22146 Such built-in functions are provided for `memcpy', `mempcpy', 22147 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 22148 `strncat'. 22149 22150 There are also checking built-in functions for formatted output 22151 functions. 22152 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 22153 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 22154 const char *fmt, ...); 22155 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 22156 va_list ap); 22157 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 22158 const char *fmt, va_list ap); 22159 22160 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 22161 functions and can contain implementation specific flags on what 22162 additional security measures the checking function might take, such as 22163 handling `%n' differently. 22164 22165 The OS argument is the object size S points to, like in the other 22166 built-in functions. There is a small difference in the behavior 22167 though, if OS is `(size_t) -1', the built-in functions are optimized 22168 into the non-checking functions only if FLAG is 0, otherwise the 22169 checking function is called with OS argument set to `(size_t) -1'. 22170 22171 In addition to this, there are checking built-in functions 22172 `__builtin___printf_chk', `__builtin___vprintf_chk', 22173 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 22174 just one additional argument, FLAG, right before format string FMT. If 22175 the compiler is able to optimize them to `fputc' etc. functions, it 22176 will, otherwise the checking function should be called and the FLAG 22177 argument passed to it. 22178 22179 22180 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 22181 22182 5.49 Other built-in functions provided by GCC 22183 ============================================= 22184 22185 GCC provides a large number of built-in functions other than the ones 22186 mentioned above. Some of these are for internal use in the processing 22187 of exceptions or variable-length argument lists and will not be 22188 documented here because they may change from time to time; we do not 22189 recommend general use of these functions. 22190 22191 The remaining functions are provided for optimization purposes. 22192 22193 GCC includes built-in versions of many of the functions in the standard 22194 C library. The versions prefixed with `__builtin_' will always be 22195 treated as having the same meaning as the C library function even if you 22196 specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 22197 these functions are only optimized in certain cases; if they are not 22198 optimized in a particular case, a call to the library function will be 22199 emitted. 22200 22201 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the 22202 functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext', 22203 `dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl', 22204 `ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal', 22205 `gamma', `gammaf_r', `gammal_r', `gamma_r', `gettext', `index', 22206 `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', `jnf', `jnl', `jn', 22207 `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', `pow10f', `pow10l', 22208 `pow10', `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', 22209 `signbit', `signbitf', `signbitl', `signbitd32', `signbitd64', 22210 `signbitd128', `significandf', `significandl', `significand', `sincosf', 22211 `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', `strdup', 22212 `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', `y0', 22213 `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in 22214 functions. All these functions have corresponding versions prefixed 22215 with `__builtin_', which may be used even in strict C89 mode. 22216 22217 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 22218 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 22219 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 22220 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 22221 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 22222 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 22223 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 22224 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 22225 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 22226 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 22227 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 22228 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 22229 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 22230 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 22231 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 22232 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 22233 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 22234 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 22235 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 22236 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 22237 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 22238 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 22239 `remainderf', `remainderl', `remainder', `remquof', `remquol', 22240 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 22241 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 22242 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 22243 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 22244 functions except in strict ISO C90 mode (`-ansi' or `-std=c89'). 22245 22246 There are also built-in versions of the ISO C99 functions `acosf', 22247 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 22248 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 22249 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 22250 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 22251 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 22252 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 22253 recognized in any mode since ISO C90 reserves these names for the 22254 purpose to which ISO C99 puts them. All these functions have 22255 corresponding versions prefixed with `__builtin_'. 22256 22257 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 22258 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 22259 `iswxdigit', `towlower' and `towupper' are handled as built-in functions 22260 except in strict ISO C90 mode (`-ansi' or `-std=c89'). 22261 22262 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 22263 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 22264 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 22265 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 22266 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 22267 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 22268 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 22269 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 22270 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 22271 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 22272 `vsprintf' are all recognized as built-in functions unless 22273 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 22274 for an individual function). All of these functions have corresponding 22275 versions prefixed with `__builtin_'. 22276 22277 GCC provides built-in versions of the ISO C99 floating point comparison 22278 macros that avoid raising exceptions for unordered operands. They have 22279 the same names as the standard macros ( `isgreater', `isgreaterequal', 22280 `isless', `islessequal', `islessgreater', and `isunordered') , with 22281 `__builtin_' prefixed. We intend for a library implementor to be able 22282 to simply `#define' each standard macro to its built-in equivalent. In 22283 the same fashion, GCC provides `isfinite' and `isnormal' built-ins used 22284 with `__builtin_' prefixed. 22285 22286 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 22287 You can use the built-in function `__builtin_types_compatible_p' to 22288 determine whether two types are the same. 22289 22290 This built-in function returns 1 if the unqualified versions of the 22291 types TYPE1 and TYPE2 (which are types, not expressions) are 22292 compatible, 0 otherwise. The result of this built-in function can 22293 be used in integer constant expressions. 22294 22295 This built-in function ignores top level qualifiers (e.g., `const', 22296 `volatile'). For example, `int' is equivalent to `const int'. 22297 22298 The type `int[]' and `int[5]' are compatible. On the other hand, 22299 `int' and `char *' are not compatible, even if the size of their 22300 types, on the particular architecture are the same. Also, the 22301 amount of pointer indirection is taken into account when 22302 determining similarity. Consequently, `short *' is not similar to 22303 `short **'. Furthermore, two types that are typedefed are 22304 considered compatible if their underlying types are compatible. 22305 22306 An `enum' type is not considered to be compatible with another 22307 `enum' type even if both are compatible with the same integer 22308 type; this is what the C standard specifies. For example, `enum 22309 {foo, bar}' is not similar to `enum {hot, dog}'. 22310 22311 You would typically use this function in code whose execution 22312 varies depending on the arguments' types. For example: 22313 22314 #define foo(x) \ 22315 ({ \ 22316 typeof (x) tmp = (x); \ 22317 if (__builtin_types_compatible_p (typeof (x), long double)) \ 22318 tmp = foo_long_double (tmp); \ 22319 else if (__builtin_types_compatible_p (typeof (x), double)) \ 22320 tmp = foo_double (tmp); \ 22321 else if (__builtin_types_compatible_p (typeof (x), float)) \ 22322 tmp = foo_float (tmp); \ 22323 else \ 22324 abort (); \ 22325 tmp; \ 22326 }) 22327 22328 _Note:_ This construct is only available for C. 22329 22330 22331 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 22332 EXP2) 22333 You can use the built-in function `__builtin_choose_expr' to 22334 evaluate code depending on the value of a constant expression. 22335 This built-in function returns EXP1 if CONST_EXP, which is a 22336 constant expression that must be able to be determined at compile 22337 time, is nonzero. Otherwise it returns 0. 22338 22339 This built-in function is analogous to the `? :' operator in C, 22340 except that the expression returned has its type unaltered by 22341 promotion rules. Also, the built-in function does not evaluate 22342 the expression that was not chosen. For example, if CONST_EXP 22343 evaluates to true, EXP2 is not evaluated even if it has 22344 side-effects. 22345 22346 This built-in function can return an lvalue if the chosen argument 22347 is an lvalue. 22348 22349 If EXP1 is returned, the return type is the same as EXP1's type. 22350 Similarly, if EXP2 is returned, its return type is the same as 22351 EXP2. 22352 22353 Example: 22354 22355 #define foo(x) \ 22356 __builtin_choose_expr ( \ 22357 __builtin_types_compatible_p (typeof (x), double), \ 22358 foo_double (x), \ 22359 __builtin_choose_expr ( \ 22360 __builtin_types_compatible_p (typeof (x), float), \ 22361 foo_float (x), \ 22362 /* The void expression results in a compile-time error \ 22363 when assigning the result to something. */ \ 22364 (void)0)) 22365 22366 _Note:_ This construct is only available for C. Furthermore, the 22367 unused expression (EXP1 or EXP2 depending on the value of 22368 CONST_EXP) may still generate syntax errors. This may change in 22369 future revisions. 22370 22371 22372 -- Built-in Function: int __builtin_constant_p (EXP) 22373 You can use the built-in function `__builtin_constant_p' to 22374 determine if a value is known to be constant at compile-time and 22375 hence that GCC can perform constant-folding on expressions 22376 involving that value. The argument of the function is the value 22377 to test. The function returns the integer 1 if the argument is 22378 known to be a compile-time constant and 0 if it is not known to be 22379 a compile-time constant. A return of 0 does not indicate that the 22380 value is _not_ a constant, but merely that GCC cannot prove it is 22381 a constant with the specified value of the `-O' option. 22382 22383 You would typically use this function in an embedded application 22384 where memory was a critical resource. If you have some complex 22385 calculation, you may want it to be folded if it involves 22386 constants, but need to call a function if it does not. For 22387 example: 22388 22389 #define Scale_Value(X) \ 22390 (__builtin_constant_p (X) \ 22391 ? ((X) * SCALE + OFFSET) : Scale (X)) 22392 22393 You may use this built-in function in either a macro or an inline 22394 function. However, if you use it in an inlined function and pass 22395 an argument of the function as the argument to the built-in, GCC 22396 will never return 1 when you call the inline function with a 22397 string constant or compound literal (*note Compound Literals::) 22398 and will not return 1 when you pass a constant numeric value to 22399 the inline function unless you specify the `-O' option. 22400 22401 You may also use `__builtin_constant_p' in initializers for static 22402 data. For instance, you can write 22403 22404 static const int table[] = { 22405 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 22406 /* ... */ 22407 }; 22408 22409 This is an acceptable initializer even if EXPRESSION is not a 22410 constant expression. GCC must be more conservative about 22411 evaluating the built-in in this case, because it has no 22412 opportunity to perform optimization. 22413 22414 Previous versions of GCC did not accept this built-in in data 22415 initializers. The earliest version where it is completely safe is 22416 3.0.1. 22417 22418 -- Built-in Function: long __builtin_expect (long EXP, long C) 22419 You may use `__builtin_expect' to provide the compiler with branch 22420 prediction information. In general, you should prefer to use 22421 actual profile feedback for this (`-fprofile-arcs'), as 22422 programmers are notoriously bad at predicting how their programs 22423 actually perform. However, there are applications in which this 22424 data is hard to collect. 22425 22426 The return value is the value of EXP, which should be an integral 22427 expression. The semantics of the built-in are that it is expected 22428 that EXP == C. For example: 22429 22430 if (__builtin_expect (x, 0)) 22431 foo (); 22432 22433 would indicate that we do not expect to call `foo', since we 22434 expect `x' to be zero. Since you are limited to integral 22435 expressions for EXP, you should use constructions such as 22436 22437 if (__builtin_expect (ptr != NULL, 1)) 22438 error (); 22439 22440 when testing pointer or floating-point values. 22441 22442 -- Built-in Function: void __builtin_trap (void) 22443 This function causes the program to exit abnormally. GCC 22444 implements this function by using a target-dependent mechanism 22445 (such as intentionally executing an illegal instruction) or by 22446 calling `abort'. The mechanism used may vary from release to 22447 release so you should not rely on any particular implementation. 22448 22449 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 22450 *END) 22451 This function is used to flush the processor's instruction cache 22452 for the region of memory between BEGIN inclusive and END 22453 exclusive. Some targets require that the instruction cache be 22454 flushed, after modifying memory containing code, in order to obtain 22455 deterministic behavior. 22456 22457 If the target does not require instruction cache flushes, 22458 `__builtin___clear_cache' has no effect. Otherwise either 22459 instructions are emitted in-line to clear the instruction cache or 22460 a call to the `__clear_cache' function in libgcc is made. 22461 22462 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 22463 This function is used to minimize cache-miss latency by moving 22464 data into a cache before it is accessed. You can insert calls to 22465 `__builtin_prefetch' into code for which you know addresses of 22466 data in memory that is likely to be accessed soon. If the target 22467 supports them, data prefetch instructions will be generated. If 22468 the prefetch is done early enough before the access then the data 22469 will be in the cache by the time it is accessed. 22470 22471 The value of ADDR is the address of the memory to prefetch. There 22472 are two optional arguments, RW and LOCALITY. The value of RW is a 22473 compile-time constant one or zero; one means that the prefetch is 22474 preparing for a write to the memory address and zero, the default, 22475 means that the prefetch is preparing for a read. The value 22476 LOCALITY must be a compile-time constant integer between zero and 22477 three. A value of zero means that the data has no temporal 22478 locality, so it need not be left in the cache after the access. A 22479 value of three means that the data has a high degree of temporal 22480 locality and should be left in all levels of cache possible. 22481 Values of one and two mean, respectively, a low or moderate degree 22482 of temporal locality. The default is three. 22483 22484 for (i = 0; i < n; i++) 22485 { 22486 a[i] = a[i] + b[i]; 22487 __builtin_prefetch (&a[i+j], 1, 1); 22488 __builtin_prefetch (&b[i+j], 0, 1); 22489 /* ... */ 22490 } 22491 22492 Data prefetch does not generate faults if ADDR is invalid, but the 22493 address expression itself must be valid. For example, a prefetch 22494 of `p->next' will not fault if `p->next' is not a valid address, 22495 but evaluation will fault if `p' is not a valid address. 22496 22497 If the target does not support data prefetch, the address 22498 expression is evaluated if it includes side effects but no other 22499 code is generated and GCC does not issue a warning. 22500 22501 -- Built-in Function: double __builtin_huge_val (void) 22502 Returns a positive infinity, if supported by the floating-point 22503 format, else `DBL_MAX'. This function is suitable for 22504 implementing the ISO C macro `HUGE_VAL'. 22505 22506 -- Built-in Function: float __builtin_huge_valf (void) 22507 Similar to `__builtin_huge_val', except the return type is `float'. 22508 22509 -- Built-in Function: long double __builtin_huge_vall (void) 22510 Similar to `__builtin_huge_val', except the return type is `long 22511 double'. 22512 22513 -- Built-in Function: double __builtin_inf (void) 22514 Similar to `__builtin_huge_val', except a warning is generated if 22515 the target floating-point format does not support infinities. 22516 22517 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 22518 Similar to `__builtin_inf', except the return type is `_Decimal32'. 22519 22520 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 22521 Similar to `__builtin_inf', except the return type is `_Decimal64'. 22522 22523 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 22524 Similar to `__builtin_inf', except the return type is 22525 `_Decimal128'. 22526 22527 -- Built-in Function: float __builtin_inff (void) 22528 Similar to `__builtin_inf', except the return type is `float'. 22529 This function is suitable for implementing the ISO C99 macro 22530 `INFINITY'. 22531 22532 -- Built-in Function: long double __builtin_infl (void) 22533 Similar to `__builtin_inf', except the return type is `long 22534 double'. 22535 22536 -- Built-in Function: double __builtin_nan (const char *str) 22537 This is an implementation of the ISO C99 function `nan'. 22538 22539 Since ISO C99 defines this function in terms of `strtod', which we 22540 do not implement, a description of the parsing is in order. The 22541 string is parsed as by `strtol'; that is, the base is recognized by 22542 leading `0' or `0x' prefixes. The number parsed is placed in the 22543 significand such that the least significant bit of the number is 22544 at the least significant bit of the significand. The number is 22545 truncated to fit the significand field provided. The significand 22546 is forced to be a quiet NaN. 22547 22548 This function, if given a string literal all of which would have 22549 been consumed by strtol, is evaluated early enough that it is 22550 considered a compile-time constant. 22551 22552 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 22553 Similar to `__builtin_nan', except the return type is `_Decimal32'. 22554 22555 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 22556 Similar to `__builtin_nan', except the return type is `_Decimal64'. 22557 22558 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 22559 Similar to `__builtin_nan', except the return type is 22560 `_Decimal128'. 22561 22562 -- Built-in Function: float __builtin_nanf (const char *str) 22563 Similar to `__builtin_nan', except the return type is `float'. 22564 22565 -- Built-in Function: long double __builtin_nanl (const char *str) 22566 Similar to `__builtin_nan', except the return type is `long 22567 double'. 22568 22569 -- Built-in Function: double __builtin_nans (const char *str) 22570 Similar to `__builtin_nan', except the significand is forced to be 22571 a signaling NaN. The `nans' function is proposed by WG14 N965. 22572 22573 -- Built-in Function: float __builtin_nansf (const char *str) 22574 Similar to `__builtin_nans', except the return type is `float'. 22575 22576 -- Built-in Function: long double __builtin_nansl (const char *str) 22577 Similar to `__builtin_nans', except the return type is `long 22578 double'. 22579 22580 -- Built-in Function: int __builtin_ffs (unsigned int x) 22581 Returns one plus the index of the least significant 1-bit of X, or 22582 if X is zero, returns zero. 22583 22584 -- Built-in Function: int __builtin_clz (unsigned int x) 22585 Returns the number of leading 0-bits in X, starting at the most 22586 significant bit position. If X is 0, the result is undefined. 22587 22588 -- Built-in Function: int __builtin_ctz (unsigned int x) 22589 Returns the number of trailing 0-bits in X, starting at the least 22590 significant bit position. If X is 0, the result is undefined. 22591 22592 -- Built-in Function: int __builtin_popcount (unsigned int x) 22593 Returns the number of 1-bits in X. 22594 22595 -- Built-in Function: int __builtin_parity (unsigned int x) 22596 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 22597 22598 -- Built-in Function: int __builtin_ffsl (unsigned long) 22599 Similar to `__builtin_ffs', except the argument type is `unsigned 22600 long'. 22601 22602 -- Built-in Function: int __builtin_clzl (unsigned long) 22603 Similar to `__builtin_clz', except the argument type is `unsigned 22604 long'. 22605 22606 -- Built-in Function: int __builtin_ctzl (unsigned long) 22607 Similar to `__builtin_ctz', except the argument type is `unsigned 22608 long'. 22609 22610 -- Built-in Function: int __builtin_popcountl (unsigned long) 22611 Similar to `__builtin_popcount', except the argument type is 22612 `unsigned long'. 22613 22614 -- Built-in Function: int __builtin_parityl (unsigned long) 22615 Similar to `__builtin_parity', except the argument type is 22616 `unsigned long'. 22617 22618 -- Built-in Function: int __builtin_ffsll (unsigned long long) 22619 Similar to `__builtin_ffs', except the argument type is `unsigned 22620 long long'. 22621 22622 -- Built-in Function: int __builtin_clzll (unsigned long long) 22623 Similar to `__builtin_clz', except the argument type is `unsigned 22624 long long'. 22625 22626 -- Built-in Function: int __builtin_ctzll (unsigned long long) 22627 Similar to `__builtin_ctz', except the argument type is `unsigned 22628 long long'. 22629 22630 -- Built-in Function: int __builtin_popcountll (unsigned long long) 22631 Similar to `__builtin_popcount', except the argument type is 22632 `unsigned long long'. 22633 22634 -- Built-in Function: int __builtin_parityll (unsigned long long) 22635 Similar to `__builtin_parity', except the argument type is 22636 `unsigned long long'. 22637 22638 -- Built-in Function: double __builtin_powi (double, int) 22639 Returns the first argument raised to the power of the second. 22640 Unlike the `pow' function no guarantees about precision and 22641 rounding are made. 22642 22643 -- Built-in Function: float __builtin_powif (float, int) 22644 Similar to `__builtin_powi', except the argument and return types 22645 are `float'. 22646 22647 -- Built-in Function: long double __builtin_powil (long double, int) 22648 Similar to `__builtin_powi', except the argument and return types 22649 are `long double'. 22650 22651 -- Built-in Function: int32_t __builtin_bswap32 (int32_t x) 22652 Returns X with the order of the bytes reversed; for example, 22653 `0xaabbccdd' becomes `0xddccbbaa'. Byte here always means exactly 22654 8 bits. 22655 22656 -- Built-in Function: int64_t __builtin_bswap64 (int64_t x) 22657 Similar to `__builtin_bswap32', except the argument and return 22658 types are 64-bit. 22659 22660 22661 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 22662 22663 5.50 Built-in Functions Specific to Particular Target Machines 22664 ============================================================== 22665 22666 On some target machines, GCC supports many built-in functions specific 22667 to those machines. Generally these generate calls to specific machine 22668 instructions, but allow the compiler to schedule those calls. 22669 22670 * Menu: 22671 22672 * Alpha Built-in Functions:: 22673 * ARM iWMMXt Built-in Functions:: 22674 * ARM NEON Intrinsics:: 22675 * Blackfin Built-in Functions:: 22676 * FR-V Built-in Functions:: 22677 * X86 Built-in Functions:: 22678 * MIPS DSP Built-in Functions:: 22679 * MIPS Paired-Single Support:: 22680 * PowerPC AltiVec Built-in Functions:: 22681 * SPARC VIS Built-in Functions:: 22682 * SPU Built-in Functions:: 22683 22684 22685 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 22686 22687 5.50.1 Alpha Built-in Functions 22688 ------------------------------- 22689 22690 These built-in functions are available for the Alpha family of 22691 processors, depending on the command-line switches used. 22692 22693 The following built-in functions are always available. They all 22694 generate the machine instruction that is part of the name. 22695 22696 long __builtin_alpha_implver (void) 22697 long __builtin_alpha_rpcc (void) 22698 long __builtin_alpha_amask (long) 22699 long __builtin_alpha_cmpbge (long, long) 22700 long __builtin_alpha_extbl (long, long) 22701 long __builtin_alpha_extwl (long, long) 22702 long __builtin_alpha_extll (long, long) 22703 long __builtin_alpha_extql (long, long) 22704 long __builtin_alpha_extwh (long, long) 22705 long __builtin_alpha_extlh (long, long) 22706 long __builtin_alpha_extqh (long, long) 22707 long __builtin_alpha_insbl (long, long) 22708 long __builtin_alpha_inswl (long, long) 22709 long __builtin_alpha_insll (long, long) 22710 long __builtin_alpha_insql (long, long) 22711 long __builtin_alpha_inswh (long, long) 22712 long __builtin_alpha_inslh (long, long) 22713 long __builtin_alpha_insqh (long, long) 22714 long __builtin_alpha_mskbl (long, long) 22715 long __builtin_alpha_mskwl (long, long) 22716 long __builtin_alpha_mskll (long, long) 22717 long __builtin_alpha_mskql (long, long) 22718 long __builtin_alpha_mskwh (long, long) 22719 long __builtin_alpha_msklh (long, long) 22720 long __builtin_alpha_mskqh (long, long) 22721 long __builtin_alpha_umulh (long, long) 22722 long __builtin_alpha_zap (long, long) 22723 long __builtin_alpha_zapnot (long, long) 22724 22725 The following built-in functions are always with `-mmax' or 22726 `-mcpu=CPU' where CPU is `pca56' or later. They all generate the 22727 machine instruction that is part of the name. 22728 22729 long __builtin_alpha_pklb (long) 22730 long __builtin_alpha_pkwb (long) 22731 long __builtin_alpha_unpkbl (long) 22732 long __builtin_alpha_unpkbw (long) 22733 long __builtin_alpha_minub8 (long, long) 22734 long __builtin_alpha_minsb8 (long, long) 22735 long __builtin_alpha_minuw4 (long, long) 22736 long __builtin_alpha_minsw4 (long, long) 22737 long __builtin_alpha_maxub8 (long, long) 22738 long __builtin_alpha_maxsb8 (long, long) 22739 long __builtin_alpha_maxuw4 (long, long) 22740 long __builtin_alpha_maxsw4 (long, long) 22741 long __builtin_alpha_perr (long, long) 22742 22743 The following built-in functions are always with `-mcix' or 22744 `-mcpu=CPU' where CPU is `ev67' or later. They all generate the 22745 machine instruction that is part of the name. 22746 22747 long __builtin_alpha_cttz (long) 22748 long __builtin_alpha_ctlz (long) 22749 long __builtin_alpha_ctpop (long) 22750 22751 The following builtins are available on systems that use the OSF/1 22752 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 22753 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 22754 22755 void *__builtin_thread_pointer (void) 22756 void __builtin_set_thread_pointer (void *) 22757 22758 22759 File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 22760 22761 5.50.2 ARM iWMMXt Built-in Functions 22762 ------------------------------------ 22763 22764 These built-in functions are available for the ARM family of processors 22765 when the `-mcpu=iwmmxt' switch is used: 22766 22767 typedef int v2si __attribute__ ((vector_size (8))); 22768 typedef short v4hi __attribute__ ((vector_size (8))); 22769 typedef char v8qi __attribute__ ((vector_size (8))); 22770 22771 int __builtin_arm_getwcx (int) 22772 void __builtin_arm_setwcx (int, int) 22773 int __builtin_arm_textrmsb (v8qi, int) 22774 int __builtin_arm_textrmsh (v4hi, int) 22775 int __builtin_arm_textrmsw (v2si, int) 22776 int __builtin_arm_textrmub (v8qi, int) 22777 int __builtin_arm_textrmuh (v4hi, int) 22778 int __builtin_arm_textrmuw (v2si, int) 22779 v8qi __builtin_arm_tinsrb (v8qi, int) 22780 v4hi __builtin_arm_tinsrh (v4hi, int) 22781 v2si __builtin_arm_tinsrw (v2si, int) 22782 long long __builtin_arm_tmia (long long, int, int) 22783 long long __builtin_arm_tmiabb (long long, int, int) 22784 long long __builtin_arm_tmiabt (long long, int, int) 22785 long long __builtin_arm_tmiaph (long long, int, int) 22786 long long __builtin_arm_tmiatb (long long, int, int) 22787 long long __builtin_arm_tmiatt (long long, int, int) 22788 int __builtin_arm_tmovmskb (v8qi) 22789 int __builtin_arm_tmovmskh (v4hi) 22790 int __builtin_arm_tmovmskw (v2si) 22791 long long __builtin_arm_waccb (v8qi) 22792 long long __builtin_arm_wacch (v4hi) 22793 long long __builtin_arm_waccw (v2si) 22794 v8qi __builtin_arm_waddb (v8qi, v8qi) 22795 v8qi __builtin_arm_waddbss (v8qi, v8qi) 22796 v8qi __builtin_arm_waddbus (v8qi, v8qi) 22797 v4hi __builtin_arm_waddh (v4hi, v4hi) 22798 v4hi __builtin_arm_waddhss (v4hi, v4hi) 22799 v4hi __builtin_arm_waddhus (v4hi, v4hi) 22800 v2si __builtin_arm_waddw (v2si, v2si) 22801 v2si __builtin_arm_waddwss (v2si, v2si) 22802 v2si __builtin_arm_waddwus (v2si, v2si) 22803 v8qi __builtin_arm_walign (v8qi, v8qi, int) 22804 long long __builtin_arm_wand(long long, long long) 22805 long long __builtin_arm_wandn (long long, long long) 22806 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 22807 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 22808 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 22809 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 22810 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 22811 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 22812 v2si __builtin_arm_wcmpeqw (v2si, v2si) 22813 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 22814 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 22815 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 22816 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 22817 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 22818 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 22819 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 22820 long long __builtin_arm_wmacsz (v4hi, v4hi) 22821 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 22822 long long __builtin_arm_wmacuz (v4hi, v4hi) 22823 v4hi __builtin_arm_wmadds (v4hi, v4hi) 22824 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 22825 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 22826 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 22827 v2si __builtin_arm_wmaxsw (v2si, v2si) 22828 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 22829 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 22830 v2si __builtin_arm_wmaxuw (v2si, v2si) 22831 v8qi __builtin_arm_wminsb (v8qi, v8qi) 22832 v4hi __builtin_arm_wminsh (v4hi, v4hi) 22833 v2si __builtin_arm_wminsw (v2si, v2si) 22834 v8qi __builtin_arm_wminub (v8qi, v8qi) 22835 v4hi __builtin_arm_wminuh (v4hi, v4hi) 22836 v2si __builtin_arm_wminuw (v2si, v2si) 22837 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 22838 v4hi __builtin_arm_wmulul (v4hi, v4hi) 22839 v4hi __builtin_arm_wmulum (v4hi, v4hi) 22840 long long __builtin_arm_wor (long long, long long) 22841 v2si __builtin_arm_wpackdss (long long, long long) 22842 v2si __builtin_arm_wpackdus (long long, long long) 22843 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 22844 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 22845 v4hi __builtin_arm_wpackwss (v2si, v2si) 22846 v4hi __builtin_arm_wpackwus (v2si, v2si) 22847 long long __builtin_arm_wrord (long long, long long) 22848 long long __builtin_arm_wrordi (long long, int) 22849 v4hi __builtin_arm_wrorh (v4hi, long long) 22850 v4hi __builtin_arm_wrorhi (v4hi, int) 22851 v2si __builtin_arm_wrorw (v2si, long long) 22852 v2si __builtin_arm_wrorwi (v2si, int) 22853 v2si __builtin_arm_wsadb (v8qi, v8qi) 22854 v2si __builtin_arm_wsadbz (v8qi, v8qi) 22855 v2si __builtin_arm_wsadh (v4hi, v4hi) 22856 v2si __builtin_arm_wsadhz (v4hi, v4hi) 22857 v4hi __builtin_arm_wshufh (v4hi, int) 22858 long long __builtin_arm_wslld (long long, long long) 22859 long long __builtin_arm_wslldi (long long, int) 22860 v4hi __builtin_arm_wsllh (v4hi, long long) 22861 v4hi __builtin_arm_wsllhi (v4hi, int) 22862 v2si __builtin_arm_wsllw (v2si, long long) 22863 v2si __builtin_arm_wsllwi (v2si, int) 22864 long long __builtin_arm_wsrad (long long, long long) 22865 long long __builtin_arm_wsradi (long long, int) 22866 v4hi __builtin_arm_wsrah (v4hi, long long) 22867 v4hi __builtin_arm_wsrahi (v4hi, int) 22868 v2si __builtin_arm_wsraw (v2si, long long) 22869 v2si __builtin_arm_wsrawi (v2si, int) 22870 long long __builtin_arm_wsrld (long long, long long) 22871 long long __builtin_arm_wsrldi (long long, int) 22872 v4hi __builtin_arm_wsrlh (v4hi, long long) 22873 v4hi __builtin_arm_wsrlhi (v4hi, int) 22874 v2si __builtin_arm_wsrlw (v2si, long long) 22875 v2si __builtin_arm_wsrlwi (v2si, int) 22876 v8qi __builtin_arm_wsubb (v8qi, v8qi) 22877 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 22878 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 22879 v4hi __builtin_arm_wsubh (v4hi, v4hi) 22880 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 22881 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 22882 v2si __builtin_arm_wsubw (v2si, v2si) 22883 v2si __builtin_arm_wsubwss (v2si, v2si) 22884 v2si __builtin_arm_wsubwus (v2si, v2si) 22885 v4hi __builtin_arm_wunpckehsb (v8qi) 22886 v2si __builtin_arm_wunpckehsh (v4hi) 22887 long long __builtin_arm_wunpckehsw (v2si) 22888 v4hi __builtin_arm_wunpckehub (v8qi) 22889 v2si __builtin_arm_wunpckehuh (v4hi) 22890 long long __builtin_arm_wunpckehuw (v2si) 22891 v4hi __builtin_arm_wunpckelsb (v8qi) 22892 v2si __builtin_arm_wunpckelsh (v4hi) 22893 long long __builtin_arm_wunpckelsw (v2si) 22894 v4hi __builtin_arm_wunpckelub (v8qi) 22895 v2si __builtin_arm_wunpckeluh (v4hi) 22896 long long __builtin_arm_wunpckeluw (v2si) 22897 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 22898 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 22899 v2si __builtin_arm_wunpckihw (v2si, v2si) 22900 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 22901 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 22902 v2si __builtin_arm_wunpckilw (v2si, v2si) 22903 long long __builtin_arm_wxor (long long, long long) 22904 long long __builtin_arm_wzero () 22905 22906 22907 File: gcc.info, Node: ARM NEON Intrinsics, Next: Blackfin Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 22908 22909 5.50.3 ARM NEON Intrinsics 22910 -------------------------- 22911 22912 These built-in intrinsics for the ARM Advanced SIMD extension are 22913 available when the `-mfpu=neon' switch is used: 22914 22915 5.50.3.1 Addition 22916 ................. 22917 22918 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 22919 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 22920 22921 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 22922 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 22923 22924 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 22925 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 22926 22927 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 22928 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 22929 22930 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 22931 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 22932 22933 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 22934 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 22935 22936 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 22937 _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0' 22938 22939 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 22940 _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0' 22941 22942 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 22943 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0' 22944 22945 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 22946 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 22947 22948 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 22949 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 22950 22951 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 22952 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 22953 22954 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 22955 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 22956 22957 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 22958 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 22959 22960 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 22961 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 22962 22963 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 22964 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 22965 22966 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 22967 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 22968 22969 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 22970 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0' 22971 22972 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 22973 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0' 22974 22975 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 22976 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0' 22977 22978 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 22979 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0' 22980 22981 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 22982 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0' 22983 22984 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 22985 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0' 22986 22987 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 22988 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0' 22989 22990 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 22991 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0' 22992 22993 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 22994 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0' 22995 22996 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 22997 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0' 22998 22999 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 23000 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0' 23001 23002 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 23003 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0' 23004 23005 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 23006 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0' 23007 23008 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 23009 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0' 23010 23011 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 23012 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0' 23013 23014 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 23015 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0' 23016 23017 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 23018 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0' 23019 23020 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 23021 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0' 23022 23023 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 23024 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0' 23025 23026 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 23027 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0' 23028 23029 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 23030 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0' 23031 23032 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 23033 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0' 23034 23035 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 23036 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0' 23037 23038 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 23039 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0' 23040 23041 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 23042 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0' 23043 23044 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 23045 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0' 23046 23047 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 23048 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0' 23049 23050 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 23051 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0' 23052 23053 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 23054 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0' 23055 23056 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 23057 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0' 23058 23059 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 23060 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0' 23061 23062 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 23063 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0' 23064 23065 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 23066 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0' 23067 23068 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 23069 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0' 23070 23071 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 23072 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0' 23073 23074 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 23075 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0' 23076 23077 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 23078 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0' 23079 23080 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 23081 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0' 23082 23083 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 23084 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0' 23085 23086 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 23087 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0' 23088 23089 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 23090 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0' 23091 23092 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 23093 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0' 23094 23095 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 23096 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0' 23097 23098 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 23099 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0' 23100 23101 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 23102 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0' 23103 23104 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 23105 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0' 23106 23107 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 23108 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0' 23109 23110 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 23111 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0' 23112 23113 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 23114 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0' 23115 23116 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 23117 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0' 23118 23119 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 23120 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0' 23121 23122 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 23123 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0' 23124 23125 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 23126 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0' 23127 23128 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 23129 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 23130 23131 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 23132 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 23133 23134 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 23135 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 23136 23137 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 23138 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 23139 23140 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 23141 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 23142 23143 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 23144 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 23145 23146 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 23147 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 23148 23149 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 23150 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 23151 23152 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 23153 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 23154 23155 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 23156 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 23157 23158 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 23159 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 23160 23161 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 23162 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 23163 23164 5.50.3.2 Multiplication 23165 ....................... 23166 23167 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 23168 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 23169 23170 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 23171 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 23172 23173 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 23174 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 23175 23176 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 23177 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 23178 23179 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 23180 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 23181 23182 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 23183 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 23184 23185 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 23186 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0' 23187 23188 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 23189 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0' 23190 23191 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 23192 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 23193 23194 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 23195 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 23196 23197 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 23198 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 23199 23200 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 23201 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 23202 23203 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 23204 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 23205 23206 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 23207 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 23208 23209 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 23210 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0' 23211 23212 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 23213 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0' 23214 23215 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 23216 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0' 23217 23218 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 23219 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0' 23220 23221 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 23222 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0' 23223 23224 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 23225 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0' 23226 23227 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 23228 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0' 23229 23230 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 23231 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0' 23232 23233 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 23234 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0' 23235 23236 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 23237 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0' 23238 23239 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 23240 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0' 23241 23242 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 23243 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0' 23244 23245 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 23246 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0' 23247 23248 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 23249 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0' 23250 23251 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 23252 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0' 23253 23254 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 23255 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0' 23256 23257 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 23258 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0' 23259 23260 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 23261 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0' 23262 23263 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 23264 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0' 23265 23266 5.50.3.3 Multiply-accumulate 23267 ............................ 23268 23269 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 23270 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 23271 23272 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 23273 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 23274 23275 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 23276 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 23277 23278 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 23279 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 23280 23281 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 23282 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 23283 23284 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 23285 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 23286 23287 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 23288 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0' 23289 23290 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 23291 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 23292 23293 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 23294 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 23295 23296 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 23297 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 23298 23299 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 23300 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 23301 23302 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 23303 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 23304 23305 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 23306 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 23307 23308 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 23309 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0' 23310 23311 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 23312 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0' 23313 23314 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 23315 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0' 23316 23317 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 23318 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0' 23319 23320 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 23321 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0' 23322 23323 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 23324 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0' 23325 23326 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 23327 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0' 23328 23329 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 23330 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0' 23331 23332 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 23333 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0' 23334 23335 5.50.3.4 Multiply-subtract 23336 .......................... 23337 23338 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 23339 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 23340 23341 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 23342 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 23343 23344 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 23345 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 23346 23347 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 23348 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 23349 23350 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 23351 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 23352 23353 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 23354 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 23355 23356 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 23357 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0' 23358 23359 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 23360 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 23361 23362 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 23363 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 23364 23365 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 23366 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 23367 23368 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 23369 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 23370 23371 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 23372 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 23373 23374 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 23375 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 23376 23377 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 23378 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0' 23379 23380 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 23381 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0' 23382 23383 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 23384 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0' 23385 23386 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 23387 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0' 23388 23389 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 23390 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0' 23391 23392 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 23393 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0' 23394 23395 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 23396 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0' 23397 23398 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 23399 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0' 23400 23401 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 23402 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0' 23403 23404 5.50.3.5 Subtraction 23405 .................... 23406 23407 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 23408 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 23409 23410 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 23411 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 23412 23413 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 23414 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 23415 23416 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 23417 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 23418 23419 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 23420 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 23421 23422 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 23423 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 23424 23425 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 23426 _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0' 23427 23428 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 23429 _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0' 23430 23431 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 23432 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0' 23433 23434 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 23435 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 23436 23437 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 23438 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 23439 23440 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 23441 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 23442 23443 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 23444 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 23445 23446 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 23447 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 23448 23449 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 23450 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 23451 23452 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 23453 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 23454 23455 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 23456 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 23457 23458 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 23459 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0' 23460 23461 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 23462 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0' 23463 23464 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 23465 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0' 23466 23467 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 23468 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0' 23469 23470 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 23471 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0' 23472 23473 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 23474 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0' 23475 23476 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 23477 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0' 23478 23479 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 23480 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0' 23481 23482 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 23483 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0' 23484 23485 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 23486 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0' 23487 23488 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 23489 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0' 23490 23491 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 23492 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0' 23493 23494 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 23495 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0' 23496 23497 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 23498 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0' 23499 23500 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 23501 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0' 23502 23503 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 23504 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0' 23505 23506 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 23507 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0' 23508 23509 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 23510 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0' 23511 23512 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 23513 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0' 23514 23515 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 23516 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0' 23517 23518 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 23519 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0' 23520 23521 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 23522 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0' 23523 23524 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 23525 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0' 23526 23527 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 23528 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0' 23529 23530 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 23531 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0' 23532 23533 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 23534 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0' 23535 23536 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 23537 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0' 23538 23539 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 23540 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0' 23541 23542 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 23543 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0' 23544 23545 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 23546 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0' 23547 23548 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 23549 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0' 23550 23551 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 23552 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0' 23553 23554 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 23555 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0' 23556 23557 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 23558 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0' 23559 23560 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 23561 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0' 23562 23563 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 23564 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0' 23565 23566 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 23567 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0' 23568 23569 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 23570 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0' 23571 23572 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 23573 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0' 23574 23575 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 23576 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0' 23577 23578 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 23579 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0' 23580 23581 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 23582 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 23583 23584 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 23585 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 23586 23587 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 23588 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 23589 23590 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 23591 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 23592 23593 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 23594 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 23595 23596 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 23597 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 23598 23599 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 23600 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 23601 23602 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 23603 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 23604 23605 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 23606 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 23607 23608 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 23609 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 23610 23611 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 23612 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 23613 23614 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 23615 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 23616 23617 5.50.3.6 Comparison (equal-to) 23618 .............................. 23619 23620 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 23621 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 23622 23623 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 23624 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 23625 23626 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 23627 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 23628 23629 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 23630 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 23631 23632 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 23633 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 23634 23635 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 23636 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 23637 23638 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 23639 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0' 23640 23641 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 23642 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 23643 23644 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 23645 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 23646 23647 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 23648 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 23649 23650 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 23651 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 23652 23653 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 23654 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 23655 23656 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 23657 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 23658 23659 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 23660 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 23661 23662 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 23663 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0' 23664 23665 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 23666 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 23667 23668 5.50.3.7 Comparison (greater-than-or-equal-to) 23669 .............................................. 23670 23671 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 23672 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 23673 23674 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 23675 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 23676 23677 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 23678 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 23679 23680 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 23681 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 23682 23683 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 23684 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 23685 23686 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 23687 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 23688 23689 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 23690 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 23691 23692 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 23693 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 23694 23695 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 23696 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 23697 23698 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 23699 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 23700 23701 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 23702 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 23703 23704 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 23705 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 23706 23707 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 23708 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 23709 23710 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 23711 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 23712 23713 5.50.3.8 Comparison (less-than-or-equal-to) 23714 ........................................... 23715 23716 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 23717 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 23718 23719 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 23720 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 23721 23722 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 23723 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 23724 23725 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 23726 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 23727 23728 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 23729 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 23730 23731 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 23732 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 23733 23734 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 23735 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 23736 23737 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 23738 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 23739 23740 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 23741 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 23742 23743 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 23744 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 23745 23746 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 23747 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 23748 23749 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 23750 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 23751 23752 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 23753 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 23754 23755 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 23756 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 23757 23758 5.50.3.9 Comparison (greater-than) 23759 .................................. 23760 23761 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 23762 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 23763 23764 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 23765 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 23766 23767 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 23768 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 23769 23770 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 23771 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 23772 23773 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 23774 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 23775 23776 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 23777 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 23778 23779 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 23780 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 23781 23782 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 23783 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 23784 23785 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 23786 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 23787 23788 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 23789 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 23790 23791 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 23792 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 23793 23794 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 23795 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 23796 23797 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 23798 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 23799 23800 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 23801 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 23802 23803 5.50.3.10 Comparison (less-than) 23804 ................................ 23805 23806 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 23807 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 23808 23809 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 23810 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 23811 23812 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 23813 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 23814 23815 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 23816 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 23817 23818 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 23819 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 23820 23821 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 23822 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 23823 23824 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 23825 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 23826 23827 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 23828 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 23829 23830 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 23831 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 23832 23833 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 23834 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 23835 23836 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 23837 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 23838 23839 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 23840 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 23841 23842 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 23843 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 23844 23845 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 23846 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 23847 23848 5.50.3.11 Comparison (absolute greater-than-or-equal-to) 23849 ........................................................ 23850 23851 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 23852 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 23853 23854 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 23855 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 23856 23857 5.50.3.12 Comparison (absolute less-than-or-equal-to) 23858 ..................................................... 23859 23860 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 23861 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 23862 23863 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 23864 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 23865 23866 5.50.3.13 Comparison (absolute greater-than) 23867 ............................................ 23868 23869 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 23870 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 23871 23872 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 23873 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 23874 23875 5.50.3.14 Comparison (absolute less-than) 23876 ......................................... 23877 23878 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 23879 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 23880 23881 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 23882 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 23883 23884 5.50.3.15 Test bits 23885 ................... 23886 23887 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 23888 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 23889 23890 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 23891 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 23892 23893 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 23894 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 23895 23896 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 23897 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 23898 23899 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 23900 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 23901 23902 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 23903 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 23904 23905 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 23906 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 23907 23908 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 23909 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 23910 23911 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 23912 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 23913 23914 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 23915 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 23916 23917 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 23918 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 23919 23920 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 23921 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 23922 23923 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 23924 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 23925 23926 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 23927 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 23928 23929 5.50.3.16 Absolute difference 23930 ............................. 23931 23932 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 23933 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0' 23934 23935 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 23936 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0' 23937 23938 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 23939 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0' 23940 23941 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 23942 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0' 23943 23944 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 23945 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0' 23946 23947 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 23948 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0' 23949 23950 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 23951 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0' 23952 23953 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 23954 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0' 23955 23956 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 23957 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0' 23958 23959 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 23960 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0' 23961 23962 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 23963 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0' 23964 23965 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 23966 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0' 23967 23968 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 23969 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0' 23970 23971 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 23972 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0' 23973 23974 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 23975 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0' 23976 23977 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 23978 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0' 23979 23980 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 23981 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0' 23982 23983 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 23984 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0' 23985 23986 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 23987 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0' 23988 23989 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 23990 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0' 23991 23992 5.50.3.17 Absolute difference and accumulate 23993 ............................................ 23994 23995 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 23996 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0' 23997 23998 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 23999 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0' 24000 24001 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 24002 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0' 24003 24004 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 24005 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0' 24006 24007 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 24008 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0' 24009 24010 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 24011 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0' 24012 24013 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 24014 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0' 24015 24016 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 24017 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0' 24018 24019 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 24020 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0' 24021 24022 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 24023 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0' 24024 24025 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 24026 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0' 24027 24028 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 24029 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0' 24030 24031 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 24032 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0' 24033 24034 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 24035 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0' 24036 24037 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 24038 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0' 24039 24040 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 24041 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0' 24042 24043 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 24044 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0' 24045 24046 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 24047 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0' 24048 24049 5.50.3.18 Maximum 24050 ................. 24051 24052 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 24053 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0' 24054 24055 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 24056 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0' 24057 24058 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 24059 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0' 24060 24061 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 24062 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0' 24063 24064 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 24065 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0' 24066 24067 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 24068 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0' 24069 24070 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 24071 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0' 24072 24073 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 24074 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0' 24075 24076 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 24077 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0' 24078 24079 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 24080 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0' 24081 24082 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 24083 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0' 24084 24085 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 24086 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0' 24087 24088 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 24089 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0' 24090 24091 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 24092 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0' 24093 24094 5.50.3.19 Minimum 24095 ................. 24096 24097 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 24098 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0' 24099 24100 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 24101 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0' 24102 24103 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 24104 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0' 24105 24106 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 24107 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0' 24108 24109 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 24110 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0' 24111 24112 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 24113 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0' 24114 24115 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 24116 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0' 24117 24118 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 24119 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0' 24120 24121 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 24122 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0' 24123 24124 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 24125 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0' 24126 24127 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 24128 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0' 24129 24130 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 24131 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0' 24132 24133 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 24134 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0' 24135 24136 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 24137 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0' 24138 24139 5.50.3.20 Pairwise add 24140 ...................... 24141 24142 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 24143 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 24144 24145 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 24146 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 24147 24148 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 24149 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 24150 24151 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 24152 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 24153 24154 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 24155 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 24156 24157 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 24158 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 24159 24160 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 24161 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0' 24162 24163 * uint64x1_t vpaddl_u32 (uint32x2_t) 24164 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0' 24165 24166 * uint32x2_t vpaddl_u16 (uint16x4_t) 24167 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0' 24168 24169 * uint16x4_t vpaddl_u8 (uint8x8_t) 24170 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0' 24171 24172 * int64x1_t vpaddl_s32 (int32x2_t) 24173 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0' 24174 24175 * int32x2_t vpaddl_s16 (int16x4_t) 24176 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0' 24177 24178 * int16x4_t vpaddl_s8 (int8x8_t) 24179 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0' 24180 24181 * uint64x2_t vpaddlq_u32 (uint32x4_t) 24182 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0' 24183 24184 * uint32x4_t vpaddlq_u16 (uint16x8_t) 24185 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0' 24186 24187 * uint16x8_t vpaddlq_u8 (uint8x16_t) 24188 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0' 24189 24190 * int64x2_t vpaddlq_s32 (int32x4_t) 24191 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0' 24192 24193 * int32x4_t vpaddlq_s16 (int16x8_t) 24194 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0' 24195 24196 * int16x8_t vpaddlq_s8 (int8x16_t) 24197 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0' 24198 24199 5.50.3.21 Pairwise add, single_opcode widen and accumulate 24200 .......................................................... 24201 24202 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 24203 _Form of expected instruction(s):_ `vpadal.u32 D0, D0' 24204 24205 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 24206 _Form of expected instruction(s):_ `vpadal.u16 D0, D0' 24207 24208 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 24209 _Form of expected instruction(s):_ `vpadal.u8 D0, D0' 24210 24211 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 24212 _Form of expected instruction(s):_ `vpadal.s32 D0, D0' 24213 24214 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 24215 _Form of expected instruction(s):_ `vpadal.s16 D0, D0' 24216 24217 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 24218 _Form of expected instruction(s):_ `vpadal.s8 D0, D0' 24219 24220 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 24221 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0' 24222 24223 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 24224 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0' 24225 24226 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 24227 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0' 24228 24229 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 24230 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0' 24231 24232 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 24233 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0' 24234 24235 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 24236 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0' 24237 24238 5.50.3.22 Folding maximum 24239 ......................... 24240 24241 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 24242 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0' 24243 24244 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 24245 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0' 24246 24247 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 24248 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0' 24249 24250 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 24251 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0' 24252 24253 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 24254 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0' 24255 24256 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 24257 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0' 24258 24259 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 24260 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0' 24261 24262 5.50.3.23 Folding minimum 24263 ......................... 24264 24265 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 24266 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0' 24267 24268 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 24269 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0' 24270 24271 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 24272 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0' 24273 24274 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 24275 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0' 24276 24277 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 24278 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0' 24279 24280 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 24281 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0' 24282 24283 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 24284 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0' 24285 24286 5.50.3.24 Reciprocal step 24287 ......................... 24288 24289 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 24290 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0' 24291 24292 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 24293 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0' 24294 24295 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 24296 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0' 24297 24298 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 24299 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0' 24300 24301 5.50.3.25 Vector shift left 24302 ........................... 24303 24304 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 24305 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0' 24306 24307 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 24308 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0' 24309 24310 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 24311 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0' 24312 24313 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 24314 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0' 24315 24316 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 24317 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0' 24318 24319 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 24320 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0' 24321 24322 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 24323 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0' 24324 24325 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 24326 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0' 24327 24328 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 24329 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0' 24330 24331 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 24332 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0' 24333 24334 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 24335 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0' 24336 24337 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 24338 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0' 24339 24340 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 24341 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0' 24342 24343 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 24344 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0' 24345 24346 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 24347 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0' 24348 24349 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 24350 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0' 24351 24352 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 24353 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0' 24354 24355 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 24356 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0' 24357 24358 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 24359 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0' 24360 24361 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 24362 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0' 24363 24364 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 24365 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0' 24366 24367 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 24368 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0' 24369 24370 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 24371 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0' 24372 24373 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 24374 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0' 24375 24376 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 24377 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0' 24378 24379 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 24380 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0' 24381 24382 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 24383 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0' 24384 24385 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 24386 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0' 24387 24388 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 24389 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0' 24390 24391 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 24392 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0' 24393 24394 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 24395 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0' 24396 24397 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 24398 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0' 24399 24400 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 24401 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0' 24402 24403 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 24404 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0' 24405 24406 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 24407 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0' 24408 24409 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 24410 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0' 24411 24412 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 24413 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0' 24414 24415 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 24416 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0' 24417 24418 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 24419 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0' 24420 24421 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 24422 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0' 24423 24424 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 24425 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0' 24426 24427 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 24428 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0' 24429 24430 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 24431 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0' 24432 24433 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 24434 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0' 24435 24436 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 24437 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0' 24438 24439 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 24440 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0' 24441 24442 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 24443 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0' 24444 24445 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 24446 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0' 24447 24448 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 24449 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0' 24450 24451 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 24452 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0' 24453 24454 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 24455 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0' 24456 24457 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 24458 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0' 24459 24460 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 24461 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0' 24462 24463 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 24464 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0' 24465 24466 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 24467 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0' 24468 24469 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 24470 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0' 24471 24472 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 24473 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0' 24474 24475 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 24476 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0' 24477 24478 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 24479 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0' 24480 24481 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 24482 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0' 24483 24484 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 24485 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0' 24486 24487 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 24488 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0' 24489 24490 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 24491 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0' 24492 24493 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 24494 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0' 24495 24496 5.50.3.26 Vector shift left by constant 24497 ....................................... 24498 24499 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 24500 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 24501 24502 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 24503 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 24504 24505 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 24506 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 24507 24508 * int32x2_t vshl_n_s32 (int32x2_t, const int) 24509 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 24510 24511 * int16x4_t vshl_n_s16 (int16x4_t, const int) 24512 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 24513 24514 * int8x8_t vshl_n_s8 (int8x8_t, const int) 24515 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 24516 24517 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 24518 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 24519 24520 * int64x1_t vshl_n_s64 (int64x1_t, const int) 24521 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 24522 24523 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 24524 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 24525 24526 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 24527 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 24528 24529 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 24530 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 24531 24532 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 24533 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 24534 24535 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 24536 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 24537 24538 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 24539 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 24540 24541 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 24542 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 24543 24544 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 24545 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 24546 24547 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 24548 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0' 24549 24550 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 24551 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0' 24552 24553 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 24554 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0' 24555 24556 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 24557 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0' 24558 24559 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 24560 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0' 24561 24562 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 24563 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0' 24564 24565 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 24566 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0' 24567 24568 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 24569 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0' 24570 24571 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 24572 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0' 24573 24574 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 24575 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0' 24576 24577 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 24578 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0' 24579 24580 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 24581 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0' 24582 24583 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 24584 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0' 24585 24586 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 24587 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0' 24588 24589 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 24590 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0' 24591 24592 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 24593 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0' 24594 24595 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 24596 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0' 24597 24598 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 24599 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0' 24600 24601 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 24602 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0' 24603 24604 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 24605 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0' 24606 24607 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 24608 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0' 24609 24610 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 24611 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0' 24612 24613 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 24614 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0' 24615 24616 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 24617 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0' 24618 24619 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 24620 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0' 24621 24622 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 24623 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0' 24624 24625 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 24626 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0' 24627 24628 * int64x2_t vshll_n_s32 (int32x2_t, const int) 24629 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0' 24630 24631 * int32x4_t vshll_n_s16 (int16x4_t, const int) 24632 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0' 24633 24634 * int16x8_t vshll_n_s8 (int8x8_t, const int) 24635 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0' 24636 24637 5.50.3.27 Vector shift right by constant 24638 ........................................ 24639 24640 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 24641 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0' 24642 24643 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 24644 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0' 24645 24646 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 24647 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0' 24648 24649 * int32x2_t vshr_n_s32 (int32x2_t, const int) 24650 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0' 24651 24652 * int16x4_t vshr_n_s16 (int16x4_t, const int) 24653 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0' 24654 24655 * int8x8_t vshr_n_s8 (int8x8_t, const int) 24656 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0' 24657 24658 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 24659 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0' 24660 24661 * int64x1_t vshr_n_s64 (int64x1_t, const int) 24662 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0' 24663 24664 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 24665 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0' 24666 24667 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 24668 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0' 24669 24670 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 24671 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0' 24672 24673 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 24674 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0' 24675 24676 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 24677 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0' 24678 24679 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 24680 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0' 24681 24682 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 24683 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0' 24684 24685 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 24686 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0' 24687 24688 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 24689 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0' 24690 24691 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 24692 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0' 24693 24694 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 24695 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0' 24696 24697 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 24698 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0' 24699 24700 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 24701 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0' 24702 24703 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 24704 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0' 24705 24706 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 24707 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0' 24708 24709 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 24710 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0' 24711 24712 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 24713 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0' 24714 24715 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 24716 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0' 24717 24718 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 24719 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0' 24720 24721 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 24722 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0' 24723 24724 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 24725 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0' 24726 24727 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 24728 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0' 24729 24730 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 24731 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0' 24732 24733 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 24734 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0' 24735 24736 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 24737 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 24738 24739 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 24740 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 24741 24742 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 24743 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 24744 24745 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 24746 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 24747 24748 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 24749 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 24750 24751 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 24752 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 24753 24754 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 24755 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 24756 24757 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 24758 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 24759 24760 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 24761 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 24762 24763 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 24764 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 24765 24766 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 24767 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 24768 24769 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 24770 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 24771 24772 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 24773 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0' 24774 24775 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 24776 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0' 24777 24778 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 24779 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0' 24780 24781 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 24782 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0' 24783 24784 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 24785 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0' 24786 24787 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 24788 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0' 24789 24790 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 24791 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0' 24792 24793 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 24794 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0' 24795 24796 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 24797 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0' 24798 24799 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 24800 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0' 24801 24802 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 24803 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0' 24804 24805 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 24806 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0' 24807 24808 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 24809 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0' 24810 24811 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 24812 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0' 24813 24814 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 24815 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0' 24816 24817 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 24818 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0' 24819 24820 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 24821 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0' 24822 24823 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 24824 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0' 24825 24826 5.50.3.28 Vector shift right by constant and accumulate 24827 ....................................................... 24828 24829 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 24830 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0' 24831 24832 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 24833 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0' 24834 24835 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 24836 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0' 24837 24838 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 24839 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0' 24840 24841 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 24842 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0' 24843 24844 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 24845 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0' 24846 24847 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 24848 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0' 24849 24850 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 24851 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0' 24852 24853 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 24854 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0' 24855 24856 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 24857 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0' 24858 24859 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 24860 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0' 24861 24862 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 24863 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0' 24864 24865 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 24866 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0' 24867 24868 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 24869 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0' 24870 24871 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 24872 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0' 24873 24874 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 24875 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0' 24876 24877 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 24878 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0' 24879 24880 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 24881 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0' 24882 24883 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 24884 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0' 24885 24886 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 24887 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0' 24888 24889 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 24890 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0' 24891 24892 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 24893 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0' 24894 24895 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 24896 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0' 24897 24898 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 24899 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0' 24900 24901 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 24902 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0' 24903 24904 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 24905 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0' 24906 24907 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 24908 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0' 24909 24910 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 24911 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0' 24912 24913 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 24914 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0' 24915 24916 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 24917 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0' 24918 24919 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 24920 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0' 24921 24922 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 24923 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0' 24924 24925 5.50.3.29 Vector shift right and insert 24926 ....................................... 24927 24928 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 24929 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 24930 24931 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 24932 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 24933 24934 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 24935 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 24936 24937 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 24938 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 24939 24940 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 24941 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 24942 24943 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 24944 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 24945 24946 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 24947 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 24948 24949 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 24950 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 24951 24952 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 24953 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 24954 24955 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 24956 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 24957 24958 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 24959 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 24960 24961 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 24962 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 24963 24964 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 24965 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 24966 24967 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 24968 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 24969 24970 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 24971 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 24972 24973 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 24974 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 24975 24976 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 24977 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 24978 24979 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 24980 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 24981 24982 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 24983 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 24984 24985 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 24986 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 24987 24988 5.50.3.30 Vector shift left and insert 24989 ...................................... 24990 24991 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 24992 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 24993 24994 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 24995 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 24996 24997 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 24998 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 24999 25000 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 25001 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 25002 25003 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 25004 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 25005 25006 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 25007 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 25008 25009 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 25010 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 25011 25012 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 25013 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 25014 25015 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 25016 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 25017 25018 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 25019 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 25020 25021 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 25022 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 25023 25024 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 25025 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 25026 25027 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 25028 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 25029 25030 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 25031 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 25032 25033 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 25034 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 25035 25036 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 25037 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 25038 25039 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 25040 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 25041 25042 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 25043 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 25044 25045 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 25046 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 25047 25048 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 25049 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 25050 25051 5.50.3.31 Absolute value 25052 ........................ 25053 25054 * float32x2_t vabs_f32 (float32x2_t) 25055 _Form of expected instruction(s):_ `vabs.f32 D0, D0' 25056 25057 * int32x2_t vabs_s32 (int32x2_t) 25058 _Form of expected instruction(s):_ `vabs.s32 D0, D0' 25059 25060 * int16x4_t vabs_s16 (int16x4_t) 25061 _Form of expected instruction(s):_ `vabs.s16 D0, D0' 25062 25063 * int8x8_t vabs_s8 (int8x8_t) 25064 _Form of expected instruction(s):_ `vabs.s8 D0, D0' 25065 25066 * float32x4_t vabsq_f32 (float32x4_t) 25067 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0' 25068 25069 * int32x4_t vabsq_s32 (int32x4_t) 25070 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0' 25071 25072 * int16x8_t vabsq_s16 (int16x8_t) 25073 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0' 25074 25075 * int8x16_t vabsq_s8 (int8x16_t) 25076 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0' 25077 25078 * int32x2_t vqabs_s32 (int32x2_t) 25079 _Form of expected instruction(s):_ `vqabs.s32 D0, D0' 25080 25081 * int16x4_t vqabs_s16 (int16x4_t) 25082 _Form of expected instruction(s):_ `vqabs.s16 D0, D0' 25083 25084 * int8x8_t vqabs_s8 (int8x8_t) 25085 _Form of expected instruction(s):_ `vqabs.s8 D0, D0' 25086 25087 * int32x4_t vqabsq_s32 (int32x4_t) 25088 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0' 25089 25090 * int16x8_t vqabsq_s16 (int16x8_t) 25091 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0' 25092 25093 * int8x16_t vqabsq_s8 (int8x16_t) 25094 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0' 25095 25096 5.50.3.32 Negation 25097 .................. 25098 25099 * float32x2_t vneg_f32 (float32x2_t) 25100 _Form of expected instruction(s):_ `vneg.f32 D0, D0' 25101 25102 * int32x2_t vneg_s32 (int32x2_t) 25103 _Form of expected instruction(s):_ `vneg.s32 D0, D0' 25104 25105 * int16x4_t vneg_s16 (int16x4_t) 25106 _Form of expected instruction(s):_ `vneg.s16 D0, D0' 25107 25108 * int8x8_t vneg_s8 (int8x8_t) 25109 _Form of expected instruction(s):_ `vneg.s8 D0, D0' 25110 25111 * float32x4_t vnegq_f32 (float32x4_t) 25112 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0' 25113 25114 * int32x4_t vnegq_s32 (int32x4_t) 25115 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0' 25116 25117 * int16x8_t vnegq_s16 (int16x8_t) 25118 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0' 25119 25120 * int8x16_t vnegq_s8 (int8x16_t) 25121 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0' 25122 25123 * int32x2_t vqneg_s32 (int32x2_t) 25124 _Form of expected instruction(s):_ `vqneg.s32 D0, D0' 25125 25126 * int16x4_t vqneg_s16 (int16x4_t) 25127 _Form of expected instruction(s):_ `vqneg.s16 D0, D0' 25128 25129 * int8x8_t vqneg_s8 (int8x8_t) 25130 _Form of expected instruction(s):_ `vqneg.s8 D0, D0' 25131 25132 * int32x4_t vqnegq_s32 (int32x4_t) 25133 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0' 25134 25135 * int16x8_t vqnegq_s16 (int16x8_t) 25136 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0' 25137 25138 * int8x16_t vqnegq_s8 (int8x16_t) 25139 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0' 25140 25141 5.50.3.33 Bitwise not 25142 ..................... 25143 25144 * uint32x2_t vmvn_u32 (uint32x2_t) 25145 _Form of expected instruction(s):_ `vmvn D0, D0' 25146 25147 * uint16x4_t vmvn_u16 (uint16x4_t) 25148 _Form of expected instruction(s):_ `vmvn D0, D0' 25149 25150 * uint8x8_t vmvn_u8 (uint8x8_t) 25151 _Form of expected instruction(s):_ `vmvn D0, D0' 25152 25153 * int32x2_t vmvn_s32 (int32x2_t) 25154 _Form of expected instruction(s):_ `vmvn D0, D0' 25155 25156 * int16x4_t vmvn_s16 (int16x4_t) 25157 _Form of expected instruction(s):_ `vmvn D0, D0' 25158 25159 * int8x8_t vmvn_s8 (int8x8_t) 25160 _Form of expected instruction(s):_ `vmvn D0, D0' 25161 25162 * poly8x8_t vmvn_p8 (poly8x8_t) 25163 _Form of expected instruction(s):_ `vmvn D0, D0' 25164 25165 * uint32x4_t vmvnq_u32 (uint32x4_t) 25166 _Form of expected instruction(s):_ `vmvn Q0, Q0' 25167 25168 * uint16x8_t vmvnq_u16 (uint16x8_t) 25169 _Form of expected instruction(s):_ `vmvn Q0, Q0' 25170 25171 * uint8x16_t vmvnq_u8 (uint8x16_t) 25172 _Form of expected instruction(s):_ `vmvn Q0, Q0' 25173 25174 * int32x4_t vmvnq_s32 (int32x4_t) 25175 _Form of expected instruction(s):_ `vmvn Q0, Q0' 25176 25177 * int16x8_t vmvnq_s16 (int16x8_t) 25178 _Form of expected instruction(s):_ `vmvn Q0, Q0' 25179 25180 * int8x16_t vmvnq_s8 (int8x16_t) 25181 _Form of expected instruction(s):_ `vmvn Q0, Q0' 25182 25183 * poly8x16_t vmvnq_p8 (poly8x16_t) 25184 _Form of expected instruction(s):_ `vmvn Q0, Q0' 25185 25186 5.50.3.34 Count leading sign bits 25187 ................................. 25188 25189 * int32x2_t vcls_s32 (int32x2_t) 25190 _Form of expected instruction(s):_ `vcls.s32 D0, D0' 25191 25192 * int16x4_t vcls_s16 (int16x4_t) 25193 _Form of expected instruction(s):_ `vcls.s16 D0, D0' 25194 25195 * int8x8_t vcls_s8 (int8x8_t) 25196 _Form of expected instruction(s):_ `vcls.s8 D0, D0' 25197 25198 * int32x4_t vclsq_s32 (int32x4_t) 25199 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0' 25200 25201 * int16x8_t vclsq_s16 (int16x8_t) 25202 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0' 25203 25204 * int8x16_t vclsq_s8 (int8x16_t) 25205 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0' 25206 25207 5.50.3.35 Count leading zeros 25208 ............................. 25209 25210 * uint32x2_t vclz_u32 (uint32x2_t) 25211 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 25212 25213 * uint16x4_t vclz_u16 (uint16x4_t) 25214 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 25215 25216 * uint8x8_t vclz_u8 (uint8x8_t) 25217 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 25218 25219 * int32x2_t vclz_s32 (int32x2_t) 25220 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 25221 25222 * int16x4_t vclz_s16 (int16x4_t) 25223 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 25224 25225 * int8x8_t vclz_s8 (int8x8_t) 25226 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 25227 25228 * uint32x4_t vclzq_u32 (uint32x4_t) 25229 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 25230 25231 * uint16x8_t vclzq_u16 (uint16x8_t) 25232 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 25233 25234 * uint8x16_t vclzq_u8 (uint8x16_t) 25235 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 25236 25237 * int32x4_t vclzq_s32 (int32x4_t) 25238 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 25239 25240 * int16x8_t vclzq_s16 (int16x8_t) 25241 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 25242 25243 * int8x16_t vclzq_s8 (int8x16_t) 25244 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 25245 25246 5.50.3.36 Count number of set bits 25247 .................................. 25248 25249 * uint8x8_t vcnt_u8 (uint8x8_t) 25250 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 25251 25252 * int8x8_t vcnt_s8 (int8x8_t) 25253 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 25254 25255 * poly8x8_t vcnt_p8 (poly8x8_t) 25256 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 25257 25258 * uint8x16_t vcntq_u8 (uint8x16_t) 25259 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 25260 25261 * int8x16_t vcntq_s8 (int8x16_t) 25262 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 25263 25264 * poly8x16_t vcntq_p8 (poly8x16_t) 25265 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 25266 25267 5.50.3.37 Reciprocal estimate 25268 ............................. 25269 25270 * float32x2_t vrecpe_f32 (float32x2_t) 25271 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0' 25272 25273 * uint32x2_t vrecpe_u32 (uint32x2_t) 25274 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0' 25275 25276 * float32x4_t vrecpeq_f32 (float32x4_t) 25277 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0' 25278 25279 * uint32x4_t vrecpeq_u32 (uint32x4_t) 25280 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0' 25281 25282 5.50.3.38 Reciprocal square-root estimate 25283 ......................................... 25284 25285 * float32x2_t vrsqrte_f32 (float32x2_t) 25286 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0' 25287 25288 * uint32x2_t vrsqrte_u32 (uint32x2_t) 25289 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0' 25290 25291 * float32x4_t vrsqrteq_f32 (float32x4_t) 25292 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0' 25293 25294 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 25295 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0' 25296 25297 5.50.3.39 Get lanes from a vector 25298 ................................. 25299 25300 * uint32_t vget_lane_u32 (uint32x2_t, const int) 25301 _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]' 25302 25303 * uint16_t vget_lane_u16 (uint16x4_t, const int) 25304 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 25305 25306 * uint8_t vget_lane_u8 (uint8x8_t, const int) 25307 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 25308 25309 * int32_t vget_lane_s32 (int32x2_t, const int) 25310 _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]' 25311 25312 * int16_t vget_lane_s16 (int16x4_t, const int) 25313 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 25314 25315 * int8_t vget_lane_s8 (int8x8_t, const int) 25316 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 25317 25318 * float32_t vget_lane_f32 (float32x2_t, const int) 25319 _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]' 25320 25321 * poly16_t vget_lane_p16 (poly16x4_t, const int) 25322 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 25323 25324 * poly8_t vget_lane_p8 (poly8x8_t, const int) 25325 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 25326 25327 * uint64_t vget_lane_u64 (uint64x1_t, const int) 25328 _Form of expected instruction(s):_ `vmov R0, R0, D0' 25329 25330 * int64_t vget_lane_s64 (int64x1_t, const int) 25331 _Form of expected instruction(s):_ `vmov R0, R0, D0' 25332 25333 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 25334 _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]' 25335 25336 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 25337 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 25338 25339 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 25340 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 25341 25342 * int32_t vgetq_lane_s32 (int32x4_t, const int) 25343 _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]' 25344 25345 * int16_t vgetq_lane_s16 (int16x8_t, const int) 25346 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 25347 25348 * int8_t vgetq_lane_s8 (int8x16_t, const int) 25349 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 25350 25351 * float32_t vgetq_lane_f32 (float32x4_t, const int) 25352 _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]' 25353 25354 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 25355 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 25356 25357 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 25358 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 25359 25360 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 25361 _Form of expected instruction(s):_ `vmov R0, R0, D0' 25362 25363 * int64_t vgetq_lane_s64 (int64x2_t, const int) 25364 _Form of expected instruction(s):_ `vmov R0, R0, D0' 25365 25366 5.50.3.40 Set lanes in a vector 25367 ............................... 25368 25369 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 25370 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 25371 25372 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 25373 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 25374 25375 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 25376 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 25377 25378 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 25379 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 25380 25381 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 25382 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 25383 25384 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 25385 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 25386 25387 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 25388 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 25389 25390 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 25391 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 25392 25393 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 25394 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 25395 25396 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 25397 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25398 25399 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 25400 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25401 25402 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 25403 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 25404 25405 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 25406 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 25407 25408 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 25409 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 25410 25411 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 25412 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 25413 25414 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 25415 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 25416 25417 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 25418 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 25419 25420 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 25421 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 25422 25423 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 25424 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 25425 25426 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 25427 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 25428 25429 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 25430 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25431 25432 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 25433 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25434 25435 5.50.3.41 Create vector from literal bit pattern 25436 ................................................ 25437 25438 * uint32x2_t vcreate_u32 (uint64_t) 25439 25440 * uint16x4_t vcreate_u16 (uint64_t) 25441 25442 * uint8x8_t vcreate_u8 (uint64_t) 25443 25444 * int32x2_t vcreate_s32 (uint64_t) 25445 25446 * int16x4_t vcreate_s16 (uint64_t) 25447 25448 * int8x8_t vcreate_s8 (uint64_t) 25449 25450 * uint64x1_t vcreate_u64 (uint64_t) 25451 25452 * int64x1_t vcreate_s64 (uint64_t) 25453 25454 * float32x2_t vcreate_f32 (uint64_t) 25455 25456 * poly16x4_t vcreate_p16 (uint64_t) 25457 25458 * poly8x8_t vcreate_p8 (uint64_t) 25459 25460 5.50.3.42 Set all lanes to the same value 25461 ......................................... 25462 25463 * uint32x2_t vdup_n_u32 (uint32_t) 25464 _Form of expected instruction(s):_ `vdup.32 D0, R0' 25465 25466 * uint16x4_t vdup_n_u16 (uint16_t) 25467 _Form of expected instruction(s):_ `vdup.16 D0, R0' 25468 25469 * uint8x8_t vdup_n_u8 (uint8_t) 25470 _Form of expected instruction(s):_ `vdup.8 D0, R0' 25471 25472 * int32x2_t vdup_n_s32 (int32_t) 25473 _Form of expected instruction(s):_ `vdup.32 D0, R0' 25474 25475 * int16x4_t vdup_n_s16 (int16_t) 25476 _Form of expected instruction(s):_ `vdup.16 D0, R0' 25477 25478 * int8x8_t vdup_n_s8 (int8_t) 25479 _Form of expected instruction(s):_ `vdup.8 D0, R0' 25480 25481 * float32x2_t vdup_n_f32 (float32_t) 25482 _Form of expected instruction(s):_ `vdup.32 D0, R0' 25483 25484 * poly16x4_t vdup_n_p16 (poly16_t) 25485 _Form of expected instruction(s):_ `vdup.16 D0, R0' 25486 25487 * poly8x8_t vdup_n_p8 (poly8_t) 25488 _Form of expected instruction(s):_ `vdup.8 D0, R0' 25489 25490 * uint64x1_t vdup_n_u64 (uint64_t) 25491 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25492 25493 * int64x1_t vdup_n_s64 (int64_t) 25494 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25495 25496 * uint32x4_t vdupq_n_u32 (uint32_t) 25497 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 25498 25499 * uint16x8_t vdupq_n_u16 (uint16_t) 25500 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 25501 25502 * uint8x16_t vdupq_n_u8 (uint8_t) 25503 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 25504 25505 * int32x4_t vdupq_n_s32 (int32_t) 25506 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 25507 25508 * int16x8_t vdupq_n_s16 (int16_t) 25509 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 25510 25511 * int8x16_t vdupq_n_s8 (int8_t) 25512 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 25513 25514 * float32x4_t vdupq_n_f32 (float32_t) 25515 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 25516 25517 * poly16x8_t vdupq_n_p16 (poly16_t) 25518 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 25519 25520 * poly8x16_t vdupq_n_p8 (poly8_t) 25521 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 25522 25523 * uint64x2_t vdupq_n_u64 (uint64_t) 25524 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25525 25526 * int64x2_t vdupq_n_s64 (int64_t) 25527 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25528 25529 * uint32x2_t vmov_n_u32 (uint32_t) 25530 _Form of expected instruction(s):_ `vdup.32 D0, R0' 25531 25532 * uint16x4_t vmov_n_u16 (uint16_t) 25533 _Form of expected instruction(s):_ `vdup.16 D0, R0' 25534 25535 * uint8x8_t vmov_n_u8 (uint8_t) 25536 _Form of expected instruction(s):_ `vdup.8 D0, R0' 25537 25538 * int32x2_t vmov_n_s32 (int32_t) 25539 _Form of expected instruction(s):_ `vdup.32 D0, R0' 25540 25541 * int16x4_t vmov_n_s16 (int16_t) 25542 _Form of expected instruction(s):_ `vdup.16 D0, R0' 25543 25544 * int8x8_t vmov_n_s8 (int8_t) 25545 _Form of expected instruction(s):_ `vdup.8 D0, R0' 25546 25547 * float32x2_t vmov_n_f32 (float32_t) 25548 _Form of expected instruction(s):_ `vdup.32 D0, R0' 25549 25550 * poly16x4_t vmov_n_p16 (poly16_t) 25551 _Form of expected instruction(s):_ `vdup.16 D0, R0' 25552 25553 * poly8x8_t vmov_n_p8 (poly8_t) 25554 _Form of expected instruction(s):_ `vdup.8 D0, R0' 25555 25556 * uint64x1_t vmov_n_u64 (uint64_t) 25557 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25558 25559 * int64x1_t vmov_n_s64 (int64_t) 25560 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25561 25562 * uint32x4_t vmovq_n_u32 (uint32_t) 25563 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 25564 25565 * uint16x8_t vmovq_n_u16 (uint16_t) 25566 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 25567 25568 * uint8x16_t vmovq_n_u8 (uint8_t) 25569 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 25570 25571 * int32x4_t vmovq_n_s32 (int32_t) 25572 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 25573 25574 * int16x8_t vmovq_n_s16 (int16_t) 25575 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 25576 25577 * int8x16_t vmovq_n_s8 (int8_t) 25578 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 25579 25580 * float32x4_t vmovq_n_f32 (float32_t) 25581 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 25582 25583 * poly16x8_t vmovq_n_p16 (poly16_t) 25584 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 25585 25586 * poly8x16_t vmovq_n_p8 (poly8_t) 25587 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 25588 25589 * uint64x2_t vmovq_n_u64 (uint64_t) 25590 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25591 25592 * int64x2_t vmovq_n_s64 (int64_t) 25593 _Form of expected instruction(s):_ `vmov D0, R0, R0' 25594 25595 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 25596 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 25597 25598 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 25599 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 25600 25601 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 25602 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 25603 25604 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 25605 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 25606 25607 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 25608 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 25609 25610 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 25611 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 25612 25613 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 25614 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 25615 25616 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 25617 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 25618 25619 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 25620 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 25621 25622 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 25623 25624 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 25625 25626 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 25627 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 25628 25629 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 25630 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 25631 25632 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 25633 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 25634 25635 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 25636 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 25637 25638 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 25639 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 25640 25641 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 25642 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 25643 25644 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 25645 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 25646 25647 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 25648 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 25649 25650 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 25651 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 25652 25653 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 25654 25655 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 25656 25657 5.50.3.43 Combining vectors 25658 ........................... 25659 25660 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 25661 25662 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 25663 25664 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 25665 25666 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 25667 25668 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 25669 25670 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 25671 25672 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 25673 25674 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 25675 25676 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 25677 25678 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 25679 25680 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 25681 25682 5.50.3.44 Splitting vectors 25683 ........................... 25684 25685 * uint32x2_t vget_high_u32 (uint32x4_t) 25686 25687 * uint16x4_t vget_high_u16 (uint16x8_t) 25688 25689 * uint8x8_t vget_high_u8 (uint8x16_t) 25690 25691 * int32x2_t vget_high_s32 (int32x4_t) 25692 25693 * int16x4_t vget_high_s16 (int16x8_t) 25694 25695 * int8x8_t vget_high_s8 (int8x16_t) 25696 25697 * uint64x1_t vget_high_u64 (uint64x2_t) 25698 25699 * int64x1_t vget_high_s64 (int64x2_t) 25700 25701 * float32x2_t vget_high_f32 (float32x4_t) 25702 25703 * poly16x4_t vget_high_p16 (poly16x8_t) 25704 25705 * poly8x8_t vget_high_p8 (poly8x16_t) 25706 25707 * uint32x2_t vget_low_u32 (uint32x4_t) 25708 _Form of expected instruction(s):_ `vmov D0, D0' 25709 25710 * uint16x4_t vget_low_u16 (uint16x8_t) 25711 _Form of expected instruction(s):_ `vmov D0, D0' 25712 25713 * uint8x8_t vget_low_u8 (uint8x16_t) 25714 _Form of expected instruction(s):_ `vmov D0, D0' 25715 25716 * int32x2_t vget_low_s32 (int32x4_t) 25717 _Form of expected instruction(s):_ `vmov D0, D0' 25718 25719 * int16x4_t vget_low_s16 (int16x8_t) 25720 _Form of expected instruction(s):_ `vmov D0, D0' 25721 25722 * int8x8_t vget_low_s8 (int8x16_t) 25723 _Form of expected instruction(s):_ `vmov D0, D0' 25724 25725 * uint64x1_t vget_low_u64 (uint64x2_t) 25726 _Form of expected instruction(s):_ `vmov D0, D0' 25727 25728 * int64x1_t vget_low_s64 (int64x2_t) 25729 _Form of expected instruction(s):_ `vmov D0, D0' 25730 25731 * float32x2_t vget_low_f32 (float32x4_t) 25732 _Form of expected instruction(s):_ `vmov D0, D0' 25733 25734 * poly16x4_t vget_low_p16 (poly16x8_t) 25735 _Form of expected instruction(s):_ `vmov D0, D0' 25736 25737 * poly8x8_t vget_low_p8 (poly8x16_t) 25738 _Form of expected instruction(s):_ `vmov D0, D0' 25739 25740 5.50.3.45 Conversions 25741 ..................... 25742 25743 * float32x2_t vcvt_f32_u32 (uint32x2_t) 25744 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0' 25745 25746 * float32x2_t vcvt_f32_s32 (int32x2_t) 25747 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0' 25748 25749 * uint32x2_t vcvt_u32_f32 (float32x2_t) 25750 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0' 25751 25752 * int32x2_t vcvt_s32_f32 (float32x2_t) 25753 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0' 25754 25755 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 25756 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0' 25757 25758 * float32x4_t vcvtq_f32_s32 (int32x4_t) 25759 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0' 25760 25761 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 25762 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0' 25763 25764 * int32x4_t vcvtq_s32_f32 (float32x4_t) 25765 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0' 25766 25767 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 25768 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0' 25769 25770 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 25771 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0' 25772 25773 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 25774 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0' 25775 25776 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 25777 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0' 25778 25779 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 25780 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0' 25781 25782 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 25783 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0' 25784 25785 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 25786 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0' 25787 25788 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 25789 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0' 25790 25791 5.50.3.46 Move, single_opcode narrowing 25792 ....................................... 25793 25794 * uint32x2_t vmovn_u64 (uint64x2_t) 25795 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 25796 25797 * uint16x4_t vmovn_u32 (uint32x4_t) 25798 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 25799 25800 * uint8x8_t vmovn_u16 (uint16x8_t) 25801 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 25802 25803 * int32x2_t vmovn_s64 (int64x2_t) 25804 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 25805 25806 * int16x4_t vmovn_s32 (int32x4_t) 25807 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 25808 25809 * int8x8_t vmovn_s16 (int16x8_t) 25810 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 25811 25812 * uint32x2_t vqmovn_u64 (uint64x2_t) 25813 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0' 25814 25815 * uint16x4_t vqmovn_u32 (uint32x4_t) 25816 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0' 25817 25818 * uint8x8_t vqmovn_u16 (uint16x8_t) 25819 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0' 25820 25821 * int32x2_t vqmovn_s64 (int64x2_t) 25822 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0' 25823 25824 * int16x4_t vqmovn_s32 (int32x4_t) 25825 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0' 25826 25827 * int8x8_t vqmovn_s16 (int16x8_t) 25828 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0' 25829 25830 * uint32x2_t vqmovun_s64 (int64x2_t) 25831 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0' 25832 25833 * uint16x4_t vqmovun_s32 (int32x4_t) 25834 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0' 25835 25836 * uint8x8_t vqmovun_s16 (int16x8_t) 25837 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0' 25838 25839 5.50.3.47 Move, single_opcode long 25840 .................................. 25841 25842 * uint64x2_t vmovl_u32 (uint32x2_t) 25843 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0' 25844 25845 * uint32x4_t vmovl_u16 (uint16x4_t) 25846 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0' 25847 25848 * uint16x8_t vmovl_u8 (uint8x8_t) 25849 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0' 25850 25851 * int64x2_t vmovl_s32 (int32x2_t) 25852 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0' 25853 25854 * int32x4_t vmovl_s16 (int16x4_t) 25855 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0' 25856 25857 * int16x8_t vmovl_s8 (int8x8_t) 25858 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0' 25859 25860 5.50.3.48 Table lookup 25861 ...................... 25862 25863 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 25864 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 25865 25866 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 25867 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 25868 25869 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 25870 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 25871 25872 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 25873 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 25874 25875 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 25876 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 25877 25878 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 25879 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 25880 25881 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 25882 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 25883 25884 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 25885 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 25886 25887 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 25888 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 25889 25890 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 25891 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 25892 D0' 25893 25894 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 25895 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 25896 D0' 25897 25898 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 25899 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 25900 D0' 25901 25902 5.50.3.49 Extended table lookup 25903 ............................... 25904 25905 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 25906 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 25907 25908 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 25909 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 25910 25911 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 25912 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 25913 25914 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 25915 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 25916 25917 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 25918 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 25919 25920 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 25921 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 25922 25923 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 25924 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 25925 25926 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 25927 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 25928 25929 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 25930 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 25931 25932 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 25933 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 25934 D0' 25935 25936 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 25937 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 25938 D0' 25939 25940 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 25941 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 25942 D0' 25943 25944 5.50.3.50 Multiply, lane 25945 ........................ 25946 25947 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 25948 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 25949 25950 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 25951 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 25952 25953 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 25954 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 25955 25956 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 25957 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 25958 25959 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 25960 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 25961 25962 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 25963 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 25964 25965 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 25966 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 25967 25968 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 25969 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 25970 25971 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 25972 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 25973 25974 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 25975 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 25976 25977 5.50.3.51 Long multiply, lane 25978 ............................. 25979 25980 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 25981 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 25982 25983 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 25984 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 25985 25986 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 25987 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 25988 25989 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 25990 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 25991 25992 5.50.3.52 Saturating doubling long multiply, lane 25993 ................................................. 25994 25995 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 25996 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 25997 25998 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 25999 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 26000 26001 5.50.3.53 Saturating doubling multiply high, lane 26002 ................................................. 26003 26004 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 26005 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 26006 26007 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 26008 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 26009 26010 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 26011 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 26012 26013 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 26014 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 26015 26016 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 26017 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 26018 26019 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 26020 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 26021 26022 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 26023 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 26024 26025 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 26026 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 26027 26028 5.50.3.54 Multiply-accumulate, lane 26029 ................................... 26030 26031 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 26032 const int) 26033 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 26034 26035 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 26036 const int) 26037 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 26038 26039 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 26040 const int) 26041 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 26042 26043 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 26044 int) 26045 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 26046 26047 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 26048 int) 26049 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 26050 26051 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 26052 const int) 26053 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 26054 26055 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 26056 const int) 26057 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 26058 26059 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 26060 const int) 26061 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 26062 26063 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 26064 int) 26065 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 26066 26067 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 26068 int) 26069 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 26070 26071 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 26072 const int) 26073 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 26074 26075 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 26076 const int) 26077 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 26078 26079 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 26080 int) 26081 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 26082 26083 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 26084 int) 26085 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 26086 26087 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 26088 int) 26089 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 26090 26091 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 26092 int) 26093 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 26094 26095 5.50.3.55 Multiply-subtract, lane 26096 ................................. 26097 26098 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 26099 const int) 26100 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 26101 26102 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 26103 const int) 26104 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 26105 26106 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 26107 const int) 26108 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 26109 26110 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 26111 int) 26112 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 26113 26114 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 26115 int) 26116 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 26117 26118 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 26119 const int) 26120 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 26121 26122 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 26123 const int) 26124 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 26125 26126 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 26127 const int) 26128 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 26129 26130 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 26131 int) 26132 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 26133 26134 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 26135 int) 26136 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 26137 26138 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 26139 const int) 26140 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 26141 26142 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 26143 const int) 26144 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 26145 26146 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 26147 int) 26148 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 26149 26150 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 26151 int) 26152 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 26153 26154 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 26155 int) 26156 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 26157 26158 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 26159 int) 26160 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 26161 26162 5.50.3.56 Vector multiply by scalar 26163 ................................... 26164 26165 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 26166 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 26167 26168 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 26169 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 26170 26171 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 26172 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 26173 26174 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 26175 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 26176 26177 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 26178 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 26179 26180 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 26181 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 26182 26183 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 26184 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 26185 26186 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 26187 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 26188 26189 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 26190 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 26191 26192 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 26193 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 26194 26195 5.50.3.57 Vector long multiply by scalar 26196 ........................................ 26197 26198 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 26199 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 26200 26201 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 26202 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 26203 26204 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 26205 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 26206 26207 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 26208 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 26209 26210 5.50.3.58 Vector saturating doubling long multiply by scalar 26211 ............................................................ 26212 26213 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 26214 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 26215 26216 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 26217 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 26218 26219 5.50.3.59 Vector saturating doubling multiply high by scalar 26220 ............................................................ 26221 26222 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 26223 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 26224 26225 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 26226 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 26227 26228 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 26229 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 26230 26231 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 26232 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 26233 26234 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 26235 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 26236 26237 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 26238 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 26239 26240 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 26241 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 26242 26243 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 26244 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 26245 26246 5.50.3.60 Vector multiply-accumulate by scalar 26247 .............................................. 26248 26249 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 26250 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 26251 26252 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 26253 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 26254 26255 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 26256 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 26257 26258 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 26259 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 26260 26261 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 26262 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 26263 26264 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 26265 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 26266 26267 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 26268 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 26269 26270 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 26271 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 26272 26273 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 26274 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 26275 26276 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 26277 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 26278 26279 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 26280 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 26281 26282 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 26283 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 26284 26285 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 26286 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 26287 26288 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 26289 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 26290 26291 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 26292 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 26293 26294 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 26295 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 26296 26297 5.50.3.61 Vector multiply-subtract by scalar 26298 ............................................ 26299 26300 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 26301 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 26302 26303 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 26304 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 26305 26306 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 26307 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 26308 26309 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 26310 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 26311 26312 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 26313 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 26314 26315 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 26316 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 26317 26318 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 26319 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 26320 26321 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 26322 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 26323 26324 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 26325 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 26326 26327 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 26328 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 26329 26330 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 26331 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 26332 26333 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 26334 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 26335 26336 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 26337 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 26338 26339 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 26340 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 26341 26342 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 26343 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 26344 26345 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 26346 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 26347 26348 5.50.3.62 Vector extract 26349 ........................ 26350 26351 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 26352 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 26353 26354 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 26355 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 26356 26357 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 26358 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 26359 26360 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 26361 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 26362 26363 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 26364 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 26365 26366 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 26367 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 26368 26369 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 26370 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 26371 26372 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 26373 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 26374 26375 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 26376 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 26377 26378 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 26379 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 26380 26381 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 26382 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 26383 26384 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 26385 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 26386 26387 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 26388 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 26389 26390 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 26391 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 26392 26393 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 26394 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 26395 26396 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 26397 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 26398 26399 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 26400 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 26401 26402 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 26403 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 26404 26405 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 26406 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 26407 26408 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 26409 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 26410 26411 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 26412 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 26413 26414 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 26415 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 26416 26417 5.50.3.63 Reverse elements 26418 .......................... 26419 26420 * uint32x2_t vrev64_u32 (uint32x2_t) 26421 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 26422 26423 * uint16x4_t vrev64_u16 (uint16x4_t) 26424 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 26425 26426 * uint8x8_t vrev64_u8 (uint8x8_t) 26427 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 26428 26429 * int32x2_t vrev64_s32 (int32x2_t) 26430 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 26431 26432 * int16x4_t vrev64_s16 (int16x4_t) 26433 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 26434 26435 * int8x8_t vrev64_s8 (int8x8_t) 26436 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 26437 26438 * float32x2_t vrev64_f32 (float32x2_t) 26439 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 26440 26441 * poly16x4_t vrev64_p16 (poly16x4_t) 26442 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 26443 26444 * poly8x8_t vrev64_p8 (poly8x8_t) 26445 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 26446 26447 * uint32x4_t vrev64q_u32 (uint32x4_t) 26448 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 26449 26450 * uint16x8_t vrev64q_u16 (uint16x8_t) 26451 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 26452 26453 * uint8x16_t vrev64q_u8 (uint8x16_t) 26454 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 26455 26456 * int32x4_t vrev64q_s32 (int32x4_t) 26457 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 26458 26459 * int16x8_t vrev64q_s16 (int16x8_t) 26460 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 26461 26462 * int8x16_t vrev64q_s8 (int8x16_t) 26463 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 26464 26465 * float32x4_t vrev64q_f32 (float32x4_t) 26466 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 26467 26468 * poly16x8_t vrev64q_p16 (poly16x8_t) 26469 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 26470 26471 * poly8x16_t vrev64q_p8 (poly8x16_t) 26472 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 26473 26474 * uint16x4_t vrev32_u16 (uint16x4_t) 26475 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 26476 26477 * int16x4_t vrev32_s16 (int16x4_t) 26478 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 26479 26480 * uint8x8_t vrev32_u8 (uint8x8_t) 26481 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 26482 26483 * int8x8_t vrev32_s8 (int8x8_t) 26484 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 26485 26486 * poly16x4_t vrev32_p16 (poly16x4_t) 26487 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 26488 26489 * poly8x8_t vrev32_p8 (poly8x8_t) 26490 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 26491 26492 * uint16x8_t vrev32q_u16 (uint16x8_t) 26493 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 26494 26495 * int16x8_t vrev32q_s16 (int16x8_t) 26496 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 26497 26498 * uint8x16_t vrev32q_u8 (uint8x16_t) 26499 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 26500 26501 * int8x16_t vrev32q_s8 (int8x16_t) 26502 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 26503 26504 * poly16x8_t vrev32q_p16 (poly16x8_t) 26505 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 26506 26507 * poly8x16_t vrev32q_p8 (poly8x16_t) 26508 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 26509 26510 * uint8x8_t vrev16_u8 (uint8x8_t) 26511 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 26512 26513 * int8x8_t vrev16_s8 (int8x8_t) 26514 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 26515 26516 * poly8x8_t vrev16_p8 (poly8x8_t) 26517 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 26518 26519 * uint8x16_t vrev16q_u8 (uint8x16_t) 26520 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 26521 26522 * int8x16_t vrev16q_s8 (int8x16_t) 26523 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 26524 26525 * poly8x16_t vrev16q_p8 (poly8x16_t) 26526 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 26527 26528 5.50.3.64 Bit selection 26529 ....................... 26530 26531 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 26532 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26533 D0, D0, D0' _or_ `vbif D0, D0, D0' 26534 26535 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 26536 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26537 D0, D0, D0' _or_ `vbif D0, D0, D0' 26538 26539 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 26540 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26541 D0, D0, D0' _or_ `vbif D0, D0, D0' 26542 26543 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 26544 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26545 D0, D0, D0' _or_ `vbif D0, D0, D0' 26546 26547 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 26548 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26549 D0, D0, D0' _or_ `vbif D0, D0, D0' 26550 26551 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 26552 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26553 D0, D0, D0' _or_ `vbif D0, D0, D0' 26554 26555 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 26556 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26557 D0, D0, D0' _or_ `vbif D0, D0, D0' 26558 26559 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 26560 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26561 D0, D0, D0' _or_ `vbif D0, D0, D0' 26562 26563 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 26564 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26565 D0, D0, D0' _or_ `vbif D0, D0, D0' 26566 26567 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 26568 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26569 D0, D0, D0' _or_ `vbif D0, D0, D0' 26570 26571 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 26572 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 26573 D0, D0, D0' _or_ `vbif D0, D0, D0' 26574 26575 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 26576 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26577 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26578 26579 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 26580 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26581 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26582 26583 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 26584 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26585 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26586 26587 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 26588 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26589 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26590 26591 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 26592 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26593 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26594 26595 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 26596 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26597 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26598 26599 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 26600 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26601 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26602 26603 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 26604 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26605 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26606 26607 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 26608 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26609 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26610 26611 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 26612 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26613 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26614 26615 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 26616 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 26617 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 26618 26619 5.50.3.65 Transpose elements 26620 ............................ 26621 26622 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 26623 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 26624 26625 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 26626 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 26627 26628 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 26629 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 26630 26631 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 26632 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 26633 26634 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 26635 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 26636 26637 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 26638 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 26639 26640 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 26641 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 26642 26643 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 26644 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 26645 26646 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 26647 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 26648 26649 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 26650 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 26651 26652 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 26653 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 26654 26655 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 26656 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 26657 26658 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 26659 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 26660 26661 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 26662 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 26663 26664 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 26665 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 26666 26667 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 26668 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 26669 26670 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 26671 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 26672 26673 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 26674 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 26675 26676 5.50.3.66 Zip elements 26677 ...................... 26678 26679 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 26680 _Form of expected instruction(s):_ `vzip.32 D0, D1' 26681 26682 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 26683 _Form of expected instruction(s):_ `vzip.16 D0, D1' 26684 26685 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 26686 _Form of expected instruction(s):_ `vzip.8 D0, D1' 26687 26688 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 26689 _Form of expected instruction(s):_ `vzip.32 D0, D1' 26690 26691 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 26692 _Form of expected instruction(s):_ `vzip.16 D0, D1' 26693 26694 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 26695 _Form of expected instruction(s):_ `vzip.8 D0, D1' 26696 26697 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 26698 _Form of expected instruction(s):_ `vzip.32 D0, D1' 26699 26700 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 26701 _Form of expected instruction(s):_ `vzip.16 D0, D1' 26702 26703 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 26704 _Form of expected instruction(s):_ `vzip.8 D0, D1' 26705 26706 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 26707 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 26708 26709 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 26710 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 26711 26712 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 26713 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 26714 26715 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 26716 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 26717 26718 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 26719 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 26720 26721 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 26722 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 26723 26724 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 26725 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 26726 26727 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 26728 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 26729 26730 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 26731 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 26732 26733 5.50.3.67 Unzip elements 26734 ........................ 26735 26736 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 26737 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 26738 26739 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 26740 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 26741 26742 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 26743 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 26744 26745 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 26746 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 26747 26748 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 26749 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 26750 26751 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 26752 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 26753 26754 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 26755 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 26756 26757 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 26758 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 26759 26760 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 26761 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 26762 26763 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 26764 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 26765 26766 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 26767 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 26768 26769 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 26770 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 26771 26772 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 26773 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 26774 26775 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 26776 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 26777 26778 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 26779 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 26780 26781 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 26782 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 26783 26784 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 26785 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 26786 26787 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 26788 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 26789 26790 5.50.3.68 Element/structure loads, VLD1 variants 26791 ................................................ 26792 26793 * uint32x2_t vld1_u32 (const uint32_t *) 26794 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 26795 26796 * uint16x4_t vld1_u16 (const uint16_t *) 26797 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 26798 26799 * uint8x8_t vld1_u8 (const uint8_t *) 26800 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 26801 26802 * int32x2_t vld1_s32 (const int32_t *) 26803 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 26804 26805 * int16x4_t vld1_s16 (const int16_t *) 26806 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 26807 26808 * int8x8_t vld1_s8 (const int8_t *) 26809 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 26810 26811 * uint64x1_t vld1_u64 (const uint64_t *) 26812 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 26813 26814 * int64x1_t vld1_s64 (const int64_t *) 26815 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 26816 26817 * float32x2_t vld1_f32 (const float32_t *) 26818 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 26819 26820 * poly16x4_t vld1_p16 (const poly16_t *) 26821 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 26822 26823 * poly8x8_t vld1_p8 (const poly8_t *) 26824 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 26825 26826 * uint32x4_t vld1q_u32 (const uint32_t *) 26827 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 26828 26829 * uint16x8_t vld1q_u16 (const uint16_t *) 26830 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 26831 26832 * uint8x16_t vld1q_u8 (const uint8_t *) 26833 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 26834 26835 * int32x4_t vld1q_s32 (const int32_t *) 26836 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 26837 26838 * int16x8_t vld1q_s16 (const int16_t *) 26839 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 26840 26841 * int8x16_t vld1q_s8 (const int8_t *) 26842 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 26843 26844 * uint64x2_t vld1q_u64 (const uint64_t *) 26845 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 26846 26847 * int64x2_t vld1q_s64 (const int64_t *) 26848 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 26849 26850 * float32x4_t vld1q_f32 (const float32_t *) 26851 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 26852 26853 * poly16x8_t vld1q_p16 (const poly16_t *) 26854 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 26855 26856 * poly8x16_t vld1q_p8 (const poly8_t *) 26857 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 26858 26859 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 26860 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 26861 26862 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 26863 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 26864 26865 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 26866 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 26867 26868 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 26869 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 26870 26871 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 26872 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 26873 26874 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 26875 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 26876 26877 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 26878 int) 26879 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 26880 26881 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 26882 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 26883 26884 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 26885 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 26886 26887 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 26888 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 26889 26890 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 26891 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 26892 26893 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 26894 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 26895 26896 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 26897 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 26898 26899 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 26900 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 26901 26902 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 26903 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 26904 26905 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 26906 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 26907 26908 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 26909 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 26910 26911 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 26912 int) 26913 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 26914 26915 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 26916 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 26917 26918 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 26919 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 26920 26921 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 26922 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 26923 26924 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 26925 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 26926 26927 * uint32x2_t vld1_dup_u32 (const uint32_t *) 26928 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 26929 26930 * uint16x4_t vld1_dup_u16 (const uint16_t *) 26931 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 26932 26933 * uint8x8_t vld1_dup_u8 (const uint8_t *) 26934 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 26935 26936 * int32x2_t vld1_dup_s32 (const int32_t *) 26937 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 26938 26939 * int16x4_t vld1_dup_s16 (const int16_t *) 26940 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 26941 26942 * int8x8_t vld1_dup_s8 (const int8_t *) 26943 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 26944 26945 * float32x2_t vld1_dup_f32 (const float32_t *) 26946 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 26947 26948 * poly16x4_t vld1_dup_p16 (const poly16_t *) 26949 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 26950 26951 * poly8x8_t vld1_dup_p8 (const poly8_t *) 26952 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 26953 26954 * uint64x1_t vld1_dup_u64 (const uint64_t *) 26955 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 26956 26957 * int64x1_t vld1_dup_s64 (const int64_t *) 26958 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 26959 26960 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 26961 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 26962 26963 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 26964 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 26965 26966 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 26967 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 26968 26969 * int32x4_t vld1q_dup_s32 (const int32_t *) 26970 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 26971 26972 * int16x8_t vld1q_dup_s16 (const int16_t *) 26973 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 26974 26975 * int8x16_t vld1q_dup_s8 (const int8_t *) 26976 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 26977 26978 * float32x4_t vld1q_dup_f32 (const float32_t *) 26979 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 26980 26981 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 26982 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 26983 26984 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 26985 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 26986 26987 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 26988 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 26989 26990 * int64x2_t vld1q_dup_s64 (const int64_t *) 26991 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 26992 26993 5.50.3.69 Element/structure stores, VST1 variants 26994 ................................................. 26995 26996 * void vst1_u32 (uint32_t *, uint32x2_t) 26997 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 26998 26999 * void vst1_u16 (uint16_t *, uint16x4_t) 27000 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 27001 27002 * void vst1_u8 (uint8_t *, uint8x8_t) 27003 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 27004 27005 * void vst1_s32 (int32_t *, int32x2_t) 27006 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 27007 27008 * void vst1_s16 (int16_t *, int16x4_t) 27009 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 27010 27011 * void vst1_s8 (int8_t *, int8x8_t) 27012 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 27013 27014 * void vst1_u64 (uint64_t *, uint64x1_t) 27015 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 27016 27017 * void vst1_s64 (int64_t *, int64x1_t) 27018 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 27019 27020 * void vst1_f32 (float32_t *, float32x2_t) 27021 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 27022 27023 * void vst1_p16 (poly16_t *, poly16x4_t) 27024 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 27025 27026 * void vst1_p8 (poly8_t *, poly8x8_t) 27027 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 27028 27029 * void vst1q_u32 (uint32_t *, uint32x4_t) 27030 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 27031 27032 * void vst1q_u16 (uint16_t *, uint16x8_t) 27033 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 27034 27035 * void vst1q_u8 (uint8_t *, uint8x16_t) 27036 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 27037 27038 * void vst1q_s32 (int32_t *, int32x4_t) 27039 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 27040 27041 * void vst1q_s16 (int16_t *, int16x8_t) 27042 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 27043 27044 * void vst1q_s8 (int8_t *, int8x16_t) 27045 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 27046 27047 * void vst1q_u64 (uint64_t *, uint64x2_t) 27048 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 27049 27050 * void vst1q_s64 (int64_t *, int64x2_t) 27051 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 27052 27053 * void vst1q_f32 (float32_t *, float32x4_t) 27054 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 27055 27056 * void vst1q_p16 (poly16_t *, poly16x8_t) 27057 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 27058 27059 * void vst1q_p8 (poly8_t *, poly8x16_t) 27060 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 27061 27062 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 27063 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 27064 27065 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 27066 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 27067 27068 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 27069 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 27070 27071 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 27072 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 27073 27074 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 27075 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 27076 27077 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 27078 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 27079 27080 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 27081 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 27082 27083 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 27084 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 27085 27086 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 27087 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 27088 27089 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 27090 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 27091 27092 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 27093 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 27094 27095 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 27096 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 27097 27098 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 27099 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 27100 27101 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 27102 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 27103 27104 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 27105 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 27106 27107 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 27108 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 27109 27110 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 27111 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 27112 27113 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 27114 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 27115 27116 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 27117 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 27118 27119 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 27120 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 27121 27122 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 27123 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 27124 27125 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 27126 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 27127 27128 5.50.3.70 Element/structure loads, VLD2 variants 27129 ................................................ 27130 27131 * uint32x2x2_t vld2_u32 (const uint32_t *) 27132 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 27133 27134 * uint16x4x2_t vld2_u16 (const uint16_t *) 27135 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 27136 27137 * uint8x8x2_t vld2_u8 (const uint8_t *) 27138 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 27139 27140 * int32x2x2_t vld2_s32 (const int32_t *) 27141 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 27142 27143 * int16x4x2_t vld2_s16 (const int16_t *) 27144 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 27145 27146 * int8x8x2_t vld2_s8 (const int8_t *) 27147 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 27148 27149 * float32x2x2_t vld2_f32 (const float32_t *) 27150 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 27151 27152 * poly16x4x2_t vld2_p16 (const poly16_t *) 27153 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 27154 27155 * poly8x8x2_t vld2_p8 (const poly8_t *) 27156 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 27157 27158 * uint64x1x2_t vld2_u64 (const uint64_t *) 27159 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 27160 27161 * int64x1x2_t vld2_s64 (const int64_t *) 27162 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 27163 27164 * uint32x4x2_t vld2q_u32 (const uint32_t *) 27165 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 27166 27167 * uint16x8x2_t vld2q_u16 (const uint16_t *) 27168 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 27169 27170 * uint8x16x2_t vld2q_u8 (const uint8_t *) 27171 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 27172 27173 * int32x4x2_t vld2q_s32 (const int32_t *) 27174 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 27175 27176 * int16x8x2_t vld2q_s16 (const int16_t *) 27177 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 27178 27179 * int8x16x2_t vld2q_s8 (const int8_t *) 27180 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 27181 27182 * float32x4x2_t vld2q_f32 (const float32_t *) 27183 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 27184 27185 * poly16x8x2_t vld2q_p16 (const poly16_t *) 27186 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 27187 27188 * poly8x16x2_t vld2q_p8 (const poly8_t *) 27189 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 27190 27191 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 27192 int) 27193 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 27194 27195 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 27196 int) 27197 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 27198 27199 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 27200 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 27201 27202 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 27203 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 27204 27205 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 27206 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 27207 27208 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 27209 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 27210 27211 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 27212 const int) 27213 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 27214 27215 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 27216 int) 27217 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 27218 27219 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 27220 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 27221 27222 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 27223 int) 27224 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 27225 27226 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 27227 int) 27228 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 27229 27230 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 27231 int) 27232 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 27233 27234 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 27235 int) 27236 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 27237 27238 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 27239 const int) 27240 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 27241 27242 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 27243 int) 27244 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 27245 27246 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 27247 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 27248 27249 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 27250 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 27251 27252 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 27253 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 27254 27255 * int32x2x2_t vld2_dup_s32 (const int32_t *) 27256 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 27257 27258 * int16x4x2_t vld2_dup_s16 (const int16_t *) 27259 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 27260 27261 * int8x8x2_t vld2_dup_s8 (const int8_t *) 27262 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 27263 27264 * float32x2x2_t vld2_dup_f32 (const float32_t *) 27265 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 27266 27267 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 27268 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 27269 27270 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 27271 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 27272 27273 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 27274 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 27275 27276 * int64x1x2_t vld2_dup_s64 (const int64_t *) 27277 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 27278 27279 5.50.3.71 Element/structure stores, VST2 variants 27280 ................................................. 27281 27282 * void vst2_u32 (uint32_t *, uint32x2x2_t) 27283 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 27284 27285 * void vst2_u16 (uint16_t *, uint16x4x2_t) 27286 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 27287 27288 * void vst2_u8 (uint8_t *, uint8x8x2_t) 27289 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 27290 27291 * void vst2_s32 (int32_t *, int32x2x2_t) 27292 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 27293 27294 * void vst2_s16 (int16_t *, int16x4x2_t) 27295 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 27296 27297 * void vst2_s8 (int8_t *, int8x8x2_t) 27298 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 27299 27300 * void vst2_f32 (float32_t *, float32x2x2_t) 27301 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 27302 27303 * void vst2_p16 (poly16_t *, poly16x4x2_t) 27304 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 27305 27306 * void vst2_p8 (poly8_t *, poly8x8x2_t) 27307 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 27308 27309 * void vst2_u64 (uint64_t *, uint64x1x2_t) 27310 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 27311 27312 * void vst2_s64 (int64_t *, int64x1x2_t) 27313 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 27314 27315 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 27316 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 27317 27318 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 27319 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 27320 27321 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 27322 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 27323 27324 * void vst2q_s32 (int32_t *, int32x4x2_t) 27325 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 27326 27327 * void vst2q_s16 (int16_t *, int16x8x2_t) 27328 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 27329 27330 * void vst2q_s8 (int8_t *, int8x16x2_t) 27331 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 27332 27333 * void vst2q_f32 (float32_t *, float32x4x2_t) 27334 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 27335 27336 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 27337 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 27338 27339 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 27340 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 27341 27342 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 27343 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 27344 27345 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 27346 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 27347 27348 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 27349 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 27350 27351 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 27352 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 27353 27354 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 27355 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 27356 27357 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 27358 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 27359 27360 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 27361 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 27362 27363 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 27364 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 27365 27366 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 27367 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 27368 27369 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 27370 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 27371 27372 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 27373 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 27374 27375 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 27376 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 27377 27378 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 27379 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 27380 27381 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 27382 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 27383 27384 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 27385 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 27386 27387 5.50.3.72 Element/structure loads, VLD3 variants 27388 ................................................ 27389 27390 * uint32x2x3_t vld3_u32 (const uint32_t *) 27391 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 27392 27393 * uint16x4x3_t vld3_u16 (const uint16_t *) 27394 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 27395 27396 * uint8x8x3_t vld3_u8 (const uint8_t *) 27397 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 27398 27399 * int32x2x3_t vld3_s32 (const int32_t *) 27400 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 27401 27402 * int16x4x3_t vld3_s16 (const int16_t *) 27403 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 27404 27405 * int8x8x3_t vld3_s8 (const int8_t *) 27406 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 27407 27408 * float32x2x3_t vld3_f32 (const float32_t *) 27409 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 27410 27411 * poly16x4x3_t vld3_p16 (const poly16_t *) 27412 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 27413 27414 * poly8x8x3_t vld3_p8 (const poly8_t *) 27415 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 27416 27417 * uint64x1x3_t vld3_u64 (const uint64_t *) 27418 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 27419 27420 * int64x1x3_t vld3_s64 (const int64_t *) 27421 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 27422 27423 * uint32x4x3_t vld3q_u32 (const uint32_t *) 27424 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 27425 27426 * uint16x8x3_t vld3q_u16 (const uint16_t *) 27427 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 27428 27429 * uint8x16x3_t vld3q_u8 (const uint8_t *) 27430 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 27431 27432 * int32x4x3_t vld3q_s32 (const int32_t *) 27433 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 27434 27435 * int16x8x3_t vld3q_s16 (const int16_t *) 27436 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 27437 27438 * int8x16x3_t vld3q_s8 (const int8_t *) 27439 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 27440 27441 * float32x4x3_t vld3q_f32 (const float32_t *) 27442 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 27443 27444 * poly16x8x3_t vld3q_p16 (const poly16_t *) 27445 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 27446 27447 * poly8x16x3_t vld3q_p8 (const poly8_t *) 27448 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 27449 27450 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 27451 int) 27452 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 27453 [R0]' 27454 27455 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 27456 int) 27457 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 27458 [R0]' 27459 27460 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 27461 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 27462 [R0]' 27463 27464 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 27465 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 27466 [R0]' 27467 27468 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 27469 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 27470 [R0]' 27471 27472 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 27473 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 27474 [R0]' 27475 27476 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 27477 const int) 27478 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 27479 [R0]' 27480 27481 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 27482 int) 27483 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 27484 [R0]' 27485 27486 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 27487 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 27488 [R0]' 27489 27490 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 27491 int) 27492 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 27493 [R0]' 27494 27495 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 27496 int) 27497 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 27498 [R0]' 27499 27500 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 27501 int) 27502 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 27503 [R0]' 27504 27505 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 27506 int) 27507 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 27508 [R0]' 27509 27510 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 27511 const int) 27512 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 27513 [R0]' 27514 27515 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 27516 int) 27517 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 27518 [R0]' 27519 27520 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 27521 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 27522 [R0]' 27523 27524 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 27525 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 27526 [R0]' 27527 27528 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 27529 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 27530 [R0]' 27531 27532 * int32x2x3_t vld3_dup_s32 (const int32_t *) 27533 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 27534 [R0]' 27535 27536 * int16x4x3_t vld3_dup_s16 (const int16_t *) 27537 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 27538 [R0]' 27539 27540 * int8x8x3_t vld3_dup_s8 (const int8_t *) 27541 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 27542 [R0]' 27543 27544 * float32x2x3_t vld3_dup_f32 (const float32_t *) 27545 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 27546 [R0]' 27547 27548 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 27549 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 27550 [R0]' 27551 27552 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 27553 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 27554 [R0]' 27555 27556 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 27557 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 27558 27559 * int64x1x3_t vld3_dup_s64 (const int64_t *) 27560 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 27561 27562 5.50.3.73 Element/structure stores, VST3 variants 27563 ................................................. 27564 27565 * void vst3_u32 (uint32_t *, uint32x2x3_t) 27566 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 27567 27568 * void vst3_u16 (uint16_t *, uint16x4x3_t) 27569 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 27570 27571 * void vst3_u8 (uint8_t *, uint8x8x3_t) 27572 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 27573 27574 * void vst3_s32 (int32_t *, int32x2x3_t) 27575 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 27576 27577 * void vst3_s16 (int16_t *, int16x4x3_t) 27578 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 27579 27580 * void vst3_s8 (int8_t *, int8x8x3_t) 27581 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 27582 27583 * void vst3_f32 (float32_t *, float32x2x3_t) 27584 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 27585 27586 * void vst3_p16 (poly16_t *, poly16x4x3_t) 27587 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 27588 27589 * void vst3_p8 (poly8_t *, poly8x8x3_t) 27590 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 27591 27592 * void vst3_u64 (uint64_t *, uint64x1x3_t) 27593 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 27594 27595 * void vst3_s64 (int64_t *, int64x1x3_t) 27596 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 27597 27598 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 27599 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 27600 27601 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 27602 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 27603 27604 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 27605 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 27606 27607 * void vst3q_s32 (int32_t *, int32x4x3_t) 27608 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 27609 27610 * void vst3q_s16 (int16_t *, int16x8x3_t) 27611 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 27612 27613 * void vst3q_s8 (int8_t *, int8x16x3_t) 27614 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 27615 27616 * void vst3q_f32 (float32_t *, float32x4x3_t) 27617 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 27618 27619 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 27620 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 27621 27622 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 27623 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 27624 27625 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 27626 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 27627 [R0]' 27628 27629 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 27630 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 27631 [R0]' 27632 27633 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 27634 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 27635 [R0]' 27636 27637 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 27638 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 27639 [R0]' 27640 27641 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 27642 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 27643 [R0]' 27644 27645 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 27646 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 27647 [R0]' 27648 27649 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 27650 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 27651 [R0]' 27652 27653 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 27654 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 27655 [R0]' 27656 27657 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 27658 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 27659 [R0]' 27660 27661 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 27662 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 27663 [R0]' 27664 27665 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 27666 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 27667 [R0]' 27668 27669 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 27670 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 27671 [R0]' 27672 27673 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 27674 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 27675 [R0]' 27676 27677 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 27678 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 27679 [R0]' 27680 27681 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 27682 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 27683 [R0]' 27684 27685 5.50.3.74 Element/structure loads, VLD4 variants 27686 ................................................ 27687 27688 * uint32x2x4_t vld4_u32 (const uint32_t *) 27689 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 27690 27691 * uint16x4x4_t vld4_u16 (const uint16_t *) 27692 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 27693 27694 * uint8x8x4_t vld4_u8 (const uint8_t *) 27695 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 27696 27697 * int32x2x4_t vld4_s32 (const int32_t *) 27698 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 27699 27700 * int16x4x4_t vld4_s16 (const int16_t *) 27701 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 27702 27703 * int8x8x4_t vld4_s8 (const int8_t *) 27704 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 27705 27706 * float32x2x4_t vld4_f32 (const float32_t *) 27707 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 27708 27709 * poly16x4x4_t vld4_p16 (const poly16_t *) 27710 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 27711 27712 * poly8x8x4_t vld4_p8 (const poly8_t *) 27713 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 27714 27715 * uint64x1x4_t vld4_u64 (const uint64_t *) 27716 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 27717 27718 * int64x1x4_t vld4_s64 (const int64_t *) 27719 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 27720 27721 * uint32x4x4_t vld4q_u32 (const uint32_t *) 27722 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 27723 27724 * uint16x8x4_t vld4q_u16 (const uint16_t *) 27725 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 27726 27727 * uint8x16x4_t vld4q_u8 (const uint8_t *) 27728 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 27729 27730 * int32x4x4_t vld4q_s32 (const int32_t *) 27731 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 27732 27733 * int16x8x4_t vld4q_s16 (const int16_t *) 27734 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 27735 27736 * int8x16x4_t vld4q_s8 (const int8_t *) 27737 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 27738 27739 * float32x4x4_t vld4q_f32 (const float32_t *) 27740 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 27741 27742 * poly16x8x4_t vld4q_p16 (const poly16_t *) 27743 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 27744 27745 * poly8x16x4_t vld4q_p8 (const poly8_t *) 27746 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 27747 27748 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 27749 int) 27750 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 27751 D3[0]}, [R0]' 27752 27753 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 27754 int) 27755 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 27756 D3[0]}, [R0]' 27757 27758 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 27759 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 27760 D3[0]}, [R0]' 27761 27762 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 27763 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 27764 D3[0]}, [R0]' 27765 27766 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 27767 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 27768 D3[0]}, [R0]' 27769 27770 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 27771 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 27772 D3[0]}, [R0]' 27773 27774 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 27775 const int) 27776 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 27777 D3[0]}, [R0]' 27778 27779 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 27780 int) 27781 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 27782 D3[0]}, [R0]' 27783 27784 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 27785 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 27786 D3[0]}, [R0]' 27787 27788 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 27789 int) 27790 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 27791 D3[0]}, [R0]' 27792 27793 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 27794 int) 27795 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 27796 D3[0]}, [R0]' 27797 27798 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 27799 int) 27800 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 27801 D3[0]}, [R0]' 27802 27803 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 27804 int) 27805 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 27806 D3[0]}, [R0]' 27807 27808 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 27809 const int) 27810 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 27811 D3[0]}, [R0]' 27812 27813 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 27814 int) 27815 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 27816 D3[0]}, [R0]' 27817 27818 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 27819 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 27820 D3[]}, [R0]' 27821 27822 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 27823 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 27824 D3[]}, [R0]' 27825 27826 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 27827 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 27828 D3[]}, [R0]' 27829 27830 * int32x2x4_t vld4_dup_s32 (const int32_t *) 27831 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 27832 D3[]}, [R0]' 27833 27834 * int16x4x4_t vld4_dup_s16 (const int16_t *) 27835 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 27836 D3[]}, [R0]' 27837 27838 * int8x8x4_t vld4_dup_s8 (const int8_t *) 27839 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 27840 D3[]}, [R0]' 27841 27842 * float32x2x4_t vld4_dup_f32 (const float32_t *) 27843 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 27844 D3[]}, [R0]' 27845 27846 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 27847 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 27848 D3[]}, [R0]' 27849 27850 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 27851 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 27852 D3[]}, [R0]' 27853 27854 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 27855 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 27856 27857 * int64x1x4_t vld4_dup_s64 (const int64_t *) 27858 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 27859 27860 5.50.3.75 Element/structure stores, VST4 variants 27861 ................................................. 27862 27863 * void vst4_u32 (uint32_t *, uint32x2x4_t) 27864 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 27865 27866 * void vst4_u16 (uint16_t *, uint16x4x4_t) 27867 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 27868 27869 * void vst4_u8 (uint8_t *, uint8x8x4_t) 27870 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 27871 27872 * void vst4_s32 (int32_t *, int32x2x4_t) 27873 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 27874 27875 * void vst4_s16 (int16_t *, int16x4x4_t) 27876 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 27877 27878 * void vst4_s8 (int8_t *, int8x8x4_t) 27879 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 27880 27881 * void vst4_f32 (float32_t *, float32x2x4_t) 27882 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 27883 27884 * void vst4_p16 (poly16_t *, poly16x4x4_t) 27885 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 27886 27887 * void vst4_p8 (poly8_t *, poly8x8x4_t) 27888 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 27889 27890 * void vst4_u64 (uint64_t *, uint64x1x4_t) 27891 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 27892 27893 * void vst4_s64 (int64_t *, int64x1x4_t) 27894 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 27895 27896 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 27897 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 27898 27899 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 27900 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 27901 27902 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 27903 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 27904 27905 * void vst4q_s32 (int32_t *, int32x4x4_t) 27906 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 27907 27908 * void vst4q_s16 (int16_t *, int16x8x4_t) 27909 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 27910 27911 * void vst4q_s8 (int8_t *, int8x16x4_t) 27912 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 27913 27914 * void vst4q_f32 (float32_t *, float32x4x4_t) 27915 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 27916 27917 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 27918 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 27919 27920 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 27921 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 27922 27923 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 27924 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 27925 D3[0]}, [R0]' 27926 27927 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 27928 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 27929 D3[0]}, [R0]' 27930 27931 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 27932 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 27933 D3[0]}, [R0]' 27934 27935 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 27936 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 27937 D3[0]}, [R0]' 27938 27939 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 27940 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 27941 D3[0]}, [R0]' 27942 27943 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 27944 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 27945 D3[0]}, [R0]' 27946 27947 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 27948 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 27949 D3[0]}, [R0]' 27950 27951 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 27952 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 27953 D3[0]}, [R0]' 27954 27955 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 27956 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 27957 D3[0]}, [R0]' 27958 27959 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 27960 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 27961 D3[0]}, [R0]' 27962 27963 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 27964 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 27965 D3[0]}, [R0]' 27966 27967 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 27968 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 27969 D3[0]}, [R0]' 27970 27971 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 27972 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 27973 D3[0]}, [R0]' 27974 27975 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 27976 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 27977 D3[0]}, [R0]' 27978 27979 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 27980 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 27981 D3[0]}, [R0]' 27982 27983 5.50.3.76 Logical operations (AND) 27984 .................................. 27985 27986 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 27987 _Form of expected instruction(s):_ `vand D0, D0, D0' 27988 27989 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 27990 _Form of expected instruction(s):_ `vand D0, D0, D0' 27991 27992 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 27993 _Form of expected instruction(s):_ `vand D0, D0, D0' 27994 27995 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 27996 _Form of expected instruction(s):_ `vand D0, D0, D0' 27997 27998 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 27999 _Form of expected instruction(s):_ `vand D0, D0, D0' 28000 28001 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 28002 _Form of expected instruction(s):_ `vand D0, D0, D0' 28003 28004 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 28005 _Form of expected instruction(s):_ `vand D0, D0, D0' 28006 28007 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 28008 _Form of expected instruction(s):_ `vand D0, D0, D0' 28009 28010 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 28011 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 28012 28013 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 28014 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 28015 28016 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 28017 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 28018 28019 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 28020 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 28021 28022 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 28023 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 28024 28025 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 28026 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 28027 28028 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 28029 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 28030 28031 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 28032 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 28033 28034 5.50.3.77 Logical operations (OR) 28035 ................................. 28036 28037 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 28038 _Form of expected instruction(s):_ `vorr D0, D0, D0' 28039 28040 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 28041 _Form of expected instruction(s):_ `vorr D0, D0, D0' 28042 28043 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 28044 _Form of expected instruction(s):_ `vorr D0, D0, D0' 28045 28046 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 28047 _Form of expected instruction(s):_ `vorr D0, D0, D0' 28048 28049 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 28050 _Form of expected instruction(s):_ `vorr D0, D0, D0' 28051 28052 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 28053 _Form of expected instruction(s):_ `vorr D0, D0, D0' 28054 28055 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 28056 _Form of expected instruction(s):_ `vorr D0, D0, D0' 28057 28058 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 28059 _Form of expected instruction(s):_ `vorr D0, D0, D0' 28060 28061 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 28062 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 28063 28064 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 28065 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 28066 28067 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 28068 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 28069 28070 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 28071 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 28072 28073 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 28074 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 28075 28076 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 28077 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 28078 28079 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 28080 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 28081 28082 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 28083 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 28084 28085 5.50.3.78 Logical operations (exclusive OR) 28086 ........................................... 28087 28088 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 28089 _Form of expected instruction(s):_ `veor D0, D0, D0' 28090 28091 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 28092 _Form of expected instruction(s):_ `veor D0, D0, D0' 28093 28094 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 28095 _Form of expected instruction(s):_ `veor D0, D0, D0' 28096 28097 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 28098 _Form of expected instruction(s):_ `veor D0, D0, D0' 28099 28100 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 28101 _Form of expected instruction(s):_ `veor D0, D0, D0' 28102 28103 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 28104 _Form of expected instruction(s):_ `veor D0, D0, D0' 28105 28106 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 28107 _Form of expected instruction(s):_ `veor D0, D0, D0' 28108 28109 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 28110 _Form of expected instruction(s):_ `veor D0, D0, D0' 28111 28112 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 28113 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 28114 28115 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 28116 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 28117 28118 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 28119 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 28120 28121 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 28122 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 28123 28124 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 28125 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 28126 28127 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 28128 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 28129 28130 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 28131 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 28132 28133 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 28134 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 28135 28136 5.50.3.79 Logical operations (AND-NOT) 28137 ...................................... 28138 28139 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 28140 _Form of expected instruction(s):_ `vbic D0, D0, D0' 28141 28142 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 28143 _Form of expected instruction(s):_ `vbic D0, D0, D0' 28144 28145 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 28146 _Form of expected instruction(s):_ `vbic D0, D0, D0' 28147 28148 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 28149 _Form of expected instruction(s):_ `vbic D0, D0, D0' 28150 28151 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 28152 _Form of expected instruction(s):_ `vbic D0, D0, D0' 28153 28154 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 28155 _Form of expected instruction(s):_ `vbic D0, D0, D0' 28156 28157 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 28158 _Form of expected instruction(s):_ `vbic D0, D0, D0' 28159 28160 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 28161 _Form of expected instruction(s):_ `vbic D0, D0, D0' 28162 28163 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 28164 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 28165 28166 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 28167 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 28168 28169 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 28170 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 28171 28172 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 28173 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 28174 28175 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 28176 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 28177 28178 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 28179 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 28180 28181 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 28182 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 28183 28184 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 28185 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 28186 28187 5.50.3.80 Logical operations (OR-NOT) 28188 ..................................... 28189 28190 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 28191 _Form of expected instruction(s):_ `vorn D0, D0, D0' 28192 28193 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 28194 _Form of expected instruction(s):_ `vorn D0, D0, D0' 28195 28196 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 28197 _Form of expected instruction(s):_ `vorn D0, D0, D0' 28198 28199 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 28200 _Form of expected instruction(s):_ `vorn D0, D0, D0' 28201 28202 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 28203 _Form of expected instruction(s):_ `vorn D0, D0, D0' 28204 28205 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 28206 _Form of expected instruction(s):_ `vorn D0, D0, D0' 28207 28208 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 28209 _Form of expected instruction(s):_ `vorn D0, D0, D0' 28210 28211 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 28212 _Form of expected instruction(s):_ `vorn D0, D0, D0' 28213 28214 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 28215 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 28216 28217 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 28218 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 28219 28220 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 28221 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 28222 28223 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 28224 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 28225 28226 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 28227 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 28228 28229 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 28230 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 28231 28232 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 28233 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 28234 28235 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 28236 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 28237 28238 5.50.3.81 Reinterpret casts 28239 ........................... 28240 28241 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 28242 28243 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 28244 28245 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 28246 28247 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 28248 28249 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 28250 28251 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 28252 28253 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 28254 28255 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 28256 28257 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 28258 28259 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 28260 28261 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 28262 28263 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 28264 28265 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 28266 28267 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 28268 28269 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 28270 28271 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 28272 28273 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 28274 28275 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 28276 28277 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 28278 28279 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 28280 28281 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 28282 28283 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 28284 28285 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 28286 28287 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 28288 28289 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 28290 28291 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 28292 28293 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 28294 28295 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 28296 28297 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 28298 28299 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 28300 28301 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 28302 28303 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 28304 28305 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 28306 28307 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 28308 28309 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 28310 28311 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 28312 28313 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 28314 28315 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 28316 28317 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 28318 28319 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 28320 28321 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 28322 28323 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 28324 28325 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 28326 28327 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 28328 28329 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 28330 28331 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 28332 28333 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 28334 28335 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 28336 28337 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 28338 28339 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 28340 28341 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 28342 28343 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 28344 28345 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 28346 28347 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 28348 28349 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 28350 28351 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 28352 28353 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 28354 28355 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 28356 28357 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 28358 28359 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 28360 28361 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 28362 28363 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 28364 28365 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 28366 28367 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 28368 28369 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 28370 28371 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 28372 28373 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 28374 28375 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 28376 28377 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 28378 28379 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 28380 28381 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 28382 28383 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 28384 28385 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 28386 28387 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 28388 28389 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 28390 28391 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 28392 28393 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 28394 28395 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 28396 28397 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 28398 28399 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 28400 28401 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 28402 28403 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 28404 28405 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 28406 28407 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 28408 28409 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 28410 28411 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 28412 28413 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 28414 28415 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 28416 28417 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 28418 28419 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 28420 28421 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 28422 28423 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 28424 28425 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 28426 28427 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 28428 28429 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 28430 28431 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 28432 28433 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 28434 28435 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 28436 28437 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 28438 28439 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 28440 28441 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 28442 28443 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 28444 28445 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 28446 28447 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 28448 28449 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 28450 28451 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 28452 28453 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 28454 28455 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 28456 28457 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 28458 28459 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 28460 28461 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 28462 28463 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 28464 28465 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 28466 28467 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 28468 28469 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 28470 28471 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 28472 28473 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 28474 28475 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 28476 28477 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 28478 28479 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 28480 28481 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 28482 28483 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 28484 28485 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 28486 28487 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 28488 28489 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 28490 28491 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 28492 28493 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 28494 28495 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 28496 28497 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 28498 28499 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 28500 28501 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 28502 28503 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 28504 28505 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 28506 28507 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 28508 28509 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 28510 28511 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 28512 28513 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 28514 28515 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 28516 28517 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 28518 28519 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 28520 28521 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 28522 28523 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 28524 28525 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 28526 28527 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 28528 28529 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 28530 28531 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 28532 28533 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 28534 28535 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 28536 28537 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 28538 28539 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 28540 28541 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 28542 28543 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 28544 28545 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 28546 28547 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 28548 28549 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 28550 28551 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 28552 28553 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 28554 28555 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 28556 28557 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 28558 28559 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 28560 28561 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 28562 28563 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 28564 28565 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 28566 28567 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 28568 28569 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 28570 28571 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 28572 28573 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 28574 28575 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 28576 28577 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 28578 28579 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 28580 28581 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 28582 28583 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 28584 28585 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 28586 28587 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 28588 28589 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 28590 28591 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 28592 28593 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 28594 28595 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 28596 28597 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 28598 28599 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 28600 28601 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 28602 28603 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 28604 28605 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 28606 28607 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 28608 28609 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 28610 28611 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 28612 28613 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 28614 28615 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 28616 28617 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 28618 28619 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 28620 28621 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 28622 28623 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 28624 28625 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 28626 28627 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 28628 28629 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 28630 28631 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 28632 28633 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 28634 28635 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 28636 28637 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 28638 28639 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 28640 28641 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 28642 28643 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 28644 28645 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 28646 28647 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 28648 28649 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 28650 28651 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 28652 28653 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 28654 28655 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 28656 28657 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 28658 28659 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 28660 28661 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 28662 28663 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 28664 28665 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 28666 28667 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 28668 28669 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 28670 28671 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 28672 28673 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 28674 28675 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 28676 28677 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 28678 28679 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 28680 28681 28682 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 28683 28684 5.50.4 Blackfin Built-in Functions 28685 ---------------------------------- 28686 28687 Currently, there are two Blackfin-specific built-in functions. These 28688 are used for generating `CSYNC' and `SSYNC' machine insns without using 28689 inline assembly; by using these built-in functions the compiler can 28690 automatically add workarounds for hardware errata involving these 28691 instructions. These functions are named as follows: 28692 28693 void __builtin_bfin_csync (void) 28694 void __builtin_bfin_ssync (void) 28695 28696 28697 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 28698 28699 5.50.5 FR-V Built-in Functions 28700 ------------------------------ 28701 28702 GCC provides many FR-V-specific built-in functions. In general, these 28703 functions are intended to be compatible with those described by `FR-V 28704 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 28705 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 28706 which pass 128-bit values by pointer rather than by value. 28707 28708 Most of the functions are named after specific FR-V instructions. 28709 Such functions are said to be "directly mapped" and are summarized here 28710 in tabular form. 28711 28712 * Menu: 28713 28714 * Argument Types:: 28715 * Directly-mapped Integer Functions:: 28716 * Directly-mapped Media Functions:: 28717 * Raw read/write Functions:: 28718 * Other Built-in Functions:: 28719 28720 28721 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 28722 28723 5.50.5.1 Argument Types 28724 ....................... 28725 28726 The arguments to the built-in functions can be divided into three 28727 groups: register numbers, compile-time constants and run-time values. 28728 In order to make this classification clear at a glance, the arguments 28729 and return values are given the following pseudo types: 28730 28731 Pseudo type Real C type Constant? Description 28732 `uh' `unsigned short' No an unsigned halfword 28733 `uw1' `unsigned int' No an unsigned word 28734 `sw1' `int' No a signed word 28735 `uw2' `unsigned long long' No an unsigned doubleword 28736 `sw2' `long long' No a signed doubleword 28737 `const' `int' Yes an integer constant 28738 `acc' `int' Yes an ACC register number 28739 `iacc' `int' Yes an IACC register number 28740 28741 These pseudo types are not defined by GCC, they are simply a notational 28742 convenience used in this manual. 28743 28744 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 28745 run time. They correspond to register operands in the underlying FR-V 28746 instructions. 28747 28748 `const' arguments represent immediate operands in the underlying FR-V 28749 instructions. They must be compile-time constants. 28750 28751 `acc' arguments are evaluated at compile time and specify the number 28752 of an accumulator register. For example, an `acc' argument of 2 will 28753 select the ACC2 register. 28754 28755 `iacc' arguments are similar to `acc' arguments but specify the number 28756 of an IACC register. See *note Other Built-in Functions:: for more 28757 details. 28758 28759 28760 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 28761 28762 5.50.5.2 Directly-mapped Integer Functions 28763 .......................................... 28764 28765 The functions listed below map directly to FR-V I-type instructions. 28766 28767 Function prototype Example usage Assembly output 28768 `sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 28769 `sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 28770 `sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 28771 `sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 28772 `void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 28773 `void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 28774 `void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 28775 `sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 28776 `sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 28777 `uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 28778 28779 28780 File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 28781 28782 5.50.5.3 Directly-mapped Media Functions 28783 ........................................ 28784 28785 The functions listed below map directly to FR-V M-type instructions. 28786 28787 Function prototype Example usage Assembly output 28788 `uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 28789 `void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 28790 `sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 28791 `uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 28792 `uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 28793 `void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 28794 `uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 28795 `uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 28796 `void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 28797 `void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 28798 `void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 28799 `uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 28800 `uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 28801 `uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 28802 `uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 28803 `void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 28804 `void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 28805 `void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 28806 `void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 28807 `uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 28808 `uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 28809 `void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 28810 `void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 28811 `uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 28812 `uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 28813 `uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 28814 `void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 28815 `void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 28816 `uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 28817 `uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 28818 `uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 28819 `sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 28820 `uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 28821 `sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 28822 `uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 28823 `sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 28824 `uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 28825 `void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 28826 `void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 28827 `void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 28828 `void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 28829 `void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 28830 `void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 28831 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 28832 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 28833 `uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 28834 `uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 28835 `uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 28836 `sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 28837 `uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 28838 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 28839 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 28840 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 28841 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 28842 `sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 28843 `sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 28844 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 28845 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 28846 `void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 28847 sw2)' 28848 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 28849 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 28850 `void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 28851 sw2)' 28852 `void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 28853 uw2)' 28854 `sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 28855 `uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 28856 `sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 28857 `sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 28858 `uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 28859 `void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 28860 sw2)' 28861 `void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 28862 sw2)' 28863 `uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 28864 `uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 28865 `uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 28866 `uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 28867 `sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 28868 `uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 28869 `uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 28870 `sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 28871 `uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 28872 `void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 28873 `sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 28874 `uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 28875 `void __MTRAP (void)' `__MTRAP ()' `MTRAP' 28876 `uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 28877 `uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 28878 `void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 28879 `void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 28880 `uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 28881 28882 28883 File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 28884 28885 5.50.5.4 Raw read/write Functions 28886 ................................. 28887 28888 This sections describes built-in functions related to read and write 28889 instructions to access memory. These functions generate `membar' 28890 instructions to flush the I/O load and stores where appropriate, as 28891 described in Fujitsu's manual described above. 28892 28893 `unsigned char __builtin_read8 (void *DATA)' 28894 28895 `unsigned short __builtin_read16 (void *DATA)' 28896 28897 `unsigned long __builtin_read32 (void *DATA)' 28898 28899 `unsigned long long __builtin_read64 (void *DATA)' 28900 28901 `void __builtin_write8 (void *DATA, unsigned char DATUM)' 28902 28903 `void __builtin_write16 (void *DATA, unsigned short DATUM)' 28904 28905 `void __builtin_write32 (void *DATA, unsigned long DATUM)' 28906 28907 `void __builtin_write64 (void *DATA, unsigned long long DATUM)' 28908 28909 28910 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 28911 28912 5.50.5.5 Other Built-in Functions 28913 ................................. 28914 28915 This section describes built-in functions that are not named after a 28916 specific FR-V instruction. 28917 28918 `sw2 __IACCreadll (iacc REG)' 28919 Return the full 64-bit value of IACC0. The REG argument is 28920 reserved for future expansion and must be 0. 28921 28922 `sw1 __IACCreadl (iacc REG)' 28923 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 28924 Other values of REG are rejected as invalid. 28925 28926 `void __IACCsetll (iacc REG, sw2 X)' 28927 Set the full 64-bit value of IACC0 to X. The REG argument is 28928 reserved for future expansion and must be 0. 28929 28930 `void __IACCsetl (iacc REG, sw1 X)' 28931 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 28932 values of REG are rejected as invalid. 28933 28934 `void __data_prefetch0 (const void *X)' 28935 Use the `dcpl' instruction to load the contents of address X into 28936 the data cache. 28937 28938 `void __data_prefetch (const void *X)' 28939 Use the `nldub' instruction to load the contents of address X into 28940 the data cache. The instruction will be issued in slot I1. 28941 28942 28943 File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 28944 28945 5.50.6 X86 Built-in Functions 28946 ----------------------------- 28947 28948 These built-in functions are available for the i386 and x86-64 family 28949 of computers, depending on the command-line switches used. 28950 28951 Note that, if you specify command-line switches such as `-msse', the 28952 compiler could use the extended instruction sets even if the built-ins 28953 are not used explicitly in the program. For this reason, applications 28954 which perform runtime CPU detection must compile separate files for each 28955 supported architecture, using the appropriate flags. In particular, 28956 the file containing the CPU detection code should be compiled without 28957 these options. 28958 28959 The following machine modes are available for use with MMX built-in 28960 functions (*note Vector Extensions::): `V2SI' for a vector of two 28961 32-bit integers, `V4HI' for a vector of four 16-bit integers, and 28962 `V8QI' for a vector of eight 8-bit integers. Some of the built-in 28963 functions operate on MMX registers as a whole 64-bit entity, these use 28964 `DI' as their mode. 28965 28966 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector 28967 of two 32-bit floating point values. 28968 28969 If SSE extensions are enabled, `V4SF' is used for a vector of four 28970 32-bit floating point values. Some instructions use a vector of four 28971 32-bit integers, these use `V4SI'. Finally, some instructions operate 28972 on an entire vector register, interpreting it as a 128-bit integer, 28973 these use mode `TI'. 28974 28975 In 64-bit mode, the x86-64 family of processors uses additional 28976 built-in functions for efficient use of `TF' (`__float128') 128-bit 28977 floating point and `TC' 128-bit complex floating point values. 28978 28979 The following floating point built-in functions are available in 64-bit 28980 mode. All of them implement the function that is part of the name. 28981 28982 __float128 __builtin_fabsq (__float128) 28983 __float128 __builtin_copysignq (__float128, __float128) 28984 28985 The following floating point built-in functions are made available in 28986 the 64-bit mode. 28987 28988 `__float128 __builtin_infq (void)' 28989 Similar to `__builtin_inf', except the return type is `__float128'. 28990 28991 The following built-in functions are made available by `-mmmx'. All 28992 of them generate the machine instruction that is part of the name. 28993 28994 v8qi __builtin_ia32_paddb (v8qi, v8qi) 28995 v4hi __builtin_ia32_paddw (v4hi, v4hi) 28996 v2si __builtin_ia32_paddd (v2si, v2si) 28997 v8qi __builtin_ia32_psubb (v8qi, v8qi) 28998 v4hi __builtin_ia32_psubw (v4hi, v4hi) 28999 v2si __builtin_ia32_psubd (v2si, v2si) 29000 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 29001 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 29002 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 29003 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 29004 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 29005 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 29006 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 29007 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 29008 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 29009 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 29010 di __builtin_ia32_pand (di, di) 29011 di __builtin_ia32_pandn (di,di) 29012 di __builtin_ia32_por (di, di) 29013 di __builtin_ia32_pxor (di, di) 29014 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 29015 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 29016 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 29017 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 29018 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 29019 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 29020 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 29021 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 29022 v2si __builtin_ia32_punpckhdq (v2si, v2si) 29023 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 29024 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 29025 v2si __builtin_ia32_punpckldq (v2si, v2si) 29026 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 29027 v4hi __builtin_ia32_packssdw (v2si, v2si) 29028 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 29029 29030 The following built-in functions are made available either with 29031 `-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 29032 of them generate the machine instruction that is part of the name. 29033 29034 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 29035 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 29036 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 29037 v4hi __builtin_ia32_psadbw (v8qi, v8qi) 29038 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 29039 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 29040 v8qi __builtin_ia32_pminub (v8qi, v8qi) 29041 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 29042 int __builtin_ia32_pextrw (v4hi, int) 29043 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 29044 int __builtin_ia32_pmovmskb (v8qi) 29045 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 29046 void __builtin_ia32_movntq (di *, di) 29047 void __builtin_ia32_sfence (void) 29048 29049 The following built-in functions are available when `-msse' is used. 29050 All of them generate the machine instruction that is part of the name. 29051 29052 int __builtin_ia32_comieq (v4sf, v4sf) 29053 int __builtin_ia32_comineq (v4sf, v4sf) 29054 int __builtin_ia32_comilt (v4sf, v4sf) 29055 int __builtin_ia32_comile (v4sf, v4sf) 29056 int __builtin_ia32_comigt (v4sf, v4sf) 29057 int __builtin_ia32_comige (v4sf, v4sf) 29058 int __builtin_ia32_ucomieq (v4sf, v4sf) 29059 int __builtin_ia32_ucomineq (v4sf, v4sf) 29060 int __builtin_ia32_ucomilt (v4sf, v4sf) 29061 int __builtin_ia32_ucomile (v4sf, v4sf) 29062 int __builtin_ia32_ucomigt (v4sf, v4sf) 29063 int __builtin_ia32_ucomige (v4sf, v4sf) 29064 v4sf __builtin_ia32_addps (v4sf, v4sf) 29065 v4sf __builtin_ia32_subps (v4sf, v4sf) 29066 v4sf __builtin_ia32_mulps (v4sf, v4sf) 29067 v4sf __builtin_ia32_divps (v4sf, v4sf) 29068 v4sf __builtin_ia32_addss (v4sf, v4sf) 29069 v4sf __builtin_ia32_subss (v4sf, v4sf) 29070 v4sf __builtin_ia32_mulss (v4sf, v4sf) 29071 v4sf __builtin_ia32_divss (v4sf, v4sf) 29072 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 29073 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 29074 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 29075 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 29076 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 29077 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 29078 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 29079 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 29080 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 29081 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 29082 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 29083 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 29084 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 29085 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 29086 v4si __builtin_ia32_cmpless (v4sf, v4sf) 29087 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 29088 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 29089 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 29090 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 29091 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 29092 v4sf __builtin_ia32_maxps (v4sf, v4sf) 29093 v4sf __builtin_ia32_maxss (v4sf, v4sf) 29094 v4sf __builtin_ia32_minps (v4sf, v4sf) 29095 v4sf __builtin_ia32_minss (v4sf, v4sf) 29096 v4sf __builtin_ia32_andps (v4sf, v4sf) 29097 v4sf __builtin_ia32_andnps (v4sf, v4sf) 29098 v4sf __builtin_ia32_orps (v4sf, v4sf) 29099 v4sf __builtin_ia32_xorps (v4sf, v4sf) 29100 v4sf __builtin_ia32_movss (v4sf, v4sf) 29101 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 29102 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 29103 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 29104 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 29105 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 29106 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 29107 v2si __builtin_ia32_cvtps2pi (v4sf) 29108 int __builtin_ia32_cvtss2si (v4sf) 29109 v2si __builtin_ia32_cvttps2pi (v4sf) 29110 int __builtin_ia32_cvttss2si (v4sf) 29111 v4sf __builtin_ia32_rcpps (v4sf) 29112 v4sf __builtin_ia32_rsqrtps (v4sf) 29113 v4sf __builtin_ia32_sqrtps (v4sf) 29114 v4sf __builtin_ia32_rcpss (v4sf) 29115 v4sf __builtin_ia32_rsqrtss (v4sf) 29116 v4sf __builtin_ia32_sqrtss (v4sf) 29117 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 29118 void __builtin_ia32_movntps (float *, v4sf) 29119 int __builtin_ia32_movmskps (v4sf) 29120 29121 The following built-in functions are available when `-msse' is used. 29122 29123 `v4sf __builtin_ia32_loadaps (float *)' 29124 Generates the `movaps' machine instruction as a load from memory. 29125 29126 `void __builtin_ia32_storeaps (float *, v4sf)' 29127 Generates the `movaps' machine instruction as a store to memory. 29128 29129 `v4sf __builtin_ia32_loadups (float *)' 29130 Generates the `movups' machine instruction as a load from memory. 29131 29132 `void __builtin_ia32_storeups (float *, v4sf)' 29133 Generates the `movups' machine instruction as a store to memory. 29134 29135 `v4sf __builtin_ia32_loadsss (float *)' 29136 Generates the `movss' machine instruction as a load from memory. 29137 29138 `void __builtin_ia32_storess (float *, v4sf)' 29139 Generates the `movss' machine instruction as a store to memory. 29140 29141 `v4sf __builtin_ia32_loadhps (v4sf, v2si *)' 29142 Generates the `movhps' machine instruction as a load from memory. 29143 29144 `v4sf __builtin_ia32_loadlps (v4sf, v2si *)' 29145 Generates the `movlps' machine instruction as a load from memory 29146 29147 `void __builtin_ia32_storehps (v4sf, v2si *)' 29148 Generates the `movhps' machine instruction as a store to memory. 29149 29150 `void __builtin_ia32_storelps (v4sf, v2si *)' 29151 Generates the `movlps' machine instruction as a store to memory. 29152 29153 The following built-in functions are available when `-msse2' is used. 29154 All of them generate the machine instruction that is part of the name. 29155 29156 int __builtin_ia32_comisdeq (v2df, v2df) 29157 int __builtin_ia32_comisdlt (v2df, v2df) 29158 int __builtin_ia32_comisdle (v2df, v2df) 29159 int __builtin_ia32_comisdgt (v2df, v2df) 29160 int __builtin_ia32_comisdge (v2df, v2df) 29161 int __builtin_ia32_comisdneq (v2df, v2df) 29162 int __builtin_ia32_ucomisdeq (v2df, v2df) 29163 int __builtin_ia32_ucomisdlt (v2df, v2df) 29164 int __builtin_ia32_ucomisdle (v2df, v2df) 29165 int __builtin_ia32_ucomisdgt (v2df, v2df) 29166 int __builtin_ia32_ucomisdge (v2df, v2df) 29167 int __builtin_ia32_ucomisdneq (v2df, v2df) 29168 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 29169 v2df __builtin_ia32_cmpltpd (v2df, v2df) 29170 v2df __builtin_ia32_cmplepd (v2df, v2df) 29171 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 29172 v2df __builtin_ia32_cmpgepd (v2df, v2df) 29173 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 29174 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 29175 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 29176 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 29177 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 29178 v2df __builtin_ia32_cmpngepd (v2df, v2df) 29179 v2df __builtin_ia32_cmpordpd (v2df, v2df) 29180 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 29181 v2df __builtin_ia32_cmpltsd (v2df, v2df) 29182 v2df __builtin_ia32_cmplesd (v2df, v2df) 29183 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 29184 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 29185 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 29186 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 29187 v2df __builtin_ia32_cmpordsd (v2df, v2df) 29188 v2di __builtin_ia32_paddq (v2di, v2di) 29189 v2di __builtin_ia32_psubq (v2di, v2di) 29190 v2df __builtin_ia32_addpd (v2df, v2df) 29191 v2df __builtin_ia32_subpd (v2df, v2df) 29192 v2df __builtin_ia32_mulpd (v2df, v2df) 29193 v2df __builtin_ia32_divpd (v2df, v2df) 29194 v2df __builtin_ia32_addsd (v2df, v2df) 29195 v2df __builtin_ia32_subsd (v2df, v2df) 29196 v2df __builtin_ia32_mulsd (v2df, v2df) 29197 v2df __builtin_ia32_divsd (v2df, v2df) 29198 v2df __builtin_ia32_minpd (v2df, v2df) 29199 v2df __builtin_ia32_maxpd (v2df, v2df) 29200 v2df __builtin_ia32_minsd (v2df, v2df) 29201 v2df __builtin_ia32_maxsd (v2df, v2df) 29202 v2df __builtin_ia32_andpd (v2df, v2df) 29203 v2df __builtin_ia32_andnpd (v2df, v2df) 29204 v2df __builtin_ia32_orpd (v2df, v2df) 29205 v2df __builtin_ia32_xorpd (v2df, v2df) 29206 v2df __builtin_ia32_movsd (v2df, v2df) 29207 v2df __builtin_ia32_unpckhpd (v2df, v2df) 29208 v2df __builtin_ia32_unpcklpd (v2df, v2df) 29209 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 29210 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 29211 v4si __builtin_ia32_paddd128 (v4si, v4si) 29212 v2di __builtin_ia32_paddq128 (v2di, v2di) 29213 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 29214 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 29215 v4si __builtin_ia32_psubd128 (v4si, v4si) 29216 v2di __builtin_ia32_psubq128 (v2di, v2di) 29217 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 29218 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 29219 v2di __builtin_ia32_pand128 (v2di, v2di) 29220 v2di __builtin_ia32_pandn128 (v2di, v2di) 29221 v2di __builtin_ia32_por128 (v2di, v2di) 29222 v2di __builtin_ia32_pxor128 (v2di, v2di) 29223 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 29224 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 29225 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 29226 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 29227 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 29228 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 29229 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 29230 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 29231 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 29232 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 29233 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 29234 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 29235 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 29236 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 29237 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 29238 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 29239 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 29240 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 29241 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 29242 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 29243 v16qi __builtin_ia32_packsswb128 (v16qi, v16qi) 29244 v8hi __builtin_ia32_packssdw128 (v8hi, v8hi) 29245 v16qi __builtin_ia32_packuswb128 (v16qi, v16qi) 29246 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 29247 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 29248 v2df __builtin_ia32_loadupd (double *) 29249 void __builtin_ia32_storeupd (double *, v2df) 29250 v2df __builtin_ia32_loadhpd (v2df, double *) 29251 v2df __builtin_ia32_loadlpd (v2df, double *) 29252 int __builtin_ia32_movmskpd (v2df) 29253 int __builtin_ia32_pmovmskb128 (v16qi) 29254 void __builtin_ia32_movnti (int *, int) 29255 void __builtin_ia32_movntpd (double *, v2df) 29256 void __builtin_ia32_movntdq (v2df *, v2df) 29257 v4si __builtin_ia32_pshufd (v4si, int) 29258 v8hi __builtin_ia32_pshuflw (v8hi, int) 29259 v8hi __builtin_ia32_pshufhw (v8hi, int) 29260 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 29261 v2df __builtin_ia32_sqrtpd (v2df) 29262 v2df __builtin_ia32_sqrtsd (v2df) 29263 v2df __builtin_ia32_shufpd (v2df, v2df, int) 29264 v2df __builtin_ia32_cvtdq2pd (v4si) 29265 v4sf __builtin_ia32_cvtdq2ps (v4si) 29266 v4si __builtin_ia32_cvtpd2dq (v2df) 29267 v2si __builtin_ia32_cvtpd2pi (v2df) 29268 v4sf __builtin_ia32_cvtpd2ps (v2df) 29269 v4si __builtin_ia32_cvttpd2dq (v2df) 29270 v2si __builtin_ia32_cvttpd2pi (v2df) 29271 v2df __builtin_ia32_cvtpi2pd (v2si) 29272 int __builtin_ia32_cvtsd2si (v2df) 29273 int __builtin_ia32_cvttsd2si (v2df) 29274 long long __builtin_ia32_cvtsd2si64 (v2df) 29275 long long __builtin_ia32_cvttsd2si64 (v2df) 29276 v4si __builtin_ia32_cvtps2dq (v4sf) 29277 v2df __builtin_ia32_cvtps2pd (v4sf) 29278 v4si __builtin_ia32_cvttps2dq (v4sf) 29279 v2df __builtin_ia32_cvtsi2sd (v2df, int) 29280 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 29281 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 29282 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 29283 void __builtin_ia32_clflush (const void *) 29284 void __builtin_ia32_lfence (void) 29285 void __builtin_ia32_mfence (void) 29286 v16qi __builtin_ia32_loaddqu (const char *) 29287 void __builtin_ia32_storedqu (char *, v16qi) 29288 unsigned long long __builtin_ia32_pmuludq (v2si, v2si) 29289 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 29290 v8hi __builtin_ia32_psllw128 (v8hi, v2di) 29291 v4si __builtin_ia32_pslld128 (v4si, v2di) 29292 v2di __builtin_ia32_psllq128 (v4si, v2di) 29293 v8hi __builtin_ia32_psrlw128 (v8hi, v2di) 29294 v4si __builtin_ia32_psrld128 (v4si, v2di) 29295 v2di __builtin_ia32_psrlq128 (v2di, v2di) 29296 v8hi __builtin_ia32_psraw128 (v8hi, v2di) 29297 v4si __builtin_ia32_psrad128 (v4si, v2di) 29298 v2di __builtin_ia32_pslldqi128 (v2di, int) 29299 v8hi __builtin_ia32_psllwi128 (v8hi, int) 29300 v4si __builtin_ia32_pslldi128 (v4si, int) 29301 v2di __builtin_ia32_psllqi128 (v2di, int) 29302 v2di __builtin_ia32_psrldqi128 (v2di, int) 29303 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 29304 v4si __builtin_ia32_psrldi128 (v4si, int) 29305 v2di __builtin_ia32_psrlqi128 (v2di, int) 29306 v8hi __builtin_ia32_psrawi128 (v8hi, int) 29307 v4si __builtin_ia32_psradi128 (v4si, int) 29308 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 29309 29310 The following built-in functions are available when `-msse3' is used. 29311 All of them generate the machine instruction that is part of the name. 29312 29313 v2df __builtin_ia32_addsubpd (v2df, v2df) 29314 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 29315 v2df __builtin_ia32_haddpd (v2df, v2df) 29316 v4sf __builtin_ia32_haddps (v4sf, v4sf) 29317 v2df __builtin_ia32_hsubpd (v2df, v2df) 29318 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 29319 v16qi __builtin_ia32_lddqu (char const *) 29320 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 29321 v2df __builtin_ia32_movddup (v2df) 29322 v4sf __builtin_ia32_movshdup (v4sf) 29323 v4sf __builtin_ia32_movsldup (v4sf) 29324 void __builtin_ia32_mwait (unsigned int, unsigned int) 29325 29326 The following built-in functions are available when `-msse3' is used. 29327 29328 `v2df __builtin_ia32_loadddup (double const *)' 29329 Generates the `movddup' machine instruction as a load from memory. 29330 29331 The following built-in functions are available when `-mssse3' is used. 29332 All of them generate the machine instruction that is part of the name 29333 with MMX registers. 29334 29335 v2si __builtin_ia32_phaddd (v2si, v2si) 29336 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 29337 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 29338 v2si __builtin_ia32_phsubd (v2si, v2si) 29339 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 29340 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 29341 v8qi __builtin_ia32_pmaddubsw (v8qi, v8qi) 29342 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 29343 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 29344 v8qi __builtin_ia32_psignb (v8qi, v8qi) 29345 v2si __builtin_ia32_psignd (v2si, v2si) 29346 v4hi __builtin_ia32_psignw (v4hi, v4hi) 29347 long long __builtin_ia32_palignr (long long, long long, int) 29348 v8qi __builtin_ia32_pabsb (v8qi) 29349 v2si __builtin_ia32_pabsd (v2si) 29350 v4hi __builtin_ia32_pabsw (v4hi) 29351 29352 The following built-in functions are available when `-mssse3' is used. 29353 All of them generate the machine instruction that is part of the name 29354 with SSE registers. 29355 29356 v4si __builtin_ia32_phaddd128 (v4si, v4si) 29357 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 29358 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 29359 v4si __builtin_ia32_phsubd128 (v4si, v4si) 29360 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 29361 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 29362 v16qi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 29363 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 29364 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 29365 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 29366 v4si __builtin_ia32_psignd128 (v4si, v4si) 29367 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 29368 v2di __builtin_ia32_palignr (v2di, v2di, int) 29369 v16qi __builtin_ia32_pabsb128 (v16qi) 29370 v4si __builtin_ia32_pabsd128 (v4si) 29371 v8hi __builtin_ia32_pabsw128 (v8hi) 29372 29373 The following built-in functions are available when `-msse4.1' is 29374 used. All of them generate the machine instruction that is part of the 29375 name. 29376 29377 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 29378 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 29379 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 29380 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 29381 v2df __builtin_ia32_dppd (v2df, v2df, const int) 29382 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 29383 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 29384 v2di __builtin_ia32_movntdqa (v2di *); 29385 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 29386 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 29387 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 29388 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 29389 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 29390 v8hi __builtin_ia32_phminposuw128 (v8hi) 29391 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 29392 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 29393 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 29394 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 29395 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 29396 v4si __builtin_ia32_pminsd128 (v4si, v4si) 29397 v4si __builtin_ia32_pminud128 (v4si, v4si) 29398 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 29399 v4si __builtin_ia32_pmovsxbd128 (v16qi) 29400 v2di __builtin_ia32_pmovsxbq128 (v16qi) 29401 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 29402 v2di __builtin_ia32_pmovsxdq128 (v4si) 29403 v4si __builtin_ia32_pmovsxwd128 (v8hi) 29404 v2di __builtin_ia32_pmovsxwq128 (v8hi) 29405 v4si __builtin_ia32_pmovzxbd128 (v16qi) 29406 v2di __builtin_ia32_pmovzxbq128 (v16qi) 29407 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 29408 v2di __builtin_ia32_pmovzxdq128 (v4si) 29409 v4si __builtin_ia32_pmovzxwd128 (v8hi) 29410 v2di __builtin_ia32_pmovzxwq128 (v8hi) 29411 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 29412 v4si __builtin_ia32_pmulld128 (v4si, v4si) 29413 int __builtin_ia32_ptestc128 (v2di, v2di) 29414 int __builtin_ia32_ptestnzc128 (v2di, v2di) 29415 int __builtin_ia32_ptestz128 (v2di, v2di) 29416 v2df __builtin_ia32_roundpd (v2df, const int) 29417 v4sf __builtin_ia32_roundps (v4sf, const int) 29418 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 29419 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 29420 29421 The following built-in functions are available when `-msse4.1' is used. 29422 29423 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 29424 Generates the `insertps' machine instruction. 29425 29426 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 29427 Generates the `pextrb' machine instruction. 29428 29429 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 29430 Generates the `pinsrb' machine instruction. 29431 29432 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 29433 Generates the `pinsrd' machine instruction. 29434 29435 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 29436 Generates the `pinsrq' machine instruction in 64bit mode. 29437 29438 The following built-in functions are changed to generate new SSE4.1 29439 instructions when `-msse4.1' is used. 29440 29441 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 29442 Generates the `extractps' machine instruction. 29443 29444 `int __builtin_ia32_vec_ext_v4si (v4si, const int)' 29445 Generates the `pextrd' machine instruction. 29446 29447 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 29448 Generates the `pextrq' machine instruction in 64bit mode. 29449 29450 The following built-in functions are available when `-msse4.2' is 29451 used. All of them generate the machine instruction that is part of the 29452 name. 29453 29454 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 29455 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 29456 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 29457 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 29458 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 29459 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 29460 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 29461 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 29462 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 29463 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 29464 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 29465 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 29466 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 29467 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 29468 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 29469 29470 The following built-in functions are available when `-msse4.2' is used. 29471 29472 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 29473 Generates the `crc32b' machine instruction. 29474 29475 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 29476 Generates the `crc32w' machine instruction. 29477 29478 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 29479 Generates the `crc32l' machine instruction. 29480 29481 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 29482 29483 The following built-in functions are changed to generate new SSE4.2 29484 instructions when `-msse4.2' is used. 29485 29486 `int __builtin_popcount (unsigned int)' 29487 Generates the `popcntl' machine instruction. 29488 29489 `int __builtin_popcountl (unsigned long)' 29490 Generates the `popcntl' or `popcntq' machine instruction, 29491 depending on the size of `unsigned long'. 29492 29493 `int __builtin_popcountll (unsigned long long)' 29494 Generates the `popcntq' machine instruction. 29495 29496 The following built-in functions are available when `-msse4a' is used. 29497 All of them generate the machine instruction that is part of the name. 29498 29499 void __builtin_ia32_movntsd (double *, v2df) 29500 void __builtin_ia32_movntss (float *, v4sf) 29501 v2di __builtin_ia32_extrq (v2di, v16qi) 29502 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 29503 v2di __builtin_ia32_insertq (v2di, v2di) 29504 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 29505 29506 The following built-in functions are available when `-msse5' is used. 29507 All of them generate the machine instruction that is part of the name 29508 with MMX registers. 29509 29510 v2df __builtin_ia32_comeqpd (v2df, v2df) 29511 v2df __builtin_ia32_comeqps (v2df, v2df) 29512 v4sf __builtin_ia32_comeqsd (v4sf, v4sf) 29513 v4sf __builtin_ia32_comeqss (v4sf, v4sf) 29514 v2df __builtin_ia32_comfalsepd (v2df, v2df) 29515 v2df __builtin_ia32_comfalseps (v2df, v2df) 29516 v4sf __builtin_ia32_comfalsesd (v4sf, v4sf) 29517 v4sf __builtin_ia32_comfalsess (v4sf, v4sf) 29518 v2df __builtin_ia32_comgepd (v2df, v2df) 29519 v2df __builtin_ia32_comgeps (v2df, v2df) 29520 v4sf __builtin_ia32_comgesd (v4sf, v4sf) 29521 v4sf __builtin_ia32_comgess (v4sf, v4sf) 29522 v2df __builtin_ia32_comgtpd (v2df, v2df) 29523 v2df __builtin_ia32_comgtps (v2df, v2df) 29524 v4sf __builtin_ia32_comgtsd (v4sf, v4sf) 29525 v4sf __builtin_ia32_comgtss (v4sf, v4sf) 29526 v2df __builtin_ia32_comlepd (v2df, v2df) 29527 v2df __builtin_ia32_comleps (v2df, v2df) 29528 v4sf __builtin_ia32_comlesd (v4sf, v4sf) 29529 v4sf __builtin_ia32_comless (v4sf, v4sf) 29530 v2df __builtin_ia32_comltpd (v2df, v2df) 29531 v2df __builtin_ia32_comltps (v2df, v2df) 29532 v4sf __builtin_ia32_comltsd (v4sf, v4sf) 29533 v4sf __builtin_ia32_comltss (v4sf, v4sf) 29534 v2df __builtin_ia32_comnepd (v2df, v2df) 29535 v2df __builtin_ia32_comneps (v2df, v2df) 29536 v4sf __builtin_ia32_comnesd (v4sf, v4sf) 29537 v4sf __builtin_ia32_comness (v4sf, v4sf) 29538 v2df __builtin_ia32_comordpd (v2df, v2df) 29539 v2df __builtin_ia32_comordps (v2df, v2df) 29540 v4sf __builtin_ia32_comordsd (v4sf, v4sf) 29541 v4sf __builtin_ia32_comordss (v4sf, v4sf) 29542 v2df __builtin_ia32_comtruepd (v2df, v2df) 29543 v2df __builtin_ia32_comtrueps (v2df, v2df) 29544 v4sf __builtin_ia32_comtruesd (v4sf, v4sf) 29545 v4sf __builtin_ia32_comtruess (v4sf, v4sf) 29546 v2df __builtin_ia32_comueqpd (v2df, v2df) 29547 v2df __builtin_ia32_comueqps (v2df, v2df) 29548 v4sf __builtin_ia32_comueqsd (v4sf, v4sf) 29549 v4sf __builtin_ia32_comueqss (v4sf, v4sf) 29550 v2df __builtin_ia32_comugepd (v2df, v2df) 29551 v2df __builtin_ia32_comugeps (v2df, v2df) 29552 v4sf __builtin_ia32_comugesd (v4sf, v4sf) 29553 v4sf __builtin_ia32_comugess (v4sf, v4sf) 29554 v2df __builtin_ia32_comugtpd (v2df, v2df) 29555 v2df __builtin_ia32_comugtps (v2df, v2df) 29556 v4sf __builtin_ia32_comugtsd (v4sf, v4sf) 29557 v4sf __builtin_ia32_comugtss (v4sf, v4sf) 29558 v2df __builtin_ia32_comulepd (v2df, v2df) 29559 v2df __builtin_ia32_comuleps (v2df, v2df) 29560 v4sf __builtin_ia32_comulesd (v4sf, v4sf) 29561 v4sf __builtin_ia32_comuless (v4sf, v4sf) 29562 v2df __builtin_ia32_comultpd (v2df, v2df) 29563 v2df __builtin_ia32_comultps (v2df, v2df) 29564 v4sf __builtin_ia32_comultsd (v4sf, v4sf) 29565 v4sf __builtin_ia32_comultss (v4sf, v4sf) 29566 v2df __builtin_ia32_comunepd (v2df, v2df) 29567 v2df __builtin_ia32_comuneps (v2df, v2df) 29568 v4sf __builtin_ia32_comunesd (v4sf, v4sf) 29569 v4sf __builtin_ia32_comuness (v4sf, v4sf) 29570 v2df __builtin_ia32_comunordpd (v2df, v2df) 29571 v2df __builtin_ia32_comunordps (v2df, v2df) 29572 v4sf __builtin_ia32_comunordsd (v4sf, v4sf) 29573 v4sf __builtin_ia32_comunordss (v4sf, v4sf) 29574 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 29575 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 29576 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 29577 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 29578 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 29579 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 29580 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 29581 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 29582 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 29583 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 29584 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 29585 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 29586 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 29587 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 29588 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 29589 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 29590 v2df __builtin_ia32_frczpd (v2df) 29591 v4sf __builtin_ia32_frczps (v4sf) 29592 v2df __builtin_ia32_frczsd (v2df, v2df) 29593 v4sf __builtin_ia32_frczss (v4sf, v4sf) 29594 v2di __builtin_ia32_pcmov (v2di, v2di, v2di) 29595 v2di __builtin_ia32_pcmov_v2di (v2di, v2di, v2di) 29596 v4si __builtin_ia32_pcmov_v4si (v4si, v4si, v4si) 29597 v8hi __builtin_ia32_pcmov_v8hi (v8hi, v8hi, v8hi) 29598 v16qi __builtin_ia32_pcmov_v16qi (v16qi, v16qi, v16qi) 29599 v2df __builtin_ia32_pcmov_v2df (v2df, v2df, v2df) 29600 v4sf __builtin_ia32_pcmov_v4sf (v4sf, v4sf, v4sf) 29601 v16qi __builtin_ia32_pcomeqb (v16qi, v16qi) 29602 v8hi __builtin_ia32_pcomeqw (v8hi, v8hi) 29603 v4si __builtin_ia32_pcomeqd (v4si, v4si) 29604 v2di __builtin_ia32_pcomeqq (v2di, v2di) 29605 v16qi __builtin_ia32_pcomequb (v16qi, v16qi) 29606 v4si __builtin_ia32_pcomequd (v4si, v4si) 29607 v2di __builtin_ia32_pcomequq (v2di, v2di) 29608 v8hi __builtin_ia32_pcomequw (v8hi, v8hi) 29609 v8hi __builtin_ia32_pcomeqw (v8hi, v8hi) 29610 v16qi __builtin_ia32_pcomfalseb (v16qi, v16qi) 29611 v4si __builtin_ia32_pcomfalsed (v4si, v4si) 29612 v2di __builtin_ia32_pcomfalseq (v2di, v2di) 29613 v16qi __builtin_ia32_pcomfalseub (v16qi, v16qi) 29614 v4si __builtin_ia32_pcomfalseud (v4si, v4si) 29615 v2di __builtin_ia32_pcomfalseuq (v2di, v2di) 29616 v8hi __builtin_ia32_pcomfalseuw (v8hi, v8hi) 29617 v8hi __builtin_ia32_pcomfalsew (v8hi, v8hi) 29618 v16qi __builtin_ia32_pcomgeb (v16qi, v16qi) 29619 v4si __builtin_ia32_pcomged (v4si, v4si) 29620 v2di __builtin_ia32_pcomgeq (v2di, v2di) 29621 v16qi __builtin_ia32_pcomgeub (v16qi, v16qi) 29622 v4si __builtin_ia32_pcomgeud (v4si, v4si) 29623 v2di __builtin_ia32_pcomgeuq (v2di, v2di) 29624 v8hi __builtin_ia32_pcomgeuw (v8hi, v8hi) 29625 v8hi __builtin_ia32_pcomgew (v8hi, v8hi) 29626 v16qi __builtin_ia32_pcomgtb (v16qi, v16qi) 29627 v4si __builtin_ia32_pcomgtd (v4si, v4si) 29628 v2di __builtin_ia32_pcomgtq (v2di, v2di) 29629 v16qi __builtin_ia32_pcomgtub (v16qi, v16qi) 29630 v4si __builtin_ia32_pcomgtud (v4si, v4si) 29631 v2di __builtin_ia32_pcomgtuq (v2di, v2di) 29632 v8hi __builtin_ia32_pcomgtuw (v8hi, v8hi) 29633 v8hi __builtin_ia32_pcomgtw (v8hi, v8hi) 29634 v16qi __builtin_ia32_pcomleb (v16qi, v16qi) 29635 v4si __builtin_ia32_pcomled (v4si, v4si) 29636 v2di __builtin_ia32_pcomleq (v2di, v2di) 29637 v16qi __builtin_ia32_pcomleub (v16qi, v16qi) 29638 v4si __builtin_ia32_pcomleud (v4si, v4si) 29639 v2di __builtin_ia32_pcomleuq (v2di, v2di) 29640 v8hi __builtin_ia32_pcomleuw (v8hi, v8hi) 29641 v8hi __builtin_ia32_pcomlew (v8hi, v8hi) 29642 v16qi __builtin_ia32_pcomltb (v16qi, v16qi) 29643 v4si __builtin_ia32_pcomltd (v4si, v4si) 29644 v2di __builtin_ia32_pcomltq (v2di, v2di) 29645 v16qi __builtin_ia32_pcomltub (v16qi, v16qi) 29646 v4si __builtin_ia32_pcomltud (v4si, v4si) 29647 v2di __builtin_ia32_pcomltuq (v2di, v2di) 29648 v8hi __builtin_ia32_pcomltuw (v8hi, v8hi) 29649 v8hi __builtin_ia32_pcomltw (v8hi, v8hi) 29650 v16qi __builtin_ia32_pcomneb (v16qi, v16qi) 29651 v4si __builtin_ia32_pcomned (v4si, v4si) 29652 v2di __builtin_ia32_pcomneq (v2di, v2di) 29653 v16qi __builtin_ia32_pcomneub (v16qi, v16qi) 29654 v4si __builtin_ia32_pcomneud (v4si, v4si) 29655 v2di __builtin_ia32_pcomneuq (v2di, v2di) 29656 v8hi __builtin_ia32_pcomneuw (v8hi, v8hi) 29657 v8hi __builtin_ia32_pcomnew (v8hi, v8hi) 29658 v16qi __builtin_ia32_pcomtrueb (v16qi, v16qi) 29659 v4si __builtin_ia32_pcomtrued (v4si, v4si) 29660 v2di __builtin_ia32_pcomtrueq (v2di, v2di) 29661 v16qi __builtin_ia32_pcomtrueub (v16qi, v16qi) 29662 v4si __builtin_ia32_pcomtrueud (v4si, v4si) 29663 v2di __builtin_ia32_pcomtrueuq (v2di, v2di) 29664 v8hi __builtin_ia32_pcomtrueuw (v8hi, v8hi) 29665 v8hi __builtin_ia32_pcomtruew (v8hi, v8hi) 29666 v4df __builtin_ia32_permpd (v2df, v2df, v16qi) 29667 v4sf __builtin_ia32_permps (v4sf, v4sf, v16qi) 29668 v4si __builtin_ia32_phaddbd (v16qi) 29669 v2di __builtin_ia32_phaddbq (v16qi) 29670 v8hi __builtin_ia32_phaddbw (v16qi) 29671 v2di __builtin_ia32_phadddq (v4si) 29672 v4si __builtin_ia32_phaddubd (v16qi) 29673 v2di __builtin_ia32_phaddubq (v16qi) 29674 v8hi __builtin_ia32_phaddubw (v16qi) 29675 v2di __builtin_ia32_phaddudq (v4si) 29676 v4si __builtin_ia32_phadduwd (v8hi) 29677 v2di __builtin_ia32_phadduwq (v8hi) 29678 v4si __builtin_ia32_phaddwd (v8hi) 29679 v2di __builtin_ia32_phaddwq (v8hi) 29680 v8hi __builtin_ia32_phsubbw (v16qi) 29681 v2di __builtin_ia32_phsubdq (v4si) 29682 v4si __builtin_ia32_phsubwd (v8hi) 29683 v4si __builtin_ia32_pmacsdd (v4si, v4si, v4si) 29684 v2di __builtin_ia32_pmacsdqh (v4si, v4si, v2di) 29685 v2di __builtin_ia32_pmacsdql (v4si, v4si, v2di) 29686 v4si __builtin_ia32_pmacssdd (v4si, v4si, v4si) 29687 v2di __builtin_ia32_pmacssdqh (v4si, v4si, v2di) 29688 v2di __builtin_ia32_pmacssdql (v4si, v4si, v2di) 29689 v4si __builtin_ia32_pmacsswd (v8hi, v8hi, v4si) 29690 v8hi __builtin_ia32_pmacssww (v8hi, v8hi, v8hi) 29691 v4si __builtin_ia32_pmacswd (v8hi, v8hi, v4si) 29692 v8hi __builtin_ia32_pmacsww (v8hi, v8hi, v8hi) 29693 v4si __builtin_ia32_pmadcsswd (v8hi, v8hi, v4si) 29694 v4si __builtin_ia32_pmadcswd (v8hi, v8hi, v4si) 29695 v16qi __builtin_ia32_pperm (v16qi, v16qi, v16qi) 29696 v16qi __builtin_ia32_protb (v16qi, v16qi) 29697 v4si __builtin_ia32_protd (v4si, v4si) 29698 v2di __builtin_ia32_protq (v2di, v2di) 29699 v8hi __builtin_ia32_protw (v8hi, v8hi) 29700 v16qi __builtin_ia32_pshab (v16qi, v16qi) 29701 v4si __builtin_ia32_pshad (v4si, v4si) 29702 v2di __builtin_ia32_pshaq (v2di, v2di) 29703 v8hi __builtin_ia32_pshaw (v8hi, v8hi) 29704 v16qi __builtin_ia32_pshlb (v16qi, v16qi) 29705 v4si __builtin_ia32_pshld (v4si, v4si) 29706 v2di __builtin_ia32_pshlq (v2di, v2di) 29707 v8hi __builtin_ia32_pshlw (v8hi, v8hi) 29708 29709 The following builtin-in functions are available when `-msse5' is 29710 used. The second argument must be an integer constant and generate the 29711 machine instruction that is part of the name with the `_imm' suffix 29712 removed. 29713 29714 v16qi __builtin_ia32_protb_imm (v16qi, int) 29715 v4si __builtin_ia32_protd_imm (v4si, int) 29716 v2di __builtin_ia32_protq_imm (v2di, int) 29717 v8hi __builtin_ia32_protw_imm (v8hi, int) 29718 29719 The following built-in functions are available when `-m3dnow' is used. 29720 All of them generate the machine instruction that is part of the name. 29721 29722 void __builtin_ia32_femms (void) 29723 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 29724 v2si __builtin_ia32_pf2id (v2sf) 29725 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 29726 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 29727 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 29728 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 29729 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 29730 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 29731 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 29732 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 29733 v2sf __builtin_ia32_pfrcp (v2sf) 29734 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 29735 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 29736 v2sf __builtin_ia32_pfrsqrt (v2sf) 29737 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 29738 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 29739 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 29740 v2sf __builtin_ia32_pi2fd (v2si) 29741 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 29742 29743 The following built-in functions are available when both `-m3dnow' and 29744 `-march=athlon' are used. All of them generate the machine instruction 29745 that is part of the name. 29746 29747 v2si __builtin_ia32_pf2iw (v2sf) 29748 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 29749 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 29750 v2sf __builtin_ia32_pi2fw (v2si) 29751 v2sf __builtin_ia32_pswapdsf (v2sf) 29752 v2si __builtin_ia32_pswapdsi (v2si) 29753 29754 29755 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 29756 29757 5.50.7 MIPS DSP Built-in Functions 29758 ---------------------------------- 29759 29760 The MIPS DSP Application-Specific Extension (ASE) includes new 29761 instructions that are designed to improve the performance of DSP and 29762 media applications. It provides instructions that operate on packed 29763 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 29764 29765 GCC supports MIPS DSP operations using both the generic vector 29766 extensions (*note Vector Extensions::) and a collection of 29767 MIPS-specific built-in functions. Both kinds of support are enabled by 29768 the `-mdsp' command-line option. 29769 29770 Revision 2 of the ASE was introduced in the second half of 2006. This 29771 revision adds extra instructions to the original ASE, but is otherwise 29772 backwards-compatible with it. You can select revision 2 using the 29773 command-line option `-mdspr2'; this option implies `-mdsp'. 29774 29775 At present, GCC only provides support for operations on 32-bit 29776 vectors. The vector type associated with 8-bit integer data is usually 29777 called `v4i8', the vector type associated with Q7 is usually called 29778 `v4q7', the vector type associated with 16-bit integer data is usually 29779 called `v2i16', and the vector type associated with Q15 is usually 29780 called `v2q15'. They can be defined in C as follows: 29781 29782 typedef signed char v4i8 __attribute__ ((vector_size(4))); 29783 typedef signed char v4q7 __attribute__ ((vector_size(4))); 29784 typedef short v2i16 __attribute__ ((vector_size(4))); 29785 typedef short v2q15 __attribute__ ((vector_size(4))); 29786 29787 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 29788 way as aggregates. For example: 29789 29790 v4i8 a = {1, 2, 3, 4}; 29791 v4i8 b; 29792 b = (v4i8) {5, 6, 7, 8}; 29793 29794 v2q15 c = {0x0fcb, 0x3a75}; 29795 v2q15 d; 29796 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 29797 29798 _Note:_ The CPU's endianness determines the order in which values are 29799 packed. On little-endian targets, the first value is the least 29800 significant and the last value is the most significant. The opposite 29801 order applies to big-endian targets. For example, the code above will 29802 set the lowest byte of `a' to `1' on little-endian targets and `4' on 29803 big-endian targets. 29804 29805 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 29806 representation. As shown in this example, the integer representation 29807 of a Q7 value can be obtained by multiplying the fractional value by 29808 `0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 29809 The equivalent for Q31 values is to multiply by `0x1.0p31'. 29810 29811 The table below lists the `v4i8' and `v2q15' operations for which 29812 hardware support exists. `a' and `b' are `v4i8' values, and `c' and 29813 `d' are `v2q15' values. 29814 29815 C code MIPS instruction 29816 `a + b' `addu.qb' 29817 `c + d' `addq.ph' 29818 `a - b' `subu.qb' 29819 `c - d' `subq.ph' 29820 29821 The table below lists the `v2i16' operation for which hardware support 29822 exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 29823 29824 C code MIPS instruction 29825 `e * f' `mul.ph' 29826 29827 It is easier to describe the DSP built-in functions if we first define 29828 the following types: 29829 29830 typedef int q31; 29831 typedef int i32; 29832 typedef unsigned int ui32; 29833 typedef long long a64; 29834 29835 `q31' and `i32' are actually the same as `int', but we use `q31' to 29836 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 29837 value. Similarly, `a64' is the same as `long long', but we use `a64' 29838 to indicate values that will be placed in one of the four DSP 29839 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 29840 29841 Also, some built-in functions prefer or require immediate numbers as 29842 parameters, because the corresponding DSP instructions accept both 29843 immediate numbers and register operands, or accept immediate numbers 29844 only. The immediate parameters are listed as follows. 29845 29846 imm0_3: 0 to 3. 29847 imm0_7: 0 to 7. 29848 imm0_15: 0 to 15. 29849 imm0_31: 0 to 31. 29850 imm0_63: 0 to 63. 29851 imm0_255: 0 to 255. 29852 imm_n32_31: -32 to 31. 29853 imm_n512_511: -512 to 511. 29854 29855 The following built-in functions map directly to a particular MIPS DSP 29856 instruction. Please refer to the architecture specification for 29857 details on what each instruction does. 29858 29859 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 29860 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 29861 q31 __builtin_mips_addq_s_w (q31, q31) 29862 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 29863 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 29864 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 29865 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 29866 q31 __builtin_mips_subq_s_w (q31, q31) 29867 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 29868 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 29869 i32 __builtin_mips_addsc (i32, i32) 29870 i32 __builtin_mips_addwc (i32, i32) 29871 i32 __builtin_mips_modsub (i32, i32) 29872 i32 __builtin_mips_raddu_w_qb (v4i8) 29873 v2q15 __builtin_mips_absq_s_ph (v2q15) 29874 q31 __builtin_mips_absq_s_w (q31) 29875 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 29876 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 29877 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 29878 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 29879 q31 __builtin_mips_preceq_w_phl (v2q15) 29880 q31 __builtin_mips_preceq_w_phr (v2q15) 29881 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 29882 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 29883 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 29884 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 29885 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 29886 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 29887 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 29888 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 29889 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 29890 v4i8 __builtin_mips_shll_qb (v4i8, i32) 29891 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 29892 v2q15 __builtin_mips_shll_ph (v2q15, i32) 29893 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 29894 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 29895 q31 __builtin_mips_shll_s_w (q31, imm0_31) 29896 q31 __builtin_mips_shll_s_w (q31, i32) 29897 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 29898 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 29899 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 29900 v2q15 __builtin_mips_shra_ph (v2q15, i32) 29901 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 29902 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 29903 q31 __builtin_mips_shra_r_w (q31, imm0_31) 29904 q31 __builtin_mips_shra_r_w (q31, i32) 29905 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 29906 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 29907 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 29908 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 29909 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 29910 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 29911 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 29912 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 29913 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 29914 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 29915 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 29916 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 29917 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 29918 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 29919 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 29920 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 29921 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 29922 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 29923 i32 __builtin_mips_bitrev (i32) 29924 i32 __builtin_mips_insv (i32, i32) 29925 v4i8 __builtin_mips_repl_qb (imm0_255) 29926 v4i8 __builtin_mips_repl_qb (i32) 29927 v2q15 __builtin_mips_repl_ph (imm_n512_511) 29928 v2q15 __builtin_mips_repl_ph (i32) 29929 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 29930 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 29931 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 29932 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 29933 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 29934 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 29935 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 29936 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 29937 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 29938 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 29939 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 29940 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 29941 i32 __builtin_mips_extr_w (a64, imm0_31) 29942 i32 __builtin_mips_extr_w (a64, i32) 29943 i32 __builtin_mips_extr_r_w (a64, imm0_31) 29944 i32 __builtin_mips_extr_s_h (a64, i32) 29945 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 29946 i32 __builtin_mips_extr_rs_w (a64, i32) 29947 i32 __builtin_mips_extr_s_h (a64, imm0_31) 29948 i32 __builtin_mips_extr_r_w (a64, i32) 29949 i32 __builtin_mips_extp (a64, imm0_31) 29950 i32 __builtin_mips_extp (a64, i32) 29951 i32 __builtin_mips_extpdp (a64, imm0_31) 29952 i32 __builtin_mips_extpdp (a64, i32) 29953 a64 __builtin_mips_shilo (a64, imm_n32_31) 29954 a64 __builtin_mips_shilo (a64, i32) 29955 a64 __builtin_mips_mthlip (a64, i32) 29956 void __builtin_mips_wrdsp (i32, imm0_63) 29957 i32 __builtin_mips_rddsp (imm0_63) 29958 i32 __builtin_mips_lbux (void *, i32) 29959 i32 __builtin_mips_lhx (void *, i32) 29960 i32 __builtin_mips_lwx (void *, i32) 29961 i32 __builtin_mips_bposge32 (void) 29962 29963 The following built-in functions map directly to a particular MIPS DSP 29964 REV 2 instruction. Please refer to the architecture specification for 29965 details on what each instruction does. 29966 29967 v4q7 __builtin_mips_absq_s_qb (v4q7); 29968 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 29969 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 29970 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 29971 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 29972 i32 __builtin_mips_append (i32, i32, imm0_31); 29973 i32 __builtin_mips_balign (i32, i32, imm0_3); 29974 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 29975 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 29976 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 29977 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 29978 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 29979 a64 __builtin_mips_madd (a64, i32, i32); 29980 a64 __builtin_mips_maddu (a64, ui32, ui32); 29981 a64 __builtin_mips_msub (a64, i32, i32); 29982 a64 __builtin_mips_msubu (a64, ui32, ui32); 29983 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 29984 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 29985 q31 __builtin_mips_mulq_rs_w (q31, q31); 29986 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 29987 q31 __builtin_mips_mulq_s_w (q31, q31); 29988 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 29989 a64 __builtin_mips_mult (i32, i32); 29990 a64 __builtin_mips_multu (ui32, ui32); 29991 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 29992 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 29993 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 29994 i32 __builtin_mips_prepend (i32, i32, imm0_31); 29995 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 29996 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 29997 v4i8 __builtin_mips_shra_qb (v4i8, i32); 29998 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 29999 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 30000 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 30001 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 30002 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 30003 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 30004 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 30005 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 30006 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 30007 q31 __builtin_mips_addqh_w (q31, q31); 30008 q31 __builtin_mips_addqh_r_w (q31, q31); 30009 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 30010 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 30011 q31 __builtin_mips_subqh_w (q31, q31); 30012 q31 __builtin_mips_subqh_r_w (q31, q31); 30013 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 30014 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 30015 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 30016 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 30017 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 30018 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 30019 30020 30021 File: gcc.info, Node: MIPS Paired-Single Support, Next: PowerPC AltiVec Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 30022 30023 5.50.8 MIPS Paired-Single Support 30024 --------------------------------- 30025 30026 The MIPS64 architecture includes a number of instructions that operate 30027 on pairs of single-precision floating-point values. Each pair is 30028 packed into a 64-bit floating-point register, with one element being 30029 designated the "upper half" and the other being designated the "lower 30030 half". 30031 30032 GCC supports paired-single operations using both the generic vector 30033 extensions (*note Vector Extensions::) and a collection of 30034 MIPS-specific built-in functions. Both kinds of support are enabled by 30035 the `-mpaired-single' command-line option. 30036 30037 The vector type associated with paired-single values is usually called 30038 `v2sf'. It can be defined in C as follows: 30039 30040 typedef float v2sf __attribute__ ((vector_size (8))); 30041 30042 `v2sf' values are initialized in the same way as aggregates. For 30043 example: 30044 30045 v2sf a = {1.5, 9.1}; 30046 v2sf b; 30047 float e, f; 30048 b = (v2sf) {e, f}; 30049 30050 _Note:_ The CPU's endianness determines which value is stored in the 30051 upper half of a register and which value is stored in the lower half. 30052 On little-endian targets, the first value is the lower one and the 30053 second value is the upper one. The opposite order applies to 30054 big-endian targets. For example, the code above will set the lower 30055 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 30056 targets. 30057 30058 * Menu: 30059 30060 * Paired-Single Arithmetic:: 30061 * Paired-Single Built-in Functions:: 30062 * MIPS-3D Built-in Functions:: 30063 30064 30065 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support 30066 30067 5.50.8.1 Paired-Single Arithmetic 30068 ................................. 30069 30070 The table below lists the `v2sf' operations for which hardware support 30071 exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 30072 value. 30073 30074 C code MIPS instruction 30075 `a + b' `add.ps' 30076 `a - b' `sub.ps' 30077 `-a' `neg.ps' 30078 `a * b' `mul.ps' 30079 `a * b + c' `madd.ps' 30080 `a * b - c' `msub.ps' 30081 `-(a * b + c)' `nmadd.ps' 30082 `-(a * b - c)' `nmsub.ps' 30083 `x ? a : b' `movn.ps'/`movz.ps' 30084 30085 Note that the multiply-accumulate instructions can be disabled using 30086 the command-line option `-mno-fused-madd'. 30087 30088 30089 File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Paired-Single Support 30090 30091 5.50.8.2 Paired-Single Built-in Functions 30092 ......................................... 30093 30094 The following paired-single functions map directly to a particular MIPS 30095 instruction. Please refer to the architecture specification for 30096 details on what each instruction does. 30097 30098 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 30099 Pair lower lower (`pll.ps'). 30100 30101 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 30102 Pair upper lower (`pul.ps'). 30103 30104 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 30105 Pair lower upper (`plu.ps'). 30106 30107 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 30108 Pair upper upper (`puu.ps'). 30109 30110 `v2sf __builtin_mips_cvt_ps_s (float, float)' 30111 Convert pair to paired single (`cvt.ps.s'). 30112 30113 `float __builtin_mips_cvt_s_pl (v2sf)' 30114 Convert pair lower to single (`cvt.s.pl'). 30115 30116 `float __builtin_mips_cvt_s_pu (v2sf)' 30117 Convert pair upper to single (`cvt.s.pu'). 30118 30119 `v2sf __builtin_mips_abs_ps (v2sf)' 30120 Absolute value (`abs.ps'). 30121 30122 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 30123 Align variable (`alnv.ps'). 30124 30125 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 30126 otherwise the result will be unpredictable. Please read the 30127 instruction description for details. 30128 30129 The following multi-instruction functions are also available. In each 30130 case, COND can be any of the 16 floating-point conditions: `f', `un', 30131 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 30132 `lt', `nge', `le' or `ngt'. 30133 30134 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 30135 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 30136 Conditional move based on floating point comparison (`c.COND.ps', 30137 `movt.ps'/`movf.ps'). 30138 30139 The `movt' functions return the value X computed by: 30140 30141 c.COND.ps CC,A,B 30142 mov.ps X,C 30143 movt.ps X,D,CC 30144 30145 The `movf' functions are similar but use `movf.ps' instead of 30146 `movt.ps'. 30147 30148 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 30149 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 30150 Comparison of two paired-single values (`c.COND.ps', 30151 `bc1t'/`bc1f'). 30152 30153 These functions compare A and B using `c.COND.ps' and return 30154 either the upper or lower half of the result. For example: 30155 30156 v2sf a, b; 30157 if (__builtin_mips_upper_c_eq_ps (a, b)) 30158 upper_halves_are_equal (); 30159 else 30160 upper_halves_are_unequal (); 30161 30162 if (__builtin_mips_lower_c_eq_ps (a, b)) 30163 lower_halves_are_equal (); 30164 else 30165 lower_halves_are_unequal (); 30166 30167 30168 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support 30169 30170 5.50.8.3 MIPS-3D Built-in Functions 30171 ................................... 30172 30173 The MIPS-3D Application-Specific Extension (ASE) includes additional 30174 paired-single instructions that are designed to improve the performance 30175 of 3D graphics operations. Support for these instructions is controlled 30176 by the `-mips3d' command-line option. 30177 30178 The functions listed below map directly to a particular MIPS-3D 30179 instruction. Please refer to the architecture specification for more 30180 details on what each instruction does. 30181 30182 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 30183 Reduction add (`addr.ps'). 30184 30185 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 30186 Reduction multiply (`mulr.ps'). 30187 30188 `v2sf __builtin_mips_cvt_pw_ps (v2sf)' 30189 Convert paired single to paired word (`cvt.pw.ps'). 30190 30191 `v2sf __builtin_mips_cvt_ps_pw (v2sf)' 30192 Convert paired word to paired single (`cvt.ps.pw'). 30193 30194 `float __builtin_mips_recip1_s (float)' 30195 `double __builtin_mips_recip1_d (double)' 30196 `v2sf __builtin_mips_recip1_ps (v2sf)' 30197 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 30198 30199 `float __builtin_mips_recip2_s (float, float)' 30200 `double __builtin_mips_recip2_d (double, double)' 30201 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 30202 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 30203 30204 `float __builtin_mips_rsqrt1_s (float)' 30205 `double __builtin_mips_rsqrt1_d (double)' 30206 `v2sf __builtin_mips_rsqrt1_ps (v2sf)' 30207 Reduced precision reciprocal square root (sequence step 1) 30208 (`rsqrt1.FMT'). 30209 30210 `float __builtin_mips_rsqrt2_s (float, float)' 30211 `double __builtin_mips_rsqrt2_d (double, double)' 30212 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 30213 Reduced precision reciprocal square root (sequence step 2) 30214 (`rsqrt2.FMT'). 30215 30216 The following multi-instruction functions are also available. In each 30217 case, COND can be any of the 16 floating-point conditions: `f', `un', 30218 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 30219 `lt', `nge', `le' or `ngt'. 30220 30221 `int __builtin_mips_cabs_COND_s (float A, float B)' 30222 `int __builtin_mips_cabs_COND_d (double A, double B)' 30223 Absolute comparison of two scalar values (`cabs.COND.FMT', 30224 `bc1t'/`bc1f'). 30225 30226 These functions compare A and B using `cabs.COND.s' or 30227 `cabs.COND.d' and return the result as a boolean value. For 30228 example: 30229 30230 float a, b; 30231 if (__builtin_mips_cabs_eq_s (a, b)) 30232 true (); 30233 else 30234 false (); 30235 30236 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 30237 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 30238 Absolute comparison of two paired-single values (`cabs.COND.ps', 30239 `bc1t'/`bc1f'). 30240 30241 These functions compare A and B using `cabs.COND.ps' and return 30242 either the upper or lower half of the result. For example: 30243 30244 v2sf a, b; 30245 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 30246 upper_halves_are_equal (); 30247 else 30248 upper_halves_are_unequal (); 30249 30250 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 30251 lower_halves_are_equal (); 30252 else 30253 lower_halves_are_unequal (); 30254 30255 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 30256 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 30257 Conditional move based on absolute comparison (`cabs.COND.ps', 30258 `movt.ps'/`movf.ps'). 30259 30260 The `movt' functions return the value X computed by: 30261 30262 cabs.COND.ps CC,A,B 30263 mov.ps X,C 30264 movt.ps X,D,CC 30265 30266 The `movf' functions are similar but use `movf.ps' instead of 30267 `movt.ps'. 30268 30269 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 30270 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 30271 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 30272 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 30273 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 30274 `bc1any2t'/`bc1any2f'). 30275 30276 These functions compare A and B using `c.COND.ps' or 30277 `cabs.COND.ps'. The `any' forms return true if either result is 30278 true and the `all' forms return true if both results are true. 30279 For example: 30280 30281 v2sf a, b; 30282 if (__builtin_mips_any_c_eq_ps (a, b)) 30283 one_is_true (); 30284 else 30285 both_are_false (); 30286 30287 if (__builtin_mips_all_c_eq_ps (a, b)) 30288 both_are_true (); 30289 else 30290 one_is_false (); 30291 30292 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 30293 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 30294 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 30295 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 30296 Comparison of four paired-single values 30297 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 30298 30299 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 30300 with B and to compare C with D. The `any' forms return true if 30301 any of the four results are true and the `all' forms return true 30302 if all four results are true. For example: 30303 30304 v2sf a, b, c, d; 30305 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 30306 some_are_true (); 30307 else 30308 all_are_false (); 30309 30310 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 30311 all_are_true (); 30312 else 30313 some_are_false (); 30314 30315 30316 File: gcc.info, Node: PowerPC AltiVec Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 30317 30318 5.50.9 PowerPC AltiVec Built-in Functions 30319 ----------------------------------------- 30320 30321 GCC provides an interface for the PowerPC family of processors to access 30322 the AltiVec operations described in Motorola's AltiVec Programming 30323 Interface Manual. The interface is made available by including 30324 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 30325 supports the following vector types. 30326 30327 vector unsigned char 30328 vector signed char 30329 vector bool char 30330 30331 vector unsigned short 30332 vector signed short 30333 vector bool short 30334 vector pixel 30335 30336 vector unsigned int 30337 vector signed int 30338 vector bool int 30339 vector float 30340 30341 GCC's implementation of the high-level language interface available 30342 from C and C++ code differs from Motorola's documentation in several 30343 ways. 30344 30345 * A vector constant is a list of constant expressions within curly 30346 braces. 30347 30348 * A vector initializer requires no cast if the vector constant is of 30349 the same type as the variable it is initializing. 30350 30351 * If `signed' or `unsigned' is omitted, the signedness of the vector 30352 type is the default signedness of the base type. The default 30353 varies depending on the operating system, so a portable program 30354 should always specify the signedness. 30355 30356 * Compiling with `-maltivec' adds keywords `__vector', `__pixel', 30357 and `__bool'. Macros `vector', `pixel', and `bool' are defined in 30358 `<altivec.h>' and can be undefined. 30359 30360 * GCC allows using a `typedef' name as the type specifier for a 30361 vector type. 30362 30363 * For C, overloaded functions are implemented with macros so the 30364 following does not work: 30365 30366 vec_add ((vector signed int){1, 2, 3, 4}, foo); 30367 30368 Since `vec_add' is a macro, the vector constant in the example is 30369 treated as four separate arguments. Wrap the entire argument in 30370 parentheses for this to work. 30371 30372 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 30373 GCC uses built-in functions to achieve the functionality in the 30374 aforementioned header file, but they are not supported and are subject 30375 to change without notice. 30376 30377 The following interfaces are supported for the generic and specific 30378 AltiVec operations and the AltiVec predicates. In cases where there is 30379 a direct mapping between generic and specific operations, only the 30380 generic names are shown here, although the specific operations can also 30381 be used. 30382 30383 Arguments that are documented as `const int' require literal integral 30384 values within the range required for that operation. 30385 30386 vector signed char vec_abs (vector signed char); 30387 vector signed short vec_abs (vector signed short); 30388 vector signed int vec_abs (vector signed int); 30389 vector float vec_abs (vector float); 30390 30391 vector signed char vec_abss (vector signed char); 30392 vector signed short vec_abss (vector signed short); 30393 vector signed int vec_abss (vector signed int); 30394 30395 vector signed char vec_add (vector bool char, vector signed char); 30396 vector signed char vec_add (vector signed char, vector bool char); 30397 vector signed char vec_add (vector signed char, vector signed char); 30398 vector unsigned char vec_add (vector bool char, vector unsigned char); 30399 vector unsigned char vec_add (vector unsigned char, vector bool char); 30400 vector unsigned char vec_add (vector unsigned char, 30401 vector unsigned char); 30402 vector signed short vec_add (vector bool short, vector signed short); 30403 vector signed short vec_add (vector signed short, vector bool short); 30404 vector signed short vec_add (vector signed short, vector signed short); 30405 vector unsigned short vec_add (vector bool short, 30406 vector unsigned short); 30407 vector unsigned short vec_add (vector unsigned short, 30408 vector bool short); 30409 vector unsigned short vec_add (vector unsigned short, 30410 vector unsigned short); 30411 vector signed int vec_add (vector bool int, vector signed int); 30412 vector signed int vec_add (vector signed int, vector bool int); 30413 vector signed int vec_add (vector signed int, vector signed int); 30414 vector unsigned int vec_add (vector bool int, vector unsigned int); 30415 vector unsigned int vec_add (vector unsigned int, vector bool int); 30416 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 30417 vector float vec_add (vector float, vector float); 30418 30419 vector float vec_vaddfp (vector float, vector float); 30420 30421 vector signed int vec_vadduwm (vector bool int, vector signed int); 30422 vector signed int vec_vadduwm (vector signed int, vector bool int); 30423 vector signed int vec_vadduwm (vector signed int, vector signed int); 30424 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 30425 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 30426 vector unsigned int vec_vadduwm (vector unsigned int, 30427 vector unsigned int); 30428 30429 vector signed short vec_vadduhm (vector bool short, 30430 vector signed short); 30431 vector signed short vec_vadduhm (vector signed short, 30432 vector bool short); 30433 vector signed short vec_vadduhm (vector signed short, 30434 vector signed short); 30435 vector unsigned short vec_vadduhm (vector bool short, 30436 vector unsigned short); 30437 vector unsigned short vec_vadduhm (vector unsigned short, 30438 vector bool short); 30439 vector unsigned short vec_vadduhm (vector unsigned short, 30440 vector unsigned short); 30441 30442 vector signed char vec_vaddubm (vector bool char, vector signed char); 30443 vector signed char vec_vaddubm (vector signed char, vector bool char); 30444 vector signed char vec_vaddubm (vector signed char, vector signed char); 30445 vector unsigned char vec_vaddubm (vector bool char, 30446 vector unsigned char); 30447 vector unsigned char vec_vaddubm (vector unsigned char, 30448 vector bool char); 30449 vector unsigned char vec_vaddubm (vector unsigned char, 30450 vector unsigned char); 30451 30452 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 30453 30454 vector unsigned char vec_adds (vector bool char, vector unsigned char); 30455 vector unsigned char vec_adds (vector unsigned char, vector bool char); 30456 vector unsigned char vec_adds (vector unsigned char, 30457 vector unsigned char); 30458 vector signed char vec_adds (vector bool char, vector signed char); 30459 vector signed char vec_adds (vector signed char, vector bool char); 30460 vector signed char vec_adds (vector signed char, vector signed char); 30461 vector unsigned short vec_adds (vector bool short, 30462 vector unsigned short); 30463 vector unsigned short vec_adds (vector unsigned short, 30464 vector bool short); 30465 vector unsigned short vec_adds (vector unsigned short, 30466 vector unsigned short); 30467 vector signed short vec_adds (vector bool short, vector signed short); 30468 vector signed short vec_adds (vector signed short, vector bool short); 30469 vector signed short vec_adds (vector signed short, vector signed short); 30470 vector unsigned int vec_adds (vector bool int, vector unsigned int); 30471 vector unsigned int vec_adds (vector unsigned int, vector bool int); 30472 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 30473 vector signed int vec_adds (vector bool int, vector signed int); 30474 vector signed int vec_adds (vector signed int, vector bool int); 30475 vector signed int vec_adds (vector signed int, vector signed int); 30476 30477 vector signed int vec_vaddsws (vector bool int, vector signed int); 30478 vector signed int vec_vaddsws (vector signed int, vector bool int); 30479 vector signed int vec_vaddsws (vector signed int, vector signed int); 30480 30481 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 30482 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 30483 vector unsigned int vec_vadduws (vector unsigned int, 30484 vector unsigned int); 30485 30486 vector signed short vec_vaddshs (vector bool short, 30487 vector signed short); 30488 vector signed short vec_vaddshs (vector signed short, 30489 vector bool short); 30490 vector signed short vec_vaddshs (vector signed short, 30491 vector signed short); 30492 30493 vector unsigned short vec_vadduhs (vector bool short, 30494 vector unsigned short); 30495 vector unsigned short vec_vadduhs (vector unsigned short, 30496 vector bool short); 30497 vector unsigned short vec_vadduhs (vector unsigned short, 30498 vector unsigned short); 30499 30500 vector signed char vec_vaddsbs (vector bool char, vector signed char); 30501 vector signed char vec_vaddsbs (vector signed char, vector bool char); 30502 vector signed char vec_vaddsbs (vector signed char, vector signed char); 30503 30504 vector unsigned char vec_vaddubs (vector bool char, 30505 vector unsigned char); 30506 vector unsigned char vec_vaddubs (vector unsigned char, 30507 vector bool char); 30508 vector unsigned char vec_vaddubs (vector unsigned char, 30509 vector unsigned char); 30510 30511 vector float vec_and (vector float, vector float); 30512 vector float vec_and (vector float, vector bool int); 30513 vector float vec_and (vector bool int, vector float); 30514 vector bool int vec_and (vector bool int, vector bool int); 30515 vector signed int vec_and (vector bool int, vector signed int); 30516 vector signed int vec_and (vector signed int, vector bool int); 30517 vector signed int vec_and (vector signed int, vector signed int); 30518 vector unsigned int vec_and (vector bool int, vector unsigned int); 30519 vector unsigned int vec_and (vector unsigned int, vector bool int); 30520 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 30521 vector bool short vec_and (vector bool short, vector bool short); 30522 vector signed short vec_and (vector bool short, vector signed short); 30523 vector signed short vec_and (vector signed short, vector bool short); 30524 vector signed short vec_and (vector signed short, vector signed short); 30525 vector unsigned short vec_and (vector bool short, 30526 vector unsigned short); 30527 vector unsigned short vec_and (vector unsigned short, 30528 vector bool short); 30529 vector unsigned short vec_and (vector unsigned short, 30530 vector unsigned short); 30531 vector signed char vec_and (vector bool char, vector signed char); 30532 vector bool char vec_and (vector bool char, vector bool char); 30533 vector signed char vec_and (vector signed char, vector bool char); 30534 vector signed char vec_and (vector signed char, vector signed char); 30535 vector unsigned char vec_and (vector bool char, vector unsigned char); 30536 vector unsigned char vec_and (vector unsigned char, vector bool char); 30537 vector unsigned char vec_and (vector unsigned char, 30538 vector unsigned char); 30539 30540 vector float vec_andc (vector float, vector float); 30541 vector float vec_andc (vector float, vector bool int); 30542 vector float vec_andc (vector bool int, vector float); 30543 vector bool int vec_andc (vector bool int, vector bool int); 30544 vector signed int vec_andc (vector bool int, vector signed int); 30545 vector signed int vec_andc (vector signed int, vector bool int); 30546 vector signed int vec_andc (vector signed int, vector signed int); 30547 vector unsigned int vec_andc (vector bool int, vector unsigned int); 30548 vector unsigned int vec_andc (vector unsigned int, vector bool int); 30549 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 30550 vector bool short vec_andc (vector bool short, vector bool short); 30551 vector signed short vec_andc (vector bool short, vector signed short); 30552 vector signed short vec_andc (vector signed short, vector bool short); 30553 vector signed short vec_andc (vector signed short, vector signed short); 30554 vector unsigned short vec_andc (vector bool short, 30555 vector unsigned short); 30556 vector unsigned short vec_andc (vector unsigned short, 30557 vector bool short); 30558 vector unsigned short vec_andc (vector unsigned short, 30559 vector unsigned short); 30560 vector signed char vec_andc (vector bool char, vector signed char); 30561 vector bool char vec_andc (vector bool char, vector bool char); 30562 vector signed char vec_andc (vector signed char, vector bool char); 30563 vector signed char vec_andc (vector signed char, vector signed char); 30564 vector unsigned char vec_andc (vector bool char, vector unsigned char); 30565 vector unsigned char vec_andc (vector unsigned char, vector bool char); 30566 vector unsigned char vec_andc (vector unsigned char, 30567 vector unsigned char); 30568 30569 vector unsigned char vec_avg (vector unsigned char, 30570 vector unsigned char); 30571 vector signed char vec_avg (vector signed char, vector signed char); 30572 vector unsigned short vec_avg (vector unsigned short, 30573 vector unsigned short); 30574 vector signed short vec_avg (vector signed short, vector signed short); 30575 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 30576 vector signed int vec_avg (vector signed int, vector signed int); 30577 30578 vector signed int vec_vavgsw (vector signed int, vector signed int); 30579 30580 vector unsigned int vec_vavguw (vector unsigned int, 30581 vector unsigned int); 30582 30583 vector signed short vec_vavgsh (vector signed short, 30584 vector signed short); 30585 30586 vector unsigned short vec_vavguh (vector unsigned short, 30587 vector unsigned short); 30588 30589 vector signed char vec_vavgsb (vector signed char, vector signed char); 30590 30591 vector unsigned char vec_vavgub (vector unsigned char, 30592 vector unsigned char); 30593 30594 vector float vec_ceil (vector float); 30595 30596 vector signed int vec_cmpb (vector float, vector float); 30597 30598 vector bool char vec_cmpeq (vector signed char, vector signed char); 30599 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 30600 vector bool short vec_cmpeq (vector signed short, vector signed short); 30601 vector bool short vec_cmpeq (vector unsigned short, 30602 vector unsigned short); 30603 vector bool int vec_cmpeq (vector signed int, vector signed int); 30604 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 30605 vector bool int vec_cmpeq (vector float, vector float); 30606 30607 vector bool int vec_vcmpeqfp (vector float, vector float); 30608 30609 vector bool int vec_vcmpequw (vector signed int, vector signed int); 30610 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 30611 30612 vector bool short vec_vcmpequh (vector signed short, 30613 vector signed short); 30614 vector bool short vec_vcmpequh (vector unsigned short, 30615 vector unsigned short); 30616 30617 vector bool char vec_vcmpequb (vector signed char, vector signed char); 30618 vector bool char vec_vcmpequb (vector unsigned char, 30619 vector unsigned char); 30620 30621 vector bool int vec_cmpge (vector float, vector float); 30622 30623 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 30624 vector bool char vec_cmpgt (vector signed char, vector signed char); 30625 vector bool short vec_cmpgt (vector unsigned short, 30626 vector unsigned short); 30627 vector bool short vec_cmpgt (vector signed short, vector signed short); 30628 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 30629 vector bool int vec_cmpgt (vector signed int, vector signed int); 30630 vector bool int vec_cmpgt (vector float, vector float); 30631 30632 vector bool int vec_vcmpgtfp (vector float, vector float); 30633 30634 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 30635 30636 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 30637 30638 vector bool short vec_vcmpgtsh (vector signed short, 30639 vector signed short); 30640 30641 vector bool short vec_vcmpgtuh (vector unsigned short, 30642 vector unsigned short); 30643 30644 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 30645 30646 vector bool char vec_vcmpgtub (vector unsigned char, 30647 vector unsigned char); 30648 30649 vector bool int vec_cmple (vector float, vector float); 30650 30651 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 30652 vector bool char vec_cmplt (vector signed char, vector signed char); 30653 vector bool short vec_cmplt (vector unsigned short, 30654 vector unsigned short); 30655 vector bool short vec_cmplt (vector signed short, vector signed short); 30656 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 30657 vector bool int vec_cmplt (vector signed int, vector signed int); 30658 vector bool int vec_cmplt (vector float, vector float); 30659 30660 vector float vec_ctf (vector unsigned int, const int); 30661 vector float vec_ctf (vector signed int, const int); 30662 30663 vector float vec_vcfsx (vector signed int, const int); 30664 30665 vector float vec_vcfux (vector unsigned int, const int); 30666 30667 vector signed int vec_cts (vector float, const int); 30668 30669 vector unsigned int vec_ctu (vector float, const int); 30670 30671 void vec_dss (const int); 30672 30673 void vec_dssall (void); 30674 30675 void vec_dst (const vector unsigned char *, int, const int); 30676 void vec_dst (const vector signed char *, int, const int); 30677 void vec_dst (const vector bool char *, int, const int); 30678 void vec_dst (const vector unsigned short *, int, const int); 30679 void vec_dst (const vector signed short *, int, const int); 30680 void vec_dst (const vector bool short *, int, const int); 30681 void vec_dst (const vector pixel *, int, const int); 30682 void vec_dst (const vector unsigned int *, int, const int); 30683 void vec_dst (const vector signed int *, int, const int); 30684 void vec_dst (const vector bool int *, int, const int); 30685 void vec_dst (const vector float *, int, const int); 30686 void vec_dst (const unsigned char *, int, const int); 30687 void vec_dst (const signed char *, int, const int); 30688 void vec_dst (const unsigned short *, int, const int); 30689 void vec_dst (const short *, int, const int); 30690 void vec_dst (const unsigned int *, int, const int); 30691 void vec_dst (const int *, int, const int); 30692 void vec_dst (const unsigned long *, int, const int); 30693 void vec_dst (const long *, int, const int); 30694 void vec_dst (const float *, int, const int); 30695 30696 void vec_dstst (const vector unsigned char *, int, const int); 30697 void vec_dstst (const vector signed char *, int, const int); 30698 void vec_dstst (const vector bool char *, int, const int); 30699 void vec_dstst (const vector unsigned short *, int, const int); 30700 void vec_dstst (const vector signed short *, int, const int); 30701 void vec_dstst (const vector bool short *, int, const int); 30702 void vec_dstst (const vector pixel *, int, const int); 30703 void vec_dstst (const vector unsigned int *, int, const int); 30704 void vec_dstst (const vector signed int *, int, const int); 30705 void vec_dstst (const vector bool int *, int, const int); 30706 void vec_dstst (const vector float *, int, const int); 30707 void vec_dstst (const unsigned char *, int, const int); 30708 void vec_dstst (const signed char *, int, const int); 30709 void vec_dstst (const unsigned short *, int, const int); 30710 void vec_dstst (const short *, int, const int); 30711 void vec_dstst (const unsigned int *, int, const int); 30712 void vec_dstst (const int *, int, const int); 30713 void vec_dstst (const unsigned long *, int, const int); 30714 void vec_dstst (const long *, int, const int); 30715 void vec_dstst (const float *, int, const int); 30716 30717 void vec_dststt (const vector unsigned char *, int, const int); 30718 void vec_dststt (const vector signed char *, int, const int); 30719 void vec_dststt (const vector bool char *, int, const int); 30720 void vec_dststt (const vector unsigned short *, int, const int); 30721 void vec_dststt (const vector signed short *, int, const int); 30722 void vec_dststt (const vector bool short *, int, const int); 30723 void vec_dststt (const vector pixel *, int, const int); 30724 void vec_dststt (const vector unsigned int *, int, const int); 30725 void vec_dststt (const vector signed int *, int, const int); 30726 void vec_dststt (const vector bool int *, int, const int); 30727 void vec_dststt (const vector float *, int, const int); 30728 void vec_dststt (const unsigned char *, int, const int); 30729 void vec_dststt (const signed char *, int, const int); 30730 void vec_dststt (const unsigned short *, int, const int); 30731 void vec_dststt (const short *, int, const int); 30732 void vec_dststt (const unsigned int *, int, const int); 30733 void vec_dststt (const int *, int, const int); 30734 void vec_dststt (const unsigned long *, int, const int); 30735 void vec_dststt (const long *, int, const int); 30736 void vec_dststt (const float *, int, const int); 30737 30738 void vec_dstt (const vector unsigned char *, int, const int); 30739 void vec_dstt (const vector signed char *, int, const int); 30740 void vec_dstt (const vector bool char *, int, const int); 30741 void vec_dstt (const vector unsigned short *, int, const int); 30742 void vec_dstt (const vector signed short *, int, const int); 30743 void vec_dstt (const vector bool short *, int, const int); 30744 void vec_dstt (const vector pixel *, int, const int); 30745 void vec_dstt (const vector unsigned int *, int, const int); 30746 void vec_dstt (const vector signed int *, int, const int); 30747 void vec_dstt (const vector bool int *, int, const int); 30748 void vec_dstt (const vector float *, int, const int); 30749 void vec_dstt (const unsigned char *, int, const int); 30750 void vec_dstt (const signed char *, int, const int); 30751 void vec_dstt (const unsigned short *, int, const int); 30752 void vec_dstt (const short *, int, const int); 30753 void vec_dstt (const unsigned int *, int, const int); 30754 void vec_dstt (const int *, int, const int); 30755 void vec_dstt (const unsigned long *, int, const int); 30756 void vec_dstt (const long *, int, const int); 30757 void vec_dstt (const float *, int, const int); 30758 30759 vector float vec_expte (vector float); 30760 30761 vector float vec_floor (vector float); 30762 30763 vector float vec_ld (int, const vector float *); 30764 vector float vec_ld (int, const float *); 30765 vector bool int vec_ld (int, const vector bool int *); 30766 vector signed int vec_ld (int, const vector signed int *); 30767 vector signed int vec_ld (int, const int *); 30768 vector signed int vec_ld (int, const long *); 30769 vector unsigned int vec_ld (int, const vector unsigned int *); 30770 vector unsigned int vec_ld (int, const unsigned int *); 30771 vector unsigned int vec_ld (int, const unsigned long *); 30772 vector bool short vec_ld (int, const vector bool short *); 30773 vector pixel vec_ld (int, const vector pixel *); 30774 vector signed short vec_ld (int, const vector signed short *); 30775 vector signed short vec_ld (int, const short *); 30776 vector unsigned short vec_ld (int, const vector unsigned short *); 30777 vector unsigned short vec_ld (int, const unsigned short *); 30778 vector bool char vec_ld (int, const vector bool char *); 30779 vector signed char vec_ld (int, const vector signed char *); 30780 vector signed char vec_ld (int, const signed char *); 30781 vector unsigned char vec_ld (int, const vector unsigned char *); 30782 vector unsigned char vec_ld (int, const unsigned char *); 30783 30784 vector signed char vec_lde (int, const signed char *); 30785 vector unsigned char vec_lde (int, const unsigned char *); 30786 vector signed short vec_lde (int, const short *); 30787 vector unsigned short vec_lde (int, const unsigned short *); 30788 vector float vec_lde (int, const float *); 30789 vector signed int vec_lde (int, const int *); 30790 vector unsigned int vec_lde (int, const unsigned int *); 30791 vector signed int vec_lde (int, const long *); 30792 vector unsigned int vec_lde (int, const unsigned long *); 30793 30794 vector float vec_lvewx (int, float *); 30795 vector signed int vec_lvewx (int, int *); 30796 vector unsigned int vec_lvewx (int, unsigned int *); 30797 vector signed int vec_lvewx (int, long *); 30798 vector unsigned int vec_lvewx (int, unsigned long *); 30799 30800 vector signed short vec_lvehx (int, short *); 30801 vector unsigned short vec_lvehx (int, unsigned short *); 30802 30803 vector signed char vec_lvebx (int, char *); 30804 vector unsigned char vec_lvebx (int, unsigned char *); 30805 30806 vector float vec_ldl (int, const vector float *); 30807 vector float vec_ldl (int, const float *); 30808 vector bool int vec_ldl (int, const vector bool int *); 30809 vector signed int vec_ldl (int, const vector signed int *); 30810 vector signed int vec_ldl (int, const int *); 30811 vector signed int vec_ldl (int, const long *); 30812 vector unsigned int vec_ldl (int, const vector unsigned int *); 30813 vector unsigned int vec_ldl (int, const unsigned int *); 30814 vector unsigned int vec_ldl (int, const unsigned long *); 30815 vector bool short vec_ldl (int, const vector bool short *); 30816 vector pixel vec_ldl (int, const vector pixel *); 30817 vector signed short vec_ldl (int, const vector signed short *); 30818 vector signed short vec_ldl (int, const short *); 30819 vector unsigned short vec_ldl (int, const vector unsigned short *); 30820 vector unsigned short vec_ldl (int, const unsigned short *); 30821 vector bool char vec_ldl (int, const vector bool char *); 30822 vector signed char vec_ldl (int, const vector signed char *); 30823 vector signed char vec_ldl (int, const signed char *); 30824 vector unsigned char vec_ldl (int, const vector unsigned char *); 30825 vector unsigned char vec_ldl (int, const unsigned char *); 30826 30827 vector float vec_loge (vector float); 30828 30829 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 30830 vector unsigned char vec_lvsl (int, const volatile signed char *); 30831 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 30832 vector unsigned char vec_lvsl (int, const volatile short *); 30833 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 30834 vector unsigned char vec_lvsl (int, const volatile int *); 30835 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 30836 vector unsigned char vec_lvsl (int, const volatile long *); 30837 vector unsigned char vec_lvsl (int, const volatile float *); 30838 30839 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 30840 vector unsigned char vec_lvsr (int, const volatile signed char *); 30841 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 30842 vector unsigned char vec_lvsr (int, const volatile short *); 30843 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 30844 vector unsigned char vec_lvsr (int, const volatile int *); 30845 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 30846 vector unsigned char vec_lvsr (int, const volatile long *); 30847 vector unsigned char vec_lvsr (int, const volatile float *); 30848 30849 vector float vec_madd (vector float, vector float, vector float); 30850 30851 vector signed short vec_madds (vector signed short, 30852 vector signed short, 30853 vector signed short); 30854 30855 vector unsigned char vec_max (vector bool char, vector unsigned char); 30856 vector unsigned char vec_max (vector unsigned char, vector bool char); 30857 vector unsigned char vec_max (vector unsigned char, 30858 vector unsigned char); 30859 vector signed char vec_max (vector bool char, vector signed char); 30860 vector signed char vec_max (vector signed char, vector bool char); 30861 vector signed char vec_max (vector signed char, vector signed char); 30862 vector unsigned short vec_max (vector bool short, 30863 vector unsigned short); 30864 vector unsigned short vec_max (vector unsigned short, 30865 vector bool short); 30866 vector unsigned short vec_max (vector unsigned short, 30867 vector unsigned short); 30868 vector signed short vec_max (vector bool short, vector signed short); 30869 vector signed short vec_max (vector signed short, vector bool short); 30870 vector signed short vec_max (vector signed short, vector signed short); 30871 vector unsigned int vec_max (vector bool int, vector unsigned int); 30872 vector unsigned int vec_max (vector unsigned int, vector bool int); 30873 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 30874 vector signed int vec_max (vector bool int, vector signed int); 30875 vector signed int vec_max (vector signed int, vector bool int); 30876 vector signed int vec_max (vector signed int, vector signed int); 30877 vector float vec_max (vector float, vector float); 30878 30879 vector float vec_vmaxfp (vector float, vector float); 30880 30881 vector signed int vec_vmaxsw (vector bool int, vector signed int); 30882 vector signed int vec_vmaxsw (vector signed int, vector bool int); 30883 vector signed int vec_vmaxsw (vector signed int, vector signed int); 30884 30885 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 30886 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 30887 vector unsigned int vec_vmaxuw (vector unsigned int, 30888 vector unsigned int); 30889 30890 vector signed short vec_vmaxsh (vector bool short, vector signed short); 30891 vector signed short vec_vmaxsh (vector signed short, vector bool short); 30892 vector signed short vec_vmaxsh (vector signed short, 30893 vector signed short); 30894 30895 vector unsigned short vec_vmaxuh (vector bool short, 30896 vector unsigned short); 30897 vector unsigned short vec_vmaxuh (vector unsigned short, 30898 vector bool short); 30899 vector unsigned short vec_vmaxuh (vector unsigned short, 30900 vector unsigned short); 30901 30902 vector signed char vec_vmaxsb (vector bool char, vector signed char); 30903 vector signed char vec_vmaxsb (vector signed char, vector bool char); 30904 vector signed char vec_vmaxsb (vector signed char, vector signed char); 30905 30906 vector unsigned char vec_vmaxub (vector bool char, 30907 vector unsigned char); 30908 vector unsigned char vec_vmaxub (vector unsigned char, 30909 vector bool char); 30910 vector unsigned char vec_vmaxub (vector unsigned char, 30911 vector unsigned char); 30912 30913 vector bool char vec_mergeh (vector bool char, vector bool char); 30914 vector signed char vec_mergeh (vector signed char, vector signed char); 30915 vector unsigned char vec_mergeh (vector unsigned char, 30916 vector unsigned char); 30917 vector bool short vec_mergeh (vector bool short, vector bool short); 30918 vector pixel vec_mergeh (vector pixel, vector pixel); 30919 vector signed short vec_mergeh (vector signed short, 30920 vector signed short); 30921 vector unsigned short vec_mergeh (vector unsigned short, 30922 vector unsigned short); 30923 vector float vec_mergeh (vector float, vector float); 30924 vector bool int vec_mergeh (vector bool int, vector bool int); 30925 vector signed int vec_mergeh (vector signed int, vector signed int); 30926 vector unsigned int vec_mergeh (vector unsigned int, 30927 vector unsigned int); 30928 30929 vector float vec_vmrghw (vector float, vector float); 30930 vector bool int vec_vmrghw (vector bool int, vector bool int); 30931 vector signed int vec_vmrghw (vector signed int, vector signed int); 30932 vector unsigned int vec_vmrghw (vector unsigned int, 30933 vector unsigned int); 30934 30935 vector bool short vec_vmrghh (vector bool short, vector bool short); 30936 vector signed short vec_vmrghh (vector signed short, 30937 vector signed short); 30938 vector unsigned short vec_vmrghh (vector unsigned short, 30939 vector unsigned short); 30940 vector pixel vec_vmrghh (vector pixel, vector pixel); 30941 30942 vector bool char vec_vmrghb (vector bool char, vector bool char); 30943 vector signed char vec_vmrghb (vector signed char, vector signed char); 30944 vector unsigned char vec_vmrghb (vector unsigned char, 30945 vector unsigned char); 30946 30947 vector bool char vec_mergel (vector bool char, vector bool char); 30948 vector signed char vec_mergel (vector signed char, vector signed char); 30949 vector unsigned char vec_mergel (vector unsigned char, 30950 vector unsigned char); 30951 vector bool short vec_mergel (vector bool short, vector bool short); 30952 vector pixel vec_mergel (vector pixel, vector pixel); 30953 vector signed short vec_mergel (vector signed short, 30954 vector signed short); 30955 vector unsigned short vec_mergel (vector unsigned short, 30956 vector unsigned short); 30957 vector float vec_mergel (vector float, vector float); 30958 vector bool int vec_mergel (vector bool int, vector bool int); 30959 vector signed int vec_mergel (vector signed int, vector signed int); 30960 vector unsigned int vec_mergel (vector unsigned int, 30961 vector unsigned int); 30962 30963 vector float vec_vmrglw (vector float, vector float); 30964 vector signed int vec_vmrglw (vector signed int, vector signed int); 30965 vector unsigned int vec_vmrglw (vector unsigned int, 30966 vector unsigned int); 30967 vector bool int vec_vmrglw (vector bool int, vector bool int); 30968 30969 vector bool short vec_vmrglh (vector bool short, vector bool short); 30970 vector signed short vec_vmrglh (vector signed short, 30971 vector signed short); 30972 vector unsigned short vec_vmrglh (vector unsigned short, 30973 vector unsigned short); 30974 vector pixel vec_vmrglh (vector pixel, vector pixel); 30975 30976 vector bool char vec_vmrglb (vector bool char, vector bool char); 30977 vector signed char vec_vmrglb (vector signed char, vector signed char); 30978 vector unsigned char vec_vmrglb (vector unsigned char, 30979 vector unsigned char); 30980 30981 vector unsigned short vec_mfvscr (void); 30982 30983 vector unsigned char vec_min (vector bool char, vector unsigned char); 30984 vector unsigned char vec_min (vector unsigned char, vector bool char); 30985 vector unsigned char vec_min (vector unsigned char, 30986 vector unsigned char); 30987 vector signed char vec_min (vector bool char, vector signed char); 30988 vector signed char vec_min (vector signed char, vector bool char); 30989 vector signed char vec_min (vector signed char, vector signed char); 30990 vector unsigned short vec_min (vector bool short, 30991 vector unsigned short); 30992 vector unsigned short vec_min (vector unsigned short, 30993 vector bool short); 30994 vector unsigned short vec_min (vector unsigned short, 30995 vector unsigned short); 30996 vector signed short vec_min (vector bool short, vector signed short); 30997 vector signed short vec_min (vector signed short, vector bool short); 30998 vector signed short vec_min (vector signed short, vector signed short); 30999 vector unsigned int vec_min (vector bool int, vector unsigned int); 31000 vector unsigned int vec_min (vector unsigned int, vector bool int); 31001 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 31002 vector signed int vec_min (vector bool int, vector signed int); 31003 vector signed int vec_min (vector signed int, vector bool int); 31004 vector signed int vec_min (vector signed int, vector signed int); 31005 vector float vec_min (vector float, vector float); 31006 31007 vector float vec_vminfp (vector float, vector float); 31008 31009 vector signed int vec_vminsw (vector bool int, vector signed int); 31010 vector signed int vec_vminsw (vector signed int, vector bool int); 31011 vector signed int vec_vminsw (vector signed int, vector signed int); 31012 31013 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 31014 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 31015 vector unsigned int vec_vminuw (vector unsigned int, 31016 vector unsigned int); 31017 31018 vector signed short vec_vminsh (vector bool short, vector signed short); 31019 vector signed short vec_vminsh (vector signed short, vector bool short); 31020 vector signed short vec_vminsh (vector signed short, 31021 vector signed short); 31022 31023 vector unsigned short vec_vminuh (vector bool short, 31024 vector unsigned short); 31025 vector unsigned short vec_vminuh (vector unsigned short, 31026 vector bool short); 31027 vector unsigned short vec_vminuh (vector unsigned short, 31028 vector unsigned short); 31029 31030 vector signed char vec_vminsb (vector bool char, vector signed char); 31031 vector signed char vec_vminsb (vector signed char, vector bool char); 31032 vector signed char vec_vminsb (vector signed char, vector signed char); 31033 31034 vector unsigned char vec_vminub (vector bool char, 31035 vector unsigned char); 31036 vector unsigned char vec_vminub (vector unsigned char, 31037 vector bool char); 31038 vector unsigned char vec_vminub (vector unsigned char, 31039 vector unsigned char); 31040 31041 vector signed short vec_mladd (vector signed short, 31042 vector signed short, 31043 vector signed short); 31044 vector signed short vec_mladd (vector signed short, 31045 vector unsigned short, 31046 vector unsigned short); 31047 vector signed short vec_mladd (vector unsigned short, 31048 vector signed short, 31049 vector signed short); 31050 vector unsigned short vec_mladd (vector unsigned short, 31051 vector unsigned short, 31052 vector unsigned short); 31053 31054 vector signed short vec_mradds (vector signed short, 31055 vector signed short, 31056 vector signed short); 31057 31058 vector unsigned int vec_msum (vector unsigned char, 31059 vector unsigned char, 31060 vector unsigned int); 31061 vector signed int vec_msum (vector signed char, 31062 vector unsigned char, 31063 vector signed int); 31064 vector unsigned int vec_msum (vector unsigned short, 31065 vector unsigned short, 31066 vector unsigned int); 31067 vector signed int vec_msum (vector signed short, 31068 vector signed short, 31069 vector signed int); 31070 31071 vector signed int vec_vmsumshm (vector signed short, 31072 vector signed short, 31073 vector signed int); 31074 31075 vector unsigned int vec_vmsumuhm (vector unsigned short, 31076 vector unsigned short, 31077 vector unsigned int); 31078 31079 vector signed int vec_vmsummbm (vector signed char, 31080 vector unsigned char, 31081 vector signed int); 31082 31083 vector unsigned int vec_vmsumubm (vector unsigned char, 31084 vector unsigned char, 31085 vector unsigned int); 31086 31087 vector unsigned int vec_msums (vector unsigned short, 31088 vector unsigned short, 31089 vector unsigned int); 31090 vector signed int vec_msums (vector signed short, 31091 vector signed short, 31092 vector signed int); 31093 31094 vector signed int vec_vmsumshs (vector signed short, 31095 vector signed short, 31096 vector signed int); 31097 31098 vector unsigned int vec_vmsumuhs (vector unsigned short, 31099 vector unsigned short, 31100 vector unsigned int); 31101 31102 void vec_mtvscr (vector signed int); 31103 void vec_mtvscr (vector unsigned int); 31104 void vec_mtvscr (vector bool int); 31105 void vec_mtvscr (vector signed short); 31106 void vec_mtvscr (vector unsigned short); 31107 void vec_mtvscr (vector bool short); 31108 void vec_mtvscr (vector pixel); 31109 void vec_mtvscr (vector signed char); 31110 void vec_mtvscr (vector unsigned char); 31111 void vec_mtvscr (vector bool char); 31112 31113 vector unsigned short vec_mule (vector unsigned char, 31114 vector unsigned char); 31115 vector signed short vec_mule (vector signed char, 31116 vector signed char); 31117 vector unsigned int vec_mule (vector unsigned short, 31118 vector unsigned short); 31119 vector signed int vec_mule (vector signed short, vector signed short); 31120 31121 vector signed int vec_vmulesh (vector signed short, 31122 vector signed short); 31123 31124 vector unsigned int vec_vmuleuh (vector unsigned short, 31125 vector unsigned short); 31126 31127 vector signed short vec_vmulesb (vector signed char, 31128 vector signed char); 31129 31130 vector unsigned short vec_vmuleub (vector unsigned char, 31131 vector unsigned char); 31132 31133 vector unsigned short vec_mulo (vector unsigned char, 31134 vector unsigned char); 31135 vector signed short vec_mulo (vector signed char, vector signed char); 31136 vector unsigned int vec_mulo (vector unsigned short, 31137 vector unsigned short); 31138 vector signed int vec_mulo (vector signed short, vector signed short); 31139 31140 vector signed int vec_vmulosh (vector signed short, 31141 vector signed short); 31142 31143 vector unsigned int vec_vmulouh (vector unsigned short, 31144 vector unsigned short); 31145 31146 vector signed short vec_vmulosb (vector signed char, 31147 vector signed char); 31148 31149 vector unsigned short vec_vmuloub (vector unsigned char, 31150 vector unsigned char); 31151 31152 vector float vec_nmsub (vector float, vector float, vector float); 31153 31154 vector float vec_nor (vector float, vector float); 31155 vector signed int vec_nor (vector signed int, vector signed int); 31156 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 31157 vector bool int vec_nor (vector bool int, vector bool int); 31158 vector signed short vec_nor (vector signed short, vector signed short); 31159 vector unsigned short vec_nor (vector unsigned short, 31160 vector unsigned short); 31161 vector bool short vec_nor (vector bool short, vector bool short); 31162 vector signed char vec_nor (vector signed char, vector signed char); 31163 vector unsigned char vec_nor (vector unsigned char, 31164 vector unsigned char); 31165 vector bool char vec_nor (vector bool char, vector bool char); 31166 31167 vector float vec_or (vector float, vector float); 31168 vector float vec_or (vector float, vector bool int); 31169 vector float vec_or (vector bool int, vector float); 31170 vector bool int vec_or (vector bool int, vector bool int); 31171 vector signed int vec_or (vector bool int, vector signed int); 31172 vector signed int vec_or (vector signed int, vector bool int); 31173 vector signed int vec_or (vector signed int, vector signed int); 31174 vector unsigned int vec_or (vector bool int, vector unsigned int); 31175 vector unsigned int vec_or (vector unsigned int, vector bool int); 31176 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 31177 vector bool short vec_or (vector bool short, vector bool short); 31178 vector signed short vec_or (vector bool short, vector signed short); 31179 vector signed short vec_or (vector signed short, vector bool short); 31180 vector signed short vec_or (vector signed short, vector signed short); 31181 vector unsigned short vec_or (vector bool short, vector unsigned short); 31182 vector unsigned short vec_or (vector unsigned short, vector bool short); 31183 vector unsigned short vec_or (vector unsigned short, 31184 vector unsigned short); 31185 vector signed char vec_or (vector bool char, vector signed char); 31186 vector bool char vec_or (vector bool char, vector bool char); 31187 vector signed char vec_or (vector signed char, vector bool char); 31188 vector signed char vec_or (vector signed char, vector signed char); 31189 vector unsigned char vec_or (vector bool char, vector unsigned char); 31190 vector unsigned char vec_or (vector unsigned char, vector bool char); 31191 vector unsigned char vec_or (vector unsigned char, 31192 vector unsigned char); 31193 31194 vector signed char vec_pack (vector signed short, vector signed short); 31195 vector unsigned char vec_pack (vector unsigned short, 31196 vector unsigned short); 31197 vector bool char vec_pack (vector bool short, vector bool short); 31198 vector signed short vec_pack (vector signed int, vector signed int); 31199 vector unsigned short vec_pack (vector unsigned int, 31200 vector unsigned int); 31201 vector bool short vec_pack (vector bool int, vector bool int); 31202 31203 vector bool short vec_vpkuwum (vector bool int, vector bool int); 31204 vector signed short vec_vpkuwum (vector signed int, vector signed int); 31205 vector unsigned short vec_vpkuwum (vector unsigned int, 31206 vector unsigned int); 31207 31208 vector bool char vec_vpkuhum (vector bool short, vector bool short); 31209 vector signed char vec_vpkuhum (vector signed short, 31210 vector signed short); 31211 vector unsigned char vec_vpkuhum (vector unsigned short, 31212 vector unsigned short); 31213 31214 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 31215 31216 vector unsigned char vec_packs (vector unsigned short, 31217 vector unsigned short); 31218 vector signed char vec_packs (vector signed short, vector signed short); 31219 vector unsigned short vec_packs (vector unsigned int, 31220 vector unsigned int); 31221 vector signed short vec_packs (vector signed int, vector signed int); 31222 31223 vector signed short vec_vpkswss (vector signed int, vector signed int); 31224 31225 vector unsigned short vec_vpkuwus (vector unsigned int, 31226 vector unsigned int); 31227 31228 vector signed char vec_vpkshss (vector signed short, 31229 vector signed short); 31230 31231 vector unsigned char vec_vpkuhus (vector unsigned short, 31232 vector unsigned short); 31233 31234 vector unsigned char vec_packsu (vector unsigned short, 31235 vector unsigned short); 31236 vector unsigned char vec_packsu (vector signed short, 31237 vector signed short); 31238 vector unsigned short vec_packsu (vector unsigned int, 31239 vector unsigned int); 31240 vector unsigned short vec_packsu (vector signed int, vector signed int); 31241 31242 vector unsigned short vec_vpkswus (vector signed int, 31243 vector signed int); 31244 31245 vector unsigned char vec_vpkshus (vector signed short, 31246 vector signed short); 31247 31248 vector float vec_perm (vector float, 31249 vector float, 31250 vector unsigned char); 31251 vector signed int vec_perm (vector signed int, 31252 vector signed int, 31253 vector unsigned char); 31254 vector unsigned int vec_perm (vector unsigned int, 31255 vector unsigned int, 31256 vector unsigned char); 31257 vector bool int vec_perm (vector bool int, 31258 vector bool int, 31259 vector unsigned char); 31260 vector signed short vec_perm (vector signed short, 31261 vector signed short, 31262 vector unsigned char); 31263 vector unsigned short vec_perm (vector unsigned short, 31264 vector unsigned short, 31265 vector unsigned char); 31266 vector bool short vec_perm (vector bool short, 31267 vector bool short, 31268 vector unsigned char); 31269 vector pixel vec_perm (vector pixel, 31270 vector pixel, 31271 vector unsigned char); 31272 vector signed char vec_perm (vector signed char, 31273 vector signed char, 31274 vector unsigned char); 31275 vector unsigned char vec_perm (vector unsigned char, 31276 vector unsigned char, 31277 vector unsigned char); 31278 vector bool char vec_perm (vector bool char, 31279 vector bool char, 31280 vector unsigned char); 31281 31282 vector float vec_re (vector float); 31283 31284 vector signed char vec_rl (vector signed char, 31285 vector unsigned char); 31286 vector unsigned char vec_rl (vector unsigned char, 31287 vector unsigned char); 31288 vector signed short vec_rl (vector signed short, vector unsigned short); 31289 vector unsigned short vec_rl (vector unsigned short, 31290 vector unsigned short); 31291 vector signed int vec_rl (vector signed int, vector unsigned int); 31292 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 31293 31294 vector signed int vec_vrlw (vector signed int, vector unsigned int); 31295 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 31296 31297 vector signed short vec_vrlh (vector signed short, 31298 vector unsigned short); 31299 vector unsigned short vec_vrlh (vector unsigned short, 31300 vector unsigned short); 31301 31302 vector signed char vec_vrlb (vector signed char, vector unsigned char); 31303 vector unsigned char vec_vrlb (vector unsigned char, 31304 vector unsigned char); 31305 31306 vector float vec_round (vector float); 31307 31308 vector float vec_rsqrte (vector float); 31309 31310 vector float vec_sel (vector float, vector float, vector bool int); 31311 vector float vec_sel (vector float, vector float, vector unsigned int); 31312 vector signed int vec_sel (vector signed int, 31313 vector signed int, 31314 vector bool int); 31315 vector signed int vec_sel (vector signed int, 31316 vector signed int, 31317 vector unsigned int); 31318 vector unsigned int vec_sel (vector unsigned int, 31319 vector unsigned int, 31320 vector bool int); 31321 vector unsigned int vec_sel (vector unsigned int, 31322 vector unsigned int, 31323 vector unsigned int); 31324 vector bool int vec_sel (vector bool int, 31325 vector bool int, 31326 vector bool int); 31327 vector bool int vec_sel (vector bool int, 31328 vector bool int, 31329 vector unsigned int); 31330 vector signed short vec_sel (vector signed short, 31331 vector signed short, 31332 vector bool short); 31333 vector signed short vec_sel (vector signed short, 31334 vector signed short, 31335 vector unsigned short); 31336 vector unsigned short vec_sel (vector unsigned short, 31337 vector unsigned short, 31338 vector bool short); 31339 vector unsigned short vec_sel (vector unsigned short, 31340 vector unsigned short, 31341 vector unsigned short); 31342 vector bool short vec_sel (vector bool short, 31343 vector bool short, 31344 vector bool short); 31345 vector bool short vec_sel (vector bool short, 31346 vector bool short, 31347 vector unsigned short); 31348 vector signed char vec_sel (vector signed char, 31349 vector signed char, 31350 vector bool char); 31351 vector signed char vec_sel (vector signed char, 31352 vector signed char, 31353 vector unsigned char); 31354 vector unsigned char vec_sel (vector unsigned char, 31355 vector unsigned char, 31356 vector bool char); 31357 vector unsigned char vec_sel (vector unsigned char, 31358 vector unsigned char, 31359 vector unsigned char); 31360 vector bool char vec_sel (vector bool char, 31361 vector bool char, 31362 vector bool char); 31363 vector bool char vec_sel (vector bool char, 31364 vector bool char, 31365 vector unsigned char); 31366 31367 vector signed char vec_sl (vector signed char, 31368 vector unsigned char); 31369 vector unsigned char vec_sl (vector unsigned char, 31370 vector unsigned char); 31371 vector signed short vec_sl (vector signed short, vector unsigned short); 31372 vector unsigned short vec_sl (vector unsigned short, 31373 vector unsigned short); 31374 vector signed int vec_sl (vector signed int, vector unsigned int); 31375 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 31376 31377 vector signed int vec_vslw (vector signed int, vector unsigned int); 31378 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 31379 31380 vector signed short vec_vslh (vector signed short, 31381 vector unsigned short); 31382 vector unsigned short vec_vslh (vector unsigned short, 31383 vector unsigned short); 31384 31385 vector signed char vec_vslb (vector signed char, vector unsigned char); 31386 vector unsigned char vec_vslb (vector unsigned char, 31387 vector unsigned char); 31388 31389 vector float vec_sld (vector float, vector float, const int); 31390 vector signed int vec_sld (vector signed int, 31391 vector signed int, 31392 const int); 31393 vector unsigned int vec_sld (vector unsigned int, 31394 vector unsigned int, 31395 const int); 31396 vector bool int vec_sld (vector bool int, 31397 vector bool int, 31398 const int); 31399 vector signed short vec_sld (vector signed short, 31400 vector signed short, 31401 const int); 31402 vector unsigned short vec_sld (vector unsigned short, 31403 vector unsigned short, 31404 const int); 31405 vector bool short vec_sld (vector bool short, 31406 vector bool short, 31407 const int); 31408 vector pixel vec_sld (vector pixel, 31409 vector pixel, 31410 const int); 31411 vector signed char vec_sld (vector signed char, 31412 vector signed char, 31413 const int); 31414 vector unsigned char vec_sld (vector unsigned char, 31415 vector unsigned char, 31416 const int); 31417 vector bool char vec_sld (vector bool char, 31418 vector bool char, 31419 const int); 31420 31421 vector signed int vec_sll (vector signed int, 31422 vector unsigned int); 31423 vector signed int vec_sll (vector signed int, 31424 vector unsigned short); 31425 vector signed int vec_sll (vector signed int, 31426 vector unsigned char); 31427 vector unsigned int vec_sll (vector unsigned int, 31428 vector unsigned int); 31429 vector unsigned int vec_sll (vector unsigned int, 31430 vector unsigned short); 31431 vector unsigned int vec_sll (vector unsigned int, 31432 vector unsigned char); 31433 vector bool int vec_sll (vector bool int, 31434 vector unsigned int); 31435 vector bool int vec_sll (vector bool int, 31436 vector unsigned short); 31437 vector bool int vec_sll (vector bool int, 31438 vector unsigned char); 31439 vector signed short vec_sll (vector signed short, 31440 vector unsigned int); 31441 vector signed short vec_sll (vector signed short, 31442 vector unsigned short); 31443 vector signed short vec_sll (vector signed short, 31444 vector unsigned char); 31445 vector unsigned short vec_sll (vector unsigned short, 31446 vector unsigned int); 31447 vector unsigned short vec_sll (vector unsigned short, 31448 vector unsigned short); 31449 vector unsigned short vec_sll (vector unsigned short, 31450 vector unsigned char); 31451 vector bool short vec_sll (vector bool short, vector unsigned int); 31452 vector bool short vec_sll (vector bool short, vector unsigned short); 31453 vector bool short vec_sll (vector bool short, vector unsigned char); 31454 vector pixel vec_sll (vector pixel, vector unsigned int); 31455 vector pixel vec_sll (vector pixel, vector unsigned short); 31456 vector pixel vec_sll (vector pixel, vector unsigned char); 31457 vector signed char vec_sll (vector signed char, vector unsigned int); 31458 vector signed char vec_sll (vector signed char, vector unsigned short); 31459 vector signed char vec_sll (vector signed char, vector unsigned char); 31460 vector unsigned char vec_sll (vector unsigned char, 31461 vector unsigned int); 31462 vector unsigned char vec_sll (vector unsigned char, 31463 vector unsigned short); 31464 vector unsigned char vec_sll (vector unsigned char, 31465 vector unsigned char); 31466 vector bool char vec_sll (vector bool char, vector unsigned int); 31467 vector bool char vec_sll (vector bool char, vector unsigned short); 31468 vector bool char vec_sll (vector bool char, vector unsigned char); 31469 31470 vector float vec_slo (vector float, vector signed char); 31471 vector float vec_slo (vector float, vector unsigned char); 31472 vector signed int vec_slo (vector signed int, vector signed char); 31473 vector signed int vec_slo (vector signed int, vector unsigned char); 31474 vector unsigned int vec_slo (vector unsigned int, vector signed char); 31475 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 31476 vector signed short vec_slo (vector signed short, vector signed char); 31477 vector signed short vec_slo (vector signed short, vector unsigned char); 31478 vector unsigned short vec_slo (vector unsigned short, 31479 vector signed char); 31480 vector unsigned short vec_slo (vector unsigned short, 31481 vector unsigned char); 31482 vector pixel vec_slo (vector pixel, vector signed char); 31483 vector pixel vec_slo (vector pixel, vector unsigned char); 31484 vector signed char vec_slo (vector signed char, vector signed char); 31485 vector signed char vec_slo (vector signed char, vector unsigned char); 31486 vector unsigned char vec_slo (vector unsigned char, vector signed char); 31487 vector unsigned char vec_slo (vector unsigned char, 31488 vector unsigned char); 31489 31490 vector signed char vec_splat (vector signed char, const int); 31491 vector unsigned char vec_splat (vector unsigned char, const int); 31492 vector bool char vec_splat (vector bool char, const int); 31493 vector signed short vec_splat (vector signed short, const int); 31494 vector unsigned short vec_splat (vector unsigned short, const int); 31495 vector bool short vec_splat (vector bool short, const int); 31496 vector pixel vec_splat (vector pixel, const int); 31497 vector float vec_splat (vector float, const int); 31498 vector signed int vec_splat (vector signed int, const int); 31499 vector unsigned int vec_splat (vector unsigned int, const int); 31500 vector bool int vec_splat (vector bool int, const int); 31501 31502 vector float vec_vspltw (vector float, const int); 31503 vector signed int vec_vspltw (vector signed int, const int); 31504 vector unsigned int vec_vspltw (vector unsigned int, const int); 31505 vector bool int vec_vspltw (vector bool int, const int); 31506 31507 vector bool short vec_vsplth (vector bool short, const int); 31508 vector signed short vec_vsplth (vector signed short, const int); 31509 vector unsigned short vec_vsplth (vector unsigned short, const int); 31510 vector pixel vec_vsplth (vector pixel, const int); 31511 31512 vector signed char vec_vspltb (vector signed char, const int); 31513 vector unsigned char vec_vspltb (vector unsigned char, const int); 31514 vector bool char vec_vspltb (vector bool char, const int); 31515 31516 vector signed char vec_splat_s8 (const int); 31517 31518 vector signed short vec_splat_s16 (const int); 31519 31520 vector signed int vec_splat_s32 (const int); 31521 31522 vector unsigned char vec_splat_u8 (const int); 31523 31524 vector unsigned short vec_splat_u16 (const int); 31525 31526 vector unsigned int vec_splat_u32 (const int); 31527 31528 vector signed char vec_sr (vector signed char, vector unsigned char); 31529 vector unsigned char vec_sr (vector unsigned char, 31530 vector unsigned char); 31531 vector signed short vec_sr (vector signed short, 31532 vector unsigned short); 31533 vector unsigned short vec_sr (vector unsigned short, 31534 vector unsigned short); 31535 vector signed int vec_sr (vector signed int, vector unsigned int); 31536 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 31537 31538 vector signed int vec_vsrw (vector signed int, vector unsigned int); 31539 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 31540 31541 vector signed short vec_vsrh (vector signed short, 31542 vector unsigned short); 31543 vector unsigned short vec_vsrh (vector unsigned short, 31544 vector unsigned short); 31545 31546 vector signed char vec_vsrb (vector signed char, vector unsigned char); 31547 vector unsigned char vec_vsrb (vector unsigned char, 31548 vector unsigned char); 31549 31550 vector signed char vec_sra (vector signed char, vector unsigned char); 31551 vector unsigned char vec_sra (vector unsigned char, 31552 vector unsigned char); 31553 vector signed short vec_sra (vector signed short, 31554 vector unsigned short); 31555 vector unsigned short vec_sra (vector unsigned short, 31556 vector unsigned short); 31557 vector signed int vec_sra (vector signed int, vector unsigned int); 31558 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 31559 31560 vector signed int vec_vsraw (vector signed int, vector unsigned int); 31561 vector unsigned int vec_vsraw (vector unsigned int, 31562 vector unsigned int); 31563 31564 vector signed short vec_vsrah (vector signed short, 31565 vector unsigned short); 31566 vector unsigned short vec_vsrah (vector unsigned short, 31567 vector unsigned short); 31568 31569 vector signed char vec_vsrab (vector signed char, vector unsigned char); 31570 vector unsigned char vec_vsrab (vector unsigned char, 31571 vector unsigned char); 31572 31573 vector signed int vec_srl (vector signed int, vector unsigned int); 31574 vector signed int vec_srl (vector signed int, vector unsigned short); 31575 vector signed int vec_srl (vector signed int, vector unsigned char); 31576 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 31577 vector unsigned int vec_srl (vector unsigned int, 31578 vector unsigned short); 31579 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 31580 vector bool int vec_srl (vector bool int, vector unsigned int); 31581 vector bool int vec_srl (vector bool int, vector unsigned short); 31582 vector bool int vec_srl (vector bool int, vector unsigned char); 31583 vector signed short vec_srl (vector signed short, vector unsigned int); 31584 vector signed short vec_srl (vector signed short, 31585 vector unsigned short); 31586 vector signed short vec_srl (vector signed short, vector unsigned char); 31587 vector unsigned short vec_srl (vector unsigned short, 31588 vector unsigned int); 31589 vector unsigned short vec_srl (vector unsigned short, 31590 vector unsigned short); 31591 vector unsigned short vec_srl (vector unsigned short, 31592 vector unsigned char); 31593 vector bool short vec_srl (vector bool short, vector unsigned int); 31594 vector bool short vec_srl (vector bool short, vector unsigned short); 31595 vector bool short vec_srl (vector bool short, vector unsigned char); 31596 vector pixel vec_srl (vector pixel, vector unsigned int); 31597 vector pixel vec_srl (vector pixel, vector unsigned short); 31598 vector pixel vec_srl (vector pixel, vector unsigned char); 31599 vector signed char vec_srl (vector signed char, vector unsigned int); 31600 vector signed char vec_srl (vector signed char, vector unsigned short); 31601 vector signed char vec_srl (vector signed char, vector unsigned char); 31602 vector unsigned char vec_srl (vector unsigned char, 31603 vector unsigned int); 31604 vector unsigned char vec_srl (vector unsigned char, 31605 vector unsigned short); 31606 vector unsigned char vec_srl (vector unsigned char, 31607 vector unsigned char); 31608 vector bool char vec_srl (vector bool char, vector unsigned int); 31609 vector bool char vec_srl (vector bool char, vector unsigned short); 31610 vector bool char vec_srl (vector bool char, vector unsigned char); 31611 31612 vector float vec_sro (vector float, vector signed char); 31613 vector float vec_sro (vector float, vector unsigned char); 31614 vector signed int vec_sro (vector signed int, vector signed char); 31615 vector signed int vec_sro (vector signed int, vector unsigned char); 31616 vector unsigned int vec_sro (vector unsigned int, vector signed char); 31617 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 31618 vector signed short vec_sro (vector signed short, vector signed char); 31619 vector signed short vec_sro (vector signed short, vector unsigned char); 31620 vector unsigned short vec_sro (vector unsigned short, 31621 vector signed char); 31622 vector unsigned short vec_sro (vector unsigned short, 31623 vector unsigned char); 31624 vector pixel vec_sro (vector pixel, vector signed char); 31625 vector pixel vec_sro (vector pixel, vector unsigned char); 31626 vector signed char vec_sro (vector signed char, vector signed char); 31627 vector signed char vec_sro (vector signed char, vector unsigned char); 31628 vector unsigned char vec_sro (vector unsigned char, vector signed char); 31629 vector unsigned char vec_sro (vector unsigned char, 31630 vector unsigned char); 31631 31632 void vec_st (vector float, int, vector float *); 31633 void vec_st (vector float, int, float *); 31634 void vec_st (vector signed int, int, vector signed int *); 31635 void vec_st (vector signed int, int, int *); 31636 void vec_st (vector unsigned int, int, vector unsigned int *); 31637 void vec_st (vector unsigned int, int, unsigned int *); 31638 void vec_st (vector bool int, int, vector bool int *); 31639 void vec_st (vector bool int, int, unsigned int *); 31640 void vec_st (vector bool int, int, int *); 31641 void vec_st (vector signed short, int, vector signed short *); 31642 void vec_st (vector signed short, int, short *); 31643 void vec_st (vector unsigned short, int, vector unsigned short *); 31644 void vec_st (vector unsigned short, int, unsigned short *); 31645 void vec_st (vector bool short, int, vector bool short *); 31646 void vec_st (vector bool short, int, unsigned short *); 31647 void vec_st (vector pixel, int, vector pixel *); 31648 void vec_st (vector pixel, int, unsigned short *); 31649 void vec_st (vector pixel, int, short *); 31650 void vec_st (vector bool short, int, short *); 31651 void vec_st (vector signed char, int, vector signed char *); 31652 void vec_st (vector signed char, int, signed char *); 31653 void vec_st (vector unsigned char, int, vector unsigned char *); 31654 void vec_st (vector unsigned char, int, unsigned char *); 31655 void vec_st (vector bool char, int, vector bool char *); 31656 void vec_st (vector bool char, int, unsigned char *); 31657 void vec_st (vector bool char, int, signed char *); 31658 31659 void vec_ste (vector signed char, int, signed char *); 31660 void vec_ste (vector unsigned char, int, unsigned char *); 31661 void vec_ste (vector bool char, int, signed char *); 31662 void vec_ste (vector bool char, int, unsigned char *); 31663 void vec_ste (vector signed short, int, short *); 31664 void vec_ste (vector unsigned short, int, unsigned short *); 31665 void vec_ste (vector bool short, int, short *); 31666 void vec_ste (vector bool short, int, unsigned short *); 31667 void vec_ste (vector pixel, int, short *); 31668 void vec_ste (vector pixel, int, unsigned short *); 31669 void vec_ste (vector float, int, float *); 31670 void vec_ste (vector signed int, int, int *); 31671 void vec_ste (vector unsigned int, int, unsigned int *); 31672 void vec_ste (vector bool int, int, int *); 31673 void vec_ste (vector bool int, int, unsigned int *); 31674 31675 void vec_stvewx (vector float, int, float *); 31676 void vec_stvewx (vector signed int, int, int *); 31677 void vec_stvewx (vector unsigned int, int, unsigned int *); 31678 void vec_stvewx (vector bool int, int, int *); 31679 void vec_stvewx (vector bool int, int, unsigned int *); 31680 31681 void vec_stvehx (vector signed short, int, short *); 31682 void vec_stvehx (vector unsigned short, int, unsigned short *); 31683 void vec_stvehx (vector bool short, int, short *); 31684 void vec_stvehx (vector bool short, int, unsigned short *); 31685 void vec_stvehx (vector pixel, int, short *); 31686 void vec_stvehx (vector pixel, int, unsigned short *); 31687 31688 void vec_stvebx (vector signed char, int, signed char *); 31689 void vec_stvebx (vector unsigned char, int, unsigned char *); 31690 void vec_stvebx (vector bool char, int, signed char *); 31691 void vec_stvebx (vector bool char, int, unsigned char *); 31692 31693 void vec_stl (vector float, int, vector float *); 31694 void vec_stl (vector float, int, float *); 31695 void vec_stl (vector signed int, int, vector signed int *); 31696 void vec_stl (vector signed int, int, int *); 31697 void vec_stl (vector unsigned int, int, vector unsigned int *); 31698 void vec_stl (vector unsigned int, int, unsigned int *); 31699 void vec_stl (vector bool int, int, vector bool int *); 31700 void vec_stl (vector bool int, int, unsigned int *); 31701 void vec_stl (vector bool int, int, int *); 31702 void vec_stl (vector signed short, int, vector signed short *); 31703 void vec_stl (vector signed short, int, short *); 31704 void vec_stl (vector unsigned short, int, vector unsigned short *); 31705 void vec_stl (vector unsigned short, int, unsigned short *); 31706 void vec_stl (vector bool short, int, vector bool short *); 31707 void vec_stl (vector bool short, int, unsigned short *); 31708 void vec_stl (vector bool short, int, short *); 31709 void vec_stl (vector pixel, int, vector pixel *); 31710 void vec_stl (vector pixel, int, unsigned short *); 31711 void vec_stl (vector pixel, int, short *); 31712 void vec_stl (vector signed char, int, vector signed char *); 31713 void vec_stl (vector signed char, int, signed char *); 31714 void vec_stl (vector unsigned char, int, vector unsigned char *); 31715 void vec_stl (vector unsigned char, int, unsigned char *); 31716 void vec_stl (vector bool char, int, vector bool char *); 31717 void vec_stl (vector bool char, int, unsigned char *); 31718 void vec_stl (vector bool char, int, signed char *); 31719 31720 vector signed char vec_sub (vector bool char, vector signed char); 31721 vector signed char vec_sub (vector signed char, vector bool char); 31722 vector signed char vec_sub (vector signed char, vector signed char); 31723 vector unsigned char vec_sub (vector bool char, vector unsigned char); 31724 vector unsigned char vec_sub (vector unsigned char, vector bool char); 31725 vector unsigned char vec_sub (vector unsigned char, 31726 vector unsigned char); 31727 vector signed short vec_sub (vector bool short, vector signed short); 31728 vector signed short vec_sub (vector signed short, vector bool short); 31729 vector signed short vec_sub (vector signed short, vector signed short); 31730 vector unsigned short vec_sub (vector bool short, 31731 vector unsigned short); 31732 vector unsigned short vec_sub (vector unsigned short, 31733 vector bool short); 31734 vector unsigned short vec_sub (vector unsigned short, 31735 vector unsigned short); 31736 vector signed int vec_sub (vector bool int, vector signed int); 31737 vector signed int vec_sub (vector signed int, vector bool int); 31738 vector signed int vec_sub (vector signed int, vector signed int); 31739 vector unsigned int vec_sub (vector bool int, vector unsigned int); 31740 vector unsigned int vec_sub (vector unsigned int, vector bool int); 31741 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 31742 vector float vec_sub (vector float, vector float); 31743 31744 vector float vec_vsubfp (vector float, vector float); 31745 31746 vector signed int vec_vsubuwm (vector bool int, vector signed int); 31747 vector signed int vec_vsubuwm (vector signed int, vector bool int); 31748 vector signed int vec_vsubuwm (vector signed int, vector signed int); 31749 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 31750 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 31751 vector unsigned int vec_vsubuwm (vector unsigned int, 31752 vector unsigned int); 31753 31754 vector signed short vec_vsubuhm (vector bool short, 31755 vector signed short); 31756 vector signed short vec_vsubuhm (vector signed short, 31757 vector bool short); 31758 vector signed short vec_vsubuhm (vector signed short, 31759 vector signed short); 31760 vector unsigned short vec_vsubuhm (vector bool short, 31761 vector unsigned short); 31762 vector unsigned short vec_vsubuhm (vector unsigned short, 31763 vector bool short); 31764 vector unsigned short vec_vsubuhm (vector unsigned short, 31765 vector unsigned short); 31766 31767 vector signed char vec_vsububm (vector bool char, vector signed char); 31768 vector signed char vec_vsububm (vector signed char, vector bool char); 31769 vector signed char vec_vsububm (vector signed char, vector signed char); 31770 vector unsigned char vec_vsububm (vector bool char, 31771 vector unsigned char); 31772 vector unsigned char vec_vsububm (vector unsigned char, 31773 vector bool char); 31774 vector unsigned char vec_vsububm (vector unsigned char, 31775 vector unsigned char); 31776 31777 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 31778 31779 vector unsigned char vec_subs (vector bool char, vector unsigned char); 31780 vector unsigned char vec_subs (vector unsigned char, vector bool char); 31781 vector unsigned char vec_subs (vector unsigned char, 31782 vector unsigned char); 31783 vector signed char vec_subs (vector bool char, vector signed char); 31784 vector signed char vec_subs (vector signed char, vector bool char); 31785 vector signed char vec_subs (vector signed char, vector signed char); 31786 vector unsigned short vec_subs (vector bool short, 31787 vector unsigned short); 31788 vector unsigned short vec_subs (vector unsigned short, 31789 vector bool short); 31790 vector unsigned short vec_subs (vector unsigned short, 31791 vector unsigned short); 31792 vector signed short vec_subs (vector bool short, vector signed short); 31793 vector signed short vec_subs (vector signed short, vector bool short); 31794 vector signed short vec_subs (vector signed short, vector signed short); 31795 vector unsigned int vec_subs (vector bool int, vector unsigned int); 31796 vector unsigned int vec_subs (vector unsigned int, vector bool int); 31797 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 31798 vector signed int vec_subs (vector bool int, vector signed int); 31799 vector signed int vec_subs (vector signed int, vector bool int); 31800 vector signed int vec_subs (vector signed int, vector signed int); 31801 31802 vector signed int vec_vsubsws (vector bool int, vector signed int); 31803 vector signed int vec_vsubsws (vector signed int, vector bool int); 31804 vector signed int vec_vsubsws (vector signed int, vector signed int); 31805 31806 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 31807 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 31808 vector unsigned int vec_vsubuws (vector unsigned int, 31809 vector unsigned int); 31810 31811 vector signed short vec_vsubshs (vector bool short, 31812 vector signed short); 31813 vector signed short vec_vsubshs (vector signed short, 31814 vector bool short); 31815 vector signed short vec_vsubshs (vector signed short, 31816 vector signed short); 31817 31818 vector unsigned short vec_vsubuhs (vector bool short, 31819 vector unsigned short); 31820 vector unsigned short vec_vsubuhs (vector unsigned short, 31821 vector bool short); 31822 vector unsigned short vec_vsubuhs (vector unsigned short, 31823 vector unsigned short); 31824 31825 vector signed char vec_vsubsbs (vector bool char, vector signed char); 31826 vector signed char vec_vsubsbs (vector signed char, vector bool char); 31827 vector signed char vec_vsubsbs (vector signed char, vector signed char); 31828 31829 vector unsigned char vec_vsububs (vector bool char, 31830 vector unsigned char); 31831 vector unsigned char vec_vsububs (vector unsigned char, 31832 vector bool char); 31833 vector unsigned char vec_vsububs (vector unsigned char, 31834 vector unsigned char); 31835 31836 vector unsigned int vec_sum4s (vector unsigned char, 31837 vector unsigned int); 31838 vector signed int vec_sum4s (vector signed char, vector signed int); 31839 vector signed int vec_sum4s (vector signed short, vector signed int); 31840 31841 vector signed int vec_vsum4shs (vector signed short, vector signed int); 31842 31843 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 31844 31845 vector unsigned int vec_vsum4ubs (vector unsigned char, 31846 vector unsigned int); 31847 31848 vector signed int vec_sum2s (vector signed int, vector signed int); 31849 31850 vector signed int vec_sums (vector signed int, vector signed int); 31851 31852 vector float vec_trunc (vector float); 31853 31854 vector signed short vec_unpackh (vector signed char); 31855 vector bool short vec_unpackh (vector bool char); 31856 vector signed int vec_unpackh (vector signed short); 31857 vector bool int vec_unpackh (vector bool short); 31858 vector unsigned int vec_unpackh (vector pixel); 31859 31860 vector bool int vec_vupkhsh (vector bool short); 31861 vector signed int vec_vupkhsh (vector signed short); 31862 31863 vector unsigned int vec_vupkhpx (vector pixel); 31864 31865 vector bool short vec_vupkhsb (vector bool char); 31866 vector signed short vec_vupkhsb (vector signed char); 31867 31868 vector signed short vec_unpackl (vector signed char); 31869 vector bool short vec_unpackl (vector bool char); 31870 vector unsigned int vec_unpackl (vector pixel); 31871 vector signed int vec_unpackl (vector signed short); 31872 vector bool int vec_unpackl (vector bool short); 31873 31874 vector unsigned int vec_vupklpx (vector pixel); 31875 31876 vector bool int vec_vupklsh (vector bool short); 31877 vector signed int vec_vupklsh (vector signed short); 31878 31879 vector bool short vec_vupklsb (vector bool char); 31880 vector signed short vec_vupklsb (vector signed char); 31881 31882 vector float vec_xor (vector float, vector float); 31883 vector float vec_xor (vector float, vector bool int); 31884 vector float vec_xor (vector bool int, vector float); 31885 vector bool int vec_xor (vector bool int, vector bool int); 31886 vector signed int vec_xor (vector bool int, vector signed int); 31887 vector signed int vec_xor (vector signed int, vector bool int); 31888 vector signed int vec_xor (vector signed int, vector signed int); 31889 vector unsigned int vec_xor (vector bool int, vector unsigned int); 31890 vector unsigned int vec_xor (vector unsigned int, vector bool int); 31891 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 31892 vector bool short vec_xor (vector bool short, vector bool short); 31893 vector signed short vec_xor (vector bool short, vector signed short); 31894 vector signed short vec_xor (vector signed short, vector bool short); 31895 vector signed short vec_xor (vector signed short, vector signed short); 31896 vector unsigned short vec_xor (vector bool short, 31897 vector unsigned short); 31898 vector unsigned short vec_xor (vector unsigned short, 31899 vector bool short); 31900 vector unsigned short vec_xor (vector unsigned short, 31901 vector unsigned short); 31902 vector signed char vec_xor (vector bool char, vector signed char); 31903 vector bool char vec_xor (vector bool char, vector bool char); 31904 vector signed char vec_xor (vector signed char, vector bool char); 31905 vector signed char vec_xor (vector signed char, vector signed char); 31906 vector unsigned char vec_xor (vector bool char, vector unsigned char); 31907 vector unsigned char vec_xor (vector unsigned char, vector bool char); 31908 vector unsigned char vec_xor (vector unsigned char, 31909 vector unsigned char); 31910 31911 int vec_all_eq (vector signed char, vector bool char); 31912 int vec_all_eq (vector signed char, vector signed char); 31913 int vec_all_eq (vector unsigned char, vector bool char); 31914 int vec_all_eq (vector unsigned char, vector unsigned char); 31915 int vec_all_eq (vector bool char, vector bool char); 31916 int vec_all_eq (vector bool char, vector unsigned char); 31917 int vec_all_eq (vector bool char, vector signed char); 31918 int vec_all_eq (vector signed short, vector bool short); 31919 int vec_all_eq (vector signed short, vector signed short); 31920 int vec_all_eq (vector unsigned short, vector bool short); 31921 int vec_all_eq (vector unsigned short, vector unsigned short); 31922 int vec_all_eq (vector bool short, vector bool short); 31923 int vec_all_eq (vector bool short, vector unsigned short); 31924 int vec_all_eq (vector bool short, vector signed short); 31925 int vec_all_eq (vector pixel, vector pixel); 31926 int vec_all_eq (vector signed int, vector bool int); 31927 int vec_all_eq (vector signed int, vector signed int); 31928 int vec_all_eq (vector unsigned int, vector bool int); 31929 int vec_all_eq (vector unsigned int, vector unsigned int); 31930 int vec_all_eq (vector bool int, vector bool int); 31931 int vec_all_eq (vector bool int, vector unsigned int); 31932 int vec_all_eq (vector bool int, vector signed int); 31933 int vec_all_eq (vector float, vector float); 31934 31935 int vec_all_ge (vector bool char, vector unsigned char); 31936 int vec_all_ge (vector unsigned char, vector bool char); 31937 int vec_all_ge (vector unsigned char, vector unsigned char); 31938 int vec_all_ge (vector bool char, vector signed char); 31939 int vec_all_ge (vector signed char, vector bool char); 31940 int vec_all_ge (vector signed char, vector signed char); 31941 int vec_all_ge (vector bool short, vector unsigned short); 31942 int vec_all_ge (vector unsigned short, vector bool short); 31943 int vec_all_ge (vector unsigned short, vector unsigned short); 31944 int vec_all_ge (vector signed short, vector signed short); 31945 int vec_all_ge (vector bool short, vector signed short); 31946 int vec_all_ge (vector signed short, vector bool short); 31947 int vec_all_ge (vector bool int, vector unsigned int); 31948 int vec_all_ge (vector unsigned int, vector bool int); 31949 int vec_all_ge (vector unsigned int, vector unsigned int); 31950 int vec_all_ge (vector bool int, vector signed int); 31951 int vec_all_ge (vector signed int, vector bool int); 31952 int vec_all_ge (vector signed int, vector signed int); 31953 int vec_all_ge (vector float, vector float); 31954 31955 int vec_all_gt (vector bool char, vector unsigned char); 31956 int vec_all_gt (vector unsigned char, vector bool char); 31957 int vec_all_gt (vector unsigned char, vector unsigned char); 31958 int vec_all_gt (vector bool char, vector signed char); 31959 int vec_all_gt (vector signed char, vector bool char); 31960 int vec_all_gt (vector signed char, vector signed char); 31961 int vec_all_gt (vector bool short, vector unsigned short); 31962 int vec_all_gt (vector unsigned short, vector bool short); 31963 int vec_all_gt (vector unsigned short, vector unsigned short); 31964 int vec_all_gt (vector bool short, vector signed short); 31965 int vec_all_gt (vector signed short, vector bool short); 31966 int vec_all_gt (vector signed short, vector signed short); 31967 int vec_all_gt (vector bool int, vector unsigned int); 31968 int vec_all_gt (vector unsigned int, vector bool int); 31969 int vec_all_gt (vector unsigned int, vector unsigned int); 31970 int vec_all_gt (vector bool int, vector signed int); 31971 int vec_all_gt (vector signed int, vector bool int); 31972 int vec_all_gt (vector signed int, vector signed int); 31973 int vec_all_gt (vector float, vector float); 31974 31975 int vec_all_in (vector float, vector float); 31976 31977 int vec_all_le (vector bool char, vector unsigned char); 31978 int vec_all_le (vector unsigned char, vector bool char); 31979 int vec_all_le (vector unsigned char, vector unsigned char); 31980 int vec_all_le (vector bool char, vector signed char); 31981 int vec_all_le (vector signed char, vector bool char); 31982 int vec_all_le (vector signed char, vector signed char); 31983 int vec_all_le (vector bool short, vector unsigned short); 31984 int vec_all_le (vector unsigned short, vector bool short); 31985 int vec_all_le (vector unsigned short, vector unsigned short); 31986 int vec_all_le (vector bool short, vector signed short); 31987 int vec_all_le (vector signed short, vector bool short); 31988 int vec_all_le (vector signed short, vector signed short); 31989 int vec_all_le (vector bool int, vector unsigned int); 31990 int vec_all_le (vector unsigned int, vector bool int); 31991 int vec_all_le (vector unsigned int, vector unsigned int); 31992 int vec_all_le (vector bool int, vector signed int); 31993 int vec_all_le (vector signed int, vector bool int); 31994 int vec_all_le (vector signed int, vector signed int); 31995 int vec_all_le (vector float, vector float); 31996 31997 int vec_all_lt (vector bool char, vector unsigned char); 31998 int vec_all_lt (vector unsigned char, vector bool char); 31999 int vec_all_lt (vector unsigned char, vector unsigned char); 32000 int vec_all_lt (vector bool char, vector signed char); 32001 int vec_all_lt (vector signed char, vector bool char); 32002 int vec_all_lt (vector signed char, vector signed char); 32003 int vec_all_lt (vector bool short, vector unsigned short); 32004 int vec_all_lt (vector unsigned short, vector bool short); 32005 int vec_all_lt (vector unsigned short, vector unsigned short); 32006 int vec_all_lt (vector bool short, vector signed short); 32007 int vec_all_lt (vector signed short, vector bool short); 32008 int vec_all_lt (vector signed short, vector signed short); 32009 int vec_all_lt (vector bool int, vector unsigned int); 32010 int vec_all_lt (vector unsigned int, vector bool int); 32011 int vec_all_lt (vector unsigned int, vector unsigned int); 32012 int vec_all_lt (vector bool int, vector signed int); 32013 int vec_all_lt (vector signed int, vector bool int); 32014 int vec_all_lt (vector signed int, vector signed int); 32015 int vec_all_lt (vector float, vector float); 32016 32017 int vec_all_nan (vector float); 32018 32019 int vec_all_ne (vector signed char, vector bool char); 32020 int vec_all_ne (vector signed char, vector signed char); 32021 int vec_all_ne (vector unsigned char, vector bool char); 32022 int vec_all_ne (vector unsigned char, vector unsigned char); 32023 int vec_all_ne (vector bool char, vector bool char); 32024 int vec_all_ne (vector bool char, vector unsigned char); 32025 int vec_all_ne (vector bool char, vector signed char); 32026 int vec_all_ne (vector signed short, vector bool short); 32027 int vec_all_ne (vector signed short, vector signed short); 32028 int vec_all_ne (vector unsigned short, vector bool short); 32029 int vec_all_ne (vector unsigned short, vector unsigned short); 32030 int vec_all_ne (vector bool short, vector bool short); 32031 int vec_all_ne (vector bool short, vector unsigned short); 32032 int vec_all_ne (vector bool short, vector signed short); 32033 int vec_all_ne (vector pixel, vector pixel); 32034 int vec_all_ne (vector signed int, vector bool int); 32035 int vec_all_ne (vector signed int, vector signed int); 32036 int vec_all_ne (vector unsigned int, vector bool int); 32037 int vec_all_ne (vector unsigned int, vector unsigned int); 32038 int vec_all_ne (vector bool int, vector bool int); 32039 int vec_all_ne (vector bool int, vector unsigned int); 32040 int vec_all_ne (vector bool int, vector signed int); 32041 int vec_all_ne (vector float, vector float); 32042 32043 int vec_all_nge (vector float, vector float); 32044 32045 int vec_all_ngt (vector float, vector float); 32046 32047 int vec_all_nle (vector float, vector float); 32048 32049 int vec_all_nlt (vector float, vector float); 32050 32051 int vec_all_numeric (vector float); 32052 32053 int vec_any_eq (vector signed char, vector bool char); 32054 int vec_any_eq (vector signed char, vector signed char); 32055 int vec_any_eq (vector unsigned char, vector bool char); 32056 int vec_any_eq (vector unsigned char, vector unsigned char); 32057 int vec_any_eq (vector bool char, vector bool char); 32058 int vec_any_eq (vector bool char, vector unsigned char); 32059 int vec_any_eq (vector bool char, vector signed char); 32060 int vec_any_eq (vector signed short, vector bool short); 32061 int vec_any_eq (vector signed short, vector signed short); 32062 int vec_any_eq (vector unsigned short, vector bool short); 32063 int vec_any_eq (vector unsigned short, vector unsigned short); 32064 int vec_any_eq (vector bool short, vector bool short); 32065 int vec_any_eq (vector bool short, vector unsigned short); 32066 int vec_any_eq (vector bool short, vector signed short); 32067 int vec_any_eq (vector pixel, vector pixel); 32068 int vec_any_eq (vector signed int, vector bool int); 32069 int vec_any_eq (vector signed int, vector signed int); 32070 int vec_any_eq (vector unsigned int, vector bool int); 32071 int vec_any_eq (vector unsigned int, vector unsigned int); 32072 int vec_any_eq (vector bool int, vector bool int); 32073 int vec_any_eq (vector bool int, vector unsigned int); 32074 int vec_any_eq (vector bool int, vector signed int); 32075 int vec_any_eq (vector float, vector float); 32076 32077 int vec_any_ge (vector signed char, vector bool char); 32078 int vec_any_ge (vector unsigned char, vector bool char); 32079 int vec_any_ge (vector unsigned char, vector unsigned char); 32080 int vec_any_ge (vector signed char, vector signed char); 32081 int vec_any_ge (vector bool char, vector unsigned char); 32082 int vec_any_ge (vector bool char, vector signed char); 32083 int vec_any_ge (vector unsigned short, vector bool short); 32084 int vec_any_ge (vector unsigned short, vector unsigned short); 32085 int vec_any_ge (vector signed short, vector signed short); 32086 int vec_any_ge (vector signed short, vector bool short); 32087 int vec_any_ge (vector bool short, vector unsigned short); 32088 int vec_any_ge (vector bool short, vector signed short); 32089 int vec_any_ge (vector signed int, vector bool int); 32090 int vec_any_ge (vector unsigned int, vector bool int); 32091 int vec_any_ge (vector unsigned int, vector unsigned int); 32092 int vec_any_ge (vector signed int, vector signed int); 32093 int vec_any_ge (vector bool int, vector unsigned int); 32094 int vec_any_ge (vector bool int, vector signed int); 32095 int vec_any_ge (vector float, vector float); 32096 32097 int vec_any_gt (vector bool char, vector unsigned char); 32098 int vec_any_gt (vector unsigned char, vector bool char); 32099 int vec_any_gt (vector unsigned char, vector unsigned char); 32100 int vec_any_gt (vector bool char, vector signed char); 32101 int vec_any_gt (vector signed char, vector bool char); 32102 int vec_any_gt (vector signed char, vector signed char); 32103 int vec_any_gt (vector bool short, vector unsigned short); 32104 int vec_any_gt (vector unsigned short, vector bool short); 32105 int vec_any_gt (vector unsigned short, vector unsigned short); 32106 int vec_any_gt (vector bool short, vector signed short); 32107 int vec_any_gt (vector signed short, vector bool short); 32108 int vec_any_gt (vector signed short, vector signed short); 32109 int vec_any_gt (vector bool int, vector unsigned int); 32110 int vec_any_gt (vector unsigned int, vector bool int); 32111 int vec_any_gt (vector unsigned int, vector unsigned int); 32112 int vec_any_gt (vector bool int, vector signed int); 32113 int vec_any_gt (vector signed int, vector bool int); 32114 int vec_any_gt (vector signed int, vector signed int); 32115 int vec_any_gt (vector float, vector float); 32116 32117 int vec_any_le (vector bool char, vector unsigned char); 32118 int vec_any_le (vector unsigned char, vector bool char); 32119 int vec_any_le (vector unsigned char, vector unsigned char); 32120 int vec_any_le (vector bool char, vector signed char); 32121 int vec_any_le (vector signed char, vector bool char); 32122 int vec_any_le (vector signed char, vector signed char); 32123 int vec_any_le (vector bool short, vector unsigned short); 32124 int vec_any_le (vector unsigned short, vector bool short); 32125 int vec_any_le (vector unsigned short, vector unsigned short); 32126 int vec_any_le (vector bool short, vector signed short); 32127 int vec_any_le (vector signed short, vector bool short); 32128 int vec_any_le (vector signed short, vector signed short); 32129 int vec_any_le (vector bool int, vector unsigned int); 32130 int vec_any_le (vector unsigned int, vector bool int); 32131 int vec_any_le (vector unsigned int, vector unsigned int); 32132 int vec_any_le (vector bool int, vector signed int); 32133 int vec_any_le (vector signed int, vector bool int); 32134 int vec_any_le (vector signed int, vector signed int); 32135 int vec_any_le (vector float, vector float); 32136 32137 int vec_any_lt (vector bool char, vector unsigned char); 32138 int vec_any_lt (vector unsigned char, vector bool char); 32139 int vec_any_lt (vector unsigned char, vector unsigned char); 32140 int vec_any_lt (vector bool char, vector signed char); 32141 int vec_any_lt (vector signed char, vector bool char); 32142 int vec_any_lt (vector signed char, vector signed char); 32143 int vec_any_lt (vector bool short, vector unsigned short); 32144 int vec_any_lt (vector unsigned short, vector bool short); 32145 int vec_any_lt (vector unsigned short, vector unsigned short); 32146 int vec_any_lt (vector bool short, vector signed short); 32147 int vec_any_lt (vector signed short, vector bool short); 32148 int vec_any_lt (vector signed short, vector signed short); 32149 int vec_any_lt (vector bool int, vector unsigned int); 32150 int vec_any_lt (vector unsigned int, vector bool int); 32151 int vec_any_lt (vector unsigned int, vector unsigned int); 32152 int vec_any_lt (vector bool int, vector signed int); 32153 int vec_any_lt (vector signed int, vector bool int); 32154 int vec_any_lt (vector signed int, vector signed int); 32155 int vec_any_lt (vector float, vector float); 32156 32157 int vec_any_nan (vector float); 32158 32159 int vec_any_ne (vector signed char, vector bool char); 32160 int vec_any_ne (vector signed char, vector signed char); 32161 int vec_any_ne (vector unsigned char, vector bool char); 32162 int vec_any_ne (vector unsigned char, vector unsigned char); 32163 int vec_any_ne (vector bool char, vector bool char); 32164 int vec_any_ne (vector bool char, vector unsigned char); 32165 int vec_any_ne (vector bool char, vector signed char); 32166 int vec_any_ne (vector signed short, vector bool short); 32167 int vec_any_ne (vector signed short, vector signed short); 32168 int vec_any_ne (vector unsigned short, vector bool short); 32169 int vec_any_ne (vector unsigned short, vector unsigned short); 32170 int vec_any_ne (vector bool short, vector bool short); 32171 int vec_any_ne (vector bool short, vector unsigned short); 32172 int vec_any_ne (vector bool short, vector signed short); 32173 int vec_any_ne (vector pixel, vector pixel); 32174 int vec_any_ne (vector signed int, vector bool int); 32175 int vec_any_ne (vector signed int, vector signed int); 32176 int vec_any_ne (vector unsigned int, vector bool int); 32177 int vec_any_ne (vector unsigned int, vector unsigned int); 32178 int vec_any_ne (vector bool int, vector bool int); 32179 int vec_any_ne (vector bool int, vector unsigned int); 32180 int vec_any_ne (vector bool int, vector signed int); 32181 int vec_any_ne (vector float, vector float); 32182 32183 int vec_any_nge (vector float, vector float); 32184 32185 int vec_any_ngt (vector float, vector float); 32186 32187 int vec_any_nle (vector float, vector float); 32188 32189 int vec_any_nlt (vector float, vector float); 32190 32191 int vec_any_numeric (vector float); 32192 32193 int vec_any_out (vector float, vector float); 32194 32195 32196 File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: PowerPC AltiVec Built-in Functions, Up: Target Builtins 32197 32198 5.50.10 SPARC VIS Built-in Functions 32199 ------------------------------------ 32200 32201 GCC supports SIMD operations on the SPARC using both the generic vector 32202 extensions (*note Vector Extensions::) as well as built-in functions for 32203 the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 32204 switch, the VIS extension is exposed as the following built-in 32205 functions: 32206 32207 typedef int v2si __attribute__ ((vector_size (8))); 32208 typedef short v4hi __attribute__ ((vector_size (8))); 32209 typedef short v2hi __attribute__ ((vector_size (4))); 32210 typedef char v8qi __attribute__ ((vector_size (8))); 32211 typedef char v4qi __attribute__ ((vector_size (4))); 32212 32213 void * __builtin_vis_alignaddr (void *, long); 32214 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 32215 v2si __builtin_vis_faligndatav2si (v2si, v2si); 32216 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 32217 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 32218 32219 v4hi __builtin_vis_fexpand (v4qi); 32220 32221 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 32222 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 32223 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 32224 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 32225 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 32226 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 32227 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 32228 32229 v4qi __builtin_vis_fpack16 (v4hi); 32230 v8qi __builtin_vis_fpack32 (v2si, v2si); 32231 v2hi __builtin_vis_fpackfix (v2si); 32232 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 32233 32234 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 32235 32236 32237 File: gcc.info, Node: SPU Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 32238 32239 5.50.11 SPU Built-in Functions 32240 ------------------------------ 32241 32242 GCC provides extensions for the SPU processor as described in the 32243 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 32244 found at `http://cell.scei.co.jp/' or 32245 `http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 32246 differs in several ways. 32247 32248 * The optional extension of specifying vector constants in 32249 parentheses is not supported. 32250 32251 * A vector initializer requires no cast if the vector constant is of 32252 the same type as the variable it is initializing. 32253 32254 * If `signed' or `unsigned' is omitted, the signedness of the vector 32255 type is the default signedness of the base type. The default 32256 varies depending on the operating system, so a portable program 32257 should always specify the signedness. 32258 32259 * By default, the keyword `__vector' is added. The macro `vector' is 32260 defined in `<spu_intrinsics.h>' and can be undefined. 32261 32262 * GCC allows using a `typedef' name as the type specifier for a 32263 vector type. 32264 32265 * For C, overloaded functions are implemented with macros so the 32266 following does not work: 32267 32268 spu_add ((vector signed int){1, 2, 3, 4}, foo); 32269 32270 Since `spu_add' is a macro, the vector constant in the example is 32271 treated as four separate arguments. Wrap the entire argument in 32272 parentheses for this to work. 32273 32274 * The extended version of `__builtin_expect' is not supported. 32275 32276 32277 _Note:_ Only the interface described in the aforementioned 32278 specification is supported. Internally, GCC uses built-in functions to 32279 implement the required functionality, but these are not supported and 32280 are subject to change without notice. 32281 32282 32283 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 32284 32285 5.51 Format Checks Specific to Particular Target Machines 32286 ========================================================= 32287 32288 For some target machines, GCC supports additional options to the format 32289 attribute (*note Declaring Attributes of Functions: Function 32290 Attributes.). 32291 32292 * Menu: 32293 32294 * Solaris Format Checks:: 32295 32296 32297 File: gcc.info, Node: Solaris Format Checks, Up: Target Format Checks 32298 32299 5.51.1 Solaris Format Checks 32300 ---------------------------- 32301 32302 Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 32303 `cmn_err' accepts a subset of the standard `printf' conversions, and 32304 the two-argument `%b' conversion for displaying bit-fields. See the 32305 Solaris man page for `cmn_err' for more information. 32306 32307 32308 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 32309 32310 5.52 Pragmas Accepted by GCC 32311 ============================ 32312 32313 GCC supports several types of pragmas, primarily in order to compile 32314 code originally written for other compilers. Note that in general we 32315 do not recommend the use of pragmas; *Note Function Attributes::, for 32316 further explanation. 32317 32318 * Menu: 32319 32320 * ARM Pragmas:: 32321 * M32C Pragmas:: 32322 * RS/6000 and PowerPC Pragmas:: 32323 * Darwin Pragmas:: 32324 * Solaris Pragmas:: 32325 * Symbol-Renaming Pragmas:: 32326 * Structure-Packing Pragmas:: 32327 * Weak Pragmas:: 32328 * Diagnostic Pragmas:: 32329 * Visibility Pragmas:: 32330 32331 32332 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 32333 32334 5.52.1 ARM Pragmas 32335 ------------------ 32336 32337 The ARM target defines pragmas for controlling the default addition of 32338 `long_call' and `short_call' attributes to functions. *Note Function 32339 Attributes::, for information about the effects of these attributes. 32340 32341 `long_calls' 32342 Set all subsequent functions to have the `long_call' attribute. 32343 32344 `no_long_calls' 32345 Set all subsequent functions to have the `short_call' attribute. 32346 32347 `long_calls_off' 32348 Do not affect the `long_call' or `short_call' attributes of 32349 subsequent functions. 32350 32351 32352 File: gcc.info, Node: M32C Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: ARM Pragmas, Up: Pragmas 32353 32354 5.52.2 M32C Pragmas 32355 ------------------- 32356 32357 `memregs NUMBER' 32358 Overrides the command line option `-memregs=' for the current 32359 file. Use with care! This pragma must be before any function in 32360 the file, and mixing different memregs values in different objects 32361 may make them incompatible. This pragma is useful when a 32362 performance-critical function uses a memreg for temporary values, 32363 as it may allow you to reduce the number of memregs used. 32364 32365 32366 32367 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: M32C Pragmas, Up: Pragmas 32368 32369 5.52.3 RS/6000 and PowerPC Pragmas 32370 ---------------------------------- 32371 32372 The RS/6000 and PowerPC targets define one pragma for controlling 32373 whether or not the `longcall' attribute is added to function 32374 declarations by default. This pragma overrides the `-mlongcall' 32375 option, but not the `longcall' and `shortcall' attributes. *Note 32376 RS/6000 and PowerPC Options::, for more information about when long 32377 calls are and are not necessary. 32378 32379 `longcall (1)' 32380 Apply the `longcall' attribute to all subsequent function 32381 declarations. 32382 32383 `longcall (0)' 32384 Do not apply the `longcall' attribute to subsequent function 32385 declarations. 32386 32387 32388 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 32389 32390 5.52.4 Darwin Pragmas 32391 --------------------- 32392 32393 The following pragmas are available for all architectures running the 32394 Darwin operating system. These are useful for compatibility with other 32395 Mac OS compilers. 32396 32397 `mark TOKENS...' 32398 This pragma is accepted, but has no effect. 32399 32400 `options align=ALIGNMENT' 32401 This pragma sets the alignment of fields in structures. The 32402 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 32403 `power', to emulate PowerPC alignment. Uses of this pragma nest 32404 properly; to restore the previous setting, use `reset' for the 32405 ALIGNMENT. 32406 32407 `segment TOKENS...' 32408 This pragma is accepted, but has no effect. 32409 32410 `unused (VAR [, VAR]...)' 32411 This pragma declares variables to be possibly unused. GCC will not 32412 produce warnings for the listed variables. The effect is similar 32413 to that of the `unused' attribute, except that this pragma may 32414 appear anywhere within the variables' scopes. 32415 32416 32417 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 32418 32419 5.52.5 Solaris Pragmas 32420 ---------------------- 32421 32422 The Solaris target supports `#pragma redefine_extname' (*note 32423 Symbol-Renaming Pragmas::). It also supports additional `#pragma' 32424 directives for compatibility with the system compiler. 32425 32426 `align ALIGNMENT (VARIABLE [, VARIABLE]...)' 32427 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 32428 This is the same as GCC's `aligned' attribute *note Variable 32429 Attributes::). Macro expansion occurs on the arguments to this 32430 pragma when compiling C and Objective-C. It does not currently 32431 occur when compiling C++, but this is a bug which may be fixed in 32432 a future release. 32433 32434 `fini (FUNCTION [, FUNCTION]...)' 32435 This pragma causes each listed FUNCTION to be called after main, 32436 or during shared module unloading, by adding a call to the `.fini' 32437 section. 32438 32439 `init (FUNCTION [, FUNCTION]...)' 32440 This pragma causes each listed FUNCTION to be called during 32441 initialization (before `main') or during shared module loading, by 32442 adding a call to the `.init' section. 32443 32444 32445 32446 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 32447 32448 5.52.6 Symbol-Renaming Pragmas 32449 ------------------------------ 32450 32451 For compatibility with the Solaris and Tru64 UNIX system headers, GCC 32452 supports two `#pragma' directives which change the name used in 32453 assembly for a given declaration. These pragmas are only available on 32454 platforms whose system headers need them. To get this effect on all 32455 platforms supported by GCC, use the asm labels extension (*note Asm 32456 Labels::). 32457 32458 `redefine_extname OLDNAME NEWNAME' 32459 This pragma gives the C function OLDNAME the assembly symbol 32460 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 32461 be defined if this pragma is available (currently only on Solaris). 32462 32463 `extern_prefix STRING' 32464 This pragma causes all subsequent external function and variable 32465 declarations to have STRING prepended to their assembly symbols. 32466 This effect may be terminated with another `extern_prefix' pragma 32467 whose argument is an empty string. The preprocessor macro 32468 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 32469 available (currently only on Tru64 UNIX). 32470 32471 These pragmas and the asm labels extension interact in a complicated 32472 manner. Here are some corner cases you may want to be aware of. 32473 32474 1. Both pragmas silently apply only to declarations with external 32475 linkage. Asm labels do not have this restriction. 32476 32477 2. In C++, both pragmas silently apply only to declarations with "C" 32478 linkage. Again, asm labels do not have this restriction. 32479 32480 3. If any of the three ways of changing the assembly name of a 32481 declaration is applied to a declaration whose assembly name has 32482 already been determined (either by a previous use of one of these 32483 features, or because the compiler needed the assembly name in 32484 order to generate code), and the new name is different, a warning 32485 issues and the name does not change. 32486 32487 4. The OLDNAME used by `#pragma redefine_extname' is always the 32488 C-language name. 32489 32490 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 32491 with an asm label attached, the prefix is silently ignored for 32492 that declaration. 32493 32494 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 32495 the same declaration, whichever triggered first wins, and a 32496 warning issues if they contradict each other. (We would like to 32497 have `#pragma redefine_extname' always win, for consistency with 32498 asm labels, but if `#pragma extern_prefix' triggers first we have 32499 no way of knowing that that happened.) 32500 32501 32502 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 32503 32504 5.52.7 Structure-Packing Pragmas 32505 -------------------------------- 32506 32507 For compatibility with Win32, GCC supports a set of `#pragma' 32508 directives which change the maximum alignment of members of structures 32509 (other than zero-width bitfields), unions, and classes subsequently 32510 defined. The N value below always is required to be a small power of 32511 two and specifies the new alignment in bytes. 32512 32513 1. `#pragma pack(N)' simply sets the new alignment. 32514 32515 2. `#pragma pack()' sets the alignment to the one that was in effect 32516 when compilation started (see also command line option 32517 `-fpack-struct[=<n>]' *note Code Gen Options::). 32518 32519 3. `#pragma pack(push[,N])' pushes the current alignment setting on 32520 an internal stack and then optionally sets the new alignment. 32521 32522 4. `#pragma pack(pop)' restores the alignment setting to the one 32523 saved at the top of the internal stack (and removes that stack 32524 entry). Note that `#pragma pack([N])' does not influence this 32525 internal stack; thus it is possible to have `#pragma pack(push)' 32526 followed by multiple `#pragma pack(N)' instances and finalized by 32527 a single `#pragma pack(pop)'. 32528 32529 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 32530 which lays out a structure as the documented `__attribute__ 32531 ((ms_struct))'. 32532 1. `#pragma ms_struct on' turns on the layout for structures declared. 32533 32534 2. `#pragma ms_struct off' turns off the layout for structures 32535 declared. 32536 32537 3. `#pragma ms_struct reset' goes back to the default layout. 32538 32539 32540 File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 32541 32542 5.52.8 Weak Pragmas 32543 ------------------- 32544 32545 For compatibility with SVR4, GCC supports a set of `#pragma' directives 32546 for declaring symbols to be weak, and defining weak aliases. 32547 32548 `#pragma weak SYMBOL' 32549 This pragma declares SYMBOL to be weak, as if the declaration had 32550 the attribute of the same name. The pragma may appear before or 32551 after the declaration of SYMBOL, but must appear before either its 32552 first use or its definition. It is not an error for SYMBOL to 32553 never be defined at all. 32554 32555 `#pragma weak SYMBOL1 = SYMBOL2' 32556 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 32557 an error if SYMBOL2 is not defined in the current translation unit. 32558 32559 32560 File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 32561 32562 5.52.9 Diagnostic Pragmas 32563 ------------------------- 32564 32565 GCC allows the user to selectively enable or disable certain types of 32566 diagnostics, and change the kind of the diagnostic. For example, a 32567 project's policy might require that all sources compile with `-Werror' 32568 but certain files might have exceptions allowing specific types of 32569 warnings. Or, a project might selectively enable diagnostics and treat 32570 them as errors depending on which preprocessor macros are defined. 32571 32572 `#pragma GCC diagnostic KIND OPTION' 32573 Modifies the disposition of a diagnostic. Note that not all 32574 diagnostics are modifiable; at the moment only warnings (normally 32575 controlled by `-W...') can be controlled, and not all of them. 32576 Use `-fdiagnostics-show-option' to determine which diagnostics are 32577 controllable and which option controls them. 32578 32579 KIND is `error' to treat this diagnostic as an error, `warning' to 32580 treat it like a warning (even if `-Werror' is in effect), or 32581 `ignored' if the diagnostic is to be ignored. OPTION is a double 32582 quoted string which matches the command line option. 32583 32584 #pragma GCC diagnostic warning "-Wformat" 32585 #pragma GCC diagnostic error "-Wformat" 32586 #pragma GCC diagnostic ignored "-Wformat" 32587 32588 Note that these pragmas override any command line options. Also, 32589 while it is syntactically valid to put these pragmas anywhere in 32590 your sources, the only supported location for them is before any 32591 data or functions are defined. Doing otherwise may result in 32592 unpredictable results depending on how the optimizer manages your 32593 sources. If the same option is listed multiple times, the last 32594 one specified is the one that is in effect. This pragma is not 32595 intended to be a general purpose replacement for command line 32596 options, but for implementing strict control over project policies. 32597 32598 32599 32600 File: gcc.info, Node: Visibility Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 32601 32602 5.52.10 Visibility Pragmas 32603 -------------------------- 32604 32605 `#pragma GCC visibility push(VISIBILITY)' 32606 `#pragma GCC visibility pop' 32607 This pragma allows the user to set the visibility for multiple 32608 declarations without having to give each a visibility attribute 32609 *Note Function Attributes::, for more information about visibility 32610 and the attribute syntax. 32611 32612 In C++, `#pragma GCC visibility' affects only namespace-scope 32613 declarations. Class members and template specializations are not 32614 affected; if you want to override the visibility for a particular 32615 member or instantiation, you must use an attribute. 32616 32617 32618 32619 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 32620 32621 5.53 Unnamed struct/union fields within structs/unions 32622 ====================================================== 32623 32624 For compatibility with other compilers, GCC allows you to define a 32625 structure or union that contains, as fields, structures and unions 32626 without names. For example: 32627 32628 struct { 32629 int a; 32630 union { 32631 int b; 32632 float c; 32633 }; 32634 int d; 32635 } foo; 32636 32637 In this example, the user would be able to access members of the 32638 unnamed union with code like `foo.b'. Note that only unnamed structs 32639 and unions are allowed, you may not have, for example, an unnamed `int'. 32640 32641 You must never create such structures that cause ambiguous field 32642 definitions. For example, this structure: 32643 32644 struct { 32645 int a; 32646 struct { 32647 int a; 32648 }; 32649 } foo; 32650 32651 It is ambiguous which `a' is being referred to with `foo.a'. Such 32652 constructs are not supported and must be avoided. In the future, such 32653 constructs may be detected and treated as compilation errors. 32654 32655 Unless `-fms-extensions' is used, the unnamed field must be a 32656 structure or union definition without a tag (for example, `struct { int 32657 a; };'). If `-fms-extensions' is used, the field may also be a 32658 definition with a tag such as `struct foo { int a; };', a reference to 32659 a previously defined structure or union such as `struct foo;', or a 32660 reference to a `typedef' name for a previously defined structure or 32661 union type. 32662 32663 32664 File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 32665 32666 5.54 Thread-Local Storage 32667 ========================= 32668 32669 Thread-local storage (TLS) is a mechanism by which variables are 32670 allocated such that there is one instance of the variable per extant 32671 thread. The run-time model GCC uses to implement this originates in 32672 the IA-64 processor-specific ABI, but has since been migrated to other 32673 processors as well. It requires significant support from the linker 32674 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 32675 `libpthread.so'), so it is not available everywhere. 32676 32677 At the user level, the extension is visible with a new storage class 32678 keyword: `__thread'. For example: 32679 32680 __thread int i; 32681 extern __thread struct state s; 32682 static __thread char *p; 32683 32684 The `__thread' specifier may be used alone, with the `extern' or 32685 `static' specifiers, but with no other storage class specifier. When 32686 used with `extern' or `static', `__thread' must appear immediately 32687 after the other storage class specifier. 32688 32689 The `__thread' specifier may be applied to any global, file-scoped 32690 static, function-scoped static, or static data member of a class. It 32691 may not be applied to block-scoped automatic or non-static data member. 32692 32693 When the address-of operator is applied to a thread-local variable, it 32694 is evaluated at run-time and returns the address of the current thread's 32695 instance of that variable. An address so obtained may be used by any 32696 thread. When a thread terminates, any pointers to thread-local 32697 variables in that thread become invalid. 32698 32699 No static initialization may refer to the address of a thread-local 32700 variable. 32701 32702 In C++, if an initializer is present for a thread-local variable, it 32703 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 32704 standard. 32705 32706 See ELF Handling For Thread-Local Storage 32707 (http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of 32708 the four thread-local storage addressing models, and how the run-time 32709 is expected to function. 32710 32711 * Menu: 32712 32713 * C99 Thread-Local Edits:: 32714 * C++98 Thread-Local Edits:: 32715 32716 32717 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 32718 32719 5.54.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 32720 ------------------------------------------------------- 32721 32722 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 32723 document the exact semantics of the language extension. 32724 32725 * `5.1.2 Execution environments' 32726 32727 Add new text after paragraph 1 32728 32729 Within either execution environment, a "thread" is a flow of 32730 control within a program. It is implementation defined 32731 whether or not there may be more than one thread associated 32732 with a program. It is implementation defined how threads 32733 beyond the first are created, the name and type of the 32734 function called at thread startup, and how threads may be 32735 terminated. However, objects with thread storage duration 32736 shall be initialized before thread startup. 32737 32738 * `6.2.4 Storage durations of objects' 32739 32740 Add new text before paragraph 3 32741 32742 An object whose identifier is declared with the storage-class 32743 specifier `__thread' has "thread storage duration". Its 32744 lifetime is the entire execution of the thread, and its 32745 stored value is initialized only once, prior to thread 32746 startup. 32747 32748 * `6.4.1 Keywords' 32749 32750 Add `__thread'. 32751 32752 * `6.7.1 Storage-class specifiers' 32753 32754 Add `__thread' to the list of storage class specifiers in 32755 paragraph 1. 32756 32757 Change paragraph 2 to 32758 32759 With the exception of `__thread', at most one storage-class 32760 specifier may be given [...]. The `__thread' specifier may 32761 be used alone, or immediately following `extern' or `static'. 32762 32763 Add new text after paragraph 6 32764 32765 The declaration of an identifier for a variable that has 32766 block scope that specifies `__thread' shall also specify 32767 either `extern' or `static'. 32768 32769 The `__thread' specifier shall be used only with variables. 32770 32771 32772 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 32773 32774 5.54.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 32775 -------------------------------------------------------- 32776 32777 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 32778 that document the exact semantics of the language extension. 32779 32780 * [intro.execution] 32781 32782 New text after paragraph 4 32783 32784 A "thread" is a flow of control within the abstract machine. 32785 It is implementation defined whether or not there may be more 32786 than one thread. 32787 32788 New text after paragraph 7 32789 32790 It is unspecified whether additional action must be taken to 32791 ensure when and whether side effects are visible to other 32792 threads. 32793 32794 * [lex.key] 32795 32796 Add `__thread'. 32797 32798 * [basic.start.main] 32799 32800 Add after paragraph 5 32801 32802 The thread that begins execution at the `main' function is 32803 called the "main thread". It is implementation defined how 32804 functions beginning threads other than the main thread are 32805 designated or typed. A function so designated, as well as 32806 the `main' function, is called a "thread startup function". 32807 It is implementation defined what happens if a thread startup 32808 function returns. It is implementation defined what happens 32809 to other threads when any thread calls `exit'. 32810 32811 * [basic.start.init] 32812 32813 Add after paragraph 4 32814 32815 The storage for an object of thread storage duration shall be 32816 statically initialized before the first statement of the 32817 thread startup function. An object of thread storage 32818 duration shall not require dynamic initialization. 32819 32820 * [basic.start.term] 32821 32822 Add after paragraph 3 32823 32824 The type of an object with thread storage duration shall not 32825 have a non-trivial destructor, nor shall it be an array type 32826 whose elements (directly or indirectly) have non-trivial 32827 destructors. 32828 32829 * [basic.stc] 32830 32831 Add "thread storage duration" to the list in paragraph 1. 32832 32833 Change paragraph 2 32834 32835 Thread, static, and automatic storage durations are 32836 associated with objects introduced by declarations [...]. 32837 32838 Add `__thread' to the list of specifiers in paragraph 3. 32839 32840 * [basic.stc.thread] 32841 32842 New section before [basic.stc.static] 32843 32844 The keyword `__thread' applied to a non-local object gives the 32845 object thread storage duration. 32846 32847 A local variable or class data member declared both `static' 32848 and `__thread' gives the variable or member thread storage 32849 duration. 32850 32851 * [basic.stc.static] 32852 32853 Change paragraph 1 32854 32855 All objects which have neither thread storage duration, 32856 dynamic storage duration nor are local [...]. 32857 32858 * [dcl.stc] 32859 32860 Add `__thread' to the list in paragraph 1. 32861 32862 Change paragraph 1 32863 32864 With the exception of `__thread', at most one 32865 STORAGE-CLASS-SPECIFIER shall appear in a given 32866 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 32867 alone, or immediately following the `extern' or `static' 32868 specifiers. [...] 32869 32870 Add after paragraph 5 32871 32872 The `__thread' specifier can be applied only to the names of 32873 objects and to anonymous unions. 32874 32875 * [class.mem] 32876 32877 Add after paragraph 6 32878 32879 Non-`static' members shall not be `__thread'. 32880 32881 32882 File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 32883 32884 5.55 Binary constants using the `0b' prefix 32885 =========================================== 32886 32887 Integer constants can be written as binary constants, consisting of a 32888 sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 32889 particularly useful in environments that operate a lot on the bit-level 32890 (like microcontrollers). 32891 32892 The following statements are identical: 32893 32894 i = 42; 32895 i = 0x2a; 32896 i = 052; 32897 i = 0b101010; 32898 32899 The type of these constants follows the same rules as for octal or 32900 hexadecimal integer constants, so suffixes like `L' or `UL' can be 32901 applied. 32902 32903 32904 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 32905 32906 6 Extensions to the C++ Language 32907 ******************************** 32908 32909 The GNU compiler provides these extensions to the C++ language (and you 32910 can also use most of the C language extensions in your C++ programs). 32911 If you want to write code that checks whether these features are 32912 available, you can test for the GNU compiler the same way as for C 32913 programs: check for a predefined macro `__GNUC__'. You can also use 32914 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 32915 (cpp)Common Predefined Macros.). 32916 32917 * Menu: 32918 32919 * Volatiles:: What constitutes an access to a volatile object. 32920 * Restricted Pointers:: C99 restricted pointers and references. 32921 * Vague Linkage:: Where G++ puts inlines, vtables and such. 32922 * C++ Interface:: You can use a single C++ header file for both 32923 declarations and definitions. 32924 * Template Instantiation:: Methods for ensuring that exactly one copy of 32925 each needed template instantiation is emitted. 32926 * Bound member functions:: You can extract a function pointer to the 32927 method denoted by a `->*' or `.*' expression. 32928 * C++ Attributes:: Variable, function, and type attributes for C++ only. 32929 * Namespace Association:: Strong using-directives for namespace association. 32930 * Type Traits:: Compiler support for type traits 32931 * Java Exceptions:: Tweaking exception handling to work with Java. 32932 * Deprecated Features:: Things will disappear from g++. 32933 * Backwards Compatibility:: Compatibilities with earlier definitions of C++. 32934 32935 32936 File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Up: C++ Extensions 32937 32938 6.1 When is a Volatile Object Accessed? 32939 ======================================= 32940 32941 Both the C and C++ standard have the concept of volatile objects. These 32942 are normally accessed by pointers and used for accessing hardware. The 32943 standards encourage compilers to refrain from optimizations concerning 32944 accesses to volatile objects. The C standard leaves it implementation 32945 defined as to what constitutes a volatile access. The C++ standard 32946 omits to specify this, except to say that C++ should behave in a 32947 similar manner to C with respect to volatiles, where possible. The 32948 minimum either standard specifies is that at a sequence point all 32949 previous accesses to volatile objects have stabilized and no subsequent 32950 accesses have occurred. Thus an implementation is free to reorder and 32951 combine volatile accesses which occur between sequence points, but 32952 cannot do so for accesses across a sequence point. The use of 32953 volatiles does not allow you to violate the restriction on updating 32954 objects multiple times within a sequence point. 32955 32956 *Note Volatile qualifier and the C compiler: Qualifiers implementation. 32957 32958 The behavior differs slightly between C and C++ in the non-obvious 32959 cases: 32960 32961 volatile int *src = SOMEVALUE; 32962 *src; 32963 32964 With C, such expressions are rvalues, and GCC interprets this either 32965 as a read of the volatile object being pointed to or only as request to 32966 evaluate the side-effects. The C++ standard specifies that such 32967 expressions do not undergo lvalue to rvalue conversion, and that the 32968 type of the dereferenced object may be incomplete. The C++ standard 32969 does not specify explicitly that it is this lvalue to rvalue conversion 32970 which may be responsible for causing an access. However, there is 32971 reason to believe that it is, because otherwise certain simple 32972 expressions become undefined. However, because it would surprise most 32973 programmers, G++ treats dereferencing a pointer to volatile object of 32974 complete type when the value is unused as GCC would do for an 32975 equivalent type in C. When the object has incomplete type, G++ issues 32976 a warning; if you wish to force an error, you must force a conversion 32977 to rvalue with, for instance, a static cast. 32978 32979 When using a reference to volatile, G++ does not treat equivalent 32980 expressions as accesses to volatiles, but instead issues a warning that 32981 no volatile is accessed. The rationale for this is that otherwise it 32982 becomes difficult to determine where volatile access occur, and not 32983 possible to ignore the return value from functions returning volatile 32984 references. Again, if you wish to force a read, cast the reference to 32985 an rvalue. 32986 32987 32988 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions 32989 32990 6.2 Restricting Pointer Aliasing 32991 ================================ 32992 32993 As with the C front end, G++ understands the C99 feature of restricted 32994 pointers, specified with the `__restrict__', or `__restrict' type 32995 qualifier. Because you cannot compile C++ by specifying the `-std=c99' 32996 language flag, `restrict' is not a keyword in C++. 32997 32998 In addition to allowing restricted pointers, you can specify restricted 32999 references, which indicate that the reference is not aliased in the 33000 local context. 33001 33002 void fn (int *__restrict__ rptr, int &__restrict__ rref) 33003 { 33004 /* ... */ 33005 } 33006 33007 In the body of `fn', RPTR points to an unaliased integer and RREF 33008 refers to a (different) unaliased integer. 33009 33010 You may also specify whether a member function's THIS pointer is 33011 unaliased by using `__restrict__' as a member function qualifier. 33012 33013 void T::fn () __restrict__ 33014 { 33015 /* ... */ 33016 } 33017 33018 Within the body of `T::fn', THIS will have the effective definition `T 33019 *__restrict__ const this'. Notice that the interpretation of a 33020 `__restrict__' member function qualifier is different to that of 33021 `const' or `volatile' qualifier, in that it is applied to the pointer 33022 rather than the object. This is consistent with other compilers which 33023 implement restricted pointers. 33024 33025 As with all outermost parameter qualifiers, `__restrict__' is ignored 33026 in function definition matching. This means you only need to specify 33027 `__restrict__' in a function definition, rather than in a function 33028 prototype as well. 33029 33030 33031 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 33032 33033 6.3 Vague Linkage 33034 ================= 33035 33036 There are several constructs in C++ which require space in the object 33037 file but are not clearly tied to a single translation unit. We say that 33038 these constructs have "vague linkage". Typically such constructs are 33039 emitted wherever they are needed, though sometimes we can be more 33040 clever. 33041 33042 Inline Functions 33043 Inline functions are typically defined in a header file which can 33044 be included in many different compilations. Hopefully they can 33045 usually be inlined, but sometimes an out-of-line copy is 33046 necessary, if the address of the function is taken or if inlining 33047 fails. In general, we emit an out-of-line copy in all translation 33048 units where one is needed. As an exception, we only emit inline 33049 virtual functions with the vtable, since it will always require a 33050 copy. 33051 33052 Local static variables and string constants used in an inline 33053 function are also considered to have vague linkage, since they 33054 must be shared between all inlined and out-of-line instances of 33055 the function. 33056 33057 VTables 33058 C++ virtual functions are implemented in most compilers using a 33059 lookup table, known as a vtable. The vtable contains pointers to 33060 the virtual functions provided by a class, and each object of the 33061 class contains a pointer to its vtable (or vtables, in some 33062 multiple-inheritance situations). If the class declares any 33063 non-inline, non-pure virtual functions, the first one is chosen as 33064 the "key method" for the class, and the vtable is only emitted in 33065 the translation unit where the key method is defined. 33066 33067 _Note:_ If the chosen key method is later defined as inline, the 33068 vtable will still be emitted in every translation unit which 33069 defines it. Make sure that any inline virtuals are declared 33070 inline in the class body, even if they are not defined there. 33071 33072 type_info objects 33073 C++ requires information about types to be written out in order to 33074 implement `dynamic_cast', `typeid' and exception handling. For 33075 polymorphic classes (classes with virtual functions), the type_info 33076 object is written out along with the vtable so that `dynamic_cast' 33077 can determine the dynamic type of a class object at runtime. For 33078 all other types, we write out the type_info object when it is 33079 used: when applying `typeid' to an expression, throwing an object, 33080 or referring to a type in a catch clause or exception 33081 specification. 33082 33083 Template Instantiations 33084 Most everything in this section also applies to template 33085 instantiations, but there are other options as well. *Note 33086 Where's the Template?: Template Instantiation. 33087 33088 33089 When used with GNU ld version 2.8 or later on an ELF system such as 33090 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 33091 these constructs will be discarded at link time. This is known as 33092 COMDAT support. 33093 33094 On targets that don't support COMDAT, but do support weak symbols, GCC 33095 will use them. This way one copy will override all the others, but the 33096 unused copies will still take up space in the executable. 33097 33098 For targets which do not support either COMDAT or weak symbols, most 33099 entities with vague linkage will be emitted as local symbols to avoid 33100 duplicate definition errors from the linker. This will not happen for 33101 local statics in inlines, however, as having multiple copies will 33102 almost certainly break things. 33103 33104 *Note Declarations and Definitions in One Header: C++ Interface, for 33105 another way to control placement of these constructs. 33106 33107 33108 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 33109 33110 6.4 #pragma interface and implementation 33111 ======================================== 33112 33113 `#pragma interface' and `#pragma implementation' provide the user with 33114 a way of explicitly directing the compiler to emit entities with vague 33115 linkage (and debugging information) in a particular translation unit. 33116 33117 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 33118 cases, because of COMDAT support and the "key method" heuristic 33119 mentioned in *Note Vague Linkage::. Using them can actually cause your 33120 program to grow due to unnecessary out-of-line copies of inline 33121 functions. Currently (3.4) the only benefit of these `#pragma's is 33122 reduced duplication of debugging information, and that should be 33123 addressed soon on DWARF 2 targets with the use of COMDAT groups. 33124 33125 `#pragma interface' 33126 `#pragma interface "SUBDIR/OBJECTS.h"' 33127 Use this directive in _header files_ that define object classes, 33128 to save space in most of the object files that use those classes. 33129 Normally, local copies of certain information (backup copies of 33130 inline member functions, debugging information, and the internal 33131 tables that implement virtual functions) must be kept in each 33132 object file that includes class definitions. You can use this 33133 pragma to avoid such duplication. When a header file containing 33134 `#pragma interface' is included in a compilation, this auxiliary 33135 information will not be generated (unless the main input source 33136 file itself uses `#pragma implementation'). Instead, the object 33137 files will contain references to be resolved at link time. 33138 33139 The second form of this directive is useful for the case where you 33140 have multiple headers with the same name in different directories. 33141 If you use this form, you must specify the same string to `#pragma 33142 implementation'. 33143 33144 `#pragma implementation' 33145 `#pragma implementation "OBJECTS.h"' 33146 Use this pragma in a _main input file_, when you want full output 33147 from included header files to be generated (and made globally 33148 visible). The included header file, in turn, should use `#pragma 33149 interface'. Backup copies of inline member functions, debugging 33150 information, and the internal tables used to implement virtual 33151 functions are all generated in implementation files. 33152 33153 If you use `#pragma implementation' with no argument, it applies to 33154 an include file with the same basename(1) as your source file. 33155 For example, in `allclass.cc', giving just `#pragma implementation' 33156 by itself is equivalent to `#pragma implementation "allclass.h"'. 33157 33158 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 33159 an implementation file whenever you would include it from 33160 `allclass.cc' even if you never specified `#pragma 33161 implementation'. This was deemed to be more trouble than it was 33162 worth, however, and disabled. 33163 33164 Use the string argument if you want a single implementation file to 33165 include code from multiple header files. (You must also use 33166 `#include' to include the header file; `#pragma implementation' 33167 only specifies how to use the file--it doesn't actually include 33168 it.) 33169 33170 There is no way to split up the contents of a single header file 33171 into multiple implementation files. 33172 33173 `#pragma implementation' and `#pragma interface' also have an effect 33174 on function inlining. 33175 33176 If you define a class in a header file marked with `#pragma 33177 interface', the effect on an inline function defined in that class is 33178 similar to an explicit `extern' declaration--the compiler emits no code 33179 at all to define an independent version of the function. Its 33180 definition is used only for inlining with its callers. 33181 33182 Conversely, when you include the same header file in a main source file 33183 that declares it as `#pragma implementation', the compiler emits code 33184 for the function itself; this defines a version of the function that 33185 can be found via pointers (or by callers compiled without inlining). 33186 If all calls to the function can be inlined, you can avoid emitting the 33187 function by compiling with `-fno-implement-inlines'. If any calls were 33188 not inlined, you will get linker errors. 33189 33190 ---------- Footnotes ---------- 33191 33192 (1) A file's "basename" was the name stripped of all leading path 33193 information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 33194 33195 33196 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 33197 33198 6.5 Where's the Template? 33199 ========================= 33200 33201 C++ templates are the first language feature to require more 33202 intelligence from the environment than one usually finds on a UNIX 33203 system. Somehow the compiler and linker have to make sure that each 33204 template instance occurs exactly once in the executable if it is needed, 33205 and not at all otherwise. There are two basic approaches to this 33206 problem, which are referred to as the Borland model and the Cfront 33207 model. 33208 33209 Borland model 33210 Borland C++ solved the template instantiation problem by adding 33211 the code equivalent of common blocks to their linker; the compiler 33212 emits template instances in each translation unit that uses them, 33213 and the linker collapses them together. The advantage of this 33214 model is that the linker only has to consider the object files 33215 themselves; there is no external complexity to worry about. This 33216 disadvantage is that compilation time is increased because the 33217 template code is being compiled repeatedly. Code written for this 33218 model tends to include definitions of all templates in the header 33219 file, since they must be seen to be instantiated. 33220 33221 Cfront model 33222 The AT&T C++ translator, Cfront, solved the template instantiation 33223 problem by creating the notion of a template repository, an 33224 automatically maintained place where template instances are 33225 stored. A more modern version of the repository works as follows: 33226 As individual object files are built, the compiler places any 33227 template definitions and instantiations encountered in the 33228 repository. At link time, the link wrapper adds in the objects in 33229 the repository and compiles any needed instances that were not 33230 previously emitted. The advantages of this model are more optimal 33231 compilation speed and the ability to use the system linker; to 33232 implement the Borland model a compiler vendor also needs to 33233 replace the linker. The disadvantages are vastly increased 33234 complexity, and thus potential for error; for some code this can be 33235 just as transparent, but in practice it can been very difficult to 33236 build multiple programs in one directory and one program in 33237 multiple directories. Code written for this model tends to 33238 separate definitions of non-inline member templates into a 33239 separate file, which should be compiled separately. 33240 33241 When used with GNU ld version 2.8 or later on an ELF system such as 33242 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 33243 Borland model. On other systems, G++ implements neither automatic 33244 model. 33245 33246 A future version of G++ will support a hybrid model whereby the 33247 compiler will emit any instantiations for which the template definition 33248 is included in the compile, and store template definitions and 33249 instantiation context information into the object file for the rest. 33250 The link wrapper will extract that information as necessary and invoke 33251 the compiler to produce the remaining instantiations. The linker will 33252 then combine duplicate instantiations. 33253 33254 In the mean time, you have the following options for dealing with 33255 template instantiations: 33256 33257 1. Compile your template-using code with `-frepo'. The compiler will 33258 generate files with the extension `.rpo' listing all of the 33259 template instantiations used in the corresponding object files 33260 which could be instantiated there; the link wrapper, `collect2', 33261 will then update the `.rpo' files to tell the compiler where to 33262 place those instantiations and rebuild any affected object files. 33263 The link-time overhead is negligible after the first pass, as the 33264 compiler will continue to place the instantiations in the same 33265 files. 33266 33267 This is your best option for application code written for the 33268 Borland model, as it will just work. Code written for the Cfront 33269 model will need to be modified so that the template definitions 33270 are available at one or more points of instantiation; usually this 33271 is as simple as adding `#include <tmethods.cc>' to the end of each 33272 template header. 33273 33274 For library code, if you want the library to provide all of the 33275 template instantiations it needs, just try to link all of its 33276 object files together; the link will fail, but cause the 33277 instantiations to be generated as a side effect. Be warned, 33278 however, that this may cause conflicts if multiple libraries try 33279 to provide the same instantiations. For greater control, use 33280 explicit instantiation as described in the next option. 33281 33282 2. Compile your code with `-fno-implicit-templates' to disable the 33283 implicit generation of template instances, and explicitly 33284 instantiate all the ones you use. This approach requires more 33285 knowledge of exactly which instances you need than do the others, 33286 but it's less mysterious and allows greater control. You can 33287 scatter the explicit instantiations throughout your program, 33288 perhaps putting them in the translation units where the instances 33289 are used or the translation units that define the templates 33290 themselves; you can put all of the explicit instantiations you 33291 need into one big file; or you can create small files like 33292 33293 #include "Foo.h" 33294 #include "Foo.cc" 33295 33296 template class Foo<int>; 33297 template ostream& operator << 33298 (ostream&, const Foo<int>&); 33299 33300 for each of the instances you need, and create a template 33301 instantiation library from those. 33302 33303 If you are using Cfront-model code, you can probably get away with 33304 not using `-fno-implicit-templates' when compiling files that don't 33305 `#include' the member template definitions. 33306 33307 If you use one big file to do the instantiations, you may want to 33308 compile it without `-fno-implicit-templates' so you get all of the 33309 instances required by your explicit instantiations (but not by any 33310 other files) without having to specify them as well. 33311 33312 G++ has extended the template instantiation syntax given in the ISO 33313 standard to allow forward declaration of explicit instantiations 33314 (with `extern'), instantiation of the compiler support data for a 33315 template class (i.e. the vtable) without instantiating any of its 33316 members (with `inline'), and instantiation of only the static data 33317 members of a template class, without the support data or member 33318 functions (with (`static'): 33319 33320 extern template int max (int, int); 33321 inline template class Foo<int>; 33322 static template class Foo<int>; 33323 33324 3. Do nothing. Pretend G++ does implement automatic instantiation 33325 management. Code written for the Borland model will work fine, but 33326 each translation unit will contain instances of each of the 33327 templates it uses. In a large program, this can lead to an 33328 unacceptable amount of code duplication. 33329 33330 33331 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 33332 33333 6.6 Extracting the function pointer from a bound pointer to member function 33334 =========================================================================== 33335 33336 In C++, pointer to member functions (PMFs) are implemented using a wide 33337 pointer of sorts to handle all the possible call mechanisms; the PMF 33338 needs to store information about how to adjust the `this' pointer, and 33339 if the function pointed to is virtual, where to find the vtable, and 33340 where in the vtable to look for the member function. If you are using 33341 PMFs in an inner loop, you should really reconsider that decision. If 33342 that is not an option, you can extract the pointer to the function that 33343 would be called for a given object/PMF pair and call it directly inside 33344 the inner loop, to save a bit of time. 33345 33346 Note that you will still be paying the penalty for the call through a 33347 function pointer; on most modern architectures, such a call defeats the 33348 branch prediction features of the CPU. This is also true of normal 33349 virtual function calls. 33350 33351 The syntax for this extension is 33352 33353 extern A a; 33354 extern int (A::*fp)(); 33355 typedef int (*fptr)(A *); 33356 33357 fptr p = (fptr)(a.*fp); 33358 33359 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 33360 object is needed to obtain the address of the function. They can be 33361 converted to function pointers directly: 33362 33363 fptr p1 = (fptr)(&A::foo); 33364 33365 You must specify `-Wno-pmf-conversions' to use this extension. 33366 33367 33368 File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 33369 33370 6.7 C++-Specific Variable, Function, and Type Attributes 33371 ======================================================== 33372 33373 Some attributes only make sense for C++ programs. 33374 33375 `init_priority (PRIORITY)' 33376 In Standard C++, objects defined at namespace scope are guaranteed 33377 to be initialized in an order in strict accordance with that of 33378 their definitions _in a given translation unit_. No guarantee is 33379 made for initializations across translation units. However, GNU 33380 C++ allows users to control the order of initialization of objects 33381 defined at namespace scope with the `init_priority' attribute by 33382 specifying a relative PRIORITY, a constant integral expression 33383 currently bounded between 101 and 65535 inclusive. Lower numbers 33384 indicate a higher priority. 33385 33386 In the following example, `A' would normally be created before 33387 `B', but the `init_priority' attribute has reversed that order: 33388 33389 Some_Class A __attribute__ ((init_priority (2000))); 33390 Some_Class B __attribute__ ((init_priority (543))); 33391 33392 Note that the particular values of PRIORITY do not matter; only 33393 their relative ordering. 33394 33395 `java_interface' 33396 This type attribute informs C++ that the class is a Java 33397 interface. It may only be applied to classes declared within an 33398 `extern "Java"' block. Calls to methods declared in this 33399 interface will be dispatched using GCJ's interface table 33400 mechanism, instead of regular virtual table dispatch. 33401 33402 33403 See also *Note Namespace Association::. 33404 33405 33406 File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: C++ Attributes, Up: C++ Extensions 33407 33408 6.8 Namespace Association 33409 ========================= 33410 33411 *Caution:* The semantics of this extension are not fully defined. 33412 Users should refrain from using this extension as its semantics may 33413 change subtly over time. It is possible that this extension will be 33414 removed in future versions of G++. 33415 33416 A using-directive with `__attribute ((strong))' is stronger than a 33417 normal using-directive in two ways: 33418 33419 * Templates from the used namespace can be specialized and explicitly 33420 instantiated as though they were members of the using namespace. 33421 33422 * The using namespace is considered an associated namespace of all 33423 templates in the used namespace for purposes of argument-dependent 33424 name lookup. 33425 33426 The used namespace must be nested within the using namespace so that 33427 normal unqualified lookup works properly. 33428 33429 This is useful for composing a namespace transparently from 33430 implementation namespaces. For example: 33431 33432 namespace std { 33433 namespace debug { 33434 template <class T> struct A { }; 33435 } 33436 using namespace debug __attribute ((__strong__)); 33437 template <> struct A<int> { }; // ok to specialize 33438 33439 template <class T> void f (A<T>); 33440 } 33441 33442 int main() 33443 { 33444 f (std::A<float>()); // lookup finds std::f 33445 f (std::A<int>()); 33446 } 33447 33448 33449 File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 33450 33451 6.9 Type Traits 33452 =============== 33453 33454 The C++ front-end implements syntactic extensions that allow to 33455 determine at compile time various characteristics of a type (or of a 33456 pair of types). 33457 33458 `__has_nothrow_assign (type)' 33459 If `type' is const qualified or is a reference type then the trait 33460 is false. Otherwise if `__has_trivial_assign (type)' is true then 33461 the trait is true, else if `type' is a cv class or union type with 33462 copy assignment operators that are known not to throw an exception 33463 then the trait is true, else it is false. Requires: `type' shall 33464 be a complete type, an array type of unknown bound, or is a `void' 33465 type. 33466 33467 `__has_nothrow_copy (type)' 33468 If `__has_trivial_copy (type)' is true then the trait is true, 33469 else if `type' is a cv class or union type with copy constructors 33470 that are known not to throw an exception then the trait is true, 33471 else it is false. Requires: `type' shall be a complete type, an 33472 array type of unknown bound, or is a `void' type. 33473 33474 `__has_nothrow_constructor (type)' 33475 If `__has_trivial_constructor (type)' is true then the trait is 33476 true, else if `type' is a cv class or union type (or array 33477 thereof) with a default constructor that is known not to throw an 33478 exception then the trait is true, else it is false. Requires: 33479 `type' shall be a complete type, an array type of unknown bound, 33480 or is a `void' type. 33481 33482 `__has_trivial_assign (type)' 33483 If `type' is const qualified or is a reference type then the trait 33484 is false. Otherwise if `__is_pod (type)' is true then the trait is 33485 true, else if `type' is a cv class or union type with a trivial 33486 copy assignment ([class.copy]) then the trait is true, else it is 33487 false. Requires: `type' shall be a complete type, an array type 33488 of unknown bound, or is a `void' type. 33489 33490 `__has_trivial_copy (type)' 33491 If `__is_pod (type)' is true or `type' is a reference type then 33492 the trait is true, else if `type' is a cv class or union type with 33493 a trivial copy constructor ([class.copy]) then the trait is true, 33494 else it is false. Requires: `type' shall be a complete type, an 33495 array type of unknown bound, or is a `void' type. 33496 33497 `__has_trivial_constructor (type)' 33498 If `__is_pod (type)' is true then the trait is true, else if 33499 `type' is a cv class or union type (or array thereof) with a 33500 trivial default constructor ([class.ctor]) then the trait is true, 33501 else it is false. Requires: `type' shall be a complete type, an 33502 array type of unknown bound, or is a `void' type. 33503 33504 `__has_trivial_destructor (type)' 33505 If `__is_pod (type)' is true or `type' is a reference type then 33506 the trait is true, else if `type' is a cv class or union type (or 33507 array thereof) with a trivial destructor ([class.dtor]) then the 33508 trait is true, else it is false. Requires: `type' shall be a 33509 complete type, an array type of unknown bound, or is a `void' type. 33510 33511 `__has_virtual_destructor (type)' 33512 If `type' is a class type with a virtual destructor ([class.dtor]) 33513 then the trait is true, else it is false. Requires: `type' shall 33514 be a complete type, an array type of unknown bound, or is a `void' 33515 type. 33516 33517 `__is_abstract (type)' 33518 If `type' is an abstract class ([class.abstract]) then the trait 33519 is true, else it is false. Requires: `type' shall be a complete 33520 type, an array type of unknown bound, or is a `void' type. 33521 33522 `__is_base_of (base_type, derived_type)' 33523 If `base_type' is a base class of `derived_type' ([class.derived]) 33524 then the trait is true, otherwise it is false. Top-level cv 33525 qualifications of `base_type' and `derived_type' are ignored. For 33526 the purposes of this trait, a class type is considered is own 33527 base. Requires: if `__is_class (base_type)' and `__is_class 33528 (derived_type)' are true and `base_type' and `derived_type' are 33529 not the same type (disregarding cv-qualifiers), `derived_type' 33530 shall be a complete type. Diagnostic is produced if this 33531 requirement is not met. 33532 33533 `__is_class (type)' 33534 If `type' is a cv class type, and not a union type 33535 ([basic.compound]) the the trait is true, else it is false. 33536 33537 `__is_empty (type)' 33538 If `__is_class (type)' is false then the trait is false. 33539 Otherwise `type' is considered empty if and only if: `type' has no 33540 non-static data members, or all non-static data members, if any, 33541 are bit-fields of lenght 0, and `type' has no virtual members, and 33542 `type' has no virtual base classes, and `type' has no base classes 33543 `base_type' for which `__is_empty (base_type)' is false. 33544 Requires: `type' shall be a complete type, an array type of 33545 unknown bound, or is a `void' type. 33546 33547 `__is_enum (type)' 33548 If `type' is a cv enumeration type ([basic.compound]) the the 33549 trait is true, else it is false. 33550 33551 `__is_pod (type)' 33552 If `type' is a cv POD type ([basic.types]) then the trait is true, 33553 else it is false. Requires: `type' shall be a complete type, an 33554 array type of unknown bound, or is a `void' type. 33555 33556 `__is_polymorphic (type)' 33557 If `type' is a polymorphic class ([class.virtual]) then the trait 33558 is true, else it is false. Requires: `type' shall be a complete 33559 type, an array type of unknown bound, or is a `void' type. 33560 33561 `__is_union (type)' 33562 If `type' is a cv union type ([basic.compound]) the the trait is 33563 true, else it is false. 33564 33565 33566 33567 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 33568 33569 6.10 Java Exceptions 33570 ==================== 33571 33572 The Java language uses a slightly different exception handling model 33573 from C++. Normally, GNU C++ will automatically detect when you are 33574 writing C++ code that uses Java exceptions, and handle them 33575 appropriately. However, if C++ code only needs to execute destructors 33576 when Java exceptions are thrown through it, GCC will guess incorrectly. 33577 Sample problematic code is: 33578 33579 struct S { ~S(); }; 33580 extern void bar(); // is written in Java, and may throw exceptions 33581 void foo() 33582 { 33583 S s; 33584 bar(); 33585 } 33586 33587 The usual effect of an incorrect guess is a link failure, complaining of 33588 a missing routine called `__gxx_personality_v0'. 33589 33590 You can inform the compiler that Java exceptions are to be used in a 33591 translation unit, irrespective of what it might think, by writing 33592 `#pragma GCC java_exceptions' at the head of the file. This `#pragma' 33593 must appear before any functions that throw or catch exceptions, or run 33594 destructors when exceptions are thrown through them. 33595 33596 You cannot mix Java and C++ exceptions in the same translation unit. 33597 It is believed to be safe to throw a C++ exception from one file through 33598 another file compiled for the Java exception model, or vice versa, but 33599 there may be bugs in this area. 33600 33601 33602 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 33603 33604 6.11 Deprecated Features 33605 ======================== 33606 33607 In the past, the GNU C++ compiler was extended to experiment with new 33608 features, at a time when the C++ language was still evolving. Now that 33609 the C++ standard is complete, some of those features are superseded by 33610 superior alternatives. Using the old features might cause a warning in 33611 some cases that the feature will be dropped in the future. In other 33612 cases, the feature might be gone already. 33613 33614 While the list below is not exhaustive, it documents some of the 33615 options that are now deprecated: 33616 33617 `-fexternal-templates' 33618 `-falt-external-templates' 33619 These are two of the many ways for G++ to implement template 33620 instantiation. *Note Template Instantiation::. The C++ standard 33621 clearly defines how template definitions have to be organized 33622 across implementation units. G++ has an implicit instantiation 33623 mechanism that should work just fine for standard-conforming code. 33624 33625 `-fstrict-prototype' 33626 `-fno-strict-prototype' 33627 Previously it was possible to use an empty prototype parameter 33628 list to indicate an unspecified number of parameters (like C), 33629 rather than no parameters, as C++ demands. This feature has been 33630 removed, except where it is required for backwards compatibility 33631 *Note Backwards Compatibility::. 33632 33633 G++ allows a virtual function returning `void *' to be overridden by 33634 one returning a different pointer type. This extension to the 33635 covariant return type rules is now deprecated and will be removed from a 33636 future version. 33637 33638 The G++ minimum and maximum operators (`<?' and `>?') and their 33639 compound forms (`<?=') and `>?=') have been deprecated and are now 33640 removed from G++. Code using these operators should be modified to use 33641 `std::min' and `std::max' instead. 33642 33643 The named return value extension has been deprecated, and is now 33644 removed from G++. 33645 33646 The use of initializer lists with new expressions has been deprecated, 33647 and is now removed from G++. 33648 33649 Floating and complex non-type template parameters have been deprecated, 33650 and are now removed from G++. 33651 33652 The implicit typename extension has been deprecated and is now removed 33653 from G++. 33654 33655 The use of default arguments in function pointers, function typedefs 33656 and other places where they are not permitted by the standard is 33657 deprecated and will be removed from a future version of G++. 33658 33659 G++ allows floating-point literals to appear in integral constant 33660 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 33661 deprecated and will be removed from a future version. 33662 33663 G++ allows static data members of const floating-point type to be 33664 declared with an initializer in a class definition. The standard only 33665 allows initializers for static members of const integral types and const 33666 enumeration types so this extension has been deprecated and will be 33667 removed from a future version. 33668 33669 33670 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 33671 33672 6.12 Backwards Compatibility 33673 ============================ 33674 33675 Now that there is a definitive ISO standard C++, G++ has a specification 33676 to adhere to. The C++ language evolved over time, and features that 33677 used to be acceptable in previous drafts of the standard, such as the 33678 ARM [Annotated C++ Reference Manual], are no longer accepted. In order 33679 to allow compilation of C++ written to such drafts, G++ contains some 33680 backwards compatibilities. _All such backwards compatibility features 33681 are liable to disappear in future versions of G++._ They should be 33682 considered deprecated *Note Deprecated Features::. 33683 33684 `For scope' 33685 If a variable is declared at for scope, it used to remain in scope 33686 until the end of the scope which contained the for statement 33687 (rather than just within the for scope). G++ retains this, but 33688 issues a warning, if such a variable is accessed outside the for 33689 scope. 33690 33691 `Implicit C language' 33692 Old C system header files did not contain an `extern "C" {...}' 33693 scope to set the language. On such systems, all header files are 33694 implicitly scoped inside a C language scope. Also, an empty 33695 prototype `()' will be treated as an unspecified number of 33696 arguments, rather than no arguments, as C++ demands. 33697 33698 33699 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 33700 33701 7 GNU Objective-C runtime features 33702 ********************************** 33703 33704 This document is meant to describe some of the GNU Objective-C runtime 33705 features. It is not intended to teach you Objective-C, there are 33706 several resources on the Internet that present the language. Questions 33707 and comments about this document to Ovidiu Predescu <ovidiu (a] cup.hp.com>. 33708 33709 * Menu: 33710 33711 * Executing code before main:: 33712 * Type encoding:: 33713 * Garbage Collection:: 33714 * Constant string objects:: 33715 * compatibility_alias:: 33716 33717 33718 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C 33719 33720 7.1 `+load': Executing code before main 33721 ======================================= 33722 33723 The GNU Objective-C runtime provides a way that allows you to execute 33724 code before the execution of the program enters the `main' function. 33725 The code is executed on a per-class and a per-category basis, through a 33726 special class method `+load'. 33727 33728 This facility is very useful if you want to initialize global variables 33729 which can be accessed by the program directly, without sending a message 33730 to the class first. The usual way to initialize global variables, in 33731 the `+initialize' method, might not be useful because `+initialize' is 33732 only called when the first message is sent to a class object, which in 33733 some cases could be too late. 33734 33735 Suppose for example you have a `FileStream' class that declares 33736 `Stdin', `Stdout' and `Stderr' as global variables, like below: 33737 33738 33739 FileStream *Stdin = nil; 33740 FileStream *Stdout = nil; 33741 FileStream *Stderr = nil; 33742 33743 @implementation FileStream 33744 33745 + (void)initialize 33746 { 33747 Stdin = [[FileStream new] initWithFd:0]; 33748 Stdout = [[FileStream new] initWithFd:1]; 33749 Stderr = [[FileStream new] initWithFd:2]; 33750 } 33751 33752 /* Other methods here */ 33753 @end 33754 33755 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 33756 in `+initialize' occurs too late. The programmer can send a message to 33757 one of these objects before the variables are actually initialized, 33758 thus sending messages to the `nil' object. The `+initialize' method 33759 which actually initializes the global variables is not invoked until 33760 the first message is sent to the class object. The solution would 33761 require these variables to be initialized just before entering `main'. 33762 33763 The correct solution of the above problem is to use the `+load' method 33764 instead of `+initialize': 33765 33766 33767 @implementation FileStream 33768 33769 + (void)load 33770 { 33771 Stdin = [[FileStream new] initWithFd:0]; 33772 Stdout = [[FileStream new] initWithFd:1]; 33773 Stderr = [[FileStream new] initWithFd:2]; 33774 } 33775 33776 /* Other methods here */ 33777 @end 33778 33779 The `+load' is a method that is not overridden by categories. If a 33780 class and a category of it both implement `+load', both methods are 33781 invoked. This allows some additional initializations to be performed in 33782 a category. 33783 33784 This mechanism is not intended to be a replacement for `+initialize'. 33785 You should be aware of its limitations when you decide to use it 33786 instead of `+initialize'. 33787 33788 * Menu: 33789 33790 * What you can and what you cannot do in +load:: 33791 33792 33793 File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main 33794 33795 7.1.1 What you can and what you cannot do in `+load' 33796 ---------------------------------------------------- 33797 33798 The `+load' implementation in the GNU runtime guarantees you the 33799 following things: 33800 33801 * you can write whatever C code you like; 33802 33803 * you can send messages to Objective-C constant strings (`@"this is a 33804 constant string"'); 33805 33806 * you can allocate and send messages to objects whose class is 33807 implemented in the same file; 33808 33809 * the `+load' implementation of all super classes of a class are 33810 executed before the `+load' of that class is executed; 33811 33812 * the `+load' implementation of a class is executed before the 33813 `+load' implementation of any category. 33814 33815 33816 In particular, the following things, even if they can work in a 33817 particular case, are not guaranteed: 33818 33819 * allocation of or sending messages to arbitrary objects; 33820 33821 * allocation of or sending messages to objects whose classes have a 33822 category implemented in the same file; 33823 33824 33825 You should make no assumptions about receiving `+load' in sibling 33826 classes when you write `+load' of a class. The order in which sibling 33827 classes receive `+load' is not guaranteed. 33828 33829 The order in which `+load' and `+initialize' are called could be 33830 problematic if this matters. If you don't allocate objects inside 33831 `+load', it is guaranteed that `+load' is called before `+initialize'. 33832 If you create an object inside `+load' the `+initialize' method of 33833 object's class is invoked even if `+load' was not invoked. Note if you 33834 explicitly call `+load' on a class, `+initialize' will be called first. 33835 To avoid possible problems try to implement only one of these methods. 33836 33837 The `+load' method is also invoked when a bundle is dynamically loaded 33838 into your running program. This happens automatically without any 33839 intervening operation from you. When you write bundles and you need to 33840 write `+load' you can safely create and send messages to objects whose 33841 classes already exist in the running program. The same restrictions as 33842 above apply to classes defined in bundle. 33843 33844 33845 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 33846 33847 7.2 Type encoding 33848 ================= 33849 33850 The Objective-C compiler generates type encodings for all the types. 33851 These type encodings are used at runtime to find out information about 33852 selectors and methods and about objects and classes. 33853 33854 The types are encoded in the following way: 33855 33856 `_Bool' `B' 33857 `char' `c' 33858 `unsigned char' `C' 33859 `short' `s' 33860 `unsigned short' `S' 33861 `int' `i' 33862 `unsigned int' `I' 33863 `long' `l' 33864 `unsigned long' `L' 33865 `long long' `q' 33866 `unsigned long `Q' 33867 long' 33868 `float' `f' 33869 `double' `d' 33870 `void' `v' 33871 `id' `@' 33872 `Class' `#' 33873 `SEL' `:' 33874 `char*' `*' 33875 unknown type `?' 33876 Complex types `j' followed by the inner type. For example 33877 `_Complex double' is encoded as "jd". 33878 bit-fields `b' followed by the starting position of the 33879 bit-field, the type of the bit-field and the size of 33880 the bit-field (the bit-fields encoding was changed 33881 from the NeXT's compiler encoding, see below) 33882 33883 The encoding of bit-fields has changed to allow bit-fields to be 33884 properly handled by the runtime functions that compute sizes and 33885 alignments of types that contain bit-fields. The previous encoding 33886 contained only the size of the bit-field. Using only this information 33887 it is not possible to reliably compute the size occupied by the 33888 bit-field. This is very important in the presence of the Boehm's 33889 garbage collector because the objects are allocated using the typed 33890 memory facility available in this collector. The typed memory 33891 allocation requires information about where the pointers are located 33892 inside the object. 33893 33894 The position in the bit-field is the position, counting in bits, of the 33895 bit closest to the beginning of the structure. 33896 33897 The non-atomic types are encoded as follows: 33898 33899 pointers `^' followed by the pointed type. 33900 arrays `[' followed by the number of elements in the array 33901 followed by the type of the elements followed by `]' 33902 structures `{' followed by the name of the structure (or `?' if the 33903 structure is unnamed), the `=' sign, the type of the 33904 members and by `}' 33905 unions `(' followed by the name of the structure (or `?' if the 33906 union is unnamed), the `=' sign, the type of the members 33907 followed by `)' 33908 33909 Here are some types and their encodings, as they are generated by the 33910 compiler on an i386 machine: 33911 33912 33913 Objective-C type Compiler encoding 33914 int a[10]; `[10i]' 33915 struct { `{?=i[3f]b128i3b131i2c}' 33916 int i; 33917 float f[3]; 33918 int a:3; 33919 int b:2; 33920 char c; 33921 } 33922 33923 33924 In addition to the types the compiler also encodes the type 33925 specifiers. The table below describes the encoding of the current 33926 Objective-C type specifiers: 33927 33928 33929 Specifier Encoding 33930 `const' `r' 33931 `in' `n' 33932 `inout' `N' 33933 `out' `o' 33934 `bycopy' `O' 33935 `oneway' `V' 33936 33937 33938 The type specifiers are encoded just before the type. Unlike types 33939 however, the type specifiers are only encoded when they appear in method 33940 argument types. 33941 33942 33943 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 33944 33945 7.3 Garbage Collection 33946 ====================== 33947 33948 Support for a new memory management policy has been added by using a 33949 powerful conservative garbage collector, known as the 33950 Boehm-Demers-Weiser conservative garbage collector. It is available 33951 from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'. 33952 33953 To enable the support for it you have to configure the compiler using 33954 an additional argument, `--enable-objc-gc'. You need to have garbage 33955 collector installed before building the compiler. This will build an 33956 additional runtime library which has several enhancements to support 33957 the garbage collector. The new library has a new name, `libobjc_gc.a' 33958 to not conflict with the non-garbage-collected library. 33959 33960 When the garbage collector is used, the objects are allocated using the 33961 so-called typed memory allocation mechanism available in the 33962 Boehm-Demers-Weiser collector. This mode requires precise information 33963 on where pointers are located inside objects. This information is 33964 computed once per class, immediately after the class has been 33965 initialized. 33966 33967 There is a new runtime function `class_ivar_set_gcinvisible()' which 33968 can be used to declare a so-called "weak pointer" reference. Such a 33969 pointer is basically hidden for the garbage collector; this can be 33970 useful in certain situations, especially when you want to keep track of 33971 the allocated objects, yet allow them to be collected. This kind of 33972 pointers can only be members of objects, you cannot declare a global 33973 pointer as a weak reference. Every type which is a pointer type can be 33974 declared a weak pointer, including `id', `Class' and `SEL'. 33975 33976 Here is an example of how to use this feature. Suppose you want to 33977 implement a class whose instances hold a weak pointer reference; the 33978 following class does this: 33979 33980 33981 @interface WeakPointer : Object 33982 { 33983 const void* weakPointer; 33984 } 33985 33986 - initWithPointer:(const void*)p; 33987 - (const void*)weakPointer; 33988 @end 33989 33990 33991 @implementation WeakPointer 33992 33993 + (void)initialize 33994 { 33995 class_ivar_set_gcinvisible (self, "weakPointer", YES); 33996 } 33997 33998 - initWithPointer:(const void*)p 33999 { 34000 weakPointer = p; 34001 return self; 34002 } 34003 34004 - (const void*)weakPointer 34005 { 34006 return weakPointer; 34007 } 34008 34009 @end 34010 34011 Weak pointers are supported through a new type character specifier 34012 represented by the `!' character. The `class_ivar_set_gcinvisible()' 34013 function adds or removes this specifier to the string type description 34014 of the instance variable named as argument. 34015 34016 34017 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 34018 34019 7.4 Constant string objects 34020 =========================== 34021 34022 GNU Objective-C provides constant string objects that are generated 34023 directly by the compiler. You declare a constant string object by 34024 prefixing a C constant string with the character `@': 34025 34026 id myString = @"this is a constant string object"; 34027 34028 The constant string objects are by default instances of the 34029 `NXConstantString' class which is provided by the GNU Objective-C 34030 runtime. To get the definition of this class you must include the 34031 `objc/NXConstStr.h' header file. 34032 34033 User defined libraries may want to implement their own constant string 34034 class. To be able to support them, the GNU Objective-C compiler 34035 provides a new command line options 34036 `-fconstant-string-class=CLASS-NAME'. The provided class should adhere 34037 to a strict structure, the same as `NXConstantString''s structure: 34038 34039 34040 @interface MyConstantStringClass 34041 { 34042 Class isa; 34043 char *c_string; 34044 unsigned int len; 34045 } 34046 @end 34047 34048 `NXConstantString' inherits from `Object'; user class libraries may 34049 choose to inherit the customized constant string class from a different 34050 class than `Object'. There is no requirement in the methods the 34051 constant string class has to implement, but the final ivar layout of 34052 the class must be the compatible with the given structure. 34053 34054 When the compiler creates the statically allocated constant string 34055 object, the `c_string' field will be filled by the compiler with the 34056 string; the `length' field will be filled by the compiler with the 34057 string length; the `isa' pointer will be filled with `NULL' by the 34058 compiler, and it will later be fixed up automatically at runtime by the 34059 GNU Objective-C runtime library to point to the class which was set by 34060 the `-fconstant-string-class' option when the object file is loaded (if 34061 you wonder how it works behind the scenes, the name of the class to 34062 use, and the list of static objects to fixup, are stored by the 34063 compiler in the object file in a place where the GNU runtime library 34064 will find them at runtime). 34065 34066 As a result, when a file is compiled with the 34067 `-fconstant-string-class' option, all the constant string objects will 34068 be instances of the class specified as argument to this option. It is 34069 possible to have multiple compilation units referring to different 34070 constant string classes, neither the compiler nor the linker impose any 34071 restrictions in doing this. 34072 34073 34074 File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C 34075 34076 7.5 compatibility_alias 34077 ======================= 34078 34079 This is a feature of the Objective-C compiler rather than of the 34080 runtime, anyway since it is documented nowhere and its existence was 34081 forgotten, we are documenting it here. 34082 34083 The keyword `@compatibility_alias' allows you to define a class name 34084 as equivalent to another class name. For example: 34085 34086 @compatibility_alias WOApplication GSWApplication; 34087 34088 tells the compiler that each time it encounters `WOApplication' as a 34089 class name, it should replace it with `GSWApplication' (that is, 34090 `WOApplication' is just an alias for `GSWApplication'). 34091 34092 There are some constraints on how this can be used-- 34093 34094 * `WOApplication' (the alias) must not be an existing class; 34095 34096 * `GSWApplication' (the real class) must be an existing class. 34097 34098 34099 34100 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 34101 34102 8 Binary Compatibility 34103 ********************** 34104 34105 Binary compatibility encompasses several related concepts: 34106 34107 "application binary interface (ABI)" 34108 The set of runtime conventions followed by all of the tools that 34109 deal with binary representations of a program, including 34110 compilers, assemblers, linkers, and language runtime support. 34111 Some ABIs are formal with a written specification, possibly 34112 designed by multiple interested parties. Others are simply the 34113 way things are actually done by a particular set of tools. 34114 34115 "ABI conformance" 34116 A compiler conforms to an ABI if it generates code that follows 34117 all of the specifications enumerated by that ABI. A library 34118 conforms to an ABI if it is implemented according to that ABI. An 34119 application conforms to an ABI if it is built using tools that 34120 conform to that ABI and does not contain source code that 34121 specifically changes behavior specified by the ABI. 34122 34123 "calling conventions" 34124 Calling conventions are a subset of an ABI that specify of how 34125 arguments are passed and function results are returned. 34126 34127 "interoperability" 34128 Different sets of tools are interoperable if they generate files 34129 that can be used in the same program. The set of tools includes 34130 compilers, assemblers, linkers, libraries, header files, startup 34131 files, and debuggers. Binaries produced by different sets of 34132 tools are not interoperable unless they implement the same ABI. 34133 This applies to different versions of the same tools as well as 34134 tools from different vendors. 34135 34136 "intercallability" 34137 Whether a function in a binary built by one set of tools can call a 34138 function in a binary built by a different set of tools is a subset 34139 of interoperability. 34140 34141 "implementation-defined features" 34142 Language standards include lists of implementation-defined 34143 features whose behavior can vary from one implementation to 34144 another. Some of these features are normally covered by a 34145 platform's ABI and others are not. The features that are not 34146 covered by an ABI generally affect how a program behaves, but not 34147 intercallability. 34148 34149 "compatibility" 34150 Conformance to the same ABI and the same behavior of 34151 implementation-defined features are both relevant for 34152 compatibility. 34153 34154 The application binary interface implemented by a C or C++ compiler 34155 affects code generation and runtime support for: 34156 34157 * size and alignment of data types 34158 34159 * layout of structured types 34160 34161 * calling conventions 34162 34163 * register usage conventions 34164 34165 * interfaces for runtime arithmetic support 34166 34167 * object file formats 34168 34169 In addition, the application binary interface implemented by a C++ 34170 compiler affects code generation and runtime support for: 34171 * name mangling 34172 34173 * exception handling 34174 34175 * invoking constructors and destructors 34176 34177 * layout, alignment, and padding of classes 34178 34179 * layout and alignment of virtual tables 34180 34181 Some GCC compilation options cause the compiler to generate code that 34182 does not conform to the platform's default ABI. Other options cause 34183 different program behavior for implementation-defined features that are 34184 not covered by an ABI. These options are provided for consistency with 34185 other compilers that do not follow the platform's default ABI or the 34186 usual behavior of implementation-defined features for the platform. Be 34187 very careful about using such options. 34188 34189 Most platforms have a well-defined ABI that covers C code, but ABIs 34190 that cover C++ functionality are not yet common. 34191 34192 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 34193 written, vendor-neutral C++ ABI that was designed to be specific to 34194 64-bit Itanium but also includes generic specifications that apply to 34195 any platform. This C++ ABI is also implemented by other compiler 34196 vendors on some platforms, notably GNU/Linux and BSD systems. We have 34197 tried hard to provide a stable ABI that will be compatible with future 34198 GCC releases, but it is possible that we will encounter problems that 34199 make this difficult. Such problems could include different 34200 interpretations of the C++ ABI by different vendors, bugs in the ABI, or 34201 bugs in the implementation of the ABI in different compilers. GCC's 34202 `-Wabi' switch warns when G++ generates code that is probably not 34203 compatible with the C++ ABI. 34204 34205 The C++ library used with a C++ compiler includes the Standard C++ 34206 Library, with functionality defined in the C++ Standard, plus language 34207 runtime support. The runtime support is included in a C++ ABI, but 34208 there is no formal ABI for the Standard C++ Library. Two 34209 implementations of that library are interoperable if one follows the 34210 de-facto ABI of the other and if they are both built with the same 34211 compiler, or with compilers that conform to the same ABI for C++ 34212 compiler and runtime support. 34213 34214 When G++ and another C++ compiler conform to the same C++ ABI, but the 34215 implementations of the Standard C++ Library that they normally use do 34216 not follow the same ABI for the Standard C++ Library, object files 34217 built with those compilers can be used in the same program only if they 34218 use the same C++ library. This requires specifying the location of the 34219 C++ library header files when invoking the compiler whose usual library 34220 is not being used. The location of GCC's C++ header files depends on 34221 how the GCC build was configured, but can be seen by using the G++ `-v' 34222 option. With default configuration options for G++ 3.3 the compile 34223 line for a different C++ compiler needs to include 34224 34225 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 34226 34227 Similarly, compiling code with G++ that must use a C++ library other 34228 than the GNU C++ library requires specifying the location of the header 34229 files for that other library. 34230 34231 The most straightforward way to link a program to use a particular C++ 34232 library is to use a C++ driver that specifies that C++ library by 34233 default. The `g++' driver, for example, tells the linker where to find 34234 GCC's C++ library (`libstdc++') plus the other libraries and startup 34235 files it needs, in the proper order. 34236 34237 If a program must use a different C++ library and it's not possible to 34238 do the final link using a C++ driver that uses that library by default, 34239 it is necessary to tell `g++' the location and name of that library. 34240 It might also be necessary to specify different startup files and other 34241 runtime support libraries, and to suppress the use of GCC's support 34242 libraries with one or more of the options `-nostdlib', `-nostartfiles', 34243 and `-nodefaultlibs'. 34244 34245 34246 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 34247 34248 9 `gcov'--a Test Coverage Program 34249 ********************************* 34250 34251 `gcov' is a tool you can use in conjunction with GCC to test code 34252 coverage in your programs. 34253 34254 * Menu: 34255 34256 * Gcov Intro:: Introduction to gcov. 34257 * Invoking Gcov:: How to use gcov. 34258 * Gcov and Optimization:: Using gcov with GCC optimization. 34259 * Gcov Data Files:: The files used by gcov. 34260 * Cross-profiling:: Data file relocation. 34261 34262 34263 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 34264 34265 9.1 Introduction to `gcov' 34266 ========================== 34267 34268 `gcov' is a test coverage program. Use it in concert with GCC to 34269 analyze your programs to help create more efficient, faster running 34270 code and to discover untested parts of your program. You can use 34271 `gcov' as a profiling tool to help discover where your optimization 34272 efforts will best affect your code. You can also use `gcov' along with 34273 the other profiling tool, `gprof', to assess which parts of your code 34274 use the greatest amount of computing time. 34275 34276 Profiling tools help you analyze your code's performance. Using a 34277 profiler such as `gcov' or `gprof', you can find out some basic 34278 performance statistics, such as: 34279 34280 * how often each line of code executes 34281 34282 * what lines of code are actually executed 34283 34284 * how much computing time each section of code uses 34285 34286 Once you know these things about how your code works when compiled, you 34287 can look at each module to see which modules should be optimized. 34288 `gcov' helps you determine where to work on optimization. 34289 34290 Software developers also use coverage testing in concert with 34291 testsuites, to make sure software is actually good enough for a release. 34292 Testsuites can verify that a program works as expected; a coverage 34293 program tests to see how much of the program is exercised by the 34294 testsuite. Developers can then determine what kinds of test cases need 34295 to be added to the testsuites to create both better testing and a better 34296 final product. 34297 34298 You should compile your code without optimization if you plan to use 34299 `gcov' because the optimization, by combining some lines of code into 34300 one function, may not give you as much information as you need to look 34301 for `hot spots' where the code is using a great deal of computer time. 34302 Likewise, because `gcov' accumulates statistics by line (at the lowest 34303 resolution), it works best with a programming style that places only 34304 one statement on each line. If you use complicated macros that expand 34305 to loops or to other control structures, the statistics are less 34306 helpful--they only report on the line where the macro call appears. If 34307 your complex macros behave like functions, you can replace them with 34308 inline functions to solve this problem. 34309 34310 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 34311 many times each line of a source file `SOURCEFILE.c' has executed. You 34312 can use these logfiles along with `gprof' to aid in fine-tuning the 34313 performance of your programs. `gprof' gives timing information you can 34314 use along with the information you get from `gcov'. 34315 34316 `gcov' works only on code compiled with GCC. It is not compatible 34317 with any other profiling or test coverage mechanism. 34318 34319 34320 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 34321 34322 9.2 Invoking `gcov' 34323 =================== 34324 34325 gcov [OPTIONS] SOURCEFILES 34326 34327 `gcov' accepts the following options: 34328 34329 `-h' 34330 `--help' 34331 Display help about using `gcov' (on the standard output), and exit 34332 without doing any further processing. 34333 34334 `-v' 34335 `--version' 34336 Display the `gcov' version number (on the standard output), and 34337 exit without doing any further processing. 34338 34339 `-a' 34340 `--all-blocks' 34341 Write individual execution counts for every basic block. Normally 34342 gcov outputs execution counts only for the main blocks of a line. 34343 With this option you can determine if blocks within a single line 34344 are not being executed. 34345 34346 `-b' 34347 `--branch-probabilities' 34348 Write branch frequencies to the output file, and write branch 34349 summary info to the standard output. This option allows you to 34350 see how often each branch in your program was taken. 34351 Unconditional branches will not be shown, unless the `-u' option 34352 is given. 34353 34354 `-c' 34355 `--branch-counts' 34356 Write branch frequencies as the number of branches taken, rather 34357 than the percentage of branches taken. 34358 34359 `-n' 34360 `--no-output' 34361 Do not create the `gcov' output file. 34362 34363 `-l' 34364 `--long-file-names' 34365 Create long file names for included source files. For example, if 34366 the header file `x.h' contains code, and was included in the file 34367 `a.c', then running `gcov' on the file `a.c' will produce an 34368 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 34369 can be useful if `x.h' is included in multiple source files. If 34370 you use the `-p' option, both the including and included file 34371 names will be complete path names. 34372 34373 `-p' 34374 `--preserve-paths' 34375 Preserve complete path information in the names of generated 34376 `.gcov' files. Without this option, just the filename component is 34377 used. With this option, all directories are used, with `/' 34378 characters translated to `#' characters, `.' directory components 34379 removed and `..' components renamed to `^'. This is useful if 34380 sourcefiles are in several different directories. It also affects 34381 the `-l' option. 34382 34383 `-f' 34384 `--function-summaries' 34385 Output summaries for each function in addition to the file level 34386 summary. 34387 34388 `-o DIRECTORY|FILE' 34389 `--object-directory DIRECTORY' 34390 `--object-file FILE' 34391 Specify either the directory containing the gcov data files, or the 34392 object path name. The `.gcno', and `.gcda' data files are 34393 searched for using this option. If a directory is specified, the 34394 data files are in that directory and named after the source file 34395 name, without its extension. If a file is specified here, the 34396 data files are named after that file, without its extension. If 34397 this option is not supplied, it defaults to the current directory. 34398 34399 `-u' 34400 `--unconditional-branches' 34401 When branch probabilities are given, include those of 34402 unconditional branches. Unconditional branches are normally not 34403 interesting. 34404 34405 34406 `gcov' should be run with the current directory the same as that when 34407 you invoked the compiler. Otherwise it will not be able to locate the 34408 source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 34409 current directory. These contain the coverage information of the 34410 source file they correspond to. One `.gcov' file is produced for each 34411 source file containing code, which was compiled to produce the data 34412 files. The MANGLEDNAME part of the output file name is usually simply 34413 the source file name, but can be something more complicated if the `-l' 34414 or `-p' options are given. Refer to those options for details. 34415 34416 The `.gcov' files contain the `:' separated fields along with program 34417 source code. The format is 34418 34419 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 34420 34421 Additional block information may succeed each line, when requested by 34422 command line option. The EXECUTION_COUNT is `-' for lines containing 34423 no code and `#####' for lines which were never executed. Some lines of 34424 information at the start have LINE_NUMBER of zero. 34425 34426 The preamble lines are of the form 34427 34428 -:0:TAG:VALUE 34429 34430 The ordering and number of these preamble lines will be augmented as 34431 `gcov' development progresses -- do not rely on them remaining 34432 unchanged. Use TAG to locate a particular preamble line. 34433 34434 The additional block information is of the form 34435 34436 TAG INFORMATION 34437 34438 The INFORMATION is human readable, but designed to be simple enough 34439 for machine parsing too. 34440 34441 When printing percentages, 0% and 100% are only printed when the values 34442 are _exactly_ 0% and 100% respectively. Other values which would 34443 conventionally be rounded to 0% or 100% are instead printed as the 34444 nearest non-boundary value. 34445 34446 When using `gcov', you must first compile your program with two 34447 special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 34448 compiler to generate additional information needed by gcov (basically a 34449 flow graph of the program) and also includes additional code in the 34450 object files for generating the extra profiling information needed by 34451 gcov. These additional files are placed in the directory where the 34452 object file is located. 34453 34454 Running the program will cause profile output to be generated. For 34455 each source file compiled with `-fprofile-arcs', an accompanying 34456 `.gcda' file will be placed in the object file directory. 34457 34458 Running `gcov' with your program's source file names as arguments will 34459 now produce a listing of the code along with frequency of execution for 34460 each line. For example, if your program is called `tmp.c', this is 34461 what you see when you use the basic `gcov' facility: 34462 34463 $ gcc -fprofile-arcs -ftest-coverage tmp.c 34464 $ a.out 34465 $ gcov tmp.c 34466 90.00% of 10 source lines executed in file tmp.c 34467 Creating tmp.c.gcov. 34468 34469 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 34470 34471 -: 0:Source:tmp.c 34472 -: 0:Graph:tmp.gcno 34473 -: 0:Data:tmp.gcda 34474 -: 0:Runs:1 34475 -: 0:Programs:1 34476 -: 1:#include <stdio.h> 34477 -: 2: 34478 -: 3:int main (void) 34479 1: 4:{ 34480 1: 5: int i, total; 34481 -: 6: 34482 1: 7: total = 0; 34483 -: 8: 34484 11: 9: for (i = 0; i < 10; i++) 34485 10: 10: total += i; 34486 -: 11: 34487 1: 12: if (total != 45) 34488 #####: 13: printf ("Failure\n"); 34489 -: 14: else 34490 1: 15: printf ("Success\n"); 34491 1: 16: return 0; 34492 -: 17:} 34493 34494 When you use the `-a' option, you will get individual block counts, 34495 and the output looks like this: 34496 34497 -: 0:Source:tmp.c 34498 -: 0:Graph:tmp.gcno 34499 -: 0:Data:tmp.gcda 34500 -: 0:Runs:1 34501 -: 0:Programs:1 34502 -: 1:#include <stdio.h> 34503 -: 2: 34504 -: 3:int main (void) 34505 1: 4:{ 34506 1: 4-block 0 34507 1: 5: int i, total; 34508 -: 6: 34509 1: 7: total = 0; 34510 -: 8: 34511 11: 9: for (i = 0; i < 10; i++) 34512 11: 9-block 0 34513 10: 10: total += i; 34514 10: 10-block 0 34515 -: 11: 34516 1: 12: if (total != 45) 34517 1: 12-block 0 34518 #####: 13: printf ("Failure\n"); 34519 $$$$$: 13-block 0 34520 -: 14: else 34521 1: 15: printf ("Success\n"); 34522 1: 15-block 0 34523 1: 16: return 0; 34524 1: 16-block 0 34525 -: 17:} 34526 34527 In this mode, each basic block is only shown on one line - the last 34528 line of the block. A multi-line block will only contribute to the 34529 execution count of that last line, and other lines will not be shown to 34530 contain code, unless previous blocks end on those lines. The total 34531 execution count of a line is shown and subsequent lines show the 34532 execution counts for individual blocks that end on that line. After 34533 each block, the branch and call counts of the block will be shown, if 34534 the `-b' option is given. 34535 34536 Because of the way GCC instruments calls, a call count can be shown 34537 after a line with no individual blocks. As you can see, line 13 34538 contains a basic block that was not executed. 34539 34540 When you use the `-b' option, your output looks like this: 34541 34542 $ gcov -b tmp.c 34543 90.00% of 10 source lines executed in file tmp.c 34544 80.00% of 5 branches executed in file tmp.c 34545 80.00% of 5 branches taken at least once in file tmp.c 34546 50.00% of 2 calls executed in file tmp.c 34547 Creating tmp.c.gcov. 34548 34549 Here is a sample of a resulting `tmp.c.gcov' file: 34550 34551 -: 0:Source:tmp.c 34552 -: 0:Graph:tmp.gcno 34553 -: 0:Data:tmp.gcda 34554 -: 0:Runs:1 34555 -: 0:Programs:1 34556 -: 1:#include <stdio.h> 34557 -: 2: 34558 -: 3:int main (void) 34559 function main called 1 returned 1 blocks executed 75% 34560 1: 4:{ 34561 1: 5: int i, total; 34562 -: 6: 34563 1: 7: total = 0; 34564 -: 8: 34565 11: 9: for (i = 0; i < 10; i++) 34566 branch 0 taken 91% (fallthrough) 34567 branch 1 taken 9% 34568 10: 10: total += i; 34569 -: 11: 34570 1: 12: if (total != 45) 34571 branch 0 taken 0% (fallthrough) 34572 branch 1 taken 100% 34573 #####: 13: printf ("Failure\n"); 34574 call 0 never executed 34575 -: 14: else 34576 1: 15: printf ("Success\n"); 34577 call 0 called 1 returned 100% 34578 1: 16: return 0; 34579 -: 17:} 34580 34581 For each function, a line is printed showing how many times the 34582 function is called, how many times it returns and what percentage of the 34583 function's blocks were executed. 34584 34585 For each basic block, a line is printed after the last line of the 34586 basic block describing the branch or call that ends the basic block. 34587 There can be multiple branches and calls listed for a single source 34588 line if there are multiple basic blocks that end on that line. In this 34589 case, the branches and calls are each given a number. There is no 34590 simple way to map these branches and calls back to source constructs. 34591 In general, though, the lowest numbered branch or call will correspond 34592 to the leftmost construct on the source line. 34593 34594 For a branch, if it was executed at least once, then a percentage 34595 indicating the number of times the branch was taken divided by the 34596 number of times the branch was executed will be printed. Otherwise, the 34597 message "never executed" is printed. 34598 34599 For a call, if it was executed at least once, then a percentage 34600 indicating the number of times the call returned divided by the number 34601 of times the call was executed will be printed. This will usually be 34602 100%, but may be less for functions that call `exit' or `longjmp', and 34603 thus may not return every time they are called. 34604 34605 The execution counts are cumulative. If the example program were 34606 executed again without removing the `.gcda' file, the count for the 34607 number of times each line in the source was executed would be added to 34608 the results of the previous run(s). This is potentially useful in 34609 several ways. For example, it could be used to accumulate data over a 34610 number of program runs as part of a test verification suite, or to 34611 provide more accurate long-term information over a large number of 34612 program runs. 34613 34614 The data in the `.gcda' files is saved immediately before the program 34615 exits. For each source file compiled with `-fprofile-arcs', the 34616 profiling code first attempts to read in an existing `.gcda' file; if 34617 the file doesn't match the executable (differing number of basic block 34618 counts) it will ignore the contents of the file. It then adds in the 34619 new execution counts and finally writes the data to the file. 34620 34621 34622 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 34623 34624 9.3 Using `gcov' with GCC Optimization 34625 ====================================== 34626 34627 If you plan to use `gcov' to help optimize your code, you must first 34628 compile your program with two special GCC options: `-fprofile-arcs 34629 -ftest-coverage'. Aside from that, you can use any other GCC options; 34630 but if you want to prove that every single line in your program was 34631 executed, you should not compile with optimization at the same time. 34632 On some machines the optimizer can eliminate some simple code lines by 34633 combining them with other lines. For example, code like this: 34634 34635 if (a != b) 34636 c = 1; 34637 else 34638 c = 0; 34639 34640 can be compiled into one instruction on some machines. In this case, 34641 there is no way for `gcov' to calculate separate execution counts for 34642 each line because there isn't separate code for each line. Hence the 34643 `gcov' output looks like this if you compiled the program with 34644 optimization: 34645 34646 100: 12:if (a != b) 34647 100: 13: c = 1; 34648 100: 14:else 34649 100: 15: c = 0; 34650 34651 The output shows that this block of code, combined by optimization, 34652 executed 100 times. In one sense this result is correct, because there 34653 was only one instruction representing all four of these lines. However, 34654 the output does not indicate how many times the result was 0 and how 34655 many times the result was 1. 34656 34657 Inlineable functions can create unexpected line counts. Line counts 34658 are shown for the source code of the inlineable function, but what is 34659 shown depends on where the function is inlined, or if it is not inlined 34660 at all. 34661 34662 If the function is not inlined, the compiler must emit an out of line 34663 copy of the function, in any object file that needs it. If `fileA.o' 34664 and `fileB.o' both contain out of line bodies of a particular 34665 inlineable function, they will also both contain coverage counts for 34666 that function. When `fileA.o' and `fileB.o' are linked together, the 34667 linker will, on many systems, select one of those out of line bodies 34668 for all calls to that function, and remove or ignore the other. 34669 Unfortunately, it will not remove the coverage counters for the unused 34670 function body. Hence when instrumented, all but one use of that 34671 function will show zero counts. 34672 34673 If the function is inlined in several places, the block structure in 34674 each location might not be the same. For instance, a condition might 34675 now be calculable at compile time in some instances. Because the 34676 coverage of all the uses of the inline function will be shown for the 34677 same source lines, the line counts themselves might seem inconsistent. 34678 34679 34680 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 34681 34682 9.4 Brief description of `gcov' data files 34683 ========================================== 34684 34685 `gcov' uses two files for profiling. The names of these files are 34686 derived from the original _object_ file by substituting the file suffix 34687 with either `.gcno', or `.gcda'. All of these files are placed in the 34688 same directory as the object file, and contain data stored in a 34689 platform-independent format. 34690 34691 The `.gcno' file is generated when the source file is compiled with 34692 the GCC `-ftest-coverage' option. It contains information to 34693 reconstruct the basic block graphs and assign source line numbers to 34694 blocks. 34695 34696 The `.gcda' file is generated when a program containing object files 34697 built with the GCC `-fprofile-arcs' option is executed. A separate 34698 `.gcda' file is created for each object file compiled with this option. 34699 It contains arc transition counts, and some summary information. 34700 34701 The full details of the file format is specified in `gcov-io.h', and 34702 functions provided in that header file should be used to access the 34703 coverage files. 34704 34705 34706 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 34707 34708 9.5 Data file relocation to support cross-profiling 34709 =================================================== 34710 34711 Running the program will cause profile output to be generated. For each 34712 source file compiled with `-fprofile-arcs', an accompanying `.gcda' 34713 file will be placed in the object file directory. That implicitly 34714 requires running the program on the same system as it was built or 34715 having the same absolute directory structure on the target system. The 34716 program will try to create the needed directory structure, if it is not 34717 already present. 34718 34719 To support cross-profiling, a program compiled with `-fprofile-arcs' 34720 can relocate the data files based on two environment variables: 34721 34722 * GCOV_PREFIX contains the prefix to add to the absolute paths in 34723 the object file. Prefix must be absolute as well, otherwise its 34724 value is ignored. The default is no prefix. 34725 34726 * GCOV_PREFIX_STRIP indicates the how many initial directory names 34727 to strip off the hardwired absolute paths. Default value is 0. 34728 34729 _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is 34730 undefined, empty or non-absolute. 34731 34732 For example, if the object file `/user/build/foo.o' was built with 34733 `-fprofile-arcs', the final executable will try to create the data file 34734 `/user/build/foo.gcda' when running on the target system. This will 34735 fail if the corresponding directory does not exist and it is unable to 34736 create it. This can be overcome by, for example, setting the 34737 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 34738 Such a setting will name the data file `/target/run/build/foo.gcda'. 34739 34740 You must move the data files to the expected directory tree in order to 34741 use them for profile directed optimizations (`--use-profile'), or to 34742 use the `gcov' tool. 34743 34744 34745 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 34746 34747 10 Known Causes of Trouble with GCC 34748 *********************************** 34749 34750 This section describes known problems that affect users of GCC. Most 34751 of these are not GCC bugs per se--if they were, we would fix them. But 34752 the result for a user may be like the result of a bug. 34753 34754 Some of these problems are due to bugs in other software, some are 34755 missing features that are too much work to add, and some are places 34756 where people's opinions differ as to what is best. 34757 34758 * Menu: 34759 34760 * Actual Bugs:: Bugs we will fix later. 34761 * Cross-Compiler Problems:: Common problems of cross compiling with GCC. 34762 * Interoperation:: Problems using GCC with other compilers, 34763 and with certain linkers, assemblers and debuggers. 34764 * Incompatibilities:: GCC is incompatible with traditional C. 34765 * Fixed Headers:: GCC uses corrected versions of system header files. 34766 This is necessary, but doesn't always work smoothly. 34767 * Standard Libraries:: GCC uses the system C library, which might not be 34768 compliant with the ISO C standard. 34769 * Disappointments:: Regrettable things we can't change, but not quite bugs. 34770 * C++ Misunderstandings:: Common misunderstandings with GNU C++. 34771 * Protoize Caveats:: Things to watch out for when using `protoize'. 34772 * Non-bugs:: Things we think are right, but some others disagree. 34773 * Warnings and Errors:: Which problems in your code get warnings, 34774 and which get errors. 34775 34776 34777 File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 34778 34779 10.1 Actual Bugs We Haven't Fixed Yet 34780 ===================================== 34781 34782 * The `fixincludes' script interacts badly with automounters; if the 34783 directory of system header files is automounted, it tends to be 34784 unmounted while `fixincludes' is running. This would seem to be a 34785 bug in the automounter. We don't know any good way to work around 34786 it. 34787 34788 * The `fixproto' script will sometimes add prototypes for the 34789 `sigsetjmp' and `siglongjmp' functions that reference the 34790 `jmp_buf' type before that type is defined. To work around this, 34791 edit the offending file and place the typedef in front of the 34792 prototypes. 34793 34794 34795 File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 34796 34797 10.2 Cross-Compiler Problems 34798 ============================ 34799 34800 You may run into problems with cross compilation on certain machines, 34801 for several reasons. 34802 34803 * At present, the program `mips-tfile' which adds debug support to 34804 object files on MIPS systems does not work in a cross compile 34805 environment. 34806 34807 34808 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 34809 34810 10.3 Interoperation 34811 =================== 34812 34813 This section lists various difficulties encountered in using GCC 34814 together with other compilers or with the assemblers, linkers, 34815 libraries and debuggers on certain systems. 34816 34817 * On many platforms, GCC supports a different ABI for C++ than do 34818 other compilers, so the object files compiled by GCC cannot be 34819 used with object files generated by another C++ compiler. 34820 34821 An area where the difference is most apparent is name mangling. 34822 The use of different name mangling is intentional, to protect you 34823 from more subtle problems. Compilers differ as to many internal 34824 details of C++ implementation, including: how class instances are 34825 laid out, how multiple inheritance is implemented, and how virtual 34826 function calls are handled. If the name encoding were made the 34827 same, your programs would link against libraries provided from 34828 other compilers--but the programs would then crash when run. 34829 Incompatible libraries are then detected at link time, rather than 34830 at run time. 34831 34832 * On some BSD systems, including some versions of Ultrix, use of 34833 profiling causes static variable destructors (currently used only 34834 in C++) not to be run. 34835 34836 * On some SGI systems, when you use `-lgl_s' as an option, it gets 34837 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 34838 does not happen when you use GCC. You must specify all three 34839 options explicitly. 34840 34841 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 34842 boundary, and it expects every `double' to be so aligned. The Sun 34843 compiler usually gives `double' values 8-byte alignment, with one 34844 exception: function arguments of type `double' may not be aligned. 34845 34846 As a result, if a function compiled with Sun CC takes the address 34847 of an argument of type `double' and passes this pointer of type 34848 `double *' to a function compiled with GCC, dereferencing the 34849 pointer may cause a fatal signal. 34850 34851 One way to solve this problem is to compile your entire program 34852 with GCC. Another solution is to modify the function that is 34853 compiled with Sun CC to copy the argument into a local variable; 34854 local variables are always properly aligned. A third solution is 34855 to modify the function that uses the pointer to dereference it via 34856 the following function `access_double' instead of directly with 34857 `*': 34858 34859 inline double 34860 access_double (double *unaligned_ptr) 34861 { 34862 union d2i { double d; int i[2]; }; 34863 34864 union d2i *p = (union d2i *) unaligned_ptr; 34865 union d2i u; 34866 34867 u.i[0] = p->i[0]; 34868 u.i[1] = p->i[1]; 34869 34870 return u.d; 34871 } 34872 34873 Storing into the pointer can be done likewise with the same union. 34874 34875 * On Solaris, the `malloc' function in the `libmalloc.a' library may 34876 allocate memory that is only 4 byte aligned. Since GCC on the 34877 SPARC assumes that doubles are 8 byte aligned, this may result in a 34878 fatal signal if doubles are stored in memory allocated by the 34879 `libmalloc.a' library. 34880 34881 The solution is to not use the `libmalloc.a' library. Use instead 34882 `malloc' and related functions from `libc.a'; they do not have 34883 this problem. 34884 34885 * On the HP PA machine, ADB sometimes fails to work on functions 34886 compiled with GCC. Specifically, it fails to work on functions 34887 that use `alloca' or variable-size arrays. This is because GCC 34888 doesn't generate HP-UX unwind descriptors for such functions. It 34889 may even be impossible to generate them. 34890 34891 * Debugging (`-g') is not supported on the HP PA machine, unless you 34892 use the preliminary GNU tools. 34893 34894 * Taking the address of a label may generate errors from the HP-UX 34895 PA assembler. GAS for the PA does not have this problem. 34896 34897 * Using floating point parameters for indirect calls to static 34898 functions will not work when using the HP assembler. There simply 34899 is no way for GCC to specify what registers hold arguments for 34900 static functions when using the HP assembler. GAS for the PA does 34901 not have this problem. 34902 34903 * In extremely rare cases involving some very large functions you may 34904 receive errors from the HP linker complaining about an out of 34905 bounds unconditional branch offset. This used to occur more often 34906 in previous versions of GCC, but is now exceptionally rare. If 34907 you should run into it, you can work around by making your 34908 function smaller. 34909 34910 * GCC compiled code sometimes emits warnings from the HP-UX 34911 assembler of the form: 34912 34913 (warning) Use of GR3 when 34914 frame >= 8192 may cause conflict. 34915 34916 These warnings are harmless and can be safely ignored. 34917 34918 * In extremely rare cases involving some very large functions you may 34919 receive errors from the AIX Assembler complaining about a 34920 displacement that is too large. If you should run into it, you 34921 can work around by making your function smaller. 34922 34923 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 34924 semantics which merges global symbols between libraries and 34925 applications, especially necessary for C++ streams functionality. 34926 This is not the default behavior of AIX shared libraries and 34927 dynamic linking. `libstdc++.a' is built on AIX with 34928 "runtime-linking" enabled so that symbol merging can occur. To 34929 utilize this feature, the application linked with `libstdc++.a' 34930 must include the `-Wl,-brtl' flag on the link line. G++ cannot 34931 impose this because this option may interfere with the semantics 34932 of the user program and users may not always use `g++' to link his 34933 or her application. Applications are not required to use the 34934 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 34935 library which is not dependent on the symbol merging semantics 34936 will continue to function correctly. 34937 34938 * An application can interpose its own definition of functions for 34939 functions invoked by `libstdc++.a' with "runtime-linking" enabled 34940 on AIX. To accomplish this the application must be linked with 34941 "runtime-linking" option and the functions explicitly must be 34942 exported by the application (`-Wl,-brtl,-bE:exportfile'). 34943 34944 * AIX on the RS/6000 provides support (NLS) for environments outside 34945 of the United States. Compilers and assemblers use NLS to support 34946 locale-specific representations of various objects including 34947 floating-point numbers (`.' vs `,' for separating decimal 34948 fractions). There have been problems reported where the library 34949 linked with GCC does not produce the same floating-point formats 34950 that the assembler accepts. If you have this problem, set the 34951 `LANG' environment variable to `C' or `En_US'. 34952 34953 * Even if you specify `-fdollars-in-identifiers', you cannot 34954 successfully use `$' in identifiers on the RS/6000 due to a 34955 restriction in the IBM assembler. GAS supports these identifiers. 34956 34957 34958 34959 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 34960 34961 10.4 Incompatibilities of GCC 34962 ============================= 34963 34964 There are several noteworthy incompatibilities between GNU C and K&R 34965 (non-ISO) versions of C. 34966 34967 * GCC normally makes string constants read-only. If several 34968 identical-looking string constants are used, GCC stores only one 34969 copy of the string. 34970 34971 One consequence is that you cannot call `mktemp' with a string 34972 constant argument. The function `mktemp' always alters the string 34973 its argument points to. 34974 34975 Another consequence is that `sscanf' does not work on some very 34976 old systems when passed a string constant as its format control 34977 string or input. This is because `sscanf' incorrectly tries to 34978 write into the string constant. Likewise `fscanf' and `scanf'. 34979 34980 The solution to these problems is to change the program to use 34981 `char'-array variables with initialization strings for these 34982 purposes instead of string constants. 34983 34984 * `-2147483648' is positive. 34985 34986 This is because 2147483648 cannot fit in the type `int', so 34987 (following the ISO C rules) its data type is `unsigned long int'. 34988 Negating this value yields 2147483648 again. 34989 34990 * GCC does not substitute macro arguments when they appear inside of 34991 string constants. For example, the following macro in GCC 34992 34993 #define foo(a) "a" 34994 34995 will produce output `"a"' regardless of what the argument A is. 34996 34997 * When you use `setjmp' and `longjmp', the only automatic variables 34998 guaranteed to remain valid are those declared `volatile'. This is 34999 a consequence of automatic register allocation. Consider this 35000 function: 35001 35002 jmp_buf j; 35003 35004 foo () 35005 { 35006 int a, b; 35007 35008 a = fun1 (); 35009 if (setjmp (j)) 35010 return a; 35011 35012 a = fun2 (); 35013 /* `longjmp (j)' may occur in `fun3'. */ 35014 return a + fun3 (); 35015 } 35016 35017 Here `a' may or may not be restored to its first value when the 35018 `longjmp' occurs. If `a' is allocated in a register, then its 35019 first value is restored; otherwise, it keeps the last value stored 35020 in it. 35021 35022 If you use the `-W' option with the `-O' option, you will get a 35023 warning when GCC thinks such a problem might be possible. 35024 35025 * Programs that use preprocessing directives in the middle of macro 35026 arguments do not work with GCC. For example, a program like this 35027 will not work: 35028 35029 foobar ( 35030 #define luser 35031 hack) 35032 35033 ISO C does not permit such a construct. 35034 35035 * K&R compilers allow comments to cross over an inclusion boundary 35036 (i.e. started in an include file and ended in the including file). 35037 35038 * Declarations of external variables and functions within a block 35039 apply only to the block containing the declaration. In other 35040 words, they have the same scope as any other declaration in the 35041 same place. 35042 35043 In some other C compilers, a `extern' declaration affects all the 35044 rest of the file even if it happens within a block. 35045 35046 * In traditional C, you can combine `long', etc., with a typedef 35047 name, as shown here: 35048 35049 typedef int foo; 35050 typedef long foo bar; 35051 35052 In ISO C, this is not allowed: `long' and other type modifiers 35053 require an explicit `int'. 35054 35055 * PCC allows typedef names to be used as function parameters. 35056 35057 * Traditional C allows the following erroneous pair of declarations 35058 to appear together in a given scope: 35059 35060 typedef int foo; 35061 typedef foo foo; 35062 35063 * GCC treats all characters of identifiers as significant. 35064 According to K&R-1 (2.2), "No more than the first eight characters 35065 are significant, although more may be used.". Also according to 35066 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 35067 the first character must be a letter. The underscore _ counts as 35068 a letter.", but GCC also allows dollar signs in identifiers. 35069 35070 * PCC allows whitespace in the middle of compound assignment 35071 operators such as `+='. GCC, following the ISO standard, does not 35072 allow this. 35073 35074 * GCC complains about unterminated character constants inside of 35075 preprocessing conditionals that fail. Some programs have English 35076 comments enclosed in conditionals that are guaranteed to fail; if 35077 these comments contain apostrophes, GCC will probably report an 35078 error. For example, this code would produce an error: 35079 35080 #if 0 35081 You can't expect this to work. 35082 #endif 35083 35084 The best solution to such a problem is to put the text into an 35085 actual C comment delimited by `/*...*/'. 35086 35087 * Many user programs contain the declaration `long time ();'. In the 35088 past, the system header files on many systems did not actually 35089 declare `time', so it did not matter what type your program 35090 declared it to return. But in systems with ISO C headers, `time' 35091 is declared to return `time_t', and if that is not the same as 35092 `long', then `long time ();' is erroneous. 35093 35094 The solution is to change your program to use appropriate system 35095 headers (`<time.h>' on systems with ISO C headers) and not to 35096 declare `time' if the system header files declare it, or failing 35097 that to use `time_t' as the return type of `time'. 35098 35099 * When compiling functions that return `float', PCC converts it to a 35100 double. GCC actually returns a `float'. If you are concerned 35101 with PCC compatibility, you should declare your functions to return 35102 `double'; you might as well say what you mean. 35103 35104 * When compiling functions that return structures or unions, GCC 35105 output code normally uses a method different from that used on most 35106 versions of Unix. As a result, code compiled with GCC cannot call 35107 a structure-returning function compiled with PCC, and vice versa. 35108 35109 The method used by GCC is as follows: a structure or union which is 35110 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 35111 union with any other size is stored into an address supplied by 35112 the caller (usually in a special, fixed register, but on some 35113 machines it is passed on the stack). The target hook 35114 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 35115 35116 By contrast, PCC on most target machines returns structures and 35117 unions of any size by copying the data into an area of static 35118 storage, and then returning the address of that storage as if it 35119 were a pointer value. The caller must copy the data from that 35120 memory area to the place where the value is wanted. GCC does not 35121 use this method because it is slower and nonreentrant. 35122 35123 On some newer machines, PCC uses a reentrant convention for all 35124 structure and union returning. GCC on most of these machines uses 35125 a compatible convention when returning structures and unions in 35126 memory, but still returns small structures and unions in registers. 35127 35128 You can tell GCC to use a compatible convention for all structure 35129 and union returning with the option `-fpcc-struct-return'. 35130 35131 * GCC complains about program fragments such as `0x74ae-0x4000' 35132 which appear to be two hexadecimal constants separated by the minus 35133 operator. Actually, this string is a single "preprocessing token". 35134 Each such token must correspond to one token in C. Since this 35135 does not, GCC prints an error message. Although it may appear 35136 obvious that what is meant is an operator and two values, the ISO 35137 C standard specifically requires that this be treated as erroneous. 35138 35139 A "preprocessing token" is a "preprocessing number" if it begins 35140 with a digit and is followed by letters, underscores, digits, 35141 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 35142 character sequences. (In strict C89 mode, the sequences `p+', 35143 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 35144 35145 To make the above program fragment valid, place whitespace in 35146 front of the minus sign. This whitespace will end the 35147 preprocessing number. 35148 35149 35150 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 35151 35152 10.5 Fixed Header Files 35153 ======================= 35154 35155 GCC needs to install corrected versions of some system header files. 35156 This is because most target systems have some header files that won't 35157 work with GCC unless they are changed. Some have bugs, some are 35158 incompatible with ISO C, and some depend on special features of other 35159 compilers. 35160 35161 Installing GCC automatically creates and installs the fixed header 35162 files, by running a program called `fixincludes'. Normally, you don't 35163 need to pay attention to this. But there are cases where it doesn't do 35164 the right thing automatically. 35165 35166 * If you update the system's header files, such as by installing a 35167 new system version, the fixed header files of GCC are not 35168 automatically updated. They can be updated using the `mkheaders' 35169 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 35170 35171 * On some systems, header file directories contain machine-specific 35172 symbolic links in certain places. This makes it possible to share 35173 most of the header files among hosts running the same version of 35174 the system on different machine models. 35175 35176 The programs that fix the header files do not understand this 35177 special way of using symbolic links; therefore, the directory of 35178 fixed header files is good only for the machine model used to 35179 build it. 35180 35181 It is possible to make separate sets of fixed header files for the 35182 different machine models, and arrange a structure of symbolic 35183 links so as to use the proper set, but you'll have to do this by 35184 hand. 35185 35186 35187 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 35188 35189 10.6 Standard Libraries 35190 ======================= 35191 35192 GCC by itself attempts to be a conforming freestanding implementation. 35193 *Note Language Standards Supported by GCC: Standards, for details of 35194 what this means. Beyond the library facilities required of such an 35195 implementation, the rest of the C library is supplied by the vendor of 35196 the operating system. If that C library doesn't conform to the C 35197 standards, then your programs might get warnings (especially when using 35198 `-Wall') that you don't expect. 35199 35200 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 35201 while the C standard says that `sprintf' returns an `int'. The 35202 `fixincludes' program could make the prototype for this function match 35203 the Standard, but that would be wrong, since the function will still 35204 return `char *'. 35205 35206 If you need a Standard compliant library, then you need to find one, as 35207 GCC does not provide one. The GNU C library (called `glibc') provides 35208 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 35209 HURD-based GNU systems; no recent version of it supports other systems, 35210 though some very old versions did. Version 2.2 of the GNU C library 35211 includes nearly complete C99 support. You could also ask your 35212 operating system vendor if newer libraries are available. 35213 35214 35215 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 35216 35217 10.7 Disappointments and Misunderstandings 35218 ========================================== 35219 35220 These problems are perhaps regrettable, but we don't know any practical 35221 way around them. 35222 35223 * Certain local variables aren't recognized by debuggers when you 35224 compile with optimization. 35225 35226 This occurs because sometimes GCC optimizes the variable out of 35227 existence. There is no way to tell the debugger how to compute the 35228 value such a variable "would have had", and it is not clear that 35229 would be desirable anyway. So GCC simply does not mention the 35230 eliminated variable when it writes debugging information. 35231 35232 You have to expect a certain amount of disagreement between the 35233 executable and your source code, when you use optimization. 35234 35235 * Users often think it is a bug when GCC reports an error for code 35236 like this: 35237 35238 int foo (struct mumble *); 35239 35240 struct mumble { ... }; 35241 35242 int foo (struct mumble *x) 35243 { ... } 35244 35245 This code really is erroneous, because the scope of `struct 35246 mumble' in the prototype is limited to the argument list 35247 containing it. It does not refer to the `struct mumble' defined 35248 with file scope immediately below--they are two unrelated types 35249 with similar names in different scopes. 35250 35251 But in the definition of `foo', the file-scope type is used 35252 because that is available to be inherited. Thus, the definition 35253 and the prototype do not match, and you get an error. 35254 35255 This behavior may seem silly, but it's what the ISO standard 35256 specifies. It is easy enough for you to make your code work by 35257 moving the definition of `struct mumble' above the prototype. 35258 It's not worth being incompatible with ISO C just to avoid an 35259 error for the example shown above. 35260 35261 * Accesses to bit-fields even in volatile objects works by accessing 35262 larger objects, such as a byte or a word. You cannot rely on what 35263 size of object is accessed in order to read or write the 35264 bit-field; it may even vary for a given bit-field according to the 35265 precise usage. 35266 35267 If you care about controlling the amount of memory that is 35268 accessed, use volatile but do not use bit-fields. 35269 35270 * GCC comes with shell scripts to fix certain known problems in 35271 system header files. They install corrected copies of various 35272 header files in a special directory where only GCC will normally 35273 look for them. The scripts adapt to various systems by searching 35274 all the system header files for the problem cases that we know 35275 about. 35276 35277 If new system header files are installed, nothing automatically 35278 arranges to update the corrected header files. They can be 35279 updated using the `mkheaders' script installed in 35280 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 35281 35282 * On 68000 and x86 systems, for instance, you can get paradoxical 35283 results if you test the precise values of floating point numbers. 35284 For example, you can find that a floating point value which is not 35285 a NaN is not equal to itself. This results from the fact that the 35286 floating point registers hold a few more bits of precision than 35287 fit in a `double' in memory. Compiled code moves values between 35288 memory and floating point registers at its convenience, and moving 35289 them into memory truncates them. 35290 35291 You can partially avoid this problem by using the `-ffloat-store' 35292 option (*note Optimize Options::). 35293 35294 * On AIX and other platforms without weak symbol support, templates 35295 need to be instantiated explicitly and symbols for static members 35296 of templates will not be generated. 35297 35298 * On AIX, GCC scans object files and library archives for static 35299 constructors and destructors when linking an application before the 35300 linker prunes unreferenced symbols. This is necessary to prevent 35301 the AIX linker from mistakenly assuming that static constructor or 35302 destructor are unused and removing them before the scanning can 35303 occur. All static constructors and destructors found will be 35304 referenced even though the modules in which they occur may not be 35305 used by the program. This may lead to both increased executable 35306 size and unexpected symbol references. 35307 35308 35309 File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble 35310 35311 10.8 Common Misunderstandings with GNU C++ 35312 ========================================== 35313 35314 C++ is a complex language and an evolving one, and its standard 35315 definition (the ISO C++ standard) was only recently completed. As a 35316 result, your C++ compiler may occasionally surprise you, even when its 35317 behavior is correct. This section discusses some areas that frequently 35318 give rise to questions of this sort. 35319 35320 * Menu: 35321 35322 * Static Definitions:: Static member declarations are not definitions 35323 * Name lookup:: Name lookup, templates, and accessing members of base classes 35324 * Temporaries:: Temporaries may vanish before you expect 35325 * Copy Assignment:: Copy Assignment operators copy virtual bases twice 35326 35327 35328 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 35329 35330 10.8.1 Declare _and_ Define Static Members 35331 ------------------------------------------ 35332 35333 When a class has static data members, it is not enough to _declare_ the 35334 static member; you must also _define_ it. For example: 35335 35336 class Foo 35337 { 35338 ... 35339 void method(); 35340 static int bar; 35341 }; 35342 35343 This declaration only establishes that the class `Foo' has an `int' 35344 named `Foo::bar', and a member function named `Foo::method'. But you 35345 still need to define _both_ `method' and `bar' elsewhere. According to 35346 the ISO standard, you must supply an initializer in one (and only one) 35347 source file, such as: 35348 35349 int Foo::bar = 0; 35350 35351 Other C++ compilers may not correctly implement the standard behavior. 35352 As a result, when you switch to `g++' from one of these compilers, you 35353 may discover that a program that appeared to work correctly in fact 35354 does not conform to the standard: `g++' reports as undefined symbols 35355 any static data members that lack definitions. 35356 35357 35358 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 35359 35360 10.8.2 Name lookup, templates, and accessing members of base classes 35361 -------------------------------------------------------------------- 35362 35363 The C++ standard prescribes that all names that are not dependent on 35364 template parameters are bound to their present definitions when parsing 35365 a template function or class.(1) Only names that are dependent are 35366 looked up at the point of instantiation. For example, consider 35367 35368 void foo(double); 35369 35370 struct A { 35371 template <typename T> 35372 void f () { 35373 foo (1); // 1 35374 int i = N; // 2 35375 T t; 35376 t.bar(); // 3 35377 foo (t); // 4 35378 } 35379 35380 static const int N; 35381 }; 35382 35383 Here, the names `foo' and `N' appear in a context that does not depend 35384 on the type of `T'. The compiler will thus require that they are 35385 defined in the context of use in the template, not only before the 35386 point of instantiation, and will here use `::foo(double)' and `A::N', 35387 respectively. In particular, it will convert the integer value to a 35388 `double' when passing it to `::foo(double)'. 35389 35390 Conversely, `bar' and the call to `foo' in the fourth marked line are 35391 used in contexts that do depend on the type of `T', so they are only 35392 looked up at the point of instantiation, and you can provide 35393 declarations for them after declaring the template, but before 35394 instantiating it. In particular, if you instantiate `A::f<int>', the 35395 last line will call an overloaded `::foo(int)' if one was provided, 35396 even if after the declaration of `struct A'. 35397 35398 This distinction between lookup of dependent and non-dependent names is 35399 called two-stage (or dependent) name lookup. G++ implements it since 35400 version 3.4. 35401 35402 Two-stage name lookup sometimes leads to situations with behavior 35403 different from non-template codes. The most common is probably this: 35404 35405 template <typename T> struct Base { 35406 int i; 35407 }; 35408 35409 template <typename T> struct Derived : public Base<T> { 35410 int get_i() { return i; } 35411 }; 35412 35413 In `get_i()', `i' is not used in a dependent context, so the compiler 35414 will look for a name declared at the enclosing namespace scope (which 35415 is the global scope here). It will not look into the base class, since 35416 that is dependent and you may declare specializations of `Base' even 35417 after declaring `Derived', so the compiler can't really know what `i' 35418 would refer to. If there is no global variable `i', then you will get 35419 an error message. 35420 35421 In order to make it clear that you want the member of the base class, 35422 you need to defer lookup until instantiation time, at which the base 35423 class is known. For this, you need to access `i' in a dependent 35424 context, by either using `this->i' (remember that `this' is of type 35425 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 35426 Alternatively, `Base<T>::i' might be brought into scope by a 35427 `using'-declaration. 35428 35429 Another, similar example involves calling member functions of a base 35430 class: 35431 35432 template <typename T> struct Base { 35433 int f(); 35434 }; 35435 35436 template <typename T> struct Derived : Base<T> { 35437 int g() { return f(); }; 35438 }; 35439 35440 Again, the call to `f()' is not dependent on template arguments (there 35441 are no arguments that depend on the type `T', and it is also not 35442 otherwise specified that the call should be in a dependent context). 35443 Thus a global declaration of such a function must be available, since 35444 the one in the base class is not visible until instantiation time. The 35445 compiler will consequently produce the following error message: 35446 35447 x.cc: In member function `int Derived<T>::g()': 35448 x.cc:6: error: there are no arguments to `f' that depend on a template 35449 parameter, so a declaration of `f' must be available 35450 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 35451 allowing the use of an undeclared name is deprecated) 35452 35453 To make the code valid either use `this->f()', or `Base<T>::f()'. 35454 Using the `-fpermissive' flag will also let the compiler accept the 35455 code, by marking all function calls for which no declaration is visible 35456 at the time of definition of the template for later lookup at 35457 instantiation time, as if it were a dependent call. We do not 35458 recommend using `-fpermissive' to work around invalid code, and it will 35459 also only catch cases where functions in base classes are called, not 35460 where variables in base classes are used (as in the example above). 35461 35462 Note that some compilers (including G++ versions prior to 3.4) get 35463 these examples wrong and accept above code without an error. Those 35464 compilers do not implement two-stage name lookup correctly. 35465 35466 ---------- Footnotes ---------- 35467 35468 (1) The C++ standard just uses the term "dependent" for names that 35469 depend on the type or value of template parameters. This shorter term 35470 will also be used in the rest of this section. 35471 35472 35473 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 35474 35475 10.8.3 Temporaries May Vanish Before You Expect 35476 ----------------------------------------------- 35477 35478 It is dangerous to use pointers or references to _portions_ of a 35479 temporary object. The compiler may very well delete the object before 35480 you expect it to, leaving a pointer to garbage. The most common place 35481 where this problem crops up is in classes like string classes, 35482 especially ones that define a conversion function to type `char *' or 35483 `const char *'--which is one reason why the standard `string' class 35484 requires you to call the `c_str' member function. However, any class 35485 that returns a pointer to some internal structure is potentially 35486 subject to this problem. 35487 35488 For example, a program may use a function `strfunc' that returns 35489 `string' objects, and another function `charfunc' that operates on 35490 pointers to `char': 35491 35492 string strfunc (); 35493 void charfunc (const char *); 35494 35495 void 35496 f () 35497 { 35498 const char *p = strfunc().c_str(); 35499 ... 35500 charfunc (p); 35501 ... 35502 charfunc (p); 35503 } 35504 35505 In this situation, it may seem reasonable to save a pointer to the C 35506 string returned by the `c_str' member function and use that rather than 35507 call `c_str' repeatedly. However, the temporary string created by the 35508 call to `strfunc' is destroyed after `p' is initialized, at which point 35509 `p' is left pointing to freed memory. 35510 35511 Code like this may run successfully under some other compilers, 35512 particularly obsolete cfront-based compilers that delete temporaries 35513 along with normal local variables. However, the GNU C++ behavior is 35514 standard-conforming, so if your program depends on late destruction of 35515 temporaries it is not portable. 35516 35517 The safe way to write such code is to give the temporary a name, which 35518 forces it to remain until the end of the scope of the name. For 35519 example: 35520 35521 const string& tmp = strfunc (); 35522 charfunc (tmp.c_str ()); 35523 35524 35525 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 35526 35527 10.8.4 Implicit Copy-Assignment for Virtual Bases 35528 ------------------------------------------------- 35529 35530 When a base class is virtual, only one subobject of the base class 35531 belongs to each full object. Also, the constructors and destructors are 35532 invoked only once, and called from the most-derived class. However, 35533 such objects behave unspecified when being assigned. For example: 35534 35535 struct Base{ 35536 char *name; 35537 Base(char *n) : name(strdup(n)){} 35538 Base& operator= (const Base& other){ 35539 free (name); 35540 name = strdup (other.name); 35541 } 35542 }; 35543 35544 struct A:virtual Base{ 35545 int val; 35546 A():Base("A"){} 35547 }; 35548 35549 struct B:virtual Base{ 35550 int bval; 35551 B():Base("B"){} 35552 }; 35553 35554 struct Derived:public A, public B{ 35555 Derived():Base("Derived"){} 35556 }; 35557 35558 void func(Derived &d1, Derived &d2) 35559 { 35560 d1 = d2; 35561 } 35562 35563 The C++ standard specifies that `Base::Base' is only called once when 35564 constructing or copy-constructing a Derived object. It is unspecified 35565 whether `Base::operator=' is called more than once when the implicit 35566 copy-assignment for Derived objects is invoked (as it is inside `func' 35567 in the example). 35568 35569 G++ implements the "intuitive" algorithm for copy-assignment: assign 35570 all direct bases, then assign all members. In that algorithm, the 35571 virtual base subobject can be encountered more than once. In the 35572 example, copying proceeds in the following order: `val', `name' (via 35573 `strdup'), `bval', and `name' again. 35574 35575 If application code relies on copy-assignment, a user-defined 35576 copy-assignment operator removes any uncertainties. With such an 35577 operator, the application can define whether and how the virtual base 35578 subobject is assigned. 35579 35580 35581 File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: C++ Misunderstandings, Up: Trouble 35582 35583 10.9 Caveats of using `protoize' 35584 ================================ 35585 35586 The conversion programs `protoize' and `unprotoize' can sometimes 35587 change a source file in a way that won't work unless you rearrange it. 35588 35589 * `protoize' can insert references to a type name or type tag before 35590 the definition, or in a file where they are not defined. 35591 35592 If this happens, compiler error messages should show you where the 35593 new references are, so fixing the file by hand is straightforward. 35594 35595 * There are some C constructs which `protoize' cannot figure out. 35596 For example, it can't determine argument types for declaring a 35597 pointer-to-function variable; this you must do by hand. `protoize' 35598 inserts a comment containing `???' each time it finds such a 35599 variable; so you can find all such variables by searching for this 35600 string. ISO C does not require declaring the argument types of 35601 pointer-to-function types. 35602 35603 * Using `unprotoize' can easily introduce bugs. If the program 35604 relied on prototypes to bring about conversion of arguments, these 35605 conversions will not take place in the program without prototypes. 35606 One case in which you can be sure `unprotoize' is safe is when you 35607 are removing prototypes that were made with `protoize'; if the 35608 program worked before without any prototypes, it will work again 35609 without them. 35610 35611 You can find all the places where this problem might occur by 35612 compiling the program with the `-Wtraditional-conversion' option. 35613 It prints a warning whenever an argument is converted. 35614 35615 * Both conversion programs can be confused if there are macro calls 35616 in and around the text to be converted. In other words, the 35617 standard syntax for a declaration or definition must not result 35618 from expanding a macro. This problem is inherent in the design of 35619 C and cannot be fixed. If only a few functions have confusing 35620 macro calls, you can easily convert them manually. 35621 35622 * `protoize' cannot get the argument types for a function whose 35623 definition was not actually compiled due to preprocessing 35624 conditionals. When this happens, `protoize' changes nothing in 35625 regard to such a function. `protoize' tries to detect such 35626 instances and warn about them. 35627 35628 You can generally work around this problem by using `protoize' step 35629 by step, each time specifying a different set of `-D' options for 35630 compilation, until all of the functions have been converted. 35631 There is no automatic way to verify that you have got them all, 35632 however. 35633 35634 * Confusion may result if there is an occasion to convert a function 35635 declaration or definition in a region of source code where there 35636 is more than one formal parameter list present. Thus, attempts to 35637 convert code containing multiple (conditionally compiled) versions 35638 of a single function header (in the same vicinity) may not produce 35639 the desired (or expected) results. 35640 35641 If you plan on converting source files which contain such code, it 35642 is recommended that you first make sure that each conditionally 35643 compiled region of source code which contains an alternative 35644 function header also contains at least one additional follower 35645 token (past the final right parenthesis of the function header). 35646 This should circumvent the problem. 35647 35648 * `unprotoize' can become confused when trying to convert a function 35649 definition or declaration which contains a declaration for a 35650 pointer-to-function formal argument which has the same name as the 35651 function being defined or declared. We recommend you avoid such 35652 choices of formal parameter names. 35653 35654 * You might also want to correct some of the indentation by hand and 35655 break long lines. (The conversion programs don't write lines 35656 longer than eighty characters in any case.) 35657 35658 35659 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Protoize Caveats, Up: Trouble 35660 35661 10.10 Certain Changes We Don't Want to Make 35662 =========================================== 35663 35664 This section lists changes that people frequently request, but which we 35665 do not make because we think GCC is better without them. 35666 35667 * Checking the number and type of arguments to a function which has 35668 an old-fashioned definition and no prototype. 35669 35670 Such a feature would work only occasionally--only for calls that 35671 appear in the same file as the called function, following the 35672 definition. The only way to check all calls reliably is to add a 35673 prototype for the function. But adding a prototype eliminates the 35674 motivation for this feature. So the feature is not worthwhile. 35675 35676 * Warning about using an expression whose type is signed as a shift 35677 count. 35678 35679 Shift count operands are probably signed more often than unsigned. 35680 Warning about this would cause far more annoyance than good. 35681 35682 * Warning about assigning a signed value to an unsigned variable. 35683 35684 Such assignments must be very common; warning about them would 35685 cause more annoyance than good. 35686 35687 * Warning when a non-void function value is ignored. 35688 35689 C contains many standard functions that return a value that most 35690 programs choose to ignore. One obvious example is `printf'. 35691 Warning about this practice only leads the defensive programmer to 35692 clutter programs with dozens of casts to `void'. Such casts are 35693 required so frequently that they become visual noise. Writing 35694 those casts becomes so automatic that they no longer convey useful 35695 information about the intentions of the programmer. For functions 35696 where the return value should never be ignored, use the 35697 `warn_unused_result' function attribute (*note Function 35698 Attributes::). 35699 35700 * Making `-fshort-enums' the default. 35701 35702 This would cause storage layout to be incompatible with most other 35703 C compilers. And it doesn't seem very important, given that you 35704 can get the same result in other ways. The case where it matters 35705 most is when the enumeration-valued object is inside a structure, 35706 and in that case you can specify a field width explicitly. 35707 35708 * Making bit-fields unsigned by default on particular machines where 35709 "the ABI standard" says to do so. 35710 35711 The ISO C standard leaves it up to the implementation whether a 35712 bit-field declared plain `int' is signed or not. This in effect 35713 creates two alternative dialects of C. 35714 35715 The GNU C compiler supports both dialects; you can specify the 35716 signed dialect with `-fsigned-bitfields' and the unsigned dialect 35717 with `-funsigned-bitfields'. However, this leaves open the 35718 question of which dialect to use by default. 35719 35720 Currently, the preferred dialect makes plain bit-fields signed, 35721 because this is simplest. Since `int' is the same as `signed int' 35722 in every other context, it is cleanest for them to be the same in 35723 bit-fields as well. 35724 35725 Some computer manufacturers have published Application Binary 35726 Interface standards which specify that plain bit-fields should be 35727 unsigned. It is a mistake, however, to say anything about this 35728 issue in an ABI. This is because the handling of plain bit-fields 35729 distinguishes two dialects of C. Both dialects are meaningful on 35730 every type of machine. Whether a particular object file was 35731 compiled using signed bit-fields or unsigned is of no concern to 35732 other object files, even if they access the same bit-fields in the 35733 same data structures. 35734 35735 A given program is written in one or the other of these two 35736 dialects. The program stands a chance to work on most any machine 35737 if it is compiled with the proper dialect. It is unlikely to work 35738 at all if compiled with the wrong dialect. 35739 35740 Many users appreciate the GNU C compiler because it provides an 35741 environment that is uniform across machines. These users would be 35742 inconvenienced if the compiler treated plain bit-fields 35743 differently on certain machines. 35744 35745 Occasionally users write programs intended only for a particular 35746 machine type. On these occasions, the users would benefit if the 35747 GNU C compiler were to support by default the same dialect as the 35748 other compilers on that machine. But such applications are rare. 35749 And users writing a program to run on more than one type of 35750 machine cannot possibly benefit from this kind of compatibility. 35751 35752 This is why GCC does and will treat plain bit-fields in the same 35753 fashion on all types of machines (by default). 35754 35755 There are some arguments for making bit-fields unsigned by default 35756 on all machines. If, for example, this becomes a universal de 35757 facto standard, it would make sense for GCC to go along with it. 35758 This is something to be considered in the future. 35759 35760 (Of course, users strongly concerned about portability should 35761 indicate explicitly in each bit-field whether it is signed or not. 35762 In this way, they write programs which have the same meaning in 35763 both C dialects.) 35764 35765 * Undefining `__STDC__' when `-ansi' is not used. 35766 35767 Currently, GCC defines `__STDC__' unconditionally. This provides 35768 good results in practice. 35769 35770 Programmers normally use conditionals on `__STDC__' to ask whether 35771 it is safe to use certain features of ISO C, such as function 35772 prototypes or ISO token concatenation. Since plain `gcc' supports 35773 all the features of ISO C, the correct answer to these questions is 35774 "yes". 35775 35776 Some users try to use `__STDC__' to check for the availability of 35777 certain library facilities. This is actually incorrect usage in 35778 an ISO C program, because the ISO C standard says that a conforming 35779 freestanding implementation should define `__STDC__' even though it 35780 does not have the library facilities. `gcc -ansi -pedantic' is a 35781 conforming freestanding implementation, and it is therefore 35782 required to define `__STDC__', even though it does not come with 35783 an ISO C library. 35784 35785 Sometimes people say that defining `__STDC__' in a compiler that 35786 does not completely conform to the ISO C standard somehow violates 35787 the standard. This is illogical. The standard is a standard for 35788 compilers that claim to support ISO C, such as `gcc -ansi'--not 35789 for other compilers such as plain `gcc'. Whatever the ISO C 35790 standard says is relevant to the design of plain `gcc' without 35791 `-ansi' only for pragmatic reasons, not as a requirement. 35792 35793 GCC normally defines `__STDC__' to be 1, and in addition defines 35794 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 35795 option for strict conformance to some version of ISO C. On some 35796 hosts, system include files use a different convention, where 35797 `__STDC__' is normally 0, but is 1 if the user specifies strict 35798 conformance to the C Standard. GCC follows the host convention 35799 when processing system include files, but when processing user 35800 files it follows the usual GNU C convention. 35801 35802 * Undefining `__STDC__' in C++. 35803 35804 Programs written to compile with C++-to-C translators get the 35805 value of `__STDC__' that goes with the C compiler that is 35806 subsequently used. These programs must test `__STDC__' to 35807 determine what kind of C preprocessor that compiler uses: whether 35808 they should concatenate tokens in the ISO C fashion or in the 35809 traditional fashion. 35810 35811 These programs work properly with GNU C++ if `__STDC__' is defined. 35812 They would not work otherwise. 35813 35814 In addition, many header files are written to provide prototypes 35815 in ISO C but not in traditional C. Many of these header files can 35816 work without change in C++ provided `__STDC__' is defined. If 35817 `__STDC__' is not defined, they will all fail, and will all need 35818 to be changed to test explicitly for C++ as well. 35819 35820 * Deleting "empty" loops. 35821 35822 Historically, GCC has not deleted "empty" loops under the 35823 assumption that the most likely reason you would put one in a 35824 program is to have a delay, so deleting them will not make real 35825 programs run any faster. 35826 35827 However, the rationale here is that optimization of a nonempty loop 35828 cannot produce an empty one. This held for carefully written C 35829 compiled with less powerful optimizers but is not always the case 35830 for carefully written C++ or with more powerful optimizers. Thus 35831 GCC will remove operations from loops whenever it can determine 35832 those operations are not externally visible (apart from the time 35833 taken to execute them, of course). In case the loop can be proved 35834 to be finite, GCC will also remove the loop itself. 35835 35836 Be aware of this when performing timing tests, for instance the 35837 following loop can be completely removed, provided 35838 `some_expression' can provably not change any global state. 35839 35840 { 35841 int sum = 0; 35842 int ix; 35843 35844 for (ix = 0; ix != 10000; ix++) 35845 sum += some_expression; 35846 } 35847 35848 Even though `sum' is accumulated in the loop, no use is made of 35849 that summation, so the accumulation can be removed. 35850 35851 * Making side effects happen in the same order as in some other 35852 compiler. 35853 35854 It is never safe to depend on the order of evaluation of side 35855 effects. For example, a function call like this may very well 35856 behave differently from one compiler to another: 35857 35858 void func (int, int); 35859 35860 int i = 2; 35861 func (i++, i++); 35862 35863 There is no guarantee (in either the C or the C++ standard language 35864 definitions) that the increments will be evaluated in any 35865 particular order. Either increment might happen first. `func' 35866 might get the arguments `2, 3', or it might get `3, 2', or even 35867 `2, 2'. 35868 35869 * Making certain warnings into errors by default. 35870 35871 Some ISO C testsuites report failure when the compiler does not 35872 produce an error message for a certain program. 35873 35874 ISO C requires a "diagnostic" message for certain kinds of invalid 35875 programs, but a warning is defined by GCC to count as a 35876 diagnostic. If GCC produces a warning but not an error, that is 35877 correct ISO C support. If testsuites call this "failure", they 35878 should be run with the GCC option `-pedantic-errors', which will 35879 turn these warnings into errors. 35880 35881 35882 35883 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 35884 35885 10.11 Warning Messages and Error Messages 35886 ========================================= 35887 35888 The GNU compiler can produce two kinds of diagnostics: errors and 35889 warnings. Each kind has a different purpose: 35890 35891 "Errors" report problems that make it impossible to compile your 35892 program. GCC reports errors with the source file name and line 35893 number where the problem is apparent. 35894 35895 "Warnings" report other unusual conditions in your code that _may_ 35896 indicate a problem, although compilation can (and does) proceed. 35897 Warning messages also report the source file name and line number, 35898 but include the text `warning:' to distinguish them from error 35899 messages. 35900 35901 Warnings may indicate danger points where you should check to make sure 35902 that your program really does what you intend; or the use of obsolete 35903 features; or the use of nonstandard features of GNU C or C++. Many 35904 warnings are issued only if you ask for them, with one of the `-W' 35905 options (for instance, `-Wall' requests a variety of useful warnings). 35906 35907 GCC always tries to compile your program if possible; it never 35908 gratuitously rejects a program whose meaning is clear merely because 35909 (for instance) it fails to conform to a standard. In some cases, 35910 however, the C and C++ standards specify that certain extensions are 35911 forbidden, and a diagnostic _must_ be issued by a conforming compiler. 35912 The `-pedantic' option tells GCC to issue warnings in such cases; 35913 `-pedantic-errors' says to make them errors instead. This does not 35914 mean that _all_ non-ISO constructs get warnings or errors. 35915 35916 *Note Options to Request or Suppress Warnings: Warning Options, for 35917 more detail on these and related command-line options. 35918 35919 35920 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 35921 35922 11 Reporting Bugs 35923 ***************** 35924 35925 Your bug reports play an essential role in making GCC reliable. 35926 35927 When you encounter a problem, the first thing to do is to see if it is 35928 already known. *Note Trouble::. If it isn't known, then you should 35929 report the problem. 35930 35931 * Menu: 35932 35933 * Criteria: Bug Criteria. Have you really found a bug? 35934 * Reporting: Bug Reporting. How to report a bug effectively. 35935 * Known: Trouble. Known problems. 35936 * Help: Service. Where to ask for help. 35937 35938 35939 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 35940 35941 11.1 Have You Found a Bug? 35942 ========================== 35943 35944 If you are not sure whether you have found a bug, here are some 35945 guidelines: 35946 35947 * If the compiler gets a fatal signal, for any input whatever, that 35948 is a compiler bug. Reliable compilers never crash. 35949 35950 * If the compiler produces invalid assembly code, for any input 35951 whatever (except an `asm' statement), that is a compiler bug, 35952 unless the compiler reports errors (not just warnings) which would 35953 ordinarily prevent the assembler from being run. 35954 35955 * If the compiler produces valid assembly code that does not 35956 correctly execute the input source code, that is a compiler bug. 35957 35958 However, you must double-check to make sure, because you may have a 35959 program whose behavior is undefined, which happened by chance to 35960 give the desired results with another C or C++ compiler. 35961 35962 For example, in many nonoptimizing compilers, you can write `x;' 35963 at the end of a function instead of `return x;', with the same 35964 results. But the value of the function is undefined if `return' 35965 is omitted; it is not a bug when GCC produces different results. 35966 35967 Problems often result from expressions with two increment 35968 operators, as in `f (*p++, *p++)'. Your previous compiler might 35969 have interpreted that expression the way you intended; GCC might 35970 interpret it another way. Neither compiler is wrong. The bug is 35971 in your code. 35972 35973 After you have localized the error to a single source line, it 35974 should be easy to check for these things. If your program is 35975 correct and well defined, you have found a compiler bug. 35976 35977 * If the compiler produces an error message for valid input, that is 35978 a compiler bug. 35979 35980 * If the compiler does not produce an error message for invalid 35981 input, that is a compiler bug. However, you should note that your 35982 idea of "invalid input" might be someone else's idea of "an 35983 extension" or "support for traditional practice". 35984 35985 * If you are an experienced user of one of the languages GCC 35986 supports, your suggestions for improvement of GCC are welcome in 35987 any case. 35988 35989 35990 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 35991 35992 11.2 How and where to Report Bugs 35993 ================================= 35994 35995 Bugs should be reported to the bug database at 35996 `http://gcc.gnu.org/bugs.html'. 35997 35998 35999 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 36000 36001 12 How To Get Help with GCC 36002 *************************** 36003 36004 If you need help installing, using or changing GCC, there are two ways 36005 to find it: 36006 36007 * Send a message to a suitable network mailing list. First try 36008 <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if 36009 that brings no response, try <gcc (a] gcc.gnu.org>. For help changing 36010 GCC, ask <gcc (a] gcc.gnu.org>. If you think you have found a bug in 36011 GCC, please report it following the instructions at *note Bug 36012 Reporting::. 36013 36014 * Look in the service directory for someone who might help you for a 36015 fee. The service directory is found at 36016 `http://www.gnu.org/prep/service.html'. 36017 36018 For further information, see `http://gcc.gnu.org/faq.html#support'. 36019 36020 36021 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 36022 36023 13 Contributing to GCC Development 36024 ********************************** 36025 36026 If you would like to help pretest GCC releases to assure they work well, 36027 current development sources are available by SVN (see 36028 `http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 36029 available for FTP; see `http://gcc.gnu.org/snapshots.html'. 36030 36031 If you would like to work on improvements to GCC, please read the 36032 advice at these URLs: 36033 36034 `http://gcc.gnu.org/contribute.html' 36035 `http://gcc.gnu.org/contributewhy.html' 36036 36037 for information on how to make useful contributions and avoid 36038 duplication of effort. Suggested projects are listed at 36039 `http://gcc.gnu.org/projects/'. 36040 36041 36042 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 36043 36044 Funding Free Software 36045 ********************* 36046 36047 If you want to have more free software a few years from now, it makes 36048 sense for you to help encourage people to contribute funds for its 36049 development. The most effective approach known is to encourage 36050 commercial redistributors to donate. 36051 36052 Users of free software systems can boost the pace of development by 36053 encouraging for-a-fee distributors to donate part of their selling price 36054 to free software developers--the Free Software Foundation, and others. 36055 36056 The way to convince distributors to do this is to demand it and expect 36057 it from them. So when you compare distributors, judge them partly by 36058 how much they give to free software development. Show distributors 36059 they must compete to be the one who gives the most. 36060 36061 To make this approach work, you must insist on numbers that you can 36062 compare, such as, "We will donate ten dollars to the Frobnitz project 36063 for each disk sold." Don't be satisfied with a vague promise, such as 36064 "A portion of the profits are donated," since it doesn't give a basis 36065 for comparison. 36066 36067 Even a precise fraction "of the profits from this disk" is not very 36068 meaningful, since creative accounting and unrelated business decisions 36069 can greatly alter what fraction of the sales price counts as profit. 36070 If the price you pay is $50, ten percent of the profit is probably less 36071 than a dollar; it might be a few cents, or nothing at all. 36072 36073 Some redistributors do development work themselves. This is useful 36074 too; but to keep everyone honest, you need to inquire how much they do, 36075 and what kind. Some kinds of development make much more long-term 36076 difference than others. For example, maintaining a separate version of 36077 a program contributes very little; maintaining the standard version of a 36078 program for the whole community contributes much. Easy new ports 36079 contribute little, since someone else would surely do them; difficult 36080 ports such as adding a new CPU to the GNU Compiler Collection 36081 contribute more; major new features or packages contribute the most. 36082 36083 By establishing the idea that supporting further development is "the 36084 proper thing to do" when distributing free software for a fee, we can 36085 assure a steady flow of resources into making more free software. 36086 36087 Copyright (C) 1994 Free Software Foundation, Inc. 36088 Verbatim copying and redistribution of this section is permitted 36089 without royalty; alteration is not permitted. 36090 36091 36092 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 36093 36094 The GNU Project and GNU/Linux 36095 ***************************** 36096 36097 The GNU Project was launched in 1984 to develop a complete Unix-like 36098 operating system which is free software: the GNU system. (GNU is a 36099 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 36100 Variants of the GNU operating system, which use the kernel Linux, are 36101 now widely used; though these systems are often referred to as "Linux", 36102 they are more accurately called GNU/Linux systems. 36103 36104 For more information, see: 36105 `http://www.gnu.org/' 36106 `http://www.gnu.org/gnu/linux-and-gnu.html' 36107 36108 36109 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 36110 36111 GNU General Public License 36112 ************************** 36113 36114 Version 3, 29 June 2007 36115 36116 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 36117 36118 Everyone is permitted to copy and distribute verbatim copies of this 36119 license document, but changing it is not allowed. 36120 36121 Preamble 36122 ======== 36123 36124 The GNU General Public License is a free, copyleft license for software 36125 and other kinds of works. 36126 36127 The licenses for most software and other practical works are designed 36128 to take away your freedom to share and change the works. By contrast, 36129 the GNU General Public License is intended to guarantee your freedom to 36130 share and change all versions of a program-to make sure it remains free 36131 software for all its users. We, the Free Software Foundation, use the 36132 GNU General Public License for most of our software; it applies also to 36133 any other work released this way by its authors. You can apply it to 36134 your programs, too. 36135 36136 When we speak of free software, we are referring to freedom, not 36137 price. Our General Public Licenses are designed to make sure that you 36138 have the freedom to distribute copies of free software (and charge for 36139 them if you wish), that you receive source code or can get it if you 36140 want it, that you can change the software or use pieces of it in new 36141 free programs, and that you know you can do these things. 36142 36143 To protect your rights, we need to prevent others from denying you 36144 these rights or asking you to surrender the rights. Therefore, you 36145 have certain responsibilities if you distribute copies of the software, 36146 or if you modify it: responsibilities to respect the freedom of others. 36147 36148 For example, if you distribute copies of such a program, whether 36149 gratis or for a fee, you must pass on to the recipients the same 36150 freedoms that you received. You must make sure that they, too, receive 36151 or can get the source code. And you must show them these terms so they 36152 know their rights. 36153 36154 Developers that use the GNU GPL protect your rights with two steps: 36155 (1) assert copyright on the software, and (2) offer you this License 36156 giving you legal permission to copy, distribute and/or modify it. 36157 36158 For the developers' and authors' protection, the GPL clearly explains 36159 that there is no warranty for this free software. For both users' and 36160 authors' sake, the GPL requires that modified versions be marked as 36161 changed, so that their problems will not be attributed erroneously to 36162 authors of previous versions. 36163 36164 Some devices are designed to deny users access to install or run 36165 modified versions of the software inside them, although the 36166 manufacturer can do so. This is fundamentally incompatible with the 36167 aim of protecting users' freedom to change the software. The 36168 systematic pattern of such abuse occurs in the area of products for 36169 individuals to use, which is precisely where it is most unacceptable. 36170 Therefore, we have designed this version of the GPL to prohibit the 36171 practice for those products. If such problems arise substantially in 36172 other domains, we stand ready to extend this provision to those domains 36173 in future versions of the GPL, as needed to protect the freedom of 36174 users. 36175 36176 Finally, every program is threatened constantly by software patents. 36177 States should not allow patents to restrict development and use of 36178 software on general-purpose computers, but in those that do, we wish to 36179 avoid the special danger that patents applied to a free program could 36180 make it effectively proprietary. To prevent this, the GPL assures that 36181 patents cannot be used to render the program non-free. 36182 36183 The precise terms and conditions for copying, distribution and 36184 modification follow. 36185 36186 TERMS AND CONDITIONS 36187 ==================== 36188 36189 0. Definitions. 36190 36191 "This License" refers to version 3 of the GNU General Public 36192 License. 36193 36194 "Copyright" also means copyright-like laws that apply to other 36195 kinds of works, such as semiconductor masks. 36196 36197 "The Program" refers to any copyrightable work licensed under this 36198 License. Each licensee is addressed as "you". "Licensees" and 36199 "recipients" may be individuals or organizations. 36200 36201 To "modify" a work means to copy from or adapt all or part of the 36202 work in a fashion requiring copyright permission, other than the 36203 making of an exact copy. The resulting work is called a "modified 36204 version" of the earlier work or a work "based on" the earlier work. 36205 36206 A "covered work" means either the unmodified Program or a work 36207 based on the Program. 36208 36209 To "propagate" a work means to do anything with it that, without 36210 permission, would make you directly or secondarily liable for 36211 infringement under applicable copyright law, except executing it 36212 on a computer or modifying a private copy. Propagation includes 36213 copying, distribution (with or without modification), making 36214 available to the public, and in some countries other activities as 36215 well. 36216 36217 To "convey" a work means any kind of propagation that enables other 36218 parties to make or receive copies. Mere interaction with a user 36219 through a computer network, with no transfer of a copy, is not 36220 conveying. 36221 36222 An interactive user interface displays "Appropriate Legal Notices" 36223 to the extent that it includes a convenient and prominently visible 36224 feature that (1) displays an appropriate copyright notice, and (2) 36225 tells the user that there is no warranty for the work (except to 36226 the extent that warranties are provided), that licensees may 36227 convey the work under this License, and how to view a copy of this 36228 License. If the interface presents a list of user commands or 36229 options, such as a menu, a prominent item in the list meets this 36230 criterion. 36231 36232 1. Source Code. 36233 36234 The "source code" for a work means the preferred form of the work 36235 for making modifications to it. "Object code" means any 36236 non-source form of a work. 36237 36238 A "Standard Interface" means an interface that either is an 36239 official standard defined by a recognized standards body, or, in 36240 the case of interfaces specified for a particular programming 36241 language, one that is widely used among developers working in that 36242 language. 36243 36244 The "System Libraries" of an executable work include anything, 36245 other than the work as a whole, that (a) is included in the normal 36246 form of packaging a Major Component, but which is not part of that 36247 Major Component, and (b) serves only to enable use of the work 36248 with that Major Component, or to implement a Standard Interface 36249 for which an implementation is available to the public in source 36250 code form. A "Major Component", in this context, means a major 36251 essential component (kernel, window system, and so on) of the 36252 specific operating system (if any) on which the executable work 36253 runs, or a compiler used to produce the work, or an object code 36254 interpreter used to run it. 36255 36256 The "Corresponding Source" for a work in object code form means all 36257 the source code needed to generate, install, and (for an executable 36258 work) run the object code and to modify the work, including 36259 scripts to control those activities. However, it does not include 36260 the work's System Libraries, or general-purpose tools or generally 36261 available free programs which are used unmodified in performing 36262 those activities but which are not part of the work. For example, 36263 Corresponding Source includes interface definition files 36264 associated with source files for the work, and the source code for 36265 shared libraries and dynamically linked subprograms that the work 36266 is specifically designed to require, such as by intimate data 36267 communication or control flow between those subprograms and other 36268 parts of the work. 36269 36270 The Corresponding Source need not include anything that users can 36271 regenerate automatically from other parts of the Corresponding 36272 Source. 36273 36274 The Corresponding Source for a work in source code form is that 36275 same work. 36276 36277 2. Basic Permissions. 36278 36279 All rights granted under this License are granted for the term of 36280 copyright on the Program, and are irrevocable provided the stated 36281 conditions are met. This License explicitly affirms your unlimited 36282 permission to run the unmodified Program. The output from running 36283 a covered work is covered by this License only if the output, 36284 given its content, constitutes a covered work. This License 36285 acknowledges your rights of fair use or other equivalent, as 36286 provided by copyright law. 36287 36288 You may make, run and propagate covered works that you do not 36289 convey, without conditions so long as your license otherwise 36290 remains in force. You may convey covered works to others for the 36291 sole purpose of having them make modifications exclusively for 36292 you, or provide you with facilities for running those works, 36293 provided that you comply with the terms of this License in 36294 conveying all material for which you do not control copyright. 36295 Those thus making or running the covered works for you must do so 36296 exclusively on your behalf, under your direction and control, on 36297 terms that prohibit them from making any copies of your 36298 copyrighted material outside their relationship with you. 36299 36300 Conveying under any other circumstances is permitted solely under 36301 the conditions stated below. Sublicensing is not allowed; section 36302 10 makes it unnecessary. 36303 36304 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 36305 36306 No covered work shall be deemed part of an effective technological 36307 measure under any applicable law fulfilling obligations under 36308 article 11 of the WIPO copyright treaty adopted on 20 December 36309 1996, or similar laws prohibiting or restricting circumvention of 36310 such measures. 36311 36312 When you convey a covered work, you waive any legal power to forbid 36313 circumvention of technological measures to the extent such 36314 circumvention is effected by exercising rights under this License 36315 with respect to the covered work, and you disclaim any intention 36316 to limit operation or modification of the work as a means of 36317 enforcing, against the work's users, your or third parties' legal 36318 rights to forbid circumvention of technological measures. 36319 36320 4. Conveying Verbatim Copies. 36321 36322 You may convey verbatim copies of the Program's source code as you 36323 receive it, in any medium, provided that you conspicuously and 36324 appropriately publish on each copy an appropriate copyright notice; 36325 keep intact all notices stating that this License and any 36326 non-permissive terms added in accord with section 7 apply to the 36327 code; keep intact all notices of the absence of any warranty; and 36328 give all recipients a copy of this License along with the Program. 36329 36330 You may charge any price or no price for each copy that you convey, 36331 and you may offer support or warranty protection for a fee. 36332 36333 5. Conveying Modified Source Versions. 36334 36335 You may convey a work based on the Program, or the modifications to 36336 produce it from the Program, in the form of source code under the 36337 terms of section 4, provided that you also meet all of these 36338 conditions: 36339 36340 a. The work must carry prominent notices stating that you 36341 modified it, and giving a relevant date. 36342 36343 b. The work must carry prominent notices stating that it is 36344 released under this License and any conditions added under 36345 section 7. This requirement modifies the requirement in 36346 section 4 to "keep intact all notices". 36347 36348 c. You must license the entire work, as a whole, under this 36349 License to anyone who comes into possession of a copy. This 36350 License will therefore apply, along with any applicable 36351 section 7 additional terms, to the whole of the work, and all 36352 its parts, regardless of how they are packaged. This License 36353 gives no permission to license the work in any other way, but 36354 it does not invalidate such permission if you have separately 36355 received it. 36356 36357 d. If the work has interactive user interfaces, each must display 36358 Appropriate Legal Notices; however, if the Program has 36359 interactive interfaces that do not display Appropriate Legal 36360 Notices, your work need not make them do so. 36361 36362 A compilation of a covered work with other separate and independent 36363 works, which are not by their nature extensions of the covered 36364 work, and which are not combined with it such as to form a larger 36365 program, in or on a volume of a storage or distribution medium, is 36366 called an "aggregate" if the compilation and its resulting 36367 copyright are not used to limit the access or legal rights of the 36368 compilation's users beyond what the individual works permit. 36369 Inclusion of a covered work in an aggregate does not cause this 36370 License to apply to the other parts of the aggregate. 36371 36372 6. Conveying Non-Source Forms. 36373 36374 You may convey a covered work in object code form under the terms 36375 of sections 4 and 5, provided that you also convey the 36376 machine-readable Corresponding Source under the terms of this 36377 License, in one of these ways: 36378 36379 a. Convey the object code in, or embodied in, a physical product 36380 (including a physical distribution medium), accompanied by the 36381 Corresponding Source fixed on a durable physical medium 36382 customarily used for software interchange. 36383 36384 b. Convey the object code in, or embodied in, a physical product 36385 (including a physical distribution medium), accompanied by a 36386 written offer, valid for at least three years and valid for 36387 as long as you offer spare parts or customer support for that 36388 product model, to give anyone who possesses the object code 36389 either (1) a copy of the Corresponding Source for all the 36390 software in the product that is covered by this License, on a 36391 durable physical medium customarily used for software 36392 interchange, for a price no more than your reasonable cost of 36393 physically performing this conveying of source, or (2) access 36394 to copy the Corresponding Source from a network server at no 36395 charge. 36396 36397 c. Convey individual copies of the object code with a copy of 36398 the written offer to provide the Corresponding Source. This 36399 alternative is allowed only occasionally and noncommercially, 36400 and only if you received the object code with such an offer, 36401 in accord with subsection 6b. 36402 36403 d. Convey the object code by offering access from a designated 36404 place (gratis or for a charge), and offer equivalent access 36405 to the Corresponding Source in the same way through the same 36406 place at no further charge. You need not require recipients 36407 to copy the Corresponding Source along with the object code. 36408 If the place to copy the object code is a network server, the 36409 Corresponding Source may be on a different server (operated 36410 by you or a third party) that supports equivalent copying 36411 facilities, provided you maintain clear directions next to 36412 the object code saying where to find the Corresponding Source. 36413 Regardless of what server hosts the Corresponding Source, you 36414 remain obligated to ensure that it is available for as long 36415 as needed to satisfy these requirements. 36416 36417 e. Convey the object code using peer-to-peer transmission, 36418 provided you inform other peers where the object code and 36419 Corresponding Source of the work are being offered to the 36420 general public at no charge under subsection 6d. 36421 36422 36423 A separable portion of the object code, whose source code is 36424 excluded from the Corresponding Source as a System Library, need 36425 not be included in conveying the object code work. 36426 36427 A "User Product" is either (1) a "consumer product", which means 36428 any tangible personal property which is normally used for personal, 36429 family, or household purposes, or (2) anything designed or sold for 36430 incorporation into a dwelling. In determining whether a product 36431 is a consumer product, doubtful cases shall be resolved in favor of 36432 coverage. For a particular product received by a particular user, 36433 "normally used" refers to a typical or common use of that class of 36434 product, regardless of the status of the particular user or of the 36435 way in which the particular user actually uses, or expects or is 36436 expected to use, the product. A product is a consumer product 36437 regardless of whether the product has substantial commercial, 36438 industrial or non-consumer uses, unless such uses represent the 36439 only significant mode of use of the product. 36440 36441 "Installation Information" for a User Product means any methods, 36442 procedures, authorization keys, or other information required to 36443 install and execute modified versions of a covered work in that 36444 User Product from a modified version of its Corresponding Source. 36445 The information must suffice to ensure that the continued 36446 functioning of the modified object code is in no case prevented or 36447 interfered with solely because modification has been made. 36448 36449 If you convey an object code work under this section in, or with, 36450 or specifically for use in, a User Product, and the conveying 36451 occurs as part of a transaction in which the right of possession 36452 and use of the User Product is transferred to the recipient in 36453 perpetuity or for a fixed term (regardless of how the transaction 36454 is characterized), the Corresponding Source conveyed under this 36455 section must be accompanied by the Installation Information. But 36456 this requirement does not apply if neither you nor any third party 36457 retains the ability to install modified object code on the User 36458 Product (for example, the work has been installed in ROM). 36459 36460 The requirement to provide Installation Information does not 36461 include a requirement to continue to provide support service, 36462 warranty, or updates for a work that has been modified or 36463 installed by the recipient, or for the User Product in which it 36464 has been modified or installed. Access to a network may be denied 36465 when the modification itself materially and adversely affects the 36466 operation of the network or violates the rules and protocols for 36467 communication across the network. 36468 36469 Corresponding Source conveyed, and Installation Information 36470 provided, in accord with this section must be in a format that is 36471 publicly documented (and with an implementation available to the 36472 public in source code form), and must require no special password 36473 or key for unpacking, reading or copying. 36474 36475 7. Additional Terms. 36476 36477 "Additional permissions" are terms that supplement the terms of 36478 this License by making exceptions from one or more of its 36479 conditions. Additional permissions that are applicable to the 36480 entire Program shall be treated as though they were included in 36481 this License, to the extent that they are valid under applicable 36482 law. If additional permissions apply only to part of the Program, 36483 that part may be used separately under those permissions, but the 36484 entire Program remains governed by this License without regard to 36485 the additional permissions. 36486 36487 When you convey a copy of a covered work, you may at your option 36488 remove any additional permissions from that copy, or from any part 36489 of it. (Additional permissions may be written to require their own 36490 removal in certain cases when you modify the work.) You may place 36491 additional permissions on material, added by you to a covered work, 36492 for which you have or can give appropriate copyright permission. 36493 36494 Notwithstanding any other provision of this License, for material 36495 you add to a covered work, you may (if authorized by the copyright 36496 holders of that material) supplement the terms of this License 36497 with terms: 36498 36499 a. Disclaiming warranty or limiting liability differently from 36500 the terms of sections 15 and 16 of this License; or 36501 36502 b. Requiring preservation of specified reasonable legal notices 36503 or author attributions in that material or in the Appropriate 36504 Legal Notices displayed by works containing it; or 36505 36506 c. Prohibiting misrepresentation of the origin of that material, 36507 or requiring that modified versions of such material be 36508 marked in reasonable ways as different from the original 36509 version; or 36510 36511 d. Limiting the use for publicity purposes of names of licensors 36512 or authors of the material; or 36513 36514 e. Declining to grant rights under trademark law for use of some 36515 trade names, trademarks, or service marks; or 36516 36517 f. Requiring indemnification of licensors and authors of that 36518 material by anyone who conveys the material (or modified 36519 versions of it) with contractual assumptions of liability to 36520 the recipient, for any liability that these contractual 36521 assumptions directly impose on those licensors and authors. 36522 36523 All other non-permissive additional terms are considered "further 36524 restrictions" within the meaning of section 10. If the Program as 36525 you received it, or any part of it, contains a notice stating that 36526 it is governed by this License along with a term that is a further 36527 restriction, you may remove that term. If a license document 36528 contains a further restriction but permits relicensing or 36529 conveying under this License, you may add to a covered work 36530 material governed by the terms of that license document, provided 36531 that the further restriction does not survive such relicensing or 36532 conveying. 36533 36534 If you add terms to a covered work in accord with this section, you 36535 must place, in the relevant source files, a statement of the 36536 additional terms that apply to those files, or a notice indicating 36537 where to find the applicable terms. 36538 36539 Additional terms, permissive or non-permissive, may be stated in 36540 the form of a separately written license, or stated as exceptions; 36541 the above requirements apply either way. 36542 36543 8. Termination. 36544 36545 You may not propagate or modify a covered work except as expressly 36546 provided under this License. Any attempt otherwise to propagate or 36547 modify it is void, and will automatically terminate your rights 36548 under this License (including any patent licenses granted under 36549 the third paragraph of section 11). 36550 36551 However, if you cease all violation of this License, then your 36552 license from a particular copyright holder is reinstated (a) 36553 provisionally, unless and until the copyright holder explicitly 36554 and finally terminates your license, and (b) permanently, if the 36555 copyright holder fails to notify you of the violation by some 36556 reasonable means prior to 60 days after the cessation. 36557 36558 Moreover, your license from a particular copyright holder is 36559 reinstated permanently if the copyright holder notifies you of the 36560 violation by some reasonable means, this is the first time you have 36561 received notice of violation of this License (for any work) from 36562 that copyright holder, and you cure the violation prior to 30 days 36563 after your receipt of the notice. 36564 36565 Termination of your rights under this section does not terminate 36566 the licenses of parties who have received copies or rights from 36567 you under this License. If your rights have been terminated and 36568 not permanently reinstated, you do not qualify to receive new 36569 licenses for the same material under section 10. 36570 36571 9. Acceptance Not Required for Having Copies. 36572 36573 You are not required to accept this License in order to receive or 36574 run a copy of the Program. Ancillary propagation of a covered work 36575 occurring solely as a consequence of using peer-to-peer 36576 transmission to receive a copy likewise does not require 36577 acceptance. However, nothing other than this License grants you 36578 permission to propagate or modify any covered work. These actions 36579 infringe copyright if you do not accept this License. Therefore, 36580 by modifying or propagating a covered work, you indicate your 36581 acceptance of this License to do so. 36582 36583 10. Automatic Licensing of Downstream Recipients. 36584 36585 Each time you convey a covered work, the recipient automatically 36586 receives a license from the original licensors, to run, modify and 36587 propagate that work, subject to this License. You are not 36588 responsible for enforcing compliance by third parties with this 36589 License. 36590 36591 An "entity transaction" is a transaction transferring control of an 36592 organization, or substantially all assets of one, or subdividing an 36593 organization, or merging organizations. If propagation of a 36594 covered work results from an entity transaction, each party to that 36595 transaction who receives a copy of the work also receives whatever 36596 licenses to the work the party's predecessor in interest had or 36597 could give under the previous paragraph, plus a right to 36598 possession of the Corresponding Source of the work from the 36599 predecessor in interest, if the predecessor has it or can get it 36600 with reasonable efforts. 36601 36602 You may not impose any further restrictions on the exercise of the 36603 rights granted or affirmed under this License. For example, you 36604 may not impose a license fee, royalty, or other charge for 36605 exercise of rights granted under this License, and you may not 36606 initiate litigation (including a cross-claim or counterclaim in a 36607 lawsuit) alleging that any patent claim is infringed by making, 36608 using, selling, offering for sale, or importing the Program or any 36609 portion of it. 36610 36611 11. Patents. 36612 36613 A "contributor" is a copyright holder who authorizes use under this 36614 License of the Program or a work on which the Program is based. 36615 The work thus licensed is called the contributor's "contributor 36616 version". 36617 36618 A contributor's "essential patent claims" are all patent claims 36619 owned or controlled by the contributor, whether already acquired or 36620 hereafter acquired, that would be infringed by some manner, 36621 permitted by this License, of making, using, or selling its 36622 contributor version, but do not include claims that would be 36623 infringed only as a consequence of further modification of the 36624 contributor version. For purposes of this definition, "control" 36625 includes the right to grant patent sublicenses in a manner 36626 consistent with the requirements of this License. 36627 36628 Each contributor grants you a non-exclusive, worldwide, 36629 royalty-free patent license under the contributor's essential 36630 patent claims, to make, use, sell, offer for sale, import and 36631 otherwise run, modify and propagate the contents of its 36632 contributor version. 36633 36634 In the following three paragraphs, a "patent license" is any 36635 express agreement or commitment, however denominated, not to 36636 enforce a patent (such as an express permission to practice a 36637 patent or covenant not to sue for patent infringement). To 36638 "grant" such a patent license to a party means to make such an 36639 agreement or commitment not to enforce a patent against the party. 36640 36641 If you convey a covered work, knowingly relying on a patent 36642 license, and the Corresponding Source of the work is not available 36643 for anyone to copy, free of charge and under the terms of this 36644 License, through a publicly available network server or other 36645 readily accessible means, then you must either (1) cause the 36646 Corresponding Source to be so available, or (2) arrange to deprive 36647 yourself of the benefit of the patent license for this particular 36648 work, or (3) arrange, in a manner consistent with the requirements 36649 of this License, to extend the patent license to downstream 36650 recipients. "Knowingly relying" means you have actual knowledge 36651 that, but for the patent license, your conveying the covered work 36652 in a country, or your recipient's use of the covered work in a 36653 country, would infringe one or more identifiable patents in that 36654 country that you have reason to believe are valid. 36655 36656 If, pursuant to or in connection with a single transaction or 36657 arrangement, you convey, or propagate by procuring conveyance of, a 36658 covered work, and grant a patent license to some of the parties 36659 receiving the covered work authorizing them to use, propagate, 36660 modify or convey a specific copy of the covered work, then the 36661 patent license you grant is automatically extended to all 36662 recipients of the covered work and works based on it. 36663 36664 A patent license is "discriminatory" if it does not include within 36665 the scope of its coverage, prohibits the exercise of, or is 36666 conditioned on the non-exercise of one or more of the rights that 36667 are specifically granted under this License. You may not convey a 36668 covered work if you are a party to an arrangement with a third 36669 party that is in the business of distributing software, under 36670 which you make payment to the third party based on the extent of 36671 your activity of conveying the work, and under which the third 36672 party grants, to any of the parties who would receive the covered 36673 work from you, a discriminatory patent license (a) in connection 36674 with copies of the covered work conveyed by you (or copies made 36675 from those copies), or (b) primarily for and in connection with 36676 specific products or compilations that contain the covered work, 36677 unless you entered into that arrangement, or that patent license 36678 was granted, prior to 28 March 2007. 36679 36680 Nothing in this License shall be construed as excluding or limiting 36681 any implied license or other defenses to infringement that may 36682 otherwise be available to you under applicable patent law. 36683 36684 12. No Surrender of Others' Freedom. 36685 36686 If conditions are imposed on you (whether by court order, 36687 agreement or otherwise) that contradict the conditions of this 36688 License, they do not excuse you from the conditions of this 36689 License. If you cannot convey a covered work so as to satisfy 36690 simultaneously your obligations under this License and any other 36691 pertinent obligations, then as a consequence you may not convey it 36692 at all. For example, if you agree to terms that obligate you to 36693 collect a royalty for further conveying from those to whom you 36694 convey the Program, the only way you could satisfy both those 36695 terms and this License would be to refrain entirely from conveying 36696 the Program. 36697 36698 13. Use with the GNU Affero General Public License. 36699 36700 Notwithstanding any other provision of this License, you have 36701 permission to link or combine any covered work with a work licensed 36702 under version 3 of the GNU Affero General Public License into a 36703 single combined work, and to convey the resulting work. The terms 36704 of this License will continue to apply to the part which is the 36705 covered work, but the special requirements of the GNU Affero 36706 General Public License, section 13, concerning interaction through 36707 a network will apply to the combination as such. 36708 36709 14. Revised Versions of this License. 36710 36711 The Free Software Foundation may publish revised and/or new 36712 versions of the GNU General Public License from time to time. 36713 Such new versions will be similar in spirit to the present 36714 version, but may differ in detail to address new problems or 36715 concerns. 36716 36717 Each version is given a distinguishing version number. If the 36718 Program specifies that a certain numbered version of the GNU 36719 General Public License "or any later version" applies to it, you 36720 have the option of following the terms and conditions either of 36721 that numbered version or of any later version published by the 36722 Free Software Foundation. If the Program does not specify a 36723 version number of the GNU General Public License, you may choose 36724 any version ever published by the Free Software Foundation. 36725 36726 If the Program specifies that a proxy can decide which future 36727 versions of the GNU General Public License can be used, that 36728 proxy's public statement of acceptance of a version permanently 36729 authorizes you to choose that version for the Program. 36730 36731 Later license versions may give you additional or different 36732 permissions. However, no additional obligations are imposed on any 36733 author or copyright holder as a result of your choosing to follow a 36734 later version. 36735 36736 15. Disclaimer of Warranty. 36737 36738 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 36739 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 36740 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 36741 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 36742 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 36743 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 36744 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 36745 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 36746 NECESSARY SERVICING, REPAIR OR CORRECTION. 36747 36748 16. Limitation of Liability. 36749 36750 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 36751 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 36752 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 36753 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 36754 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 36755 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 36756 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 36757 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 36758 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 36759 THE POSSIBILITY OF SUCH DAMAGES. 36760 36761 17. Interpretation of Sections 15 and 16. 36762 36763 If the disclaimer of warranty and limitation of liability provided 36764 above cannot be given local legal effect according to their terms, 36765 reviewing courts shall apply local law that most closely 36766 approximates an absolute waiver of all civil liability in 36767 connection with the Program, unless a warranty or assumption of 36768 liability accompanies a copy of the Program in return for a fee. 36769 36770 36771 END OF TERMS AND CONDITIONS 36772 =========================== 36773 36774 How to Apply These Terms to Your New Programs 36775 ============================================= 36776 36777 If you develop a new program, and you want it to be of the greatest 36778 possible use to the public, the best way to achieve this is to make it 36779 free software which everyone can redistribute and change under these 36780 terms. 36781 36782 To do so, attach the following notices to the program. It is safest 36783 to attach them to the start of each source file to most effectively 36784 state the exclusion of warranty; and each file should have at least the 36785 "copyright" line and a pointer to where the full notice is found. 36786 36787 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 36788 Copyright (C) YEAR NAME OF AUTHOR 36789 36790 This program is free software: you can redistribute it and/or modify 36791 it under the terms of the GNU General Public License as published by 36792 the Free Software Foundation, either version 3 of the License, or (at 36793 your option) any later version. 36794 36795 This program is distributed in the hope that it will be useful, but 36796 WITHOUT ANY WARRANTY; without even the implied warranty of 36797 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 36798 General Public License for more details. 36799 36800 You should have received a copy of the GNU General Public License 36801 along with this program. If not, see `http://www.gnu.org/licenses/'. 36802 36803 Also add information on how to contact you by electronic and paper 36804 mail. 36805 36806 If the program does terminal interaction, make it output a short 36807 notice like this when it starts in an interactive mode: 36808 36809 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 36810 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 36811 This is free software, and you are welcome to redistribute it 36812 under certain conditions; type `show c' for details. 36813 36814 The hypothetical commands `show w' and `show c' should show the 36815 appropriate parts of the General Public License. Of course, your 36816 program's commands might be different; for a GUI interface, you would 36817 use an "about box". 36818 36819 You should also get your employer (if you work as a programmer) or 36820 school, if any, to sign a "copyright disclaimer" for the program, if 36821 necessary. For more information on this, and how to apply and follow 36822 the GNU GPL, see `http://www.gnu.org/licenses/'. 36823 36824 The GNU General Public License does not permit incorporating your 36825 program into proprietary programs. If your program is a subroutine 36826 library, you may consider it more useful to permit linking proprietary 36827 applications with the library. If this is what you want to do, use the 36828 GNU Lesser General Public License instead of this License. But first, 36829 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 36830 36831 36832 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 36833 36834 GNU Free Documentation License 36835 ****************************** 36836 36837 Version 1.2, November 2002 36838 36839 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 36840 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 36841 36842 Everyone is permitted to copy and distribute verbatim copies 36843 of this license document, but changing it is not allowed. 36844 36845 0. PREAMBLE 36846 36847 The purpose of this License is to make a manual, textbook, or other 36848 functional and useful document "free" in the sense of freedom: to 36849 assure everyone the effective freedom to copy and redistribute it, 36850 with or without modifying it, either commercially or 36851 noncommercially. Secondarily, this License preserves for the 36852 author and publisher a way to get credit for their work, while not 36853 being considered responsible for modifications made by others. 36854 36855 This License is a kind of "copyleft", which means that derivative 36856 works of the document must themselves be free in the same sense. 36857 It complements the GNU General Public License, which is a copyleft 36858 license designed for free software. 36859 36860 We have designed this License in order to use it for manuals for 36861 free software, because free software needs free documentation: a 36862 free program should come with manuals providing the same freedoms 36863 that the software does. But this License is not limited to 36864 software manuals; it can be used for any textual work, regardless 36865 of subject matter or whether it is published as a printed book. 36866 We recommend this License principally for works whose purpose is 36867 instruction or reference. 36868 36869 1. APPLICABILITY AND DEFINITIONS 36870 36871 This License applies to any manual or other work, in any medium, 36872 that contains a notice placed by the copyright holder saying it 36873 can be distributed under the terms of this License. Such a notice 36874 grants a world-wide, royalty-free license, unlimited in duration, 36875 to use that work under the conditions stated herein. The 36876 "Document", below, refers to any such manual or work. Any member 36877 of the public is a licensee, and is addressed as "you". You 36878 accept the license if you copy, modify or distribute the work in a 36879 way requiring permission under copyright law. 36880 36881 A "Modified Version" of the Document means any work containing the 36882 Document or a portion of it, either copied verbatim, or with 36883 modifications and/or translated into another language. 36884 36885 A "Secondary Section" is a named appendix or a front-matter section 36886 of the Document that deals exclusively with the relationship of the 36887 publishers or authors of the Document to the Document's overall 36888 subject (or to related matters) and contains nothing that could 36889 fall directly within that overall subject. (Thus, if the Document 36890 is in part a textbook of mathematics, a Secondary Section may not 36891 explain any mathematics.) The relationship could be a matter of 36892 historical connection with the subject or with related matters, or 36893 of legal, commercial, philosophical, ethical or political position 36894 regarding them. 36895 36896 The "Invariant Sections" are certain Secondary Sections whose 36897 titles are designated, as being those of Invariant Sections, in 36898 the notice that says that the Document is released under this 36899 License. If a section does not fit the above definition of 36900 Secondary then it is not allowed to be designated as Invariant. 36901 The Document may contain zero Invariant Sections. If the Document 36902 does not identify any Invariant Sections then there are none. 36903 36904 The "Cover Texts" are certain short passages of text that are 36905 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 36906 that says that the Document is released under this License. A 36907 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 36908 be at most 25 words. 36909 36910 A "Transparent" copy of the Document means a machine-readable copy, 36911 represented in a format whose specification is available to the 36912 general public, that is suitable for revising the document 36913 straightforwardly with generic text editors or (for images 36914 composed of pixels) generic paint programs or (for drawings) some 36915 widely available drawing editor, and that is suitable for input to 36916 text formatters or for automatic translation to a variety of 36917 formats suitable for input to text formatters. A copy made in an 36918 otherwise Transparent file format whose markup, or absence of 36919 markup, has been arranged to thwart or discourage subsequent 36920 modification by readers is not Transparent. An image format is 36921 not Transparent if used for any substantial amount of text. A 36922 copy that is not "Transparent" is called "Opaque". 36923 36924 Examples of suitable formats for Transparent copies include plain 36925 ASCII without markup, Texinfo input format, LaTeX input format, 36926 SGML or XML using a publicly available DTD, and 36927 standard-conforming simple HTML, PostScript or PDF designed for 36928 human modification. Examples of transparent image formats include 36929 PNG, XCF and JPG. Opaque formats include proprietary formats that 36930 can be read and edited only by proprietary word processors, SGML or 36931 XML for which the DTD and/or processing tools are not generally 36932 available, and the machine-generated HTML, PostScript or PDF 36933 produced by some word processors for output purposes only. 36934 36935 The "Title Page" means, for a printed book, the title page itself, 36936 plus such following pages as are needed to hold, legibly, the 36937 material this License requires to appear in the title page. For 36938 works in formats which do not have any title page as such, "Title 36939 Page" means the text near the most prominent appearance of the 36940 work's title, preceding the beginning of the body of the text. 36941 36942 A section "Entitled XYZ" means a named subunit of the Document 36943 whose title either is precisely XYZ or contains XYZ in parentheses 36944 following text that translates XYZ in another language. (Here XYZ 36945 stands for a specific section name mentioned below, such as 36946 "Acknowledgements", "Dedications", "Endorsements", or "History".) 36947 To "Preserve the Title" of such a section when you modify the 36948 Document means that it remains a section "Entitled XYZ" according 36949 to this definition. 36950 36951 The Document may include Warranty Disclaimers next to the notice 36952 which states that this License applies to the Document. These 36953 Warranty Disclaimers are considered to be included by reference in 36954 this License, but only as regards disclaiming warranties: any other 36955 implication that these Warranty Disclaimers may have is void and 36956 has no effect on the meaning of this License. 36957 36958 2. VERBATIM COPYING 36959 36960 You may copy and distribute the Document in any medium, either 36961 commercially or noncommercially, provided that this License, the 36962 copyright notices, and the license notice saying this License 36963 applies to the Document are reproduced in all copies, and that you 36964 add no other conditions whatsoever to those of this License. You 36965 may not use technical measures to obstruct or control the reading 36966 or further copying of the copies you make or distribute. However, 36967 you may accept compensation in exchange for copies. If you 36968 distribute a large enough number of copies you must also follow 36969 the conditions in section 3. 36970 36971 You may also lend copies, under the same conditions stated above, 36972 and you may publicly display copies. 36973 36974 3. COPYING IN QUANTITY 36975 36976 If you publish printed copies (or copies in media that commonly 36977 have printed covers) of the Document, numbering more than 100, and 36978 the Document's license notice requires Cover Texts, you must 36979 enclose the copies in covers that carry, clearly and legibly, all 36980 these Cover Texts: Front-Cover Texts on the front cover, and 36981 Back-Cover Texts on the back cover. Both covers must also clearly 36982 and legibly identify you as the publisher of these copies. The 36983 front cover must present the full title with all words of the 36984 title equally prominent and visible. You may add other material 36985 on the covers in addition. Copying with changes limited to the 36986 covers, as long as they preserve the title of the Document and 36987 satisfy these conditions, can be treated as verbatim copying in 36988 other respects. 36989 36990 If the required texts for either cover are too voluminous to fit 36991 legibly, you should put the first ones listed (as many as fit 36992 reasonably) on the actual cover, and continue the rest onto 36993 adjacent pages. 36994 36995 If you publish or distribute Opaque copies of the Document 36996 numbering more than 100, you must either include a 36997 machine-readable Transparent copy along with each Opaque copy, or 36998 state in or with each Opaque copy a computer-network location from 36999 which the general network-using public has access to download 37000 using public-standard network protocols a complete Transparent 37001 copy of the Document, free of added material. If you use the 37002 latter option, you must take reasonably prudent steps, when you 37003 begin distribution of Opaque copies in quantity, to ensure that 37004 this Transparent copy will remain thus accessible at the stated 37005 location until at least one year after the last time you 37006 distribute an Opaque copy (directly or through your agents or 37007 retailers) of that edition to the public. 37008 37009 It is requested, but not required, that you contact the authors of 37010 the Document well before redistributing any large number of 37011 copies, to give them a chance to provide you with an updated 37012 version of the Document. 37013 37014 4. MODIFICATIONS 37015 37016 You may copy and distribute a Modified Version of the Document 37017 under the conditions of sections 2 and 3 above, provided that you 37018 release the Modified Version under precisely this License, with 37019 the Modified Version filling the role of the Document, thus 37020 licensing distribution and modification of the Modified Version to 37021 whoever possesses a copy of it. In addition, you must do these 37022 things in the Modified Version: 37023 37024 A. Use in the Title Page (and on the covers, if any) a title 37025 distinct from that of the Document, and from those of 37026 previous versions (which should, if there were any, be listed 37027 in the History section of the Document). You may use the 37028 same title as a previous version if the original publisher of 37029 that version gives permission. 37030 37031 B. List on the Title Page, as authors, one or more persons or 37032 entities responsible for authorship of the modifications in 37033 the Modified Version, together with at least five of the 37034 principal authors of the Document (all of its principal 37035 authors, if it has fewer than five), unless they release you 37036 from this requirement. 37037 37038 C. State on the Title page the name of the publisher of the 37039 Modified Version, as the publisher. 37040 37041 D. Preserve all the copyright notices of the Document. 37042 37043 E. Add an appropriate copyright notice for your modifications 37044 adjacent to the other copyright notices. 37045 37046 F. Include, immediately after the copyright notices, a license 37047 notice giving the public permission to use the Modified 37048 Version under the terms of this License, in the form shown in 37049 the Addendum below. 37050 37051 G. Preserve in that license notice the full lists of Invariant 37052 Sections and required Cover Texts given in the Document's 37053 license notice. 37054 37055 H. Include an unaltered copy of this License. 37056 37057 I. Preserve the section Entitled "History", Preserve its Title, 37058 and add to it an item stating at least the title, year, new 37059 authors, and publisher of the Modified Version as given on 37060 the Title Page. If there is no section Entitled "History" in 37061 the Document, create one stating the title, year, authors, 37062 and publisher of the Document as given on its Title Page, 37063 then add an item describing the Modified Version as stated in 37064 the previous sentence. 37065 37066 J. Preserve the network location, if any, given in the Document 37067 for public access to a Transparent copy of the Document, and 37068 likewise the network locations given in the Document for 37069 previous versions it was based on. These may be placed in 37070 the "History" section. You may omit a network location for a 37071 work that was published at least four years before the 37072 Document itself, or if the original publisher of the version 37073 it refers to gives permission. 37074 37075 K. For any section Entitled "Acknowledgements" or "Dedications", 37076 Preserve the Title of the section, and preserve in the 37077 section all the substance and tone of each of the contributor 37078 acknowledgements and/or dedications given therein. 37079 37080 L. Preserve all the Invariant Sections of the Document, 37081 unaltered in their text and in their titles. Section numbers 37082 or the equivalent are not considered part of the section 37083 titles. 37084 37085 M. Delete any section Entitled "Endorsements". Such a section 37086 may not be included in the Modified Version. 37087 37088 N. Do not retitle any existing section to be Entitled 37089 "Endorsements" or to conflict in title with any Invariant 37090 Section. 37091 37092 O. Preserve any Warranty Disclaimers. 37093 37094 If the Modified Version includes new front-matter sections or 37095 appendices that qualify as Secondary Sections and contain no 37096 material copied from the Document, you may at your option 37097 designate some or all of these sections as invariant. To do this, 37098 add their titles to the list of Invariant Sections in the Modified 37099 Version's license notice. These titles must be distinct from any 37100 other section titles. 37101 37102 You may add a section Entitled "Endorsements", provided it contains 37103 nothing but endorsements of your Modified Version by various 37104 parties--for example, statements of peer review or that the text 37105 has been approved by an organization as the authoritative 37106 definition of a standard. 37107 37108 You may add a passage of up to five words as a Front-Cover Text, 37109 and a passage of up to 25 words as a Back-Cover Text, to the end 37110 of the list of Cover Texts in the Modified Version. Only one 37111 passage of Front-Cover Text and one of Back-Cover Text may be 37112 added by (or through arrangements made by) any one entity. If the 37113 Document already includes a cover text for the same cover, 37114 previously added by you or by arrangement made by the same entity 37115 you are acting on behalf of, you may not add another; but you may 37116 replace the old one, on explicit permission from the previous 37117 publisher that added the old one. 37118 37119 The author(s) and publisher(s) of the Document do not by this 37120 License give permission to use their names for publicity for or to 37121 assert or imply endorsement of any Modified Version. 37122 37123 5. COMBINING DOCUMENTS 37124 37125 You may combine the Document with other documents released under 37126 this License, under the terms defined in section 4 above for 37127 modified versions, provided that you include in the combination 37128 all of the Invariant Sections of all of the original documents, 37129 unmodified, and list them all as Invariant Sections of your 37130 combined work in its license notice, and that you preserve all 37131 their Warranty Disclaimers. 37132 37133 The combined work need only contain one copy of this License, and 37134 multiple identical Invariant Sections may be replaced with a single 37135 copy. If there are multiple Invariant Sections with the same name 37136 but different contents, make the title of each such section unique 37137 by adding at the end of it, in parentheses, the name of the 37138 original author or publisher of that section if known, or else a 37139 unique number. Make the same adjustment to the section titles in 37140 the list of Invariant Sections in the license notice of the 37141 combined work. 37142 37143 In the combination, you must combine any sections Entitled 37144 "History" in the various original documents, forming one section 37145 Entitled "History"; likewise combine any sections Entitled 37146 "Acknowledgements", and any sections Entitled "Dedications". You 37147 must delete all sections Entitled "Endorsements." 37148 37149 6. COLLECTIONS OF DOCUMENTS 37150 37151 You may make a collection consisting of the Document and other 37152 documents released under this License, and replace the individual 37153 copies of this License in the various documents with a single copy 37154 that is included in the collection, provided that you follow the 37155 rules of this License for verbatim copying of each of the 37156 documents in all other respects. 37157 37158 You may extract a single document from such a collection, and 37159 distribute it individually under this License, provided you insert 37160 a copy of this License into the extracted document, and follow 37161 this License in all other respects regarding verbatim copying of 37162 that document. 37163 37164 7. AGGREGATION WITH INDEPENDENT WORKS 37165 37166 A compilation of the Document or its derivatives with other 37167 separate and independent documents or works, in or on a volume of 37168 a storage or distribution medium, is called an "aggregate" if the 37169 copyright resulting from the compilation is not used to limit the 37170 legal rights of the compilation's users beyond what the individual 37171 works permit. When the Document is included in an aggregate, this 37172 License does not apply to the other works in the aggregate which 37173 are not themselves derivative works of the Document. 37174 37175 If the Cover Text requirement of section 3 is applicable to these 37176 copies of the Document, then if the Document is less than one half 37177 of the entire aggregate, the Document's Cover Texts may be placed 37178 on covers that bracket the Document within the aggregate, or the 37179 electronic equivalent of covers if the Document is in electronic 37180 form. Otherwise they must appear on printed covers that bracket 37181 the whole aggregate. 37182 37183 8. TRANSLATION 37184 37185 Translation is considered a kind of modification, so you may 37186 distribute translations of the Document under the terms of section 37187 4. Replacing Invariant Sections with translations requires special 37188 permission from their copyright holders, but you may include 37189 translations of some or all Invariant Sections in addition to the 37190 original versions of these Invariant Sections. You may include a 37191 translation of this License, and all the license notices in the 37192 Document, and any Warranty Disclaimers, provided that you also 37193 include the original English version of this License and the 37194 original versions of those notices and disclaimers. In case of a 37195 disagreement between the translation and the original version of 37196 this License or a notice or disclaimer, the original version will 37197 prevail. 37198 37199 If a section in the Document is Entitled "Acknowledgements", 37200 "Dedications", or "History", the requirement (section 4) to 37201 Preserve its Title (section 1) will typically require changing the 37202 actual title. 37203 37204 9. TERMINATION 37205 37206 You may not copy, modify, sublicense, or distribute the Document 37207 except as expressly provided for under this License. Any other 37208 attempt to copy, modify, sublicense or distribute the Document is 37209 void, and will automatically terminate your rights under this 37210 License. However, parties who have received copies, or rights, 37211 from you under this License will not have their licenses 37212 terminated so long as such parties remain in full compliance. 37213 37214 10. FUTURE REVISIONS OF THIS LICENSE 37215 37216 The Free Software Foundation may publish new, revised versions of 37217 the GNU Free Documentation License from time to time. Such new 37218 versions will be similar in spirit to the present version, but may 37219 differ in detail to address new problems or concerns. See 37220 `http://www.gnu.org/copyleft/'. 37221 37222 Each version of the License is given a distinguishing version 37223 number. If the Document specifies that a particular numbered 37224 version of this License "or any later version" applies to it, you 37225 have the option of following the terms and conditions either of 37226 that specified version or of any later version that has been 37227 published (not as a draft) by the Free Software Foundation. If 37228 the Document does not specify a version number of this License, 37229 you may choose any version ever published (not as a draft) by the 37230 Free Software Foundation. 37231 37232 ADDENDUM: How to use this License for your documents 37233 ==================================================== 37234 37235 To use this License in a document you have written, include a copy of 37236 the License in the document and put the following copyright and license 37237 notices just after the title page: 37238 37239 Copyright (C) YEAR YOUR NAME. 37240 Permission is granted to copy, distribute and/or modify this document 37241 under the terms of the GNU Free Documentation License, Version 1.2 37242 or any later version published by the Free Software Foundation; 37243 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 37244 Texts. A copy of the license is included in the section entitled ``GNU 37245 Free Documentation License''. 37246 37247 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 37248 replace the "with...Texts." line with this: 37249 37250 with the Invariant Sections being LIST THEIR TITLES, with 37251 the Front-Cover Texts being LIST, and with the Back-Cover Texts 37252 being LIST. 37253 37254 If you have Invariant Sections without Cover Texts, or some other 37255 combination of the three, merge those two alternatives to suit the 37256 situation. 37257 37258 If your document contains nontrivial examples of program code, we 37259 recommend releasing these examples in parallel under your choice of 37260 free software license, such as the GNU General Public License, to 37261 permit their use in free software. 37262 37263 37264 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 37265 37266 Contributors to GCC 37267 ******************* 37268 37269 The GCC project would like to thank its many contributors. Without 37270 them the project would not have been nearly as successful as it has 37271 been. Any omissions in this list are accidental. Feel free to contact 37272 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 37273 some of your contributions are not listed. Please keep this list in 37274 alphabetical order. 37275 37276 * Analog Devices helped implement the support for complex data types 37277 and iterators. 37278 37279 * John David Anglin for threading-related fixes and improvements to 37280 libstdc++-v3, and the HP-UX port. 37281 37282 * James van Artsdalen wrote the code that makes efficient use of the 37283 Intel 80387 register stack. 37284 37285 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 37286 Series port. 37287 37288 * Alasdair Baird for various bug fixes. 37289 37290 * Giovanni Bajo for analyzing lots of complicated C++ problem 37291 reports. 37292 37293 * Peter Barada for his work to improve code generation for new 37294 ColdFire cores. 37295 37296 * Gerald Baumgartner added the signature extension to the C++ front 37297 end. 37298 37299 * Godmar Back for his Java improvements and encouragement. 37300 37301 * Scott Bambrough for help porting the Java compiler. 37302 37303 * Wolfgang Bangerth for processing tons of bug reports. 37304 37305 * Jon Beniston for his Microsoft Windows port of Java. 37306 37307 * Daniel Berlin for better DWARF2 support, faster/better 37308 optimizations, improved alias analysis, plus migrating GCC to 37309 Bugzilla. 37310 37311 * Geoff Berry for his Java object serialization work and various 37312 patches. 37313 37314 * Uros Bizjak for the implementation of x87 math built-in functions 37315 and for various middle end and i386 back end improvements and bug 37316 fixes. 37317 37318 * Eric Blake for helping to make GCJ and libgcj conform to the 37319 specifications. 37320 37321 * Janne Blomqvist for contributions to GNU Fortran. 37322 37323 * Segher Boessenkool for various fixes. 37324 37325 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 37326 other Java work. 37327 37328 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 37329 miscellaneous clean-ups. 37330 37331 * Steven Bosscher for integrating the GNU Fortran front end into GCC 37332 and for contributing to the tree-ssa branch. 37333 37334 * Eric Botcazou for fixing middle- and backend bugs left and right. 37335 37336 * Per Bothner for his direction via the steering committee and 37337 various improvements to the infrastructure for supporting new 37338 languages. Chill front end implementation. Initial 37339 implementations of cpplib, fix-header, config.guess, libio, and 37340 past C++ library (libg++) maintainer. Dreaming up, designing and 37341 implementing much of GCJ. 37342 37343 * Devon Bowen helped port GCC to the Tahoe. 37344 37345 * Don Bowman for mips-vxworks contributions. 37346 37347 * Dave Brolley for work on cpplib and Chill. 37348 37349 * Paul Brook for work on the ARM architecture and maintaining GNU 37350 Fortran. 37351 37352 * Robert Brown implemented the support for Encore 32000 systems. 37353 37354 * Christian Bruel for improvements to local store elimination. 37355 37356 * Herman A.J. ten Brugge for various fixes. 37357 37358 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 37359 FAQ. 37360 37361 * Joe Buck for his direction via the steering committee. 37362 37363 * Craig Burley for leadership of the G77 Fortran effort. 37364 37365 * Stephan Buys for contributing Doxygen notes for libstdc++. 37366 37367 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 37368 to the C++ strings, streambufs and formatted I/O, hard detective 37369 work on the frustrating localization issues, and keeping up with 37370 the problem reports. 37371 37372 * John Carr for his alias work, SPARC hacking, infrastructure 37373 improvements, previous contributions to the steering committee, 37374 loop optimizations, etc. 37375 37376 * Stephane Carrez for 68HC11 and 68HC12 ports. 37377 37378 * Steve Chamberlain for support for the Renesas SH and H8 processors 37379 and the PicoJava processor, and for GCJ config fixes. 37380 37381 * Glenn Chambers for help with the GCJ FAQ. 37382 37383 * John-Marc Chandonia for various libgcj patches. 37384 37385 * Scott Christley for his Objective-C contributions. 37386 37387 * Eric Christopher for his Java porting help and clean-ups. 37388 37389 * Branko Cibej for more warning contributions. 37390 37391 * The GNU Classpath project for all of their merged runtime code. 37392 37393 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and 37394 other random hacking. 37395 37396 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 37397 37398 * R. Kelley Cook for making GCC buildable from a read-only directory 37399 as well as other miscellaneous build process and documentation 37400 clean-ups. 37401 37402 * Ralf Corsepius for SH testing and minor bug fixing. 37403 37404 * Stan Cox for care and feeding of the x86 port and lots of behind 37405 the scenes hacking. 37406 37407 * Alex Crain provided changes for the 3b1. 37408 37409 * Ian Dall for major improvements to the NS32k port. 37410 37411 * Paul Dale for his work to add uClinux platform support to the m68k 37412 backend. 37413 37414 * Dario Dariol contributed the four varieties of sample programs 37415 that print a copy of their source. 37416 37417 * Russell Davidson for fstream and stringstream fixes in libstdc++. 37418 37419 * Bud Davis for work on the G77 and GNU Fortran compilers. 37420 37421 * Mo DeJong for GCJ and libgcj bug fixes. 37422 37423 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 37424 various bug fixes, and the M32C port. 37425 37426 * Arnaud Desitter for helping to debug GNU Fortran. 37427 37428 * Gabriel Dos Reis for contributions to G++, contributions and 37429 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 37430 including `valarray<>', `complex<>', maintaining the numerics 37431 library (including that pesky `<limits>' :-) and keeping 37432 up-to-date anything to do with numbers. 37433 37434 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 37435 ISO C99 support, CFG dumping support, etc., plus support of the 37436 C++ runtime libraries including for all kinds of C interface 37437 issues, contributing and maintaining `complex<>', sanity checking 37438 and disbursement, configuration architecture, libio maintenance, 37439 and early math work. 37440 37441 * Zdenek Dvorak for a new loop unroller and various fixes. 37442 37443 * Richard Earnshaw for his ongoing work with the ARM. 37444 37445 * David Edelsohn for his direction via the steering committee, 37446 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 37447 loop changes, doing the entire AIX port of libstdc++ with his bare 37448 hands, and for ensuring GCC properly keeps working on AIX. 37449 37450 * Kevin Ediger for the floating point formatting of num_put::do_put 37451 in libstdc++. 37452 37453 * Phil Edwards for libstdc++ work including configuration hackery, 37454 documentation maintainer, chief breaker of the web pages, the 37455 occasional iostream bug fix, and work on shared library symbol 37456 versioning. 37457 37458 * Paul Eggert for random hacking all over GCC. 37459 37460 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 37461 configuration support for locales and fstream-related fixes. 37462 37463 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 37464 iostreams. 37465 37466 * Christian Ehrhardt for dealing with bug reports. 37467 37468 * Ben Elliston for his work to move the Objective-C runtime into its 37469 own subdirectory and for his work on autoconf. 37470 37471 * Revital Eres for work on the PowerPC 750CL port. 37472 37473 * Marc Espie for OpenBSD support. 37474 37475 * Doug Evans for much of the global optimization framework, arc, 37476 m32r, and SPARC work. 37477 37478 * Christopher Faylor for his work on the Cygwin port and for caring 37479 and feeding the gcc.gnu.org box and saving its users tons of spam. 37480 37481 * Fred Fish for BeOS support and Ada fixes. 37482 37483 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 37484 37485 * Peter Gerwinski for various bug fixes and the Pascal front end. 37486 37487 * Kaveh R. Ghazi for his direction via the steering committee, 37488 amazing work to make `-W -Wall -W* -Werror' useful, and 37489 continuously testing GCC on a plethora of platforms. Kaveh 37490 extends his gratitude to the CAIP Center at Rutgers University for 37491 providing him with computing resources to work on Free Software 37492 since the late 1980s. 37493 37494 * John Gilmore for a donation to the FSF earmarked improving GNU 37495 Java. 37496 37497 * Judy Goldberg for c++ contributions. 37498 37499 * Torbjorn Granlund for various fixes and the c-torture testsuite, 37500 multiply- and divide-by-constant optimization, improved long long 37501 support, improved leaf function register allocation, and his 37502 direction via the steering committee. 37503 37504 * Anthony Green for his `-Os' contributions and Java front end work. 37505 37506 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 37507 Java code. 37508 37509 * Michael K. Gschwind contributed the port to the PDP-11. 37510 37511 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 37512 the support for Dwarf symbolic debugging information, and much of 37513 the support for System V Release 4. He has also worked heavily on 37514 the Intel 386 and 860 support. 37515 37516 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 37517 GCSE. 37518 37519 * Bruno Haible for improvements in the runtime overhead for EH, new 37520 warnings and assorted bug fixes. 37521 37522 * Andrew Haley for his amazing Java compiler and library efforts. 37523 37524 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 37525 series 300. 37526 37527 * Michael Hayes for various thankless work he's done trying to get 37528 the c30/c40 ports functional. Lots of loop and unroll 37529 improvements and fixes. 37530 37531 * Dara Hazeghi for wading through myriads of target-specific bug 37532 reports. 37533 37534 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 37535 37536 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 37537 work, loop opts, and generally fixing lots of old problems we've 37538 ignored for years, flow rewrite and lots of further stuff, 37539 including reviewing tons of patches. 37540 37541 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 37542 various fixes. 37543 37544 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 37545 contributed the support for the Sony NEWS machine. 37546 37547 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 37548 various fixes. 37549 37550 * Katherine Holcomb for work on GNU Fortran. 37551 37552 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 37553 of testing and bug fixing, particularly of GCC configury code. 37554 37555 * Steve Holmgren for MachTen patches. 37556 37557 * Jan Hubicka for his x86 port improvements. 37558 37559 * Falk Hueffner for working on C and optimization bug reports. 37560 37561 * Bernardo Innocenti for his m68k work, including merging of 37562 ColdFire improvements and uClinux support. 37563 37564 * Christian Iseli for various bug fixes. 37565 37566 * Kamil Iskra for general m68k hacking. 37567 37568 * Lee Iverson for random fixes and MIPS testing. 37569 37570 * Andreas Jaeger for testing and benchmarking of GCC and various bug 37571 fixes. 37572 37573 * Jakub Jelinek for his SPARC work and sibling call optimizations as 37574 well as lots of bug fixes and test cases, and for improving the 37575 Java build system. 37576 37577 * Janis Johnson for ia64 testing and fixes, her quality improvement 37578 sidetracks, and web page maintenance. 37579 37580 * Kean Johnston for SCO OpenServer support and various fixes. 37581 37582 * Tim Josling for the sample language treelang based originally on 37583 Richard Kenner's "toy" language. 37584 37585 * Nicolai Josuttis for additional libstdc++ documentation. 37586 37587 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 37588 target. 37589 37590 * Steven G. Kargl for work on GNU Fortran. 37591 37592 * David Kashtan of SRI adapted GCC to VMS. 37593 37594 * Ryszard Kabatek for many, many libstdc++ bug fixes and 37595 optimizations of strings, especially member functions, and for 37596 auto_ptr fixes. 37597 37598 * Geoffrey Keating for his ongoing work to make the PPC work for 37599 GNU/Linux and his automatic regression tester. 37600 37601 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 37602 work in just about every part of libstdc++. 37603 37604 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 37605 MIL-STD-1750A. 37606 37607 * Richard Kenner of the New York University Ultracomputer Research 37608 Laboratory wrote the machine descriptions for the AMD 29000, the 37609 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 37610 support for instruction attributes. He also made changes to 37611 better support RISC processors including changes to common 37612 subexpression elimination, strength reduction, function calling 37613 sequence handling, and condition code support, in addition to 37614 generalizing the code for frame pointer elimination and delay slot 37615 scheduling. Richard Kenner was also the head maintainer of GCC 37616 for several years. 37617 37618 * Mumit Khan for various contributions to the Cygwin and Mingw32 37619 ports and maintaining binary releases for Microsoft Windows hosts, 37620 and for massive libstdc++ porting work to Cygwin/Mingw32. 37621 37622 * Robin Kirkham for cpu32 support. 37623 37624 * Mark Klein for PA improvements. 37625 37626 * Thomas Koenig for various bug fixes. 37627 37628 * Bruce Korb for the new and improved fixincludes code. 37629 37630 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 37631 effort. 37632 37633 * Charles LaBrec contributed the support for the Integrated Solutions 37634 68020 system. 37635 37636 * Asher Langton and Mike Kumbera for contributing Cray pointer 37637 support to GNU Fortran, and for other GNU Fortran improvements. 37638 37639 * Jeff Law for his direction via the steering committee, 37640 coordinating the entire egcs project and GCC 2.95, rolling out 37641 snapshots and releases, handling merges from GCC2, reviewing tons 37642 of patches that might have fallen through the cracks else, and 37643 random but extensive hacking. 37644 37645 * Marc Lehmann for his direction via the steering committee and 37646 helping with analysis and improvements of x86 performance. 37647 37648 * Victor Leikehman for work on GNU Fortran. 37649 37650 * Ted Lemon wrote parts of the RTL reader and printer. 37651 37652 * Kriang Lerdsuwanakij for C++ improvements including template as 37653 template parameter support, and many C++ fixes. 37654 37655 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 37656 and random work on the Java front end. 37657 37658 * Alain Lichnewsky ported GCC to the MIPS CPU. 37659 37660 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 37661 and patches. 37662 37663 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 37664 37665 * Chen Liqin for various S+core related fixes/improvement, and for 37666 maintaining the S+core port. 37667 37668 * Weiwen Liu for testing and various bug fixes. 37669 37670 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 37671 diagnostics fixes and improvements. 37672 37673 * Dave Love for his ongoing work with the Fortran front end and 37674 runtime libraries. 37675 37676 * Martin von Lo"wis for internal consistency checking infrastructure, 37677 various C++ improvements including namespace support, and tons of 37678 assistance with libstdc++/compiler merges. 37679 37680 * H.J. Lu for his previous contributions to the steering committee, 37681 many x86 bug reports, prototype patches, and keeping the GNU/Linux 37682 ports working. 37683 37684 * Greg McGary for random fixes and (someday) bounded pointers. 37685 37686 * Andrew MacLeod for his ongoing work in building a real EH system, 37687 various code generation improvements, work on the global 37688 optimizer, etc. 37689 37690 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 37691 hacking improvements to compile-time performance, overall 37692 knowledge and direction in the area of instruction scheduling, and 37693 design and implementation of the automaton based instruction 37694 scheduler. 37695 37696 * Bob Manson for his behind the scenes work on dejagnu. 37697 37698 * Philip Martin for lots of libstdc++ string and vector iterator 37699 fixes and improvements, and string clean up and testsuites. 37700 37701 * All of the Mauve project contributors, for Java test code. 37702 37703 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 37704 37705 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 37706 37707 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 37708 powerpc, haifa, ECOFF debug support, and other assorted hacking. 37709 37710 * Jason Merrill for his direction via the steering committee and 37711 leading the G++ effort. 37712 37713 * Martin Michlmayr for testing GCC on several architectures using the 37714 entire Debian archive. 37715 37716 * David Miller for his direction via the steering committee, lots of 37717 SPARC work, improvements in jump.c and interfacing with the Linux 37718 kernel developers. 37719 37720 * Gary Miller ported GCC to Charles River Data Systems machines. 37721 37722 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 37723 the entire libstdc++ testsuite namespace-compatible. 37724 37725 * Mark Mitchell for his direction via the steering committee, 37726 mountains of C++ work, load/store hoisting out of loops, alias 37727 analysis improvements, ISO C `restrict' support, and serving as 37728 release manager for GCC 3.x. 37729 37730 * Alan Modra for various GNU/Linux bits and testing. 37731 37732 * Toon Moene for his direction via the steering committee, Fortran 37733 maintenance, and his ongoing work to make us make Fortran run fast. 37734 37735 * Jason Molenda for major help in the care and feeding of all the 37736 services on the gcc.gnu.org (formerly egcs.cygnus.com) 37737 machine--mail, web services, ftp services, etc etc. Doing all 37738 this work on scrap paper and the backs of envelopes would have 37739 been... difficult. 37740 37741 * Catherine Moore for fixing various ugly problems we have sent her 37742 way, including the haifa bug which was killing the Alpha & PowerPC 37743 Linux kernels. 37744 37745 * Mike Moreton for his various Java patches. 37746 37747 * David Mosberger-Tang for various Alpha improvements, and for the 37748 initial IA-64 port. 37749 37750 * Stephen Moshier contributed the floating point emulator that 37751 assists in cross-compilation and permits support for floating 37752 point numbers wider than 64 bits and for ISO C99 support. 37753 37754 * Bill Moyer for his behind the scenes work on various issues. 37755 37756 * Philippe De Muyter for his work on the m68k port. 37757 37758 * Joseph S. Myers for his work on the PDP-11 port, format checking 37759 and ISO C99 support, and continuous emphasis on (and contributions 37760 to) documentation. 37761 37762 * Nathan Myers for his work on libstdc++-v3: architecture and 37763 authorship through the first three snapshots, including 37764 implementation of locale infrastructure, string, shadow C headers, 37765 and the initial project documentation (DESIGN, CHECKLIST, and so 37766 forth). Later, more work on MT-safe string and shadow headers. 37767 37768 * Felix Natter for documentation on porting libstdc++. 37769 37770 * Nathanael Nerode for cleaning up the configuration/build process. 37771 37772 * NeXT, Inc. donated the front end that supports the Objective-C 37773 language. 37774 37775 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 37776 the search engine setup, various documentation fixes and other 37777 small fixes. 37778 37779 * Geoff Noer for his work on getting cygwin native builds working. 37780 37781 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 37782 tracking web pages and assorted fixes. 37783 37784 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 37785 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 37786 related infrastructure improvements. 37787 37788 * Alexandre Oliva for various build infrastructure improvements, 37789 scripts and amazing testing work, including keeping libtool issues 37790 sane and happy. 37791 37792 * Stefan Olsson for work on mt_alloc. 37793 37794 * Melissa O'Neill for various NeXT fixes. 37795 37796 * Rainer Orth for random MIPS work, including improvements to GCC's 37797 o32 ABI support, improvements to dejagnu's MIPS support, Java 37798 configuration clean-ups and porting work, etc. 37799 37800 * Hartmut Penner for work on the s390 port. 37801 37802 * Paul Petersen wrote the machine description for the Alliant FX/8. 37803 37804 * Alexandre Petit-Bianco for implementing much of the Java compiler 37805 and continued Java maintainership. 37806 37807 * Matthias Pfaller for major improvements to the NS32k port. 37808 37809 * Gerald Pfeifer for his direction via the steering committee, 37810 pointing out lots of problems we need to solve, maintenance of the 37811 web pages, and taking care of documentation maintenance in general. 37812 37813 * Andrew Pinski for processing bug reports by the dozen. 37814 37815 * Ovidiu Predescu for his work on the Objective-C front end and 37816 runtime libraries. 37817 37818 * Jerry Quinn for major performance improvements in C++ formatted 37819 I/O. 37820 37821 * Ken Raeburn for various improvements to checker, MIPS ports and 37822 various cleanups in the compiler. 37823 37824 * Rolf W. Rasmussen for hacking on AWT. 37825 37826 * David Reese of Sun Microsystems contributed to the Solaris on 37827 PowerPC port. 37828 37829 * Volker Reichelt for keeping up with the problem reports. 37830 37831 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 37832 hacking. 37833 37834 * Loren J. Rittle for improvements to libstdc++-v3 including the 37835 FreeBSD port, threading fixes, thread-related configury changes, 37836 critical threading documentation, and solutions to really tricky 37837 I/O problems, as well as keeping GCC properly working on FreeBSD 37838 and continuous testing. 37839 37840 * Craig Rodrigues for processing tons of bug reports. 37841 37842 * Ola Ro"nnerup for work on mt_alloc. 37843 37844 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 37845 37846 * David Ronis inspired and encouraged Craig to rewrite the G77 37847 documentation in texinfo format by contributing a first pass at a 37848 translation of the old `g77-0.5.16/f/DOC' file. 37849 37850 * Ken Rose for fixes to GCC's delay slot filling code. 37851 37852 * Paul Rubin wrote most of the preprocessor. 37853 37854 * Pe'tur Runo'lfsson for major performance improvements in C++ 37855 formatted I/O and large file support in C++ filebuf. 37856 37857 * Chip Salzenberg for libstdc++ patches and improvements to locales, 37858 traits, Makefiles, libio, libtool hackery, and "long long" support. 37859 37860 * Juha Sarlin for improvements to the H8 code generator. 37861 37862 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 37863 300. 37864 37865 * Roger Sayle for improvements to constant folding and GCC's RTL 37866 optimizers as well as for fixing numerous bugs. 37867 37868 * Bradley Schatz for his work on the GCJ FAQ. 37869 37870 * Peter Schauer wrote the code to allow debugging to work on the 37871 Alpha. 37872 37873 * William Schelter did most of the work on the Intel 80386 support. 37874 37875 * Tobias Schlu"ter for work on GNU Fortran. 37876 37877 * Bernd Schmidt for various code generation improvements and major 37878 work in the reload pass as well a serving as release manager for 37879 GCC 2.95.3. 37880 37881 * Peter Schmid for constant testing of libstdc++--especially 37882 application testing, going above and beyond what was requested for 37883 the release criteria--and libstdc++ header file tweaks. 37884 37885 * Jason Schroeder for jcf-dump patches. 37886 37887 * Andreas Schwab for his work on the m68k port. 37888 37889 * Lars Segerlund for work on GNU Fortran. 37890 37891 * Joel Sherrill for his direction via the steering committee, RTEMS 37892 contributions and RTEMS testing. 37893 37894 * Nathan Sidwell for many C++ fixes/improvements. 37895 37896 * Jeffrey Siegal for helping RMS with the original design of GCC, 37897 some code which handles the parse tree and RTL data structures, 37898 constant folding and help with the original VAX & m68k ports. 37899 37900 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 37901 from the LWG (thereby keeping GCC in line with updates from the 37902 ISO). 37903 37904 * Franz Sirl for his ongoing work with making the PPC port stable 37905 for GNU/Linux. 37906 37907 * Andrey Slepuhin for assorted AIX hacking. 37908 37909 * Trevor Smigiel for contributing the SPU port. 37910 37911 * Christopher Smith did the port for Convex machines. 37912 37913 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 37914 37915 * Randy Smith finished the Sun FPA support. 37916 37917 * Scott Snyder for queue, iterator, istream, and string fixes and 37918 libstdc++ testsuite entries. Also for providing the patch to G77 37919 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 37920 `LOGICAL*1'. 37921 37922 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 37923 37924 * Richard Stallman, for writing the original GCC and launching the 37925 GNU project. 37926 37927 * Jan Stein of the Chalmers Computer Society provided support for 37928 Genix, as well as part of the 32000 machine description. 37929 37930 * Nigel Stephens for various mips16 related fixes/improvements. 37931 37932 * Jonathan Stone wrote the machine description for the Pyramid 37933 computer. 37934 37935 * Graham Stott for various infrastructure improvements. 37936 37937 * John Stracke for his Java HTTP protocol fixes. 37938 37939 * Mike Stump for his Elxsi port, G++ contributions over the years 37940 and more recently his vxworks contributions 37941 37942 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 37943 37944 * Shigeya Suzuki for this fixes for the bsdi platforms. 37945 37946 * Ian Lance Taylor for his mips16 work, general configury hacking, 37947 fixincludes, etc. 37948 37949 * Holger Teutsch provided the support for the Clipper CPU. 37950 37951 * Gary Thomas for his ongoing work to make the PPC work for 37952 GNU/Linux. 37953 37954 * Philipp Thomas for random bug fixes throughout the compiler 37955 37956 * Jason Thorpe for thread support in libstdc++ on NetBSD. 37957 37958 * Kresten Krab Thorup wrote the run time support for the Objective-C 37959 language and the fantastic Java bytecode interpreter. 37960 37961 * Michael Tiemann for random bug fixes, the first instruction 37962 scheduler, initial C++ support, function integration, NS32k, SPARC 37963 and M88k machine description work, delay slot scheduling. 37964 37965 * Andreas Tobler for his work porting libgcj to Darwin. 37966 37967 * Teemu Torma for thread safe exception handling support. 37968 37969 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 37970 definitions, and of the VAX machine description. 37971 37972 * Tom Tromey for internationalization support and for his many Java 37973 contributions and libgcj maintainership. 37974 37975 * Lassi Tuura for improvements to config.guess to determine HP 37976 processor types. 37977 37978 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 37979 37980 * Andy Vaught for the design and initial implementation of the GNU 37981 Fortran front end. 37982 37983 * Brent Verner for work with the libstdc++ cshadow files and their 37984 associated configure steps. 37985 37986 * Todd Vierling for contributions for NetBSD ports. 37987 37988 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 37989 guidance. 37990 37991 * Dean Wakerley for converting the install documentation from HTML 37992 to texinfo in time for GCC 3.0. 37993 37994 * Krister Walfridsson for random bug fixes. 37995 37996 * Feng Wang for contributions to GNU Fortran. 37997 37998 * Stephen M. Webb for time and effort on making libstdc++ shadow 37999 files work with the tricky Solaris 8+ headers, and for pushing the 38000 build-time header tree. 38001 38002 * John Wehle for various improvements for the x86 code generator, 38003 related infrastructure improvements to help x86 code generation, 38004 value range propagation and other work, WE32k port. 38005 38006 * Ulrich Weigand for work on the s390 port. 38007 38008 * Zack Weinberg for major work on cpplib and various other bug fixes. 38009 38010 * Matt Welsh for help with Linux Threads support in GCJ. 38011 38012 * Urban Widmark for help fixing java.io. 38013 38014 * Mark Wielaard for new Java library code and his work integrating 38015 with Classpath. 38016 38017 * Dale Wiles helped port GCC to the Tahoe. 38018 38019 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 38020 38021 * Jim Wilson for his direction via the steering committee, tackling 38022 hard problems in various places that nobody else wanted to work 38023 on, strength reduction and other loop optimizations. 38024 38025 * Paul Woegerer and Tal Agmon for the CRX port. 38026 38027 * Carlo Wood for various fixes. 38028 38029 * Tom Wood for work on the m88k port. 38030 38031 * Canqun Yang for work on GNU Fortran. 38032 38033 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 38034 description for the Tron architecture (specifically, the Gmicro). 38035 38036 * Kevin Zachmann helped port GCC to the Tahoe. 38037 38038 * Ayal Zaks for Swing Modulo Scheduling (SMS). 38039 38040 * Xiaoqiang Zhang for work on GNU Fortran. 38041 38042 * Gilles Zunino for help porting Java to Irix. 38043 38044 38045 The following people are recognized for their contributions to GNAT, 38046 the Ada front end of GCC: 38047 * Bernard Banner 38048 38049 * Romain Berrendonner 38050 38051 * Geert Bosch 38052 38053 * Emmanuel Briot 38054 38055 * Joel Brobecker 38056 38057 * Ben Brosgol 38058 38059 * Vincent Celier 38060 38061 * Arnaud Charlet 38062 38063 * Chien Chieng 38064 38065 * Cyrille Comar 38066 38067 * Cyrille Crozes 38068 38069 * Robert Dewar 38070 38071 * Gary Dismukes 38072 38073 * Robert Duff 38074 38075 * Ed Falis 38076 38077 * Ramon Fernandez 38078 38079 * Sam Figueroa 38080 38081 * Vasiliy Fofanov 38082 38083 * Michael Friess 38084 38085 * Franco Gasperoni 38086 38087 * Ted Giering 38088 38089 * Matthew Gingell 38090 38091 * Laurent Guerby 38092 38093 * Jerome Guitton 38094 38095 * Olivier Hainque 38096 38097 * Jerome Hugues 38098 38099 * Hristian Kirtchev 38100 38101 * Jerome Lambourg 38102 38103 * Bruno Leclerc 38104 38105 * Albert Lee 38106 38107 * Sean McNeil 38108 38109 * Javier Miranda 38110 38111 * Laurent Nana 38112 38113 * Pascal Obry 38114 38115 * Dong-Ik Oh 38116 38117 * Laurent Pautet 38118 38119 * Brett Porter 38120 38121 * Thomas Quinot 38122 38123 * Nicolas Roche 38124 38125 * Pat Rogers 38126 38127 * Jose Ruiz 38128 38129 * Douglas Rupp 38130 38131 * Sergey Rybin 38132 38133 * Gail Schenker 38134 38135 * Ed Schonberg 38136 38137 * Nicolas Setton 38138 38139 * Samuel Tardieu 38140 38141 38142 The following people are recognized for their contributions of new 38143 features, bug reports, testing and integration of classpath/libgcj for 38144 GCC version 4.1: 38145 * Lillian Angel for `JTree' implementation and lots Free Swing 38146 additions and bug fixes. 38147 38148 * Wolfgang Baer for `GapContent' bug fixes. 38149 38150 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 38151 event fixes, lots of Free Swing work including `JTable' editing. 38152 38153 * Stuart Ballard for RMI constant fixes. 38154 38155 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 38156 38157 * Gary Benson for `MessageFormat' fixes. 38158 38159 * Daniel Bonniot for `Serialization' fixes. 38160 38161 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 38162 and `DOM xml:id' support. 38163 38164 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 38165 38166 * Archie Cobbs for build fixes, VM interface updates, 38167 `URLClassLoader' updates. 38168 38169 * Kelley Cook for build fixes. 38170 38171 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 38172 38173 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 38174 and improvements. 38175 38176 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 38177 2D support. Lots of imageio framework additions, lots of AWT and 38178 Free Swing bug fixes. 38179 38180 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 38181 fixes, better `Proxy' support, bug fixes and IKVM integration. 38182 38183 * Santiago Gala for `AccessControlContext' fixes. 38184 38185 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 38186 improvements. 38187 38188 * David Gilbert for `basic' and `metal' icon and plaf support and 38189 lots of documenting, Lots of Free Swing and metal theme additions. 38190 `MetalIconFactory' implementation. 38191 38192 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 38193 38194 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 38195 build speedups. 38196 38197 * Kim Ho for `JFileChooser' implementation. 38198 38199 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 38200 updates, `Serialization' fixes, `Properties' XML support and 38201 generic branch work, VMIntegration guide update. 38202 38203 * Bastiaan Huisman for `TimeZone' bug fixing. 38204 38205 * Andreas Jaeger for mprec updates. 38206 38207 * Paul Jenner for better `-Werror' support. 38208 38209 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 38210 38211 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 38212 bug fixes all over. Lots of Free Swing work including styled text. 38213 38214 * Simon Kitching for `String' cleanups and optimization suggestions. 38215 38216 * Michael Koch for configuration fixes, `Locale' updates, bug and 38217 build fixes. 38218 38219 * Guilhem Lavaux for configuration, thread and channel fixes and 38220 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 38221 38222 * David Lichteblau for JCL support library global/local reference 38223 cleanups. 38224 38225 * Aaron Luchko for JDWP updates and documentation fixes. 38226 38227 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 38228 features. 38229 38230 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 38231 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 38232 and implementing the Qt4 peers. 38233 38234 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 38235 `SystemLogger' and `FileHandler' rotate implementations, NIO 38236 `FileChannel.map' support, security and policy updates. 38237 38238 * Bryce McKinlay for RMI work. 38239 38240 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 38241 testing and documenting. 38242 38243 * Kalle Olavi Niemitalo for build fixes. 38244 38245 * Rainer Orth for build fixes. 38246 38247 * Andrew Overholt for `File' locking fixes. 38248 38249 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 38250 38251 * Olga Rodimina for `MenuSelectionManager' implementation. 38252 38253 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 38254 38255 * Julian Scheid for documentation updates and gjdoc support. 38256 38257 * Christian Schlichtherle for zip fixes and cleanups. 38258 38259 * Robert Schuster for documentation updates and beans fixes, 38260 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 38261 and URL, AWT and Free Swing bug fixes. 38262 38263 * Keith Seitz for lots of JDWP work. 38264 38265 * Christian Thalinger for 64-bit cleanups, Configuration and VM 38266 interface fixes and `CACAO' integration, `fdlibm' updates. 38267 38268 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 38269 38270 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 38271 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 38272 38273 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 38274 integration. `Qt4' build infrastructure, `SHA1PRNG' and 38275 `GdkPixbugDecoder' updates. 38276 38277 * Tom Tromey for Eclipse integration, generics work, lots of bug 38278 fixes and gcj integration including coordinating The Big Merge. 38279 38280 * Mark Wielaard for bug fixes, packaging and release management, 38281 `Clipboard' implementation, system call interrupts and network 38282 timeouts and `GdkPixpufDecoder' fixes. 38283 38284 38285 In addition to the above, all of which also contributed time and 38286 energy in testing GCC, we would like to thank the following for their 38287 contributions to testing: 38288 38289 * Michael Abd-El-Malek 38290 38291 * Thomas Arend 38292 38293 * Bonzo Armstrong 38294 38295 * Steven Ashe 38296 38297 * Chris Baldwin 38298 38299 * David Billinghurst 38300 38301 * Jim Blandy 38302 38303 * Stephane Bortzmeyer 38304 38305 * Horst von Brand 38306 38307 * Frank Braun 38308 38309 * Rodney Brown 38310 38311 * Sidney Cadot 38312 38313 * Bradford Castalia 38314 38315 * Jonathan Corbet 38316 38317 * Ralph Doncaster 38318 38319 * Richard Emberson 38320 38321 * Levente Farkas 38322 38323 * Graham Fawcett 38324 38325 * Mark Fernyhough 38326 38327 * Robert A. French 38328 38329 * Jo"rgen Freyh 38330 38331 * Mark K. Gardner 38332 38333 * Charles-Antoine Gauthier 38334 38335 * Yung Shing Gene 38336 38337 * David Gilbert 38338 38339 * Simon Gornall 38340 38341 * Fred Gray 38342 38343 * John Griffin 38344 38345 * Patrik Hagglund 38346 38347 * Phil Hargett 38348 38349 * Amancio Hasty 38350 38351 * Takafumi Hayashi 38352 38353 * Bryan W. Headley 38354 38355 * Kevin B. Hendricks 38356 38357 * Joep Jansen 38358 38359 * Christian Joensson 38360 38361 * Michel Kern 38362 38363 * David Kidd 38364 38365 * Tobias Kuipers 38366 38367 * Anand Krishnaswamy 38368 38369 * A. O. V. Le Blanc 38370 38371 * llewelly 38372 38373 * Damon Love 38374 38375 * Brad Lucier 38376 38377 * Matthias Klose 38378 38379 * Martin Knoblauch 38380 38381 * Rick Lutowski 38382 38383 * Jesse Macnish 38384 38385 * Stefan Morrell 38386 38387 * Anon A. Mous 38388 38389 * Matthias Mueller 38390 38391 * Pekka Nikander 38392 38393 * Rick Niles 38394 38395 * Jon Olson 38396 38397 * Magnus Persson 38398 38399 * Chris Pollard 38400 38401 * Richard Polton 38402 38403 * Derk Reefman 38404 38405 * David Rees 38406 38407 * Paul Reilly 38408 38409 * Tom Reilly 38410 38411 * Torsten Rueger 38412 38413 * Danny Sadinoff 38414 38415 * Marc Schifer 38416 38417 * Erik Schnetter 38418 38419 * Wayne K. Schroll 38420 38421 * David Schuler 38422 38423 * Vin Shelton 38424 38425 * Tim Souder 38426 38427 * Adam Sulmicki 38428 38429 * Bill Thorson 38430 38431 * George Talbot 38432 38433 * Pedro A. M. Vazquez 38434 38435 * Gregory Warnes 38436 38437 * Ian Watson 38438 38439 * David E. Young 38440 38441 * And many others 38442 38443 And finally we'd like to thank everyone who uses the compiler, submits 38444 bug reports and generally reminds us why we're doing this work in the 38445 first place. 38446 38447 38448 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 38449 38450 Option Index 38451 ************ 38452 38453 GCC's command line options are indexed here without any initial `-' or 38454 `--'. Where an option has both positive and negative forms (such as 38455 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 38456 indexed under the most appropriate form; it may sometimes be useful to 38457 look up both forms. 38458 38459 [index] 38460 * Menu: 38461 38462 * ###: Overall Options. (line 199) 38463 * A: Preprocessor Options. 38464 (line 541) 38465 * all_load: Darwin Options. (line 112) 38466 * allowable_client: Darwin Options. (line 199) 38467 * ansi <1>: Non-bugs. (line 107) 38468 * ansi <2>: C Dialect Options. (line 11) 38469 * ansi <3>: Preprocessor Options. 38470 (line 328) 38471 * ansi <4>: Other Builtins. (line 22) 38472 * ansi: Standards. (line 16) 38473 * arch_errors_fatal: Darwin Options. (line 116) 38474 * aux-info: C Dialect Options. (line 140) 38475 * b: Target Options. (line 13) 38476 * B: Directory Options. (line 41) 38477 * bcopy-builtin: PDP-11 Options. (line 32) 38478 * Bdynamic: VxWorks Options. (line 22) 38479 * bind_at_load: Darwin Options. (line 120) 38480 * Bstatic: VxWorks Options. (line 22) 38481 * bundle: Darwin Options. (line 125) 38482 * bundle_loader: Darwin Options. (line 129) 38483 * C: Preprocessor Options. 38484 (line 592) 38485 * c <1>: Link Options. (line 20) 38486 * c: Overall Options. (line 154) 38487 * client_name: Darwin Options. (line 199) 38488 * combine: Overall Options. (line 210) 38489 * compatibility_version: Darwin Options. (line 199) 38490 * coverage: Debugging Options. (line 259) 38491 * current_version: Darwin Options. (line 199) 38492 * D: Preprocessor Options. 38493 (line 33) 38494 * d: Debugging Options. (line 324) 38495 * da: Debugging Options. (line 492) 38496 * dA: Debugging Options. (line 338) 38497 * dB: Debugging Options. (line 343) 38498 * dc: Debugging Options. (line 347) 38499 * dC: Debugging Options. (line 353) 38500 * dd: Debugging Options. (line 361) 38501 * dD <1>: Debugging Options. (line 367) 38502 * dD: Preprocessor Options. 38503 (line 573) 38504 * dE: Debugging Options. (line 372) 38505 * dead_strip: Darwin Options. (line 199) 38506 * dependency-file: Darwin Options. (line 199) 38507 * df: Debugging Options. (line 377) 38508 * dG: Debugging Options. (line 389) 38509 * dg: Debugging Options. (line 384) 38510 * dH: Debugging Options. (line 495) 38511 * dh: Debugging Options. (line 396) 38512 * dI: Preprocessor Options. 38513 (line 582) 38514 * di: Debugging Options. (line 400) 38515 * dj: Debugging Options. (line 404) 38516 * dk: Debugging Options. (line 408) 38517 * dL: Debugging Options. (line 418) 38518 * dl: Debugging Options. (line 414) 38519 * dm: Debugging Options. (line 498) 38520 * dM: Debugging Options. (line 429) 38521 * dm: Debugging Options. (line 425) 38522 * dM: Preprocessor Options. 38523 (line 557) 38524 * dN: Preprocessor Options. 38525 (line 579) 38526 * dn: Debugging Options. (line 434) 38527 * dN: Debugging Options. (line 438) 38528 * do: Debugging Options. (line 442) 38529 * dP: Debugging Options. (line 507) 38530 * dp: Debugging Options. (line 502) 38531 * dr: Debugging Options. (line 446) 38532 * dR: Debugging Options. (line 450) 38533 * dS: Debugging Options. (line 459) 38534 * ds: Debugging Options. (line 454) 38535 * dt: Debugging Options. (line 463) 38536 * dT: Debugging Options. (line 468) 38537 * dumpmachine: Debugging Options. (line 879) 38538 * dumpspecs: Debugging Options. (line 887) 38539 * dumpversion: Debugging Options. (line 883) 38540 * dv: Debugging Options. (line 511) 38541 * dV: Debugging Options. (line 473) 38542 * dw: Debugging Options. (line 480) 38543 * dx: Debugging Options. (line 516) 38544 * dy: Debugging Options. (line 520) 38545 * dylib_file: Darwin Options. (line 199) 38546 * dylinker_install_name: Darwin Options. (line 199) 38547 * dynamic: Darwin Options. (line 199) 38548 * dynamiclib: Darwin Options. (line 133) 38549 * dZ: Debugging Options. (line 488) 38550 * dz: Debugging Options. (line 484) 38551 * E <1>: Link Options. (line 20) 38552 * E: Overall Options. (line 175) 38553 * EB <1>: ARC Options. (line 12) 38554 * EB: MIPS Options. (line 7) 38555 * EL <1>: ARC Options. (line 9) 38556 * EL: MIPS Options. (line 10) 38557 * exported_symbols_list: Darwin Options. (line 199) 38558 * F: Darwin Options. (line 32) 38559 * fabi-version: C++ Dialect Options. 38560 (line 20) 38561 * falign-functions: Optimize Options. (line 999) 38562 * falign-jumps: Optimize Options. (line 1049) 38563 * falign-labels: Optimize Options. (line 1017) 38564 * falign-loops: Optimize Options. (line 1035) 38565 * fargument-alias: Code Gen Options. (line 378) 38566 * fargument-noalias: Code Gen Options. (line 378) 38567 * fargument-noalias-anything: Code Gen Options. (line 378) 38568 * fargument-noalias-global: Code Gen Options. (line 378) 38569 * fassociative-math: Optimize Options. (line 1222) 38570 * fasynchronous-unwind-tables: Code Gen Options. (line 64) 38571 * fauto-inc-dec: Optimize Options. (line 447) 38572 * fbounds-check: Code Gen Options. (line 15) 38573 * fbranch-probabilities: Optimize Options. (line 1343) 38574 * fbranch-target-load-optimize: Optimize Options. (line 1451) 38575 * fbranch-target-load-optimize2: Optimize Options. (line 1457) 38576 * fbtr-bb-exclusive: Optimize Options. (line 1461) 38577 * fcall-saved: Code Gen Options. (line 251) 38578 * fcall-used: Code Gen Options. (line 237) 38579 * fcaller-saves: Optimize Options. (line 608) 38580 * fcheck-data-deps: Optimize Options. (line 739) 38581 * fcheck-new: C++ Dialect Options. 38582 (line 34) 38583 * fcommon: Variable Attributes. 38584 (line 99) 38585 * fcond-mismatch: C Dialect Options. (line 258) 38586 * fconserve-space: C++ Dialect Options. 38587 (line 44) 38588 * fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 38589 (line 30) 38590 * fcprop-registers: Optimize Options. (line 1127) 38591 * fcrossjumping: Optimize Options. (line 440) 38592 * fcse-follow-jumps: Optimize Options. (line 368) 38593 * fcse-skip-blocks: Optimize Options. (line 377) 38594 * fcx-limited-range: Optimize Options. (line 1329) 38595 * fdata-sections: Optimize Options. (line 1432) 38596 * fdbg-cnt: Debugging Options. (line 312) 38597 * fdbg-cnt-list: Debugging Options. (line 309) 38598 * fdce: Optimize Options. (line 453) 38599 * fdebug-prefix-map: Debugging Options. (line 210) 38600 * fdelayed-branch: Optimize Options. (line 507) 38601 * fdelete-null-pointer-checks: Optimize Options. (line 476) 38602 * fdiagnostics-show-location: Language Independent Options. 38603 (line 21) 38604 * fdiagnostics-show-option: Language Independent Options. 38605 (line 36) 38606 * fdirectives-only: Preprocessor Options. 38607 (line 449) 38608 * fdollars-in-identifiers <1>: Preprocessor Options. 38609 (line 471) 38610 * fdollars-in-identifiers: Interoperation. (line 146) 38611 * fdse: Optimize Options. (line 457) 38612 * fdump-class-hierarchy: Debugging Options. (line 545) 38613 * fdump-ipa: Debugging Options. (line 552) 38614 * fdump-noaddr: Debugging Options. (line 523) 38615 * fdump-rtl-all: Debugging Options. (line 492) 38616 * fdump-rtl-bbro: Debugging Options. (line 343) 38617 * fdump-rtl-btl: Debugging Options. (line 361) 38618 * fdump-rtl-bypass: Debugging Options. (line 389) 38619 * fdump-rtl-ce1: Debugging Options. (line 353) 38620 * fdump-rtl-ce2: Debugging Options. (line 353) 38621 * fdump-rtl-ce3: Debugging Options. (line 372) 38622 * fdump-rtl-cfg: Debugging Options. (line 377) 38623 * fdump-rtl-combine: Debugging Options. (line 347) 38624 * fdump-rtl-cse: Debugging Options. (line 454) 38625 * fdump-rtl-cse2: Debugging Options. (line 463) 38626 * fdump-rtl-dbr: Debugging Options. (line 361) 38627 * fdump-rtl-eh: Debugging Options. (line 396) 38628 * fdump-rtl-expand: Debugging Options. (line 446) 38629 * fdump-rtl-flow2: Debugging Options. (line 480) 38630 * fdump-rtl-gcse: Debugging Options. (line 389) 38631 * fdump-rtl-greg: Debugging Options. (line 384) 38632 * fdump-rtl-jump: Debugging Options. (line 404) 38633 * fdump-rtl-life: Debugging Options. (line 377) 38634 * fdump-rtl-loop2: Debugging Options. (line 418) 38635 * fdump-rtl-lreg: Debugging Options. (line 414) 38636 * fdump-rtl-mach: Debugging Options. (line 429) 38637 * fdump-rtl-peephole2: Debugging Options. (line 484) 38638 * fdump-rtl-postreload: Debugging Options. (line 442) 38639 * fdump-rtl-regmove: Debugging Options. (line 438) 38640 * fdump-rtl-rnreg: Debugging Options. (line 434) 38641 * fdump-rtl-sched1: Debugging Options. (line 459) 38642 * fdump-rtl-sched2: Debugging Options. (line 450) 38643 * fdump-rtl-sibling: Debugging Options. (line 400) 38644 * fdump-rtl-sms: Debugging Options. (line 425) 38645 * fdump-rtl-stack: Debugging Options. (line 408) 38646 * fdump-rtl-tracer: Debugging Options. (line 468) 38647 * fdump-rtl-vartrack: Debugging Options. (line 473) 38648 * fdump-rtl-vpt: Debugging Options. (line 473) 38649 * fdump-rtl-web: Debugging Options. (line 488) 38650 * fdump-translation-unit: Debugging Options. (line 537) 38651 * fdump-tree: Debugging Options. (line 570) 38652 * fdump-tree-alias: Debugging Options. (line 655) 38653 * fdump-tree-all: Debugging Options. (line 740) 38654 * fdump-tree-ccp: Debugging Options. (line 659) 38655 * fdump-tree-cfg: Debugging Options. (line 630) 38656 * fdump-tree-ch: Debugging Options. (line 642) 38657 * fdump-tree-copyprop: Debugging Options. (line 675) 38658 * fdump-tree-copyrename: Debugging Options. (line 721) 38659 * fdump-tree-dce: Debugging Options. (line 683) 38660 * fdump-tree-dom: Debugging Options. (line 701) 38661 * fdump-tree-dse: Debugging Options. (line 706) 38662 * fdump-tree-forwprop: Debugging Options. (line 716) 38663 * fdump-tree-fre: Debugging Options. (line 671) 38664 * fdump-tree-gimple: Debugging Options. (line 625) 38665 * fdump-tree-mudflap: Debugging Options. (line 687) 38666 * fdump-tree-nrv: Debugging Options. (line 726) 38667 * fdump-tree-phiopt: Debugging Options. (line 711) 38668 * fdump-tree-pre: Debugging Options. (line 667) 38669 * fdump-tree-salias: Debugging Options. (line 650) 38670 * fdump-tree-sink: Debugging Options. (line 697) 38671 * fdump-tree-sra: Debugging Options. (line 692) 38672 * fdump-tree-ssa: Debugging Options. (line 646) 38673 * fdump-tree-store_copyprop: Debugging Options. (line 679) 38674 * fdump-tree-storeccp: Debugging Options. (line 663) 38675 * fdump-tree-vcg: Debugging Options. (line 634) 38676 * fdump-tree-vect: Debugging Options. (line 731) 38677 * fdump-tree-vrp: Debugging Options. (line 736) 38678 * fdump-unnumbered: Debugging Options. (line 530) 38679 * fearly-inlining: Optimize Options. (line 213) 38680 * feliminate-dwarf2-dups: Debugging Options. (line 128) 38681 * feliminate-unused-debug-symbols: Debugging Options. (line 52) 38682 * feliminate-unused-debug-types: Debugging Options. (line 891) 38683 * fexceptions: Code Gen Options. (line 34) 38684 * fexec-charset: Preprocessor Options. 38685 (line 498) 38686 * fexpensive-optimizations: Optimize Options. (line 489) 38687 * fextended-identifiers: Preprocessor Options. 38688 (line 474) 38689 * ffast-math: Optimize Options. (line 1173) 38690 * ffinite-math-only: Optimize Options. (line 1246) 38691 * ffix-and-continue: Darwin Options. (line 106) 38692 * ffixed: Code Gen Options. (line 225) 38693 * ffloat-store <1>: Optimize Options. (line 1159) 38694 * ffloat-store: Disappointments. (line 77) 38695 * ffor-scope: C++ Dialect Options. 38696 (line 86) 38697 * fforward-propagate: Optimize Options. (line 150) 38698 * ffreestanding <1>: Function Attributes. 38699 (line 402) 38700 * ffreestanding <2>: Standards. (line 84) 38701 * ffreestanding <3>: Warning Options. (line 199) 38702 * ffreestanding: C Dialect Options. (line 211) 38703 * ffriend-injection: C++ Dialect Options. 38704 (line 56) 38705 * ffunction-sections: Optimize Options. (line 1432) 38706 * fgcse: Optimize Options. (line 391) 38707 * fgcse-after-reload: Optimize Options. (line 427) 38708 * fgcse-las: Optimize Options. (line 420) 38709 * fgcse-lm: Optimize Options. (line 402) 38710 * fgcse-sm: Optimize Options. (line 411) 38711 * fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 38712 (line 39) 38713 * fgnu89-inline: C Dialect Options. (line 120) 38714 * fhosted: C Dialect Options. (line 204) 38715 * fif-conversion: Optimize Options. (line 461) 38716 * fif-conversion2: Optimize Options. (line 470) 38717 * filelist: Darwin Options. (line 199) 38718 * findirect-data: Darwin Options. (line 106) 38719 * finhibit-size-directive: Code Gen Options. (line 147) 38720 * finline-functions: Optimize Options. (line 194) 38721 * finline-functions-called-once: Optimize Options. (line 205) 38722 * finline-limit: Optimize Options. (line 223) 38723 * finline-small-functions: Optimize Options. (line 186) 38724 * finput-charset: Preprocessor Options. 38725 (line 511) 38726 * finstrument-functions <1>: Function Attributes. 38727 (line 662) 38728 * finstrument-functions: Code Gen Options. (line 281) 38729 * finstrument-functions-exclude-file-list: Code Gen Options. (line 318) 38730 * finstrument-functions-exclude-function-list: Code Gen Options. 38731 (line 336) 38732 * fipa-cp: Optimize Options. (line 671) 38733 * fipa-matrix-reorg: Optimize Options. (line 680) 38734 * fipa-pta: Optimize Options. (line 668) 38735 * fipa-pure-const: Optimize Options. (line 645) 38736 * fipa-reference: Optimize Options. (line 649) 38737 * fipa-struct-reorg: Optimize Options. (line 653) 38738 * fivopts: Optimize Options. (line 758) 38739 * fkeep-inline-functions <1>: Inline. (line 51) 38740 * fkeep-inline-functions: Optimize Options. (line 249) 38741 * fkeep-static-consts: Optimize Options. (line 256) 38742 * flat_namespace: Darwin Options. (line 199) 38743 * flax-vector-conversions: C Dialect Options. (line 263) 38744 * fleading-underscore: Code Gen Options. (line 395) 38745 * fmem-report: Debugging Options. (line 234) 38746 * fmerge-all-constants: Optimize Options. (line 275) 38747 * fmerge-constants: Optimize Options. (line 265) 38748 * fmerge-debug-strings: Debugging Options. (line 203) 38749 * fmessage-length: Language Independent Options. 38750 (line 15) 38751 * fmodulo-sched: Optimize Options. (line 285) 38752 * fmodulo-sched-allow-regmoves: Optimize Options. (line 290) 38753 * fmove-loop-invariants: Optimize Options. (line 1422) 38754 * fms-extensions <1>: C Dialect Options. (line 229) 38755 * fms-extensions <2>: Unnamed Fields. (line 37) 38756 * fms-extensions: C++ Dialect Options. 38757 (line 121) 38758 * fmudflap: Optimize Options. (line 330) 38759 * fmudflapir: Optimize Options. (line 330) 38760 * fmudflapth: Optimize Options. (line 330) 38761 * fnext-runtime: Objective-C and Objective-C++ Dialect Options. 38762 (line 43) 38763 * fno-access-control: C++ Dialect Options. 38764 (line 30) 38765 * fno-asm: C Dialect Options. (line 156) 38766 * fno-branch-count-reg: Optimize Options. (line 297) 38767 * fno-builtin <1>: Function Attributes. 38768 (line 402) 38769 * fno-builtin <2>: Warning Options. (line 199) 38770 * fno-builtin <3>: Other Builtins. (line 14) 38771 * fno-builtin: C Dialect Options. (line 170) 38772 * fno-common <1>: Variable Attributes. 38773 (line 99) 38774 * fno-common: Code Gen Options. (line 135) 38775 * fno-default-inline <1>: C++ Dialect Options. 38776 (line 262) 38777 * fno-default-inline <2>: Optimize Options. (line 135) 38778 * fno-default-inline: Inline. (line 71) 38779 * fno-defer-pop: Optimize Options. (line 142) 38780 * fno-elide-constructors: C++ Dialect Options. 38781 (line 69) 38782 * fno-enforce-eh-specs: C++ Dialect Options. 38783 (line 75) 38784 * fno-for-scope: C++ Dialect Options. 38785 (line 86) 38786 * fno-function-cse: Optimize Options. (line 307) 38787 * fno-gnu-keywords: C++ Dialect Options. 38788 (line 98) 38789 * fno-guess-branch-probability: Optimize Options. (line 881) 38790 * fno-ident: Code Gen Options. (line 144) 38791 * fno-implement-inlines <1>: C++ Dialect Options. 38792 (line 115) 38793 * fno-implement-inlines: C++ Interface. (line 75) 38794 * fno-implicit-inline-templates: C++ Dialect Options. 38795 (line 109) 38796 * fno-implicit-templates <1>: C++ Dialect Options. 38797 (line 103) 38798 * fno-implicit-templates: Template Instantiation. 38799 (line 87) 38800 * fno-inline: Optimize Options. (line 180) 38801 * fno-jump-tables: Code Gen Options. (line 217) 38802 * fno-math-errno: Optimize Options. (line 1187) 38803 * fno-merge-debug-strings: Debugging Options. (line 203) 38804 * fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 38805 (line 49) 38806 * fno-nonansi-builtins: C++ Dialect Options. 38807 (line 126) 38808 * fno-operator-names: C++ Dialect Options. 38809 (line 131) 38810 * fno-optional-diags: C++ Dialect Options. 38811 (line 135) 38812 * fno-peephole: Optimize Options. (line 872) 38813 * fno-peephole2: Optimize Options. (line 872) 38814 * fno-rtti: C++ Dialect Options. 38815 (line 150) 38816 * fno-sched-interblock: Optimize Options. (line 533) 38817 * fno-sched-spec: Optimize Options. (line 538) 38818 * fno-show-column: Preprocessor Options. 38819 (line 536) 38820 * fno-signed-bitfields: C Dialect Options. (line 296) 38821 * fno-signed-zeros: Optimize Options. (line 1258) 38822 * fno-stack-limit: Code Gen Options. (line 361) 38823 * fno-threadsafe-statics: C++ Dialect Options. 38824 (line 172) 38825 * fno-toplevel-reorder: Optimize Options. (line 1093) 38826 * fno-trapping-math: Optimize Options. (line 1268) 38827 * fno-unsigned-bitfields: C Dialect Options. (line 296) 38828 * fno-use-cxa-get-exception-ptr: C++ Dialect Options. 38829 (line 185) 38830 * fno-weak: C++ Dialect Options. 38831 (line 247) 38832 * fno-working-directory: Preprocessor Options. 38833 (line 521) 38834 * fno-zero-initialized-in-bss: Optimize Options. (line 318) 38835 * fnon-call-exceptions: Code Gen Options. (line 48) 38836 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 38837 (line 56) 38838 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 38839 (line 81) 38840 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 38841 (line 85) 38842 * fobjc-gc: Objective-C and Objective-C++ Dialect Options. 38843 (line 170) 38844 * fomit-frame-pointer: Optimize Options. (line 159) 38845 * fopenmp: C Dialect Options. (line 221) 38846 * foptimize-register-move: Optimize Options. (line 496) 38847 * foptimize-sibling-calls: Optimize Options. (line 175) 38848 * force_cpusubtype_ALL: Darwin Options. (line 138) 38849 * force_flat_namespace: Darwin Options. (line 199) 38850 * fpack-struct: Code Gen Options. (line 268) 38851 * fpcc-struct-return <1>: Code Gen Options. (line 70) 38852 * fpcc-struct-return: Incompatibilities. (line 170) 38853 * fpch-deps: Preprocessor Options. 38854 (line 284) 38855 * fpch-preprocess: Preprocessor Options. 38856 (line 292) 38857 * fpeel-loops: Optimize Options. (line 1414) 38858 * fpermissive: C++ Dialect Options. 38859 (line 140) 38860 * fpic: Code Gen Options. (line 173) 38861 * fPIC: Code Gen Options. (line 194) 38862 * fpie: Code Gen Options. (line 207) 38863 * fPIE: Code Gen Options. (line 207) 38864 * fpost-ipa-mem-report: Debugging Options. (line 240) 38865 * fpre-ipa-mem-report: Debugging Options. (line 238) 38866 * fpredictive-commoning: Optimize Options. (line 854) 38867 * fprefetch-loop-arrays: Optimize Options. (line 861) 38868 * fpreprocessed: Preprocessor Options. 38869 (line 479) 38870 * fprofile-arcs <1>: Other Builtins. (line 240) 38871 * fprofile-arcs: Debugging Options. (line 244) 38872 * fprofile-generate: Optimize Options. (line 1134) 38873 * fprofile-use: Optimize Options. (line 1143) 38874 * fprofile-values: Optimize Options. (line 1362) 38875 * frandom-string: Debugging Options. (line 769) 38876 * freciprocal-math: Optimize Options. (line 1237) 38877 * frecord-gcc-switches: Code Gen Options. (line 163) 38878 * freg-struct-return: Code Gen Options. (line 88) 38879 * fregmove: Optimize Options. (line 496) 38880 * frename-registers: Optimize Options. (line 1381) 38881 * freorder-blocks: Optimize Options. (line 898) 38882 * freorder-blocks-and-partition: Optimize Options. (line 904) 38883 * freorder-functions: Optimize Options. (line 915) 38884 * freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 38885 (line 174) 38886 * frepo <1>: C++ Dialect Options. 38887 (line 145) 38888 * frepo: Template Instantiation. 38889 (line 62) 38890 * frerun-cse-after-loop: Optimize Options. (line 385) 38891 * freschedule-modulo-scheduled-loops: Optimize Options. (line 602) 38892 * frounding-math: Optimize Options. (line 1283) 38893 * frtl-abstract-sequences: Optimize Options. (line 1303) 38894 * fsched-spec-load: Optimize Options. (line 543) 38895 * fsched-spec-load-dangerous: Optimize Options. (line 548) 38896 * fsched-stalled-insns: Optimize Options. (line 554) 38897 * fsched-stalled-insns-dep: Optimize Options. (line 564) 38898 * fsched-verbose: Debugging Options. (line 779) 38899 * fsched2-use-superblocks: Optimize Options. (line 574) 38900 * fsched2-use-traces: Optimize Options. (line 585) 38901 * fschedule-insns: Optimize Options. (line 514) 38902 * fschedule-insns2: Optimize Options. (line 524) 38903 * fsection-anchors: Optimize Options. (line 1477) 38904 * fsee: Optimize Options. (line 597) 38905 * fshort-double: Code Gen Options. (line 117) 38906 * fshort-enums <1>: Non-bugs. (line 42) 38907 * fshort-enums <2>: Type Attributes. (line 113) 38908 * fshort-enums <3>: Code Gen Options. (line 106) 38909 * fshort-enums: Structures unions enumerations and bit-fields implementation. 38910 (line 43) 38911 * fshort-wchar: Code Gen Options. (line 125) 38912 * fsignaling-nans: Optimize Options. (line 1310) 38913 * fsigned-bitfields <1>: C Dialect Options. (line 296) 38914 * fsigned-bitfields: Non-bugs. (line 57) 38915 * fsigned-char <1>: Characters implementation. 38916 (line 31) 38917 * fsigned-char: C Dialect Options. (line 286) 38918 * fsingle-precision-constant: Optimize Options. (line 1325) 38919 * fsplit-ivs-in-unroller: Optimize Options. (line 835) 38920 * fsplit-wide-types: Optimize Options. (line 360) 38921 * fstack-check: Code Gen Options. (line 346) 38922 * fstack-limit-register: Code Gen Options. (line 361) 38923 * fstack-limit-symbol: Code Gen Options. (line 361) 38924 * fstack-protector: Optimize Options. (line 1465) 38925 * fstack-protector-all: Optimize Options. (line 1474) 38926 * fstats: C++ Dialect Options. 38927 (line 160) 38928 * fstrict-aliasing: Optimize Options. (line 928) 38929 * fstrict-overflow: Optimize Options. (line 964) 38930 * fsyntax-only: Warning Options. (line 14) 38931 * ftabstop: Preprocessor Options. 38932 (line 492) 38933 * ftemplate-depth: C++ Dialect Options. 38934 (line 165) 38935 * ftest-coverage: Debugging Options. (line 300) 38936 * fthread-jumps: Optimize Options. (line 351) 38937 * ftime-report: Debugging Options. (line 230) 38938 * ftls-model: Code Gen Options. (line 406) 38939 * ftracer: Optimize Options. (line 1391) 38940 * ftrapv: Code Gen Options. (line 22) 38941 * ftree-ccp: Optimize Options. (line 694) 38942 * ftree-ch: Optimize Options. (line 723) 38943 * ftree-copy-prop: Optimize Options. (line 636) 38944 * ftree-copyrename: Optimize Options. (line 778) 38945 * ftree-dce: Optimize Options. (line 705) 38946 * ftree-dominator-opts: Optimize Options. (line 709) 38947 * ftree-dse: Optimize Options. (line 716) 38948 * ftree-fre: Optimize Options. (line 629) 38949 * ftree-loop-im: Optimize Options. (line 743) 38950 * ftree-loop-ivcanon: Optimize Options. (line 752) 38951 * ftree-loop-linear: Optimize Options. (line 734) 38952 * ftree-loop-optimize: Optimize Options. (line 730) 38953 * ftree-parallelize-loops: Optimize Options. (line 763) 38954 * ftree-pre: Optimize Options. (line 625) 38955 * ftree-reassoc: Optimize Options. (line 621) 38956 * ftree-salias: Optimize Options. (line 641) 38957 * ftree-sink: Optimize Options. (line 690) 38958 * ftree-sra: Optimize Options. (line 772) 38959 * ftree-store-ccp: Optimize Options. (line 699) 38960 * ftree-ter: Optimize Options. (line 785) 38961 * ftree-vect-loop-version: Optimize Options. (line 797) 38962 * ftree-vectorize: Optimize Options. (line 793) 38963 * ftree-vectorizer-verbose: Debugging Options. (line 744) 38964 * ftree-vrp: Optimize Options. (line 809) 38965 * funit-at-a-time: Optimize Options. (line 1062) 38966 * funroll-all-loops: Optimize Options. (line 829) 38967 * funroll-loops: Optimize Options. (line 823) 38968 * funsafe-loop-optimizations: Optimize Options. (line 432) 38969 * funsafe-math-optimizations: Optimize Options. (line 1205) 38970 * funsigned-bitfields <1>: Non-bugs. (line 57) 38971 * funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 38972 (line 17) 38973 * funsigned-bitfields: C Dialect Options. (line 296) 38974 * funsigned-char <1>: Characters implementation. 38975 (line 31) 38976 * funsigned-char: C Dialect Options. (line 268) 38977 * funswitch-loops: Optimize Options. (line 1426) 38978 * funwind-tables: Code Gen Options. (line 57) 38979 * fuse-cxa-atexit: C++ Dialect Options. 38980 (line 178) 38981 * fvar-tracking: Debugging Options. (line 822) 38982 * fvariable-expansion-in-unroller: Optimize Options. (line 849) 38983 * fvect-cost-model: Optimize Options. (line 806) 38984 * fverbose-asm: Code Gen Options. (line 154) 38985 * fvisibility: Code Gen Options. (line 414) 38986 * fvisibility-inlines-hidden: C++ Dialect Options. 38987 (line 190) 38988 * fvisibility-ms-compat: C++ Dialect Options. 38989 (line 218) 38990 * fvpt: Optimize Options. (line 1372) 38991 * fweb: Optimize Options. (line 1101) 38992 * fwhole-program: Optimize Options. (line 1112) 38993 * fwide-exec-charset: Preprocessor Options. 38994 (line 503) 38995 * fworking-directory: Preprocessor Options. 38996 (line 521) 38997 * fwrapv: Code Gen Options. (line 26) 38998 * fzero-link: Objective-C and Objective-C++ Dialect Options. 38999 (line 184) 39000 * G <1>: M32R/D Options. (line 57) 39001 * G <2>: RS/6000 and PowerPC Options. 39002 (line 629) 39003 * G <3>: System V Options. (line 10) 39004 * G: MIPS Options. (line 295) 39005 * g: Debugging Options. (line 10) 39006 * gcoff: Debugging Options. (line 70) 39007 * gdwarf-2: Debugging Options. (line 88) 39008 * gen-decls: Objective-C and Objective-C++ Dialect Options. 39009 (line 194) 39010 * gfull: Darwin Options. (line 71) 39011 * ggdb: Debugging Options. (line 38) 39012 * gnu-ld: HPPA Options. (line 113) 39013 * gstabs: Debugging Options. (line 44) 39014 * gstabs+: Debugging Options. (line 64) 39015 * gused: Darwin Options. (line 66) 39016 * gvms: Debugging Options. (line 95) 39017 * gxcoff: Debugging Options. (line 75) 39018 * gxcoff+: Debugging Options. (line 80) 39019 * H: Preprocessor Options. 39020 (line 647) 39021 * headerpad_max_install_names: Darwin Options. (line 199) 39022 * help <1>: Overall Options. (line 226) 39023 * help: Preprocessor Options. 39024 (line 639) 39025 * hp-ld: HPPA Options. (line 125) 39026 * I <1>: Directory Options. (line 10) 39027 * I: Preprocessor Options. 39028 (line 64) 39029 * I- <1>: Preprocessor Options. 39030 (line 365) 39031 * I-: Directory Options. (line 107) 39032 * idirafter: Preprocessor Options. 39033 (line 407) 39034 * iframework: Darwin Options. (line 59) 39035 * imacros: Preprocessor Options. 39036 (line 398) 39037 * image_base: Darwin Options. (line 199) 39038 * imultilib: Preprocessor Options. 39039 (line 430) 39040 * include: Preprocessor Options. 39041 (line 387) 39042 * init: Darwin Options. (line 199) 39043 * install_name: Darwin Options. (line 199) 39044 * iprefix: Preprocessor Options. 39045 (line 414) 39046 * iquote <1>: Preprocessor Options. 39047 (line 442) 39048 * iquote: Directory Options. (line 31) 39049 * isysroot: Preprocessor Options. 39050 (line 426) 39051 * isystem: Preprocessor Options. 39052 (line 434) 39053 * iwithprefix: Preprocessor Options. 39054 (line 420) 39055 * iwithprefixbefore: Preprocessor Options. 39056 (line 420) 39057 * keep_private_externs: Darwin Options. (line 199) 39058 * l: Link Options. (line 26) 39059 * L: Directory Options. (line 37) 39060 * lobjc: Link Options. (line 53) 39061 * M: Preprocessor Options. 39062 (line 175) 39063 * m1: SH Options. (line 9) 39064 * m10: PDP-11 Options. (line 29) 39065 * m128bit-long-double: i386 and x86-64 Options. 39066 (line 263) 39067 * m16-bit: CRIS Options. (line 69) 39068 * m2: SH Options. (line 12) 39069 * m210: MCore Options. (line 43) 39070 * m3: SH Options. (line 18) 39071 * m31: S/390 and zSeries Options. 39072 (line 79) 39073 * m32 <1>: RS/6000 and PowerPC Options. 39074 (line 244) 39075 * m32 <2>: SPARC Options. (line 191) 39076 * m32: i386 and x86-64 Options. 39077 (line 592) 39078 * m32-bit: CRIS Options. (line 69) 39079 * m32r: M32R/D Options. (line 15) 39080 * m32r2: M32R/D Options. (line 9) 39081 * m32rx: M32R/D Options. (line 12) 39082 * m340: MCore Options. (line 43) 39083 * m3dnow: i386 and x86-64 Options. 39084 (line 440) 39085 * m3e: SH Options. (line 21) 39086 * m4: SH Options. (line 35) 39087 * m4-nofpu: SH Options. (line 24) 39088 * m4-single: SH Options. (line 31) 39089 * m4-single-only: SH Options. (line 27) 39090 * m40: PDP-11 Options. (line 23) 39091 * m45: PDP-11 Options. (line 26) 39092 * m4a: SH Options. (line 50) 39093 * m4a-nofpu: SH Options. (line 38) 39094 * m4a-single: SH Options. (line 46) 39095 * m4a-single-only: SH Options. (line 42) 39096 * m4al: SH Options. (line 53) 39097 * m4byte-functions: MCore Options. (line 27) 39098 * m5200: M680x0 Options. (line 143) 39099 * m5206e: M680x0 Options. (line 152) 39100 * m528x: M680x0 Options. (line 156) 39101 * m5307: M680x0 Options. (line 160) 39102 * m5407: M680x0 Options. (line 164) 39103 * m64 <1>: i386 and x86-64 Options. 39104 (line 592) 39105 * m64 <2>: RS/6000 and PowerPC Options. 39106 (line 244) 39107 * m64 <3>: S/390 and zSeries Options. 39108 (line 79) 39109 * m64: SPARC Options. (line 191) 39110 * m68000: M680x0 Options. (line 91) 39111 * m68010: M680x0 Options. (line 99) 39112 * m68020: M680x0 Options. (line 105) 39113 * m68020-40: M680x0 Options. (line 174) 39114 * m68020-60: M680x0 Options. (line 183) 39115 * m68030: M680x0 Options. (line 110) 39116 * m68040: M680x0 Options. (line 115) 39117 * m68060: M680x0 Options. (line 124) 39118 * m6811: M68hc1x Options. (line 13) 39119 * m6812: M68hc1x Options. (line 18) 39120 * m68881: M680x0 Options. (line 193) 39121 * m68hc11: M68hc1x Options. (line 13) 39122 * m68hc12: M68hc1x Options. (line 18) 39123 * m68hcs12: M68hc1x Options. (line 23) 39124 * m68S12: M68hc1x Options. (line 23) 39125 * m8-bit: CRIS Options. (line 69) 39126 * m96bit-long-double: i386 and x86-64 Options. 39127 (line 263) 39128 * mabi <1>: ARM Options. (line 10) 39129 * mabi: RS/6000 and PowerPC Options. 39130 (line 511) 39131 * mabi-mmixware: MMIX Options. (line 20) 39132 * mabi=32: MIPS Options. (line 120) 39133 * mabi=64: MIPS Options. (line 120) 39134 * mabi=eabi: MIPS Options. (line 120) 39135 * mabi=gnu: MMIX Options. (line 20) 39136 * mabi=ibmlongdouble: RS/6000 and PowerPC Options. 39137 (line 524) 39138 * mabi=ieeelongdouble: RS/6000 and PowerPC Options. 39139 (line 528) 39140 * mabi=n32: MIPS Options. (line 120) 39141 * mabi=no-spe: RS/6000 and PowerPC Options. 39142 (line 521) 39143 * mabi=o64: MIPS Options. (line 120) 39144 * mabi=spe: RS/6000 and PowerPC Options. 39145 (line 516) 39146 * mabicalls: MIPS Options. (line 144) 39147 * mabort-on-noreturn: ARM Options. (line 147) 39148 * mabshi: PDP-11 Options. (line 55) 39149 * mac0: PDP-11 Options. (line 16) 39150 * macc-4: FRV Options. (line 113) 39151 * macc-8: FRV Options. (line 116) 39152 * maccumulate-outgoing-args: i386 and x86-64 Options. 39153 (line 522) 39154 * madjust-unroll: SH Options. (line 186) 39155 * mads: RS/6000 and PowerPC Options. 39156 (line 554) 39157 * maix-struct-return: RS/6000 and PowerPC Options. 39158 (line 504) 39159 * maix32: RS/6000 and PowerPC Options. 39160 (line 282) 39161 * maix64: RS/6000 and PowerPC Options. 39162 (line 282) 39163 * malign-300: H8/300 Options. (line 31) 39164 * malign-double: i386 and x86-64 Options. 39165 (line 247) 39166 * malign-int: M680x0 Options. (line 263) 39167 * malign-labels: FRV Options. (line 104) 39168 * malign-loops: M32R/D Options. (line 73) 39169 * malign-natural: RS/6000 and PowerPC Options. 39170 (line 321) 39171 * malign-power: RS/6000 and PowerPC Options. 39172 (line 321) 39173 * malloc-cc: FRV Options. (line 25) 39174 * malpha-as: DEC Alpha Options. (line 159) 39175 * maltivec: RS/6000 and PowerPC Options. 39176 (line 181) 39177 * mam33: MN10300 Options. (line 17) 39178 * mandroid: ARM Options. (line 259) 39179 * maout: CRIS Options. (line 92) 39180 * mapcs: ARM Options. (line 22) 39181 * mapcs-frame: ARM Options. (line 14) 39182 * mapp-regs <1>: SPARC Options. (line 10) 39183 * mapp-regs: V850 Options. (line 57) 39184 * march <1>: CRIS Options. (line 10) 39185 * march <2>: i386 and x86-64 Options. 39186 (line 156) 39187 * march <3>: M680x0 Options. (line 12) 39188 * march <4>: MT Options. (line 9) 39189 * march <5>: S/390 and zSeries Options. 39190 (line 108) 39191 * march <6>: HPPA Options. (line 9) 39192 * march <7>: MIPS Options. (line 14) 39193 * march <8>: ARM Options. (line 110) 39194 * march: i386 and x86-64 Options. 39195 (line 148) 39196 * masm=DIALECT: i386 and x86-64 Options. 39197 (line 203) 39198 * mauto-incdec: M68hc1x Options. (line 26) 39199 * mauto-pic: IA-64 Options. (line 50) 39200 * mb: SH Options. (line 58) 39201 * mbacc: MT Options. (line 16) 39202 * mbackchain: S/390 and zSeries Options. 39203 (line 26) 39204 * mbase-addresses: MMIX Options. (line 54) 39205 * mbcopy: PDP-11 Options. (line 36) 39206 * mbig: RS/6000 and PowerPC Options. 39207 (line 436) 39208 * mbig-endian <1>: MCore Options. (line 39) 39209 * mbig-endian <2>: ARM Options. (line 72) 39210 * mbig-endian <3>: RS/6000 and PowerPC Options. 39211 (line 436) 39212 * mbig-endian: IA-64 Options. (line 9) 39213 * mbig-switch <1>: HPPA Options. (line 23) 39214 * mbig-switch: V850 Options. (line 52) 39215 * mbigtable: SH Options. (line 74) 39216 * mbit-align: RS/6000 and PowerPC Options. 39217 (line 390) 39218 * mbitfield: M680x0 Options. (line 231) 39219 * mbranch-cheap: PDP-11 Options. (line 65) 39220 * mbranch-cost: MIPS Options. (line 519) 39221 * mbranch-cost=NUMBER: M32R/D Options. (line 82) 39222 * mbranch-expensive: PDP-11 Options. (line 61) 39223 * mbranch-hints: SPU Options. (line 27) 39224 * mbranch-likely: MIPS Options. (line 526) 39225 * mbranch-predict: MMIX Options. (line 49) 39226 * mbss-plt: RS/6000 and PowerPC Options. 39227 (line 198) 39228 * mbuild-constants: DEC Alpha Options. (line 142) 39229 * mbwx: DEC Alpha Options. (line 171) 39230 * mc68000: M680x0 Options. (line 91) 39231 * mc68020: M680x0 Options. (line 105) 39232 * mcall-gnu: RS/6000 and PowerPC Options. 39233 (line 496) 39234 * mcall-linux: RS/6000 and PowerPC Options. 39235 (line 492) 39236 * mcall-netbsd: RS/6000 and PowerPC Options. 39237 (line 500) 39238 * mcall-prologues: AVR Options. (line 43) 39239 * mcall-solaris: RS/6000 and PowerPC Options. 39240 (line 488) 39241 * mcall-sysv: RS/6000 and PowerPC Options. 39242 (line 475) 39243 * mcall-sysv-eabi: RS/6000 and PowerPC Options. 39244 (line 482) 39245 * mcall-sysv-noeabi: RS/6000 and PowerPC Options. 39246 (line 485) 39247 * mcallee-super-interworking: ARM Options. (line 239) 39248 * mcaller-super-interworking: ARM Options. (line 245) 39249 * mcallgraph-data: MCore Options. (line 31) 39250 * mcc-init: CRIS Options. (line 46) 39251 * mcfv4e: M680x0 Options. (line 168) 39252 * mcheck-zero-division: MIPS Options. (line 406) 39253 * mcirrus-fix-invalid-insns: ARM Options. (line 190) 39254 * mcix: DEC Alpha Options. (line 171) 39255 * mcld: i386 and x86-64 Options. 39256 (line 458) 39257 * mcmodel=embmedany: SPARC Options. (line 213) 39258 * mcmodel=kernel: i386 and x86-64 Options. 39259 (line 614) 39260 * mcmodel=large: i386 and x86-64 Options. 39261 (line 626) 39262 * mcmodel=medany: SPARC Options. (line 207) 39263 * mcmodel=medium: i386 and x86-64 Options. 39264 (line 619) 39265 * mcmodel=medlow: SPARC Options. (line 196) 39266 * mcmodel=medmid: SPARC Options. (line 201) 39267 * mcmodel=small: i386 and x86-64 Options. 39268 (line 608) 39269 * mcmpb: RS/6000 and PowerPC Options. 39270 (line 31) 39271 * mcode-readable: MIPS Options. (line 366) 39272 * mcond-exec: FRV Options. (line 152) 39273 * mcond-move: FRV Options. (line 128) 39274 * mconst-align: CRIS Options. (line 60) 39275 * mconst16: Xtensa Options. (line 10) 39276 * mconstant-gp: IA-64 Options. (line 46) 39277 * mcpu <1>: RS/6000 and PowerPC Options. 39278 (line 114) 39279 * mcpu <2>: SPARC Options. (line 96) 39280 * mcpu <3>: ARM Options. (line 84) 39281 * mcpu <4>: M680x0 Options. (line 28) 39282 * mcpu <5>: FRV Options. (line 212) 39283 * mcpu <6>: ARC Options. (line 23) 39284 * mcpu <7>: CRIS Options. (line 10) 39285 * mcpu <8>: i386 and x86-64 Options. 39286 (line 153) 39287 * mcpu: DEC Alpha Options. (line 223) 39288 * mcpu32: M680x0 Options. (line 134) 39289 * mcpu= <1>: M32C Options. (line 7) 39290 * mcpu=: Blackfin Options. (line 7) 39291 * mcsync-anomaly: Blackfin Options. (line 55) 39292 * mcx16: i386 and x86-64 Options. 39293 (line 472) 39294 * MD: Preprocessor Options. 39295 (line 264) 39296 * mdalign: SH Options. (line 64) 39297 * mdata: ARC Options. (line 30) 39298 * mdata-align: CRIS Options. (line 60) 39299 * mdebug <1>: M32R/D Options. (line 69) 39300 * mdebug: S/390 and zSeries Options. 39301 (line 104) 39302 * mdec-asm: PDP-11 Options. (line 78) 39303 * mdisable-callt: V850 Options. (line 80) 39304 * mdisable-fpregs: HPPA Options. (line 33) 39305 * mdisable-indexing: HPPA Options. (line 40) 39306 * mdiv <1>: MCore Options. (line 15) 39307 * mdiv: M680x0 Options. (line 205) 39308 * mdiv=STRATEGY: SH Options. (line 138) 39309 * mdivide-breaks: MIPS Options. (line 412) 39310 * mdivide-traps: MIPS Options. (line 412) 39311 * mdivsi3_libfunc=NAME: SH Options. (line 179) 39312 * mdlmzb: RS/6000 and PowerPC Options. 39313 (line 384) 39314 * mdmx: MIPS Options. (line 259) 39315 * mdouble: FRV Options. (line 38) 39316 * mdouble-float: MIPS Options. (line 217) 39317 * mdsp: MIPS Options. (line 236) 39318 * mdspr2: MIPS Options. (line 242) 39319 * mdwarf2-asm: IA-64 Options. (line 79) 39320 * mdword: FRV Options. (line 32) 39321 * mdynamic-no-pic: RS/6000 and PowerPC Options. 39322 (line 441) 39323 * meabi: RS/6000 and PowerPC Options. 39324 (line 577) 39325 * mearly-stop-bits: IA-64 Options. (line 85) 39326 * meb: Score Options. (line 9) 39327 * mel: Score Options. (line 12) 39328 * melf <1>: MMIX Options. (line 44) 39329 * melf: CRIS Options. (line 95) 39330 * melinux: CRIS Options. (line 99) 39331 * melinux-stacksize: CRIS Options. (line 25) 39332 * memb: RS/6000 and PowerPC Options. 39333 (line 572) 39334 * membedded-data: MIPS Options. (line 353) 39335 * memregs=: M32C Options. (line 21) 39336 * mep: V850 Options. (line 16) 39337 * mepsilon: MMIX Options. (line 15) 39338 * merror-reloc: SPU Options. (line 10) 39339 * mesa: S/390 and zSeries Options. 39340 (line 87) 39341 * metrax100: CRIS Options. (line 31) 39342 * metrax4: CRIS Options. (line 31) 39343 * mexplicit-relocs <1>: DEC Alpha Options. (line 184) 39344 * mexplicit-relocs: MIPS Options. (line 397) 39345 * mextern-sdata: MIPS Options. (line 315) 39346 * MF: Preprocessor Options. 39347 (line 210) 39348 * mfast-fp: Blackfin Options. (line 128) 39349 * mfast-indirect-calls: HPPA Options. (line 52) 39350 * mfaster-structs: SPARC Options. (line 71) 39351 * mfdpic: FRV Options. (line 56) 39352 * mfix: DEC Alpha Options. (line 171) 39353 * mfix-and-continue: Darwin Options. (line 106) 39354 * mfix-r4000: MIPS Options. (line 462) 39355 * mfix-r4400: MIPS Options. (line 476) 39356 * mfix-sb1: MIPS Options. (line 504) 39357 * mfix-vr4120: MIPS Options. (line 483) 39358 * mfix-vr4130: MIPS Options. (line 497) 39359 * mfixed-cc: FRV Options. (line 28) 39360 * mfixed-range <1>: IA-64 Options. (line 90) 39361 * mfixed-range <2>: HPPA Options. (line 59) 39362 * mfixed-range: SPU Options. (line 47) 39363 * mflip-mips16: MIPS Options. (line 100) 39364 * mfloat-abi: ARM Options. (line 59) 39365 * mfloat-gprs: RS/6000 and PowerPC Options. 39366 (line 227) 39367 * mfloat-ieee: DEC Alpha Options. (line 179) 39368 * mfloat-vax: DEC Alpha Options. (line 179) 39369 * mfloat32: PDP-11 Options. (line 52) 39370 * mfloat64: PDP-11 Options. (line 48) 39371 * mflush-func: MIPS Options. (line 510) 39372 * mflush-func=NAME: M32R/D Options. (line 94) 39373 * mflush-trap=NUMBER: M32R/D Options. (line 87) 39374 * mfmovd: SH Options. (line 78) 39375 * mfp: ARM Options. (line 122) 39376 * mfp-exceptions: MIPS Options. (line 537) 39377 * mfp-reg: DEC Alpha Options. (line 25) 39378 * mfp-rounding-mode: DEC Alpha Options. (line 85) 39379 * mfp-trap-mode: DEC Alpha Options. (line 63) 39380 * mfp32: MIPS Options. (line 200) 39381 * mfp64: MIPS Options. (line 203) 39382 * mfpe: ARM Options. (line 122) 39383 * mfpr-32: FRV Options. (line 13) 39384 * mfpr-64: FRV Options. (line 16) 39385 * mfprnd: RS/6000 and PowerPC Options. 39386 (line 31) 39387 * mfpu <1>: PDP-11 Options. (line 9) 39388 * mfpu <2>: ARM Options. (line 122) 39389 * mfpu: SPARC Options. (line 20) 39390 * mfull-toc: RS/6000 and PowerPC Options. 39391 (line 255) 39392 * mfused-madd <1>: MIPS Options. (line 447) 39393 * mfused-madd <2>: S/390 and zSeries Options. 39394 (line 128) 39395 * mfused-madd <3>: RS/6000 and PowerPC Options. 39396 (line 371) 39397 * mfused-madd <4>: i386 and x86-64 Options. 39398 (line 581) 39399 * mfused-madd: Xtensa Options. (line 19) 39400 * MG: Preprocessor Options. 39401 (line 219) 39402 * mg: VAX Options. (line 17) 39403 * mgas <1>: DEC Alpha Options. (line 159) 39404 * mgas: HPPA Options. (line 75) 39405 * mgettrcost=NUMBER: SH Options. (line 201) 39406 * mglibc: GNU/Linux Options. (line 9) 39407 * mgnu: VAX Options. (line 13) 39408 * mgnu-as: IA-64 Options. (line 18) 39409 * mgnu-ld: IA-64 Options. (line 23) 39410 * mgotplt: CRIS Options. (line 86) 39411 * mgp32: MIPS Options. (line 194) 39412 * mgp64: MIPS Options. (line 197) 39413 * mgpopt: MIPS Options. (line 338) 39414 * mgpr-32: FRV Options. (line 7) 39415 * mgpr-64: FRV Options. (line 10) 39416 * mgprel-ro: FRV Options. (line 79) 39417 * mh: H8/300 Options. (line 14) 39418 * mhard-dfp: RS/6000 and PowerPC Options. 39419 (line 31) 39420 * mhard-float <1>: FRV Options. (line 19) 39421 * mhard-float <2>: RS/6000 and PowerPC Options. 39422 (line 333) 39423 * mhard-float <3>: M680x0 Options. (line 193) 39424 * mhard-float <4>: SPARC Options. (line 20) 39425 * mhard-float <5>: MIPS Options. (line 206) 39426 * mhard-float <6>: S/390 and zSeries Options. 39427 (line 11) 39428 * mhard-float: ARM Options. (line 41) 39429 * mhard-quad-float: SPARC Options. (line 41) 39430 * mhardlit: MCore Options. (line 10) 39431 * mhitachi: SH Options. (line 81) 39432 * mid-shared-library: Blackfin Options. (line 76) 39433 * mieee <1>: SH Options. (line 96) 39434 * mieee: DEC Alpha Options. (line 39) 39435 * mieee-conformant: DEC Alpha Options. (line 134) 39436 * mieee-fp: i386 and x86-64 Options. 39437 (line 209) 39438 * mieee-with-inexact: DEC Alpha Options. (line 52) 39439 * milp32: IA-64 Options. (line 114) 39440 * mimpure-text: SPARC Options. (line 81) 39441 * mindexed-addressing: SH Options. (line 191) 39442 * minit-stack: AVR Options. (line 35) 39443 * minline-all-stringops: i386 and x86-64 Options. 39444 (line 543) 39445 * minline-float-divide-max-throughput: IA-64 Options. (line 58) 39446 * minline-float-divide-min-latency: IA-64 Options. (line 54) 39447 * minline-ic_invalidate: SH Options. (line 103) 39448 * minline-int-divide-max-throughput: IA-64 Options. (line 66) 39449 * minline-int-divide-min-latency: IA-64 Options. (line 62) 39450 * minline-plt <1>: Blackfin Options. (line 133) 39451 * minline-plt: FRV Options. (line 64) 39452 * minline-sqrt-max-throughput: IA-64 Options. (line 74) 39453 * minline-sqrt-min-latency: IA-64 Options. (line 70) 39454 * minline-stringops-dynamically: i386 and x86-64 Options. 39455 (line 550) 39456 * minmax: M68hc1x Options. (line 31) 39457 * minsert-sched-nops: RS/6000 and PowerPC Options. 39458 (line 463) 39459 * mint16: PDP-11 Options. (line 40) 39460 * mint32 <1>: H8/300 Options. (line 28) 39461 * mint32: PDP-11 Options. (line 44) 39462 * mint8: AVR Options. (line 53) 39463 * minterlink-mips16: MIPS Options. (line 107) 39464 * minvalid-symbols: SH Options. (line 224) 39465 * mips1: MIPS Options. (line 70) 39466 * mips16: MIPS Options. (line 92) 39467 * mips2: MIPS Options. (line 73) 39468 * mips3: MIPS Options. (line 76) 39469 * mips32: MIPS Options. (line 82) 39470 * mips32r2: MIPS Options. (line 85) 39471 * mips3d: MIPS Options. (line 265) 39472 * mips4: MIPS Options. (line 79) 39473 * mips64: MIPS Options. (line 88) 39474 * misel: RS/6000 and PowerPC Options. 39475 (line 204) 39476 * misize: SH Options. (line 115) 39477 * missue-rate=NUMBER: M32R/D Options. (line 79) 39478 * mjump-in-delay: HPPA Options. (line 28) 39479 * mkernel: Darwin Options. (line 84) 39480 * mknuthdiv: MMIX Options. (line 33) 39481 * ml: SH Options. (line 61) 39482 * mlarge-data: DEC Alpha Options. (line 195) 39483 * mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 39484 (line 289) 39485 * mlarge-mem: SPU Options. (line 35) 39486 * mlarge-text: DEC Alpha Options. (line 213) 39487 * mleaf-id-shared-library: Blackfin Options. (line 87) 39488 * mlibfuncs: MMIX Options. (line 10) 39489 * mlibrary-pic: FRV Options. (line 110) 39490 * mlinked-fp: FRV Options. (line 94) 39491 * mlinker-opt: HPPA Options. (line 85) 39492 * mlinux: CRIS Options. (line 104) 39493 * mlittle: RS/6000 and PowerPC Options. 39494 (line 430) 39495 * mlittle-endian <1>: IA-64 Options. (line 13) 39496 * mlittle-endian <2>: RS/6000 and PowerPC Options. 39497 (line 430) 39498 * mlittle-endian <3>: MCore Options. (line 39) 39499 * mlittle-endian <4>: ARM Options. (line 68) 39500 * mlittle-endian: SPARC Options. (line 185) 39501 * mllsc: MIPS Options. (line 222) 39502 * mlocal-sdata: MIPS Options. (line 303) 39503 * mlong-calls <1>: MIPS Options. (line 433) 39504 * mlong-calls <2>: FRV Options. (line 99) 39505 * mlong-calls <3>: ARM Options. (line 152) 39506 * mlong-calls <4>: V850 Options. (line 10) 39507 * mlong-calls <5>: M68hc1x Options. (line 35) 39508 * mlong-calls: Blackfin Options. (line 116) 39509 * mlong-double-128: S/390 and zSeries Options. 39510 (line 20) 39511 * mlong-double-64: S/390 and zSeries Options. 39512 (line 20) 39513 * mlong-load-store: HPPA Options. (line 66) 39514 * mlong32: MIPS Options. (line 278) 39515 * mlong64: MIPS Options. (line 273) 39516 * mlongcall: RS/6000 and PowerPC Options. 39517 (line 643) 39518 * mlongcalls: Xtensa Options. (line 60) 39519 * mlow-64k: Blackfin Options. (line 65) 39520 * mlp64: IA-64 Options. (line 114) 39521 * MM: Preprocessor Options. 39522 (line 200) 39523 * mmac <1>: Score Options. (line 21) 39524 * mmac: CRX Options. (line 9) 39525 * mmad: MIPS Options. (line 442) 39526 * mmangle-cpu: ARC Options. (line 15) 39527 * mmax: DEC Alpha Options. (line 171) 39528 * mmax-stack-frame: CRIS Options. (line 22) 39529 * mmcu: AVR Options. (line 9) 39530 * MMD: Preprocessor Options. 39531 (line 280) 39532 * mmedia: FRV Options. (line 44) 39533 * mmemcpy: MIPS Options. (line 427) 39534 * mmemory-latency: DEC Alpha Options. (line 266) 39535 * mmfcrf: RS/6000 and PowerPC Options. 39536 (line 31) 39537 * mmfpgpr: RS/6000 and PowerPC Options. 39538 (line 31) 39539 * mminimal-toc: RS/6000 and PowerPC Options. 39540 (line 255) 39541 * mmmx: i386 and x86-64 Options. 39542 (line 440) 39543 * mmodel=large: M32R/D Options. (line 33) 39544 * mmodel=medium: M32R/D Options. (line 27) 39545 * mmodel=small: M32R/D Options. (line 18) 39546 * mmt: MIPS Options. (line 270) 39547 * mmul-bug-workaround: CRIS Options. (line 36) 39548 * mmuladd: FRV Options. (line 50) 39549 * mmulhw: RS/6000 and PowerPC Options. 39550 (line 377) 39551 * mmult-bug: MN10300 Options. (line 9) 39552 * mmulti-cond-exec: FRV Options. (line 176) 39553 * mmultiple: RS/6000 and PowerPC Options. 39554 (line 339) 39555 * mmvcle: S/390 and zSeries Options. 39556 (line 97) 39557 * mmvme: RS/6000 and PowerPC Options. 39558 (line 549) 39559 * mn: H8/300 Options. (line 20) 39560 * mnested-cond-exec: FRV Options. (line 189) 39561 * mnew-mnemonics: RS/6000 and PowerPC Options. 39562 (line 99) 39563 * mnhwloop: Score Options. (line 15) 39564 * mno-3dnow: i386 and x86-64 Options. 39565 (line 440) 39566 * mno-4byte-functions: MCore Options. (line 27) 39567 * mno-abicalls: MIPS Options. (line 144) 39568 * mno-abshi: PDP-11 Options. (line 58) 39569 * mno-ac0: PDP-11 Options. (line 20) 39570 * mno-align-double: i386 and x86-64 Options. 39571 (line 247) 39572 * mno-align-int: M680x0 Options. (line 263) 39573 * mno-align-loops: M32R/D Options. (line 76) 39574 * mno-align-stringops: i386 and x86-64 Options. 39575 (line 538) 39576 * mno-altivec: RS/6000 and PowerPC Options. 39577 (line 181) 39578 * mno-am33: MN10300 Options. (line 20) 39579 * mno-app-regs <1>: V850 Options. (line 61) 39580 * mno-app-regs: SPARC Options. (line 10) 39581 * mno-bacc: MT Options. (line 19) 39582 * mno-backchain: S/390 and zSeries Options. 39583 (line 26) 39584 * mno-base-addresses: MMIX Options. (line 54) 39585 * mno-bit-align: RS/6000 and PowerPC Options. 39586 (line 390) 39587 * mno-bitfield: M680x0 Options. (line 227) 39588 * mno-branch-likely: MIPS Options. (line 526) 39589 * mno-branch-predict: MMIX Options. (line 49) 39590 * mno-bwx: DEC Alpha Options. (line 171) 39591 * mno-callgraph-data: MCore Options. (line 31) 39592 * mno-check-zero-division: MIPS Options. (line 406) 39593 * mno-cirrus-fix-invalid-insns: ARM Options. (line 190) 39594 * mno-cix: DEC Alpha Options. (line 171) 39595 * mno-cmpb: RS/6000 and PowerPC Options. 39596 (line 31) 39597 * mno-cond-exec: FRV Options. (line 158) 39598 * mno-cond-move: FRV Options. (line 134) 39599 * mno-const-align: CRIS Options. (line 60) 39600 * mno-const16: Xtensa Options. (line 10) 39601 * mno-crt0 <1>: MN10300 Options. (line 31) 39602 * mno-crt0: MT Options. (line 25) 39603 * mno-csync-anomaly: Blackfin Options. (line 61) 39604 * mno-data-align: CRIS Options. (line 60) 39605 * mno-debug: S/390 and zSeries Options. 39606 (line 104) 39607 * mno-div <1>: MCore Options. (line 15) 39608 * mno-div: M680x0 Options. (line 205) 39609 * mno-dlmzb: RS/6000 and PowerPC Options. 39610 (line 384) 39611 * mno-double: FRV Options. (line 41) 39612 * mno-dsp: MIPS Options. (line 236) 39613 * mno-dspr2: MIPS Options. (line 242) 39614 * mno-dwarf2-asm: IA-64 Options. (line 79) 39615 * mno-dword: FRV Options. (line 35) 39616 * mno-eabi: RS/6000 and PowerPC Options. 39617 (line 577) 39618 * mno-early-stop-bits: IA-64 Options. (line 85) 39619 * mno-eflags: FRV Options. (line 125) 39620 * mno-embedded-data: MIPS Options. (line 353) 39621 * mno-ep: V850 Options. (line 16) 39622 * mno-epsilon: MMIX Options. (line 15) 39623 * mno-explicit-relocs <1>: MIPS Options. (line 397) 39624 * mno-explicit-relocs: DEC Alpha Options. (line 184) 39625 * mno-extern-sdata: MIPS Options. (line 315) 39626 * mno-fancy-math-387: i386 and x86-64 Options. 39627 (line 236) 39628 * mno-faster-structs: SPARC Options. (line 71) 39629 * mno-fix: DEC Alpha Options. (line 171) 39630 * mno-fix-r4000: MIPS Options. (line 462) 39631 * mno-fix-r4400: MIPS Options. (line 476) 39632 * mno-float32: PDP-11 Options. (line 48) 39633 * mno-float64: PDP-11 Options. (line 52) 39634 * mno-flush-func: M32R/D Options. (line 99) 39635 * mno-flush-trap: M32R/D Options. (line 91) 39636 * mno-fp-in-toc: RS/6000 and PowerPC Options. 39637 (line 255) 39638 * mno-fp-regs: DEC Alpha Options. (line 25) 39639 * mno-fp-ret-in-387: i386 and x86-64 Options. 39640 (line 226) 39641 * mno-fprnd: RS/6000 and PowerPC Options. 39642 (line 31) 39643 * mno-fpu: SPARC Options. (line 25) 39644 * mno-fused-madd <1>: MIPS Options. (line 447) 39645 * mno-fused-madd <2>: RS/6000 and PowerPC Options. 39646 (line 371) 39647 * mno-fused-madd <3>: Xtensa Options. (line 19) 39648 * mno-fused-madd: S/390 and zSeries Options. 39649 (line 128) 39650 * mno-gnu-as: IA-64 Options. (line 18) 39651 * mno-gnu-ld: IA-64 Options. (line 23) 39652 * mno-gotplt: CRIS Options. (line 86) 39653 * mno-gpopt: MIPS Options. (line 338) 39654 * mno-hard-dfp: RS/6000 and PowerPC Options. 39655 (line 31) 39656 * mno-hardlit: MCore Options. (line 10) 39657 * mno-id-shared-library: Blackfin Options. (line 83) 39658 * mno-ieee-fp: i386 and x86-64 Options. 39659 (line 209) 39660 * mno-int16: PDP-11 Options. (line 44) 39661 * mno-int32: PDP-11 Options. (line 40) 39662 * mno-interlink-mips16: MIPS Options. (line 107) 39663 * mno-interrupts: AVR Options. (line 39) 39664 * mno-isel: RS/6000 and PowerPC Options. 39665 (line 204) 39666 * mno-knuthdiv: MMIX Options. (line 33) 39667 * mno-leaf-id-shared-library: Blackfin Options. (line 93) 39668 * mno-libfuncs: MMIX Options. (line 10) 39669 * mno-llsc: MIPS Options. (line 222) 39670 * mno-local-sdata: MIPS Options. (line 303) 39671 * mno-long-calls <1>: HPPA Options. (line 138) 39672 * mno-long-calls <2>: MIPS Options. (line 433) 39673 * mno-long-calls <3>: V850 Options. (line 10) 39674 * mno-long-calls <4>: M68hc1x Options. (line 35) 39675 * mno-long-calls <5>: ARM Options. (line 152) 39676 * mno-long-calls: Blackfin Options. (line 116) 39677 * mno-longcall: RS/6000 and PowerPC Options. 39678 (line 643) 39679 * mno-longcalls: Xtensa Options. (line 60) 39680 * mno-low-64k: Blackfin Options. (line 69) 39681 * mno-mad: MIPS Options. (line 442) 39682 * mno-max: DEC Alpha Options. (line 171) 39683 * mno-mdmx: MIPS Options. (line 259) 39684 * mno-media: FRV Options. (line 47) 39685 * mno-memcpy: MIPS Options. (line 427) 39686 * mno-mfcrf: RS/6000 and PowerPC Options. 39687 (line 31) 39688 * mno-mfpgpr: RS/6000 and PowerPC Options. 39689 (line 31) 39690 * mno-mips16: MIPS Options. (line 92) 39691 * mno-mips3d: MIPS Options. (line 265) 39692 * mno-mmx: i386 and x86-64 Options. 39693 (line 440) 39694 * mno-mt: MIPS Options. (line 270) 39695 * mno-mul-bug-workaround: CRIS Options. (line 36) 39696 * mno-muladd: FRV Options. (line 53) 39697 * mno-mulhw: RS/6000 and PowerPC Options. 39698 (line 377) 39699 * mno-mult-bug: MN10300 Options. (line 13) 39700 * mno-multi-cond-exec: FRV Options. (line 183) 39701 * mno-multiple: RS/6000 and PowerPC Options. 39702 (line 339) 39703 * mno-mvcle: S/390 and zSeries Options. 39704 (line 97) 39705 * mno-nested-cond-exec: FRV Options. (line 195) 39706 * mno-optimize-membar: FRV Options. (line 205) 39707 * mno-pack: FRV Options. (line 122) 39708 * mno-packed-stack: S/390 and zSeries Options. 39709 (line 46) 39710 * mno-paired: RS/6000 and PowerPC Options. 39711 (line 218) 39712 * mno-paired-single: MIPS Options. (line 253) 39713 * mno-pic: IA-64 Options. (line 26) 39714 * mno-popcntb: RS/6000 and PowerPC Options. 39715 (line 31) 39716 * mno-power: RS/6000 and PowerPC Options. 39717 (line 31) 39718 * mno-power2: RS/6000 and PowerPC Options. 39719 (line 31) 39720 * mno-powerpc: RS/6000 and PowerPC Options. 39721 (line 31) 39722 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 39723 (line 31) 39724 * mno-powerpc-gpopt: RS/6000 and PowerPC Options. 39725 (line 31) 39726 * mno-powerpc64: RS/6000 and PowerPC Options. 39727 (line 31) 39728 * mno-prolog-function: V850 Options. (line 23) 39729 * mno-prologue-epilogue: CRIS Options. (line 76) 39730 * mno-prototype: RS/6000 and PowerPC Options. 39731 (line 533) 39732 * mno-push-args: i386 and x86-64 Options. 39733 (line 515) 39734 * mno-register-names: IA-64 Options. (line 37) 39735 * mno-regnames: RS/6000 and PowerPC Options. 39736 (line 637) 39737 * mno-relax-immediate: MCore Options. (line 19) 39738 * mno-relocatable: RS/6000 and PowerPC Options. 39739 (line 407) 39740 * mno-relocatable-lib: RS/6000 and PowerPC Options. 39741 (line 415) 39742 * mno-rtd: M680x0 Options. (line 258) 39743 * mno-scc: FRV Options. (line 146) 39744 * mno-sched-ar-data-spec: IA-64 Options. (line 128) 39745 * mno-sched-ar-in-data-spec: IA-64 Options. (line 149) 39746 * mno-sched-br-data-spec: IA-64 Options. (line 121) 39747 * mno-sched-br-in-data-spec: IA-64 Options. (line 142) 39748 * mno-sched-control-ldc: IA-64 Options. (line 168) 39749 * mno-sched-control-spec: IA-64 Options. (line 135) 39750 * mno-sched-count-spec-in-critical-path: IA-64 Options. (line 194) 39751 * mno-sched-in-control-spec: IA-64 Options. (line 156) 39752 * mno-sched-ldc: IA-64 Options. (line 162) 39753 * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 39754 * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 39755 * mno-sched-prolog: ARM Options. (line 32) 39756 * mno-sched-spec-verbose: IA-64 Options. (line 176) 39757 * mno-sdata <1>: IA-64 Options. (line 42) 39758 * mno-sdata: RS/6000 and PowerPC Options. 39759 (line 624) 39760 * mno-sep-data: Blackfin Options. (line 111) 39761 * mno-short: M680x0 Options. (line 222) 39762 * mno-side-effects: CRIS Options. (line 51) 39763 * mno-single-exit: MMIX Options. (line 66) 39764 * mno-slow-bytes: MCore Options. (line 35) 39765 * mno-small-exec: S/390 and zSeries Options. 39766 (line 72) 39767 * mno-smartmips: MIPS Options. (line 249) 39768 * mno-soft-float: DEC Alpha Options. (line 10) 39769 * mno-space-regs: HPPA Options. (line 45) 39770 * mno-spe: RS/6000 and PowerPC Options. 39771 (line 213) 39772 * mno-specld-anomaly: Blackfin Options. (line 51) 39773 * mno-split: PDP-11 Options. (line 71) 39774 * mno-split-addresses: MIPS Options. (line 391) 39775 * mno-sse: i386 and x86-64 Options. 39776 (line 440) 39777 * mno-stack-align: CRIS Options. (line 60) 39778 * mno-stack-bias: SPARC Options. (line 222) 39779 * mno-strict-align <1>: RS/6000 and PowerPC Options. 39780 (line 402) 39781 * mno-strict-align: M680x0 Options. (line 283) 39782 * mno-string: RS/6000 and PowerPC Options. 39783 (line 350) 39784 * mno-sum-in-toc: RS/6000 and PowerPC Options. 39785 (line 255) 39786 * mno-swdiv: RS/6000 and PowerPC Options. 39787 (line 171) 39788 * mno-sym32: MIPS Options. (line 288) 39789 * mno-tablejump: AVR Options. (line 47) 39790 * mno-target-align: Xtensa Options. (line 47) 39791 * mno-text-section-literals: Xtensa Options. (line 35) 39792 * mno-toc: RS/6000 and PowerPC Options. 39793 (line 424) 39794 * mno-toplevel-symbols: MMIX Options. (line 40) 39795 * mno-tpf-trace: S/390 and zSeries Options. 39796 (line 122) 39797 * mno-unaligned-doubles: SPARC Options. (line 59) 39798 * mno-uninit-const-in-rodata: MIPS Options. (line 361) 39799 * mno-update: RS/6000 and PowerPC Options. 39800 (line 361) 39801 * mno-v8plus: SPARC Options. (line 170) 39802 * mno-vis: SPARC Options. (line 177) 39803 * mno-vliw-branch: FRV Options. (line 170) 39804 * mno-volatile-asm-stop: IA-64 Options. (line 32) 39805 * mno-vrsave: RS/6000 and PowerPC Options. 39806 (line 190) 39807 * mno-wide-bitfields: MCore Options. (line 23) 39808 * mno-xgot: MIPS Options. (line 171) 39809 * mno-xl-compat: RS/6000 and PowerPC Options. 39810 (line 290) 39811 * mno-zero-extend: MMIX Options. (line 27) 39812 * mnobitfield: M680x0 Options. (line 227) 39813 * mnomacsave: SH Options. (line 92) 39814 * mnominmax: M68hc1x Options. (line 31) 39815 * mnop-fun-dllimport: ARM Options. (line 177) 39816 * mold-mnemonics: RS/6000 and PowerPC Options. 39817 (line 99) 39818 * momit-leaf-frame-pointer <1>: Blackfin Options. (line 39) 39819 * momit-leaf-frame-pointer: i386 and x86-64 Options. 39820 (line 563) 39821 * mone-byte-bool: Darwin Options. (line 92) 39822 * moptimize-membar: FRV Options. (line 201) 39823 * MP: Preprocessor Options. 39824 (line 229) 39825 * mpa-risc-1-0: HPPA Options. (line 19) 39826 * mpa-risc-1-1: HPPA Options. (line 19) 39827 * mpa-risc-2-0: HPPA Options. (line 19) 39828 * mpack: FRV Options. (line 119) 39829 * mpacked-stack: S/390 and zSeries Options. 39830 (line 46) 39831 * mpadstruct: SH Options. (line 118) 39832 * mpaired: RS/6000 and PowerPC Options. 39833 (line 218) 39834 * mpaired-single: MIPS Options. (line 253) 39835 * mpc32: i386 and x86-64 Options. 39836 (line 342) 39837 * mpc64: i386 and x86-64 Options. 39838 (line 342) 39839 * mpc80: i386 and x86-64 Options. 39840 (line 342) 39841 * mpcrel: M680x0 Options. (line 275) 39842 * mpdebug: CRIS Options. (line 40) 39843 * mpe: RS/6000 and PowerPC Options. 39844 (line 310) 39845 * mpic-register: ARM Options. (line 186) 39846 * mpoke-function-name: ARM Options. (line 200) 39847 * mpopcntb: RS/6000 and PowerPC Options. 39848 (line 31) 39849 * mportable-runtime: HPPA Options. (line 71) 39850 * mpower: RS/6000 and PowerPC Options. 39851 (line 31) 39852 * mpower2: RS/6000 and PowerPC Options. 39853 (line 31) 39854 * mpowerpc: RS/6000 and PowerPC Options. 39855 (line 31) 39856 * mpowerpc-gfxopt: RS/6000 and PowerPC Options. 39857 (line 31) 39858 * mpowerpc-gpopt: RS/6000 and PowerPC Options. 39859 (line 31) 39860 * mpowerpc64: RS/6000 and PowerPC Options. 39861 (line 31) 39862 * mprefergot: SH Options. (line 125) 39863 * mpreferred-stack-boundary: i386 and x86-64 Options. 39864 (line 377) 39865 * mprioritize-restricted-insns: RS/6000 and PowerPC Options. 39866 (line 447) 39867 * mprolog-function: V850 Options. (line 23) 39868 * mprologue-epilogue: CRIS Options. (line 76) 39869 * mprototype: RS/6000 and PowerPC Options. 39870 (line 533) 39871 * mpt-fixed: SH Options. (line 205) 39872 * mpush-args <1>: CRX Options. (line 13) 39873 * mpush-args: i386 and x86-64 Options. 39874 (line 515) 39875 * MQ: Preprocessor Options. 39876 (line 255) 39877 * mrecip: i386 and x86-64 Options. 39878 (line 490) 39879 * mregister-names: IA-64 Options. (line 37) 39880 * mregnames: RS/6000 and PowerPC Options. 39881 (line 637) 39882 * mregparm: i386 and x86-64 Options. 39883 (line 319) 39884 * mrelax <1>: SH Options. (line 70) 39885 * mrelax <2>: MN10300 Options. (line 34) 39886 * mrelax: H8/300 Options. (line 9) 39887 * mrelax-immediate: MCore Options. (line 19) 39888 * mrelocatable: RS/6000 and PowerPC Options. 39889 (line 407) 39890 * mrelocatable-lib: RS/6000 and PowerPC Options. 39891 (line 415) 39892 * mreturn-pointer-on-d0: MN10300 Options. (line 24) 39893 * mrodata: ARC Options. (line 30) 39894 * mrtd <1>: i386 and x86-64 Options. 39895 (line 295) 39896 * mrtd <2>: M680x0 Options. (line 236) 39897 * mrtd: Function Attributes. 39898 (line 171) 39899 * mrtp: VxWorks Options. (line 11) 39900 * ms: H8/300 Options. (line 17) 39901 * ms2600: H8/300 Options. (line 24) 39902 * msafe-dma: SPU Options. (line 17) 39903 * msahf: i386 and x86-64 Options. 39904 (line 480) 39905 * mscc: FRV Options. (line 140) 39906 * msched-ar-data-spec: IA-64 Options. (line 128) 39907 * msched-ar-in-data-spec: IA-64 Options. (line 149) 39908 * msched-br-data-spec: IA-64 Options. (line 121) 39909 * msched-br-in-data-spec: IA-64 Options. (line 142) 39910 * msched-control-ldc: IA-64 Options. (line 168) 39911 * msched-control-spec: IA-64 Options. (line 135) 39912 * msched-costly-dep: RS/6000 and PowerPC Options. 39913 (line 454) 39914 * msched-count-spec-in-critical-path: IA-64 Options. (line 194) 39915 * msched-in-control-spec: IA-64 Options. (line 156) 39916 * msched-ldc: IA-64 Options. (line 162) 39917 * msched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 39918 * msched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 39919 * msched-spec-verbose: IA-64 Options. (line 176) 39920 * mschedule: HPPA Options. (line 78) 39921 * mscore5: Score Options. (line 25) 39922 * mscore5u: Score Options. (line 28) 39923 * mscore7: Score Options. (line 31) 39924 * mscore7d: Score Options. (line 34) 39925 * msda: V850 Options. (line 40) 39926 * msdata <1>: RS/6000 and PowerPC Options. 39927 (line 611) 39928 * msdata: IA-64 Options. (line 42) 39929 * msdata-data: RS/6000 and PowerPC Options. 39930 (line 616) 39931 * msdata=default: RS/6000 and PowerPC Options. 39932 (line 611) 39933 * msdata=eabi: RS/6000 and PowerPC Options. 39934 (line 591) 39935 * msdata=none <1>: RS/6000 and PowerPC Options. 39936 (line 624) 39937 * msdata=none: M32R/D Options. (line 40) 39938 * msdata=sdata: M32R/D Options. (line 49) 39939 * msdata=sysv: RS/6000 and PowerPC Options. 39940 (line 602) 39941 * msdata=use: M32R/D Options. (line 53) 39942 * msecure-plt: RS/6000 and PowerPC Options. 39943 (line 193) 39944 * msep-data: Blackfin Options. (line 105) 39945 * mshared-library-id: Blackfin Options. (line 98) 39946 * mshort <1>: M680x0 Options. (line 216) 39947 * mshort: M68hc1x Options. (line 40) 39948 * msim <1>: M32C Options. (line 13) 39949 * msim <2>: Xstormy16 Options. (line 9) 39950 * msim <3>: RS/6000 and PowerPC Options. 39951 (line 543) 39952 * msim <4>: MT Options. (line 22) 39953 * msim: Blackfin Options. (line 32) 39954 * msingle-exit: MMIX Options. (line 66) 39955 * msingle-float: MIPS Options. (line 213) 39956 * msingle-pic-base: ARM Options. (line 180) 39957 * msio: HPPA Options. (line 107) 39958 * msize: AVR Options. (line 32) 39959 * mslow-bytes: MCore Options. (line 35) 39960 * msmall-data: DEC Alpha Options. (line 195) 39961 * msmall-exec: S/390 and zSeries Options. 39962 (line 72) 39963 * msmall-mem: SPU Options. (line 35) 39964 * msmall-text: DEC Alpha Options. (line 213) 39965 * msmartmips: MIPS Options. (line 249) 39966 * msoft-float <1>: i386 and x86-64 Options. 39967 (line 214) 39968 * msoft-float <2>: S/390 and zSeries Options. 39969 (line 11) 39970 * msoft-float <3>: HPPA Options. (line 91) 39971 * msoft-float <4>: RS/6000 and PowerPC Options. 39972 (line 333) 39973 * msoft-float <5>: SPARC Options. (line 25) 39974 * msoft-float <6>: FRV Options. (line 22) 39975 * msoft-float <7>: M680x0 Options. (line 199) 39976 * msoft-float <8>: DEC Alpha Options. (line 10) 39977 * msoft-float <9>: MIPS Options. (line 209) 39978 * msoft-float <10>: PDP-11 Options. (line 13) 39979 * msoft-float: ARM Options. (line 45) 39980 * msoft-quad-float: SPARC Options. (line 45) 39981 * msoft-reg-count: M68hc1x Options. (line 43) 39982 * mspace <1>: SH Options. (line 122) 39983 * mspace: V850 Options. (line 30) 39984 * mspe: RS/6000 and PowerPC Options. 39985 (line 213) 39986 * mspecld-anomaly: Blackfin Options. (line 46) 39987 * msplit: PDP-11 Options. (line 68) 39988 * msplit-addresses: MIPS Options. (line 391) 39989 * msse: i386 and x86-64 Options. 39990 (line 440) 39991 * msseregparm: i386 and x86-64 Options. 39992 (line 330) 39993 * mstack-align: CRIS Options. (line 60) 39994 * mstack-bias: SPARC Options. (line 222) 39995 * mstack-check-l1: Blackfin Options. (line 72) 39996 * mstack-guard: S/390 and zSeries Options. 39997 (line 148) 39998 * mstack-size: S/390 and zSeries Options. 39999 (line 148) 40000 * mstackrealign: i386 and x86-64 Options. 40001 (line 363) 40002 * mstdmain: SPU Options. (line 40) 40003 * mstrict-align <1>: M680x0 Options. (line 283) 40004 * mstrict-align: RS/6000 and PowerPC Options. 40005 (line 402) 40006 * mstring: RS/6000 and PowerPC Options. 40007 (line 350) 40008 * mstringop-strategy=ALG: i386 and x86-64 Options. 40009 (line 555) 40010 * mstructure-size-boundary: ARM Options. (line 132) 40011 * msvr4-struct-return: RS/6000 and PowerPC Options. 40012 (line 507) 40013 * mswdiv: RS/6000 and PowerPC Options. 40014 (line 171) 40015 * msym32: MIPS Options. (line 288) 40016 * MT: Preprocessor Options. 40017 (line 241) 40018 * mt: IA-64 Options. (line 106) 40019 * mtarget-align: Xtensa Options. (line 47) 40020 * mtda: V850 Options. (line 34) 40021 * mtext: ARC Options. (line 30) 40022 * mtext-section-literals: Xtensa Options. (line 35) 40023 * mthreads: i386 and x86-64 Options. 40024 (line 530) 40025 * mthumb: ARM Options. (line 221) 40026 * mthumb-interwork: ARM Options. (line 25) 40027 * mtiny-stack: AVR Options. (line 50) 40028 * mtls-direct-seg-refs: i386 and x86-64 Options. 40029 (line 571) 40030 * mtls-size: IA-64 Options. (line 97) 40031 * mtoc: RS/6000 and PowerPC Options. 40032 (line 424) 40033 * mtomcat-stats: FRV Options. (line 209) 40034 * mtoplevel-symbols: MMIX Options. (line 40) 40035 * mtp: ARM Options. (line 251) 40036 * mtpcs-frame: ARM Options. (line 227) 40037 * mtpcs-leaf-frame: ARM Options. (line 233) 40038 * mtpf-trace: S/390 and zSeries Options. 40039 (line 122) 40040 * mtrap-precision: DEC Alpha Options. (line 109) 40041 * mtune <1>: RS/6000 and PowerPC Options. 40042 (line 161) 40043 * mtune <2>: S/390 and zSeries Options. 40044 (line 115) 40045 * mtune <3>: SPARC Options. (line 158) 40046 * mtune <4>: i386 and x86-64 Options. 40047 (line 10) 40048 * mtune <5>: IA-64 Options. (line 101) 40049 * mtune <6>: M680x0 Options. (line 66) 40050 * mtune <7>: DEC Alpha Options. (line 262) 40051 * mtune <8>: MIPS Options. (line 55) 40052 * mtune <9>: ARM Options. (line 100) 40053 * mtune: CRIS Options. (line 16) 40054 * muclibc: GNU/Linux Options. (line 13) 40055 * muls: Score Options. (line 18) 40056 * multcost=NUMBER: SH Options. (line 135) 40057 * multi_module: Darwin Options. (line 199) 40058 * multilib-library-pic: FRV Options. (line 89) 40059 * multiply_defined: Darwin Options. (line 199) 40060 * multiply_defined_unused: Darwin Options. (line 199) 40061 * munaligned-doubles: SPARC Options. (line 59) 40062 * muninit-const-in-rodata: MIPS Options. (line 361) 40063 * munix: VAX Options. (line 9) 40064 * munix-asm: PDP-11 Options. (line 74) 40065 * munsafe-dma: SPU Options. (line 17) 40066 * mupdate: RS/6000 and PowerPC Options. 40067 (line 361) 40068 * musermode: SH Options. (line 130) 40069 * mv850: V850 Options. (line 49) 40070 * mv850e: V850 Options. (line 69) 40071 * mv850e1: V850 Options. (line 64) 40072 * mv8plus: SPARC Options. (line 170) 40073 * mveclibabi: i386 and x86-64 Options. 40074 (line 503) 40075 * mvis: SPARC Options. (line 177) 40076 * mvliw-branch: FRV Options. (line 164) 40077 * mvms-return-codes: DEC Alpha/VMS Options. 40078 (line 9) 40079 * mvolatile-asm-stop: IA-64 Options. (line 32) 40080 * mvr4130-align: MIPS Options. (line 547) 40081 * mvrsave: RS/6000 and PowerPC Options. 40082 (line 190) 40083 * mvxworks: RS/6000 and PowerPC Options. 40084 (line 564) 40085 * mwarn-dynamicstack: S/390 and zSeries Options. 40086 (line 141) 40087 * mwarn-framesize: S/390 and zSeries Options. 40088 (line 133) 40089 * mwarn-reloc: SPU Options. (line 10) 40090 * mwide-bitfields: MCore Options. (line 23) 40091 * mwindiss: RS/6000 and PowerPC Options. 40092 (line 568) 40093 * mwords-little-endian: ARM Options. (line 76) 40094 * mxgot: MIPS Options. (line 171) 40095 * mxl-compat: RS/6000 and PowerPC Options. 40096 (line 290) 40097 * myellowknife: RS/6000 and PowerPC Options. 40098 (line 559) 40099 * mzarch: S/390 and zSeries Options. 40100 (line 87) 40101 * mzda: V850 Options. (line 45) 40102 * mzero-extend: MMIX Options. (line 27) 40103 * no-integrated-cpp: C Dialect Options. (line 240) 40104 * no-red-zone: i386 and x86-64 Options. 40105 (line 600) 40106 * no_dead_strip_inits_and_terms: Darwin Options. (line 199) 40107 * noall_load: Darwin Options. (line 199) 40108 * nocpp: MIPS Options. (line 457) 40109 * nodefaultlibs: Link Options. (line 62) 40110 * nofixprebinding: Darwin Options. (line 199) 40111 * nolibdld: HPPA Options. (line 190) 40112 * nomultidefs: Darwin Options. (line 199) 40113 * non-static: VxWorks Options. (line 16) 40114 * noprebind: Darwin Options. (line 199) 40115 * noseglinkedit: Darwin Options. (line 199) 40116 * nostartfiles: Link Options. (line 57) 40117 * nostdinc: Preprocessor Options. 40118 (line 377) 40119 * nostdinc++ <1>: Preprocessor Options. 40120 (line 382) 40121 * nostdinc++: C++ Dialect Options. 40122 (line 254) 40123 * nostdlib: Link Options. (line 71) 40124 * o <1>: Preprocessor Options. 40125 (line 74) 40126 * o: Overall Options. (line 182) 40127 * O: Optimize Options. (line 32) 40128 * O0: Optimize Options. (line 107) 40129 * O1: Optimize Options. (line 32) 40130 * O2: Optimize Options. (line 69) 40131 * O3: Optimize Options. (line 101) 40132 * Os: Optimize Options. (line 111) 40133 * p: Debugging Options. (line 214) 40134 * P: Preprocessor Options. 40135 (line 586) 40136 * pagezero_size: Darwin Options. (line 199) 40137 * param: Optimize Options. (line 1501) 40138 * pass-exit-codes: Overall Options. (line 140) 40139 * pedantic <1>: Warnings and Errors. 40140 (line 25) 40141 * pedantic <2>: Warning Options. (line 53) 40142 * pedantic <3>: Preprocessor Options. 40143 (line 165) 40144 * pedantic <4>: C Extensions. (line 6) 40145 * pedantic <5>: Alternate Keywords. (line 29) 40146 * pedantic: Standards. (line 16) 40147 * pedantic-errors <1>: Warnings and Errors. 40148 (line 25) 40149 * pedantic-errors <2>: Preprocessor Options. 40150 (line 170) 40151 * pedantic-errors <3>: Non-bugs. (line 216) 40152 * pedantic-errors <4>: Standards. (line 16) 40153 * pedantic-errors: Warning Options. (line 95) 40154 * pg: Debugging Options. (line 220) 40155 * pie: Link Options. (line 92) 40156 * pipe: Overall Options. (line 204) 40157 * prebind: Darwin Options. (line 199) 40158 * prebind_all_twolevel_modules: Darwin Options. (line 199) 40159 * preprocessor: Preprocessor Options. 40160 (line 24) 40161 * print-file-name: Debugging Options. (line 832) 40162 * print-libgcc-file-name: Debugging Options. (line 853) 40163 * print-multi-directory: Debugging Options. (line 838) 40164 * print-multi-lib: Debugging Options. (line 843) 40165 * print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 40166 (line 244) 40167 * print-prog-name: Debugging Options. (line 850) 40168 * print-search-dirs: Debugging Options. (line 861) 40169 * print-sysroot-headers-suffix: Debugging Options. (line 874) 40170 * private_bundle: Darwin Options. (line 199) 40171 * pthread <1>: RS/6000 and PowerPC Options. 40172 (line 675) 40173 * pthread <2>: SPARC Options. (line 242) 40174 * pthread: IA-64 Options. (line 106) 40175 * pthreads: SPARC Options. (line 236) 40176 * Q: Debugging Options. (line 226) 40177 * Qn: System V Options. (line 18) 40178 * Qy: System V Options. (line 14) 40179 * rdynamic: Link Options. (line 98) 40180 * read_only_relocs: Darwin Options. (line 199) 40181 * remap: Preprocessor Options. 40182 (line 634) 40183 * s: Link Options. (line 105) 40184 * S <1>: Link Options. (line 20) 40185 * S: Overall Options. (line 165) 40186 * save-temps: Debugging Options. (line 794) 40187 * sectalign: Darwin Options. (line 199) 40188 * sectcreate: Darwin Options. (line 199) 40189 * sectobjectsymbols: Darwin Options. (line 199) 40190 * sectorder: Darwin Options. (line 199) 40191 * seg1addr: Darwin Options. (line 199) 40192 * seg_addr_table: Darwin Options. (line 199) 40193 * seg_addr_table_filename: Darwin Options. (line 199) 40194 * segaddr: Darwin Options. (line 199) 40195 * seglinkedit: Darwin Options. (line 199) 40196 * segprot: Darwin Options. (line 199) 40197 * segs_read_only_addr: Darwin Options. (line 199) 40198 * segs_read_write_addr: Darwin Options. (line 199) 40199 * shared: Link Options. (line 114) 40200 * shared-libgcc: Link Options. (line 122) 40201 * sim: CRIS Options. (line 108) 40202 * sim2: CRIS Options. (line 114) 40203 * single_module: Darwin Options. (line 199) 40204 * specs: Directory Options. (line 84) 40205 * static <1>: Link Options. (line 109) 40206 * static <2>: Darwin Options. (line 199) 40207 * static: HPPA Options. (line 194) 40208 * static-libgcc: Link Options. (line 122) 40209 * std <1>: Standards. (line 16) 40210 * std <2>: Other Builtins. (line 22) 40211 * std <3>: C Dialect Options. (line 47) 40212 * std: Non-bugs. (line 107) 40213 * std=: Preprocessor Options. 40214 (line 328) 40215 * sub_library: Darwin Options. (line 199) 40216 * sub_umbrella: Darwin Options. (line 199) 40217 * symbolic: Link Options. (line 157) 40218 * sysroot: Directory Options. (line 92) 40219 * target-help <1>: Preprocessor Options. 40220 (line 639) 40221 * target-help: Overall Options. (line 235) 40222 * threads <1>: HPPA Options. (line 207) 40223 * threads: SPARC Options. (line 230) 40224 * time: Debugging Options. (line 808) 40225 * tls: FRV Options. (line 75) 40226 * TLS: FRV Options. (line 72) 40227 * traditional <1>: C Dialect Options. (line 252) 40228 * traditional: Incompatibilities. (line 6) 40229 * traditional-cpp <1>: C Dialect Options. (line 252) 40230 * traditional-cpp: Preprocessor Options. 40231 (line 617) 40232 * trigraphs <1>: Preprocessor Options. 40233 (line 621) 40234 * trigraphs: C Dialect Options. (line 236) 40235 * twolevel_namespace: Darwin Options. (line 199) 40236 * U: Preprocessor Options. 40237 (line 56) 40238 * u: Link Options. (line 179) 40239 * umbrella: Darwin Options. (line 199) 40240 * undef: Preprocessor Options. 40241 (line 60) 40242 * undefined: Darwin Options. (line 199) 40243 * unexported_symbols_list: Darwin Options. (line 199) 40244 * v <1>: Preprocessor Options. 40245 (line 643) 40246 * v: Overall Options. (line 193) 40247 * V: Target Options. (line 24) 40248 * version <1>: Overall Options. (line 343) 40249 * version: Preprocessor Options. 40250 (line 656) 40251 * W <1>: Warning Options. (line 1105) 40252 * W: Incompatibilities. (line 64) 40253 * w: Preprocessor Options. 40254 (line 161) 40255 * W: Warning Options. (line 1002) 40256 * w: Warning Options. (line 18) 40257 * W: Warning Options. (line 145) 40258 * Wa: Assembler Options. (line 9) 40259 * Wabi: C++ Dialect Options. 40260 (line 268) 40261 * Waddress: Warning Options. (line 935) 40262 * Waggregate-return: Warning Options. (line 953) 40263 * Wall <1>: Warning Options. (line 99) 40264 * Wall <2>: Preprocessor Options. 40265 (line 80) 40266 * Wall: Standard Libraries. (line 6) 40267 * Warray-bounds: Warning Options. (line 692) 40268 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 40269 (line 198) 40270 * Wattributes: Warning Options. (line 958) 40271 * Wbad-function-cast: Warning Options. (line 855) 40272 * Wcast-align: Warning Options. (line 875) 40273 * Wcast-qual: Warning Options. (line 870) 40274 * Wchar-subscripts: Warning Options. (line 189) 40275 * Wclobbered: Warning Options. (line 893) 40276 * Wcomment <1>: Warning Options. (line 194) 40277 * Wcomment: Preprocessor Options. 40278 (line 88) 40279 * Wcomments: Preprocessor Options. 40280 (line 88) 40281 * Wconversion: Warning Options. (line 897) 40282 * Wcoverage-mismatch: Language Independent Options. 40283 (line 42) 40284 * Wctor-dtor-privacy: C++ Dialect Options. 40285 (line 346) 40286 * Wdeclaration-after-statement: Warning Options. (line 813) 40287 * Wdeprecated: C++ Dialect Options. 40288 (line 403) 40289 * Wdeprecated-declarations: Warning Options. (line 1096) 40290 * Wdisabled-optimization: Warning Options. (line 1227) 40291 * Wdiv-by-zero: Warning Options. (line 697) 40292 * weak_reference_mismatches: Darwin Options. (line 199) 40293 * Weffc++: C++ Dialect Options. 40294 (line 373) 40295 * Wempty-body: Warning Options. (line 916) 40296 * Wendif-labels <1>: Preprocessor Options. 40297 (line 138) 40298 * Wendif-labels: Warning Options. (line 823) 40299 * Werror <1>: Warning Options. (line 21) 40300 * Werror: Preprocessor Options. 40301 (line 151) 40302 * Werror=: Warning Options. (line 24) 40303 * Wextra: Warning Options. (line 1002) 40304 * Wfatal-errors: Warning Options. (line 38) 40305 * Wfloat-equal: Warning Options. (line 713) 40306 * Wformat <1>: Function Attributes. 40307 (line 369) 40308 * Wformat: Warning Options. (line 199) 40309 * Wformat-extra-args: Warning Options. (line 238) 40310 * Wformat-nonliteral <1>: Warning Options. (line 256) 40311 * Wformat-nonliteral: Function Attributes. 40312 (line 422) 40313 * Wformat-security: Warning Options. (line 261) 40314 * Wformat-y2k: Warning Options. (line 234) 40315 * Wformat-zero-length: Warning Options. (line 252) 40316 * Wformat=2: Warning Options. (line 272) 40317 * whatsloaded: Darwin Options. (line 199) 40318 * whyload: Darwin Options. (line 199) 40319 * Wignored-qualifiers: Warning Options. (line 312) 40320 * Wimplicit: Warning Options. (line 308) 40321 * Wimplicit-function-declaration: Warning Options. (line 302) 40322 * Wimplicit-int: Warning Options. (line 298) 40323 * Wimport <1>: Warning Options. (line 186) 40324 * Wimport: Preprocessor Options. 40325 (line 111) 40326 * Winit-self: Warning Options. (line 284) 40327 * Winline <1>: Inline. (line 63) 40328 * Winline: Warning Options. (line 1167) 40329 * Wint-to-pointer-cast: Warning Options. (line 1194) 40330 * Winvalid-offsetof: Warning Options. (line 1180) 40331 * Winvalid-pch: Warning Options. (line 1202) 40332 * Wl: Link Options. (line 175) 40333 * Wlarger-than-LEN: Warning Options. (line 832) 40334 * Wlogical-op: Warning Options. (line 948) 40335 * Wlong-long: Warning Options. (line 1206) 40336 * Wmain: Warning Options. (line 323) 40337 * Wmissing-braces: Warning Options. (line 329) 40338 * Wmissing-declarations: Warning Options. (line 994) 40339 * Wmissing-field-initializers: Warning Options. (line 1002) 40340 * Wmissing-format-attribute: Warning Options. (line 1028) 40341 * Wmissing-include-dirs: Warning Options. (line 339) 40342 * Wmissing-noreturn: Warning Options. (line 1020) 40343 * Wmissing-parameter-type: Warning Options. (line 980) 40344 * Wmissing-prototypes: Warning Options. (line 988) 40345 * Wmultichar: Warning Options. (line 1047) 40346 * Wnested-externs: Warning Options. (line 1142) 40347 * Wno-abi: C++ Dialect Options. 40348 (line 268) 40349 * Wno-address: Warning Options. (line 935) 40350 * Wno-aggregate-return: Warning Options. (line 953) 40351 * Wno-all: Warning Options. (line 99) 40352 * Wno-array-bounds: Warning Options. (line 692) 40353 * Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 40354 (line 198) 40355 * Wno-attributes: Warning Options. (line 958) 40356 * Wno-bad-function-cast: Warning Options. (line 855) 40357 * Wno-cast-align: Warning Options. (line 875) 40358 * Wno-cast-qual: Warning Options. (line 870) 40359 * Wno-char-subscripts: Warning Options. (line 189) 40360 * Wno-clobbered: Warning Options. (line 893) 40361 * Wno-comment: Warning Options. (line 194) 40362 * Wno-conversion: Warning Options. (line 897) 40363 * Wno-ctor-dtor-privacy: C++ Dialect Options. 40364 (line 346) 40365 * Wno-declaration-after-statement: Warning Options. (line 813) 40366 * Wno-deprecated: C++ Dialect Options. 40367 (line 403) 40368 * Wno-deprecated-declarations: Warning Options. (line 1096) 40369 * Wno-disabled-optimization: Warning Options. (line 1227) 40370 * Wno-div-by-zero: Warning Options. (line 697) 40371 * Wno-effc++: C++ Dialect Options. 40372 (line 373) 40373 * Wno-empty-body: Warning Options. (line 916) 40374 * Wno-endif-labels: Warning Options. (line 823) 40375 * Wno-error: Warning Options. (line 21) 40376 * Wno-error=: Warning Options. (line 24) 40377 * Wno-extra: Warning Options. (line 1002) 40378 * Wno-fatal-errors: Warning Options. (line 38) 40379 * Wno-float-equal: Warning Options. (line 713) 40380 * Wno-format: Warning Options. (line 199) 40381 * Wno-format-extra-args: Warning Options. (line 238) 40382 * Wno-format-nonliteral: Warning Options. (line 256) 40383 * Wno-format-security: Warning Options. (line 261) 40384 * Wno-format-y2k: Warning Options. (line 234) 40385 * Wno-format-zero-length: Warning Options. (line 252) 40386 * Wno-format=2: Warning Options. (line 272) 40387 * Wno-ignored-qualifiers: Warning Options. (line 312) 40388 * Wno-implicit: Warning Options. (line 308) 40389 * Wno-implicit-function-declaration: Warning Options. (line 302) 40390 * Wno-implicit-int: Warning Options. (line 298) 40391 * Wno-import: Warning Options. (line 186) 40392 * Wno-init-self: Warning Options. (line 284) 40393 * Wno-inline: Warning Options. (line 1167) 40394 * Wno-int-to-pointer-cast: Warning Options. (line 1194) 40395 * Wno-invalid-offsetof: Warning Options. (line 1180) 40396 * Wno-invalid-pch: Warning Options. (line 1202) 40397 * Wno-logical-op: Warning Options. (line 948) 40398 * Wno-long-long: Warning Options. (line 1206) 40399 * Wno-main: Warning Options. (line 323) 40400 * Wno-missing-braces: Warning Options. (line 329) 40401 * Wno-missing-declarations: Warning Options. (line 994) 40402 * Wno-missing-field-initializers: Warning Options. (line 1002) 40403 * Wno-missing-format-attribute: Warning Options. (line 1028) 40404 * Wno-missing-include-dirs: Warning Options. (line 339) 40405 * Wno-missing-noreturn: Warning Options. (line 1020) 40406 * Wno-missing-parameter-type: Warning Options. (line 980) 40407 * Wno-missing-prototypes: Warning Options. (line 988) 40408 * Wno-multichar: Warning Options. (line 1047) 40409 * Wno-nested-externs: Warning Options. (line 1142) 40410 * Wno-non-template-friend: C++ Dialect Options. 40411 (line 414) 40412 * Wno-non-virtual-dtor: C++ Dialect Options. 40413 (line 351) 40414 * Wno-nonnull: Warning Options. (line 277) 40415 * Wno-old-style-cast: C++ Dialect Options. 40416 (line 430) 40417 * Wno-old-style-declaration: Warning Options. (line 970) 40418 * Wno-old-style-definition: Warning Options. (line 976) 40419 * Wno-overflow: Warning Options. (line 1102) 40420 * Wno-overlength-strings: Warning Options. (line 1247) 40421 * Wno-overloaded-virtual: C++ Dialect Options. 40422 (line 436) 40423 * Wno-override-init: Warning Options. (line 1105) 40424 * Wno-packed: Warning Options. (line 1113) 40425 * Wno-padded: Warning Options. (line 1130) 40426 * Wno-parentheses: Warning Options. (line 342) 40427 * Wno-pmf-conversions <1>: C++ Dialect Options. 40428 (line 455) 40429 * Wno-pmf-conversions: Bound member functions. 40430 (line 35) 40431 * Wno-pointer-arith: Warning Options. (line 841) 40432 * Wno-pointer-sign: Warning Options. (line 1236) 40433 * Wno-pointer-to-int-cast: Warning Options. (line 1198) 40434 * Wno-pragmas: Warning Options. (line 595) 40435 * Wno-protocol: Objective-C and Objective-C++ Dialect Options. 40436 (line 202) 40437 * Wno-redundant-decls: Warning Options. (line 1137) 40438 * Wno-reorder: C++ Dialect Options. 40439 (line 357) 40440 * Wno-return-type: Warning Options. (line 432) 40441 * Wno-selector: Objective-C and Objective-C++ Dialect Options. 40442 (line 212) 40443 * Wno-sequence-point: Warning Options. (line 386) 40444 * Wno-shadow: Warning Options. (line 827) 40445 * Wno-sign-compare: Warning Options. (line 922) 40446 * Wno-sign-conversion: Warning Options. (line 929) 40447 * Wno-sign-promo: C++ Dialect Options. 40448 (line 459) 40449 * Wno-stack-protector: Warning Options. (line 1242) 40450 * Wno-strict-aliasing: Warning Options. (line 600) 40451 * Wno-strict-aliasing=n: Warning Options. (line 608) 40452 * Wno-strict-null-sentinel: C++ Dialect Options. 40453 (line 407) 40454 * Wno-strict-overflow: Warning Options. (line 641) 40455 * Wno-strict-prototypes: Warning Options. (line 964) 40456 * Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 40457 (line 224) 40458 * Wno-switch: Warning Options. (line 447) 40459 * Wno-switch-default: Warning Options. (line 455) 40460 * Wno-switch-enum: Warning Options. (line 458) 40461 * Wno-system-headers: Warning Options. (line 702) 40462 * Wno-traditional: Warning Options. (line 728) 40463 * Wno-traditional-conversion: Warning Options. (line 805) 40464 * Wno-trigraphs: Warning Options. (line 464) 40465 * Wno-type-limits: Warning Options. (line 848) 40466 * Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 40467 (line 232) 40468 * Wno-undef: Warning Options. (line 820) 40469 * Wno-uninitialized: Warning Options. (line 513) 40470 * Wno-unknown-pragmas: Warning Options. (line 588) 40471 * Wno-unreachable-code: Warning Options. (line 1145) 40472 * Wno-unsafe-loop-optimizations: Warning Options. (line 835) 40473 * Wno-unused: Warning Options. (line 506) 40474 * Wno-unused-function: Warning Options. (line 469) 40475 * Wno-unused-label: Warning Options. (line 474) 40476 * Wno-unused-parameter: Warning Options. (line 481) 40477 * Wno-unused-value: Warning Options. (line 496) 40478 * Wno-unused-variable: Warning Options. (line 488) 40479 * Wno-variadic-macros: Warning Options. (line 1212) 40480 * Wno-vla: Warning Options. (line 1218) 40481 * Wno-volatile-register-var: Warning Options. (line 1222) 40482 * Wno-write-strings: Warning Options. (line 881) 40483 * Wnon-template-friend: C++ Dialect Options. 40484 (line 414) 40485 * Wnon-virtual-dtor: C++ Dialect Options. 40486 (line 351) 40487 * Wnonnull: Warning Options. (line 277) 40488 * Wnormalized=: Warning Options. (line 1053) 40489 * Wold-style-cast: C++ Dialect Options. 40490 (line 430) 40491 * Wold-style-declaration: Warning Options. (line 970) 40492 * Wold-style-definition: Warning Options. (line 976) 40493 * Woverflow: Warning Options. (line 1102) 40494 * Woverlength-strings: Warning Options. (line 1247) 40495 * Woverloaded-virtual: C++ Dialect Options. 40496 (line 436) 40497 * Woverride-init: Warning Options. (line 1105) 40498 * Wp: Preprocessor Options. 40499 (line 13) 40500 * Wpacked: Warning Options. (line 1113) 40501 * Wpadded: Warning Options. (line 1130) 40502 * Wparentheses: Warning Options. (line 342) 40503 * Wpmf-conversions: C++ Dialect Options. 40504 (line 455) 40505 * Wpointer-arith <1>: Warning Options. (line 841) 40506 * Wpointer-arith: Pointer Arith. (line 13) 40507 * Wpointer-sign: Warning Options. (line 1236) 40508 * Wpointer-to-int-cast: Warning Options. (line 1198) 40509 * Wpragmas: Warning Options. (line 595) 40510 * Wprotocol: Objective-C and Objective-C++ Dialect Options. 40511 (line 202) 40512 * Wredundant-decls: Warning Options. (line 1137) 40513 * Wreorder: C++ Dialect Options. 40514 (line 357) 40515 * Wreturn-type: Warning Options. (line 432) 40516 * Wselector: Objective-C and Objective-C++ Dialect Options. 40517 (line 212) 40518 * Wsequence-point: Warning Options. (line 386) 40519 * Wshadow: Warning Options. (line 827) 40520 * Wsign-compare: Warning Options. (line 922) 40521 * Wsign-conversion: Warning Options. (line 929) 40522 * Wsign-promo: C++ Dialect Options. 40523 (line 459) 40524 * Wstack-protector: Warning Options. (line 1242) 40525 * Wstrict-aliasing: Warning Options. (line 600) 40526 * Wstrict-aliasing=n: Warning Options. (line 608) 40527 * Wstrict-null-sentinel: C++ Dialect Options. 40528 (line 407) 40529 * Wstrict-overflow: Warning Options. (line 641) 40530 * Wstrict-prototypes: Warning Options. (line 964) 40531 * Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 40532 (line 224) 40533 * Wswitch: Warning Options. (line 447) 40534 * Wswitch-default: Warning Options. (line 455) 40535 * Wswitch-enum: Warning Options. (line 458) 40536 * Wsystem-headers <1>: Preprocessor Options. 40537 (line 155) 40538 * Wsystem-headers: Warning Options. (line 702) 40539 * Wtraditional <1>: Warning Options. (line 728) 40540 * Wtraditional: Preprocessor Options. 40541 (line 105) 40542 * Wtraditional-conversion <1>: Warning Options. (line 805) 40543 * Wtraditional-conversion: Protoize Caveats. (line 31) 40544 * Wtrigraphs <1>: Preprocessor Options. 40545 (line 93) 40546 * Wtrigraphs: Warning Options. (line 464) 40547 * Wtype-limits: Warning Options. (line 848) 40548 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 40549 (line 232) 40550 * Wundef <1>: Warning Options. (line 820) 40551 * Wundef: Preprocessor Options. 40552 (line 114) 40553 * Wuninitialized: Warning Options. (line 513) 40554 * Wunknown-pragmas: Warning Options. (line 588) 40555 * Wunreachable-code: Warning Options. (line 1145) 40556 * Wunsafe-loop-optimizations: Warning Options. (line 835) 40557 * Wunused: Warning Options. (line 506) 40558 * Wunused-function: Warning Options. (line 469) 40559 * Wunused-label: Warning Options. (line 474) 40560 * Wunused-macros: Preprocessor Options. 40561 (line 119) 40562 * Wunused-parameter: Warning Options. (line 481) 40563 * Wunused-value: Warning Options. (line 496) 40564 * Wunused-variable: Warning Options. (line 488) 40565 * Wvariadic-macros: Warning Options. (line 1212) 40566 * Wvla: Warning Options. (line 1218) 40567 * Wvolatile-register-var: Warning Options. (line 1222) 40568 * Wwrite-strings: Warning Options. (line 881) 40569 * x <1>: Preprocessor Options. 40570 (line 312) 40571 * x: Overall Options. (line 116) 40572 * Xassembler: Assembler Options. (line 13) 40573 * Xbind-lazy: VxWorks Options. (line 26) 40574 * Xbind-now: VxWorks Options. (line 30) 40575 * Xlinker: Link Options. (line 163) 40576 * Ym: System V Options. (line 26) 40577 * YP: System V Options. (line 22) 40578 40579 40580 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 40581 40582 Keyword Index 40583 ************* 40584 40585 [index] 40586 * Menu: 40587 40588 * ! in constraint: Multi-Alternative. (line 33) 40589 * # in constraint: Modifiers. (line 57) 40590 * #pragma: Pragmas. (line 6) 40591 * #pragma implementation: C++ Interface. (line 39) 40592 * #pragma implementation, implied: C++ Interface. (line 46) 40593 * #pragma interface: C++ Interface. (line 20) 40594 * #pragma, reason for not using: Function Attributes. 40595 (line 1117) 40596 * $: Dollar Signs. (line 6) 40597 * % in constraint: Modifiers. (line 45) 40598 * %include: Spec Files. (line 27) 40599 * %include_noerr: Spec Files. (line 31) 40600 * %rename: Spec Files. (line 35) 40601 * & in constraint: Modifiers. (line 25) 40602 * ': Incompatibilities. (line 116) 40603 * (: Constructing Calls. (line 53) 40604 * * in constraint: Modifiers. (line 62) 40605 * + in constraint: Modifiers. (line 12) 40606 * -lgcc, use with -nodefaultlibs: Link Options. (line 79) 40607 * -lgcc, use with -nostdlib: Link Options. (line 79) 40608 * -nodefaultlibs and unresolved references: Link Options. (line 79) 40609 * -nostdlib and unresolved references: Link Options. (line 79) 40610 * .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 40611 (line 629) 40612 * //: C++ Comments. (line 6) 40613 * 0 in constraint: Simple Constraints. (line 115) 40614 * < in constraint: Simple Constraints. (line 46) 40615 * = in constraint: Modifiers. (line 8) 40616 * > in constraint: Simple Constraints. (line 50) 40617 * ? in constraint: Multi-Alternative. (line 27) 40618 * ?: extensions: Conditionals. (line 6) 40619 * ?: side effect: Conditionals. (line 20) 40620 * _ in variables in macros: Typeof. (line 42) 40621 * __builtin___clear_cache: Other Builtins. (line 272) 40622 * __builtin___fprintf_chk: Object Size Checking. 40623 (line 6) 40624 * __builtin___memcpy_chk: Object Size Checking. 40625 (line 6) 40626 * __builtin___memmove_chk: Object Size Checking. 40627 (line 6) 40628 * __builtin___mempcpy_chk: Object Size Checking. 40629 (line 6) 40630 * __builtin___memset_chk: Object Size Checking. 40631 (line 6) 40632 * __builtin___printf_chk: Object Size Checking. 40633 (line 6) 40634 * __builtin___snprintf_chk: Object Size Checking. 40635 (line 6) 40636 * __builtin___sprintf_chk: Object Size Checking. 40637 (line 6) 40638 * __builtin___stpcpy_chk: Object Size Checking. 40639 (line 6) 40640 * __builtin___strcat_chk: Object Size Checking. 40641 (line 6) 40642 * __builtin___strcpy_chk: Object Size Checking. 40643 (line 6) 40644 * __builtin___strncat_chk: Object Size Checking. 40645 (line 6) 40646 * __builtin___strncpy_chk: Object Size Checking. 40647 (line 6) 40648 * __builtin___vfprintf_chk: Object Size Checking. 40649 (line 6) 40650 * __builtin___vprintf_chk: Object Size Checking. 40651 (line 6) 40652 * __builtin___vsnprintf_chk: Object Size Checking. 40653 (line 6) 40654 * __builtin___vsprintf_chk: Object Size Checking. 40655 (line 6) 40656 * __builtin_apply: Constructing Calls. (line 31) 40657 * __builtin_apply_args: Constructing Calls. (line 20) 40658 * __builtin_bswap32: Other Builtins. (line 473) 40659 * __builtin_bswap64: Other Builtins. (line 478) 40660 * __builtin_choose_expr: Other Builtins. (line 154) 40661 * __builtin_clz: Other Builtins. (line 406) 40662 * __builtin_clzl: Other Builtins. (line 424) 40663 * __builtin_clzll: Other Builtins. (line 444) 40664 * __builtin_constant_p: Other Builtins. (line 194) 40665 * __builtin_ctz: Other Builtins. (line 410) 40666 * __builtin_ctzl: Other Builtins. (line 428) 40667 * __builtin_ctzll: Other Builtins. (line 448) 40668 * __builtin_expect: Other Builtins. (line 240) 40669 * __builtin_ffs: Other Builtins. (line 402) 40670 * __builtin_ffsl: Other Builtins. (line 420) 40671 * __builtin_ffsll: Other Builtins. (line 440) 40672 * __builtin_frame_address: Return Address. (line 34) 40673 * __builtin_huge_val: Other Builtins. (line 323) 40674 * __builtin_huge_valf: Other Builtins. (line 328) 40675 * __builtin_huge_vall: Other Builtins. (line 331) 40676 * __builtin_inf: Other Builtins. (line 335) 40677 * __builtin_infd128: Other Builtins. (line 345) 40678 * __builtin_infd32: Other Builtins. (line 339) 40679 * __builtin_infd64: Other Builtins. (line 342) 40680 * __builtin_inff: Other Builtins. (line 349) 40681 * __builtin_infl: Other Builtins. (line 354) 40682 * __builtin_isfinite: Other Builtins. (line 6) 40683 * __builtin_isgreater: Other Builtins. (line 6) 40684 * __builtin_isgreaterequal: Other Builtins. (line 6) 40685 * __builtin_isless: Other Builtins. (line 6) 40686 * __builtin_islessequal: Other Builtins. (line 6) 40687 * __builtin_islessgreater: Other Builtins. (line 6) 40688 * __builtin_isnormal: Other Builtins. (line 6) 40689 * __builtin_isunordered: Other Builtins. (line 6) 40690 * __builtin_nan: Other Builtins. (line 358) 40691 * __builtin_nand128: Other Builtins. (line 380) 40692 * __builtin_nand32: Other Builtins. (line 374) 40693 * __builtin_nand64: Other Builtins. (line 377) 40694 * __builtin_nanf: Other Builtins. (line 384) 40695 * __builtin_nanl: Other Builtins. (line 387) 40696 * __builtin_nans: Other Builtins. (line 391) 40697 * __builtin_nansf: Other Builtins. (line 395) 40698 * __builtin_nansl: Other Builtins. (line 398) 40699 * __builtin_object_size: Object Size Checking. 40700 (line 11) 40701 * __builtin_offsetof: Offsetof. (line 6) 40702 * __builtin_parity: Other Builtins. (line 417) 40703 * __builtin_parityl: Other Builtins. (line 436) 40704 * __builtin_parityll: Other Builtins. (line 456) 40705 * __builtin_popcount: Other Builtins. (line 414) 40706 * __builtin_popcountl: Other Builtins. (line 432) 40707 * __builtin_popcountll: Other Builtins. (line 452) 40708 * __builtin_powi: Other Builtins. (line 6) 40709 * __builtin_powif: Other Builtins. (line 465) 40710 * __builtin_powil: Other Builtins. (line 469) 40711 * __builtin_prefetch: Other Builtins. (line 284) 40712 * __builtin_return: Constructing Calls. (line 48) 40713 * __builtin_return_address: Return Address. (line 11) 40714 * __builtin_trap: Other Builtins. (line 264) 40715 * __builtin_types_compatible_p: Other Builtins. (line 108) 40716 * __complex__ keyword: Complex. (line 6) 40717 * __declspec(dllexport): Function Attributes. 40718 (line 245) 40719 * __declspec(dllimport): Function Attributes. 40720 (line 275) 40721 * __extension__: Alternate Keywords. (line 29) 40722 * __float128 data type: Floating Types. (line 6) 40723 * __float80 data type: Floating Types. (line 6) 40724 * __func__ identifier: Function Names. (line 6) 40725 * __FUNCTION__ identifier: Function Names. (line 6) 40726 * __imag__ keyword: Complex. (line 27) 40727 * __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 40728 * __real__ keyword: Complex. (line 27) 40729 * __STDC_HOSTED__: Standards. (line 13) 40730 * __sync_add_and_fetch: Atomic Builtins. (line 57) 40731 * __sync_and_and_fetch: Atomic Builtins. (line 57) 40732 * __sync_bool_compare_and_swap: Atomic Builtins. (line 65) 40733 * __sync_fetch_and_add: Atomic Builtins. (line 45) 40734 * __sync_fetch_and_and: Atomic Builtins. (line 45) 40735 * __sync_fetch_and_nand: Atomic Builtins. (line 45) 40736 * __sync_fetch_and_or: Atomic Builtins. (line 45) 40737 * __sync_fetch_and_sub: Atomic Builtins. (line 45) 40738 * __sync_fetch_and_xor: Atomic Builtins. (line 45) 40739 * __sync_lock_release: Atomic Builtins. (line 95) 40740 * __sync_lock_test_and_set: Atomic Builtins. (line 77) 40741 * __sync_nand_and_fetch: Atomic Builtins. (line 57) 40742 * __sync_or_and_fetch: Atomic Builtins. (line 57) 40743 * __sync_sub_and_fetch: Atomic Builtins. (line 57) 40744 * __sync_synchronize: Atomic Builtins. (line 74) 40745 * __sync_val_compare_and_swap: Atomic Builtins. (line 65) 40746 * __sync_xor_and_fetch: Atomic Builtins. (line 57) 40747 * __thread: Thread-Local. (line 6) 40748 * _Accum data type: Fixed-Point. (line 6) 40749 * _Complex keyword: Complex. (line 6) 40750 * _Decimal128 data type: Decimal Float. (line 6) 40751 * _Decimal32 data type: Decimal Float. (line 6) 40752 * _Decimal64 data type: Decimal Float. (line 6) 40753 * _exit: Other Builtins. (line 6) 40754 * _Exit: Other Builtins. (line 6) 40755 * _Fract data type: Fixed-Point. (line 6) 40756 * _Sat data type: Fixed-Point. (line 6) 40757 * ABI: Compatibility. (line 6) 40758 * abort: Other Builtins. (line 6) 40759 * abs: Other Builtins. (line 6) 40760 * accessing volatiles: Volatiles. (line 6) 40761 * acos: Other Builtins. (line 6) 40762 * acosf: Other Builtins. (line 6) 40763 * acosh: Other Builtins. (line 6) 40764 * acoshf: Other Builtins. (line 6) 40765 * acoshl: Other Builtins. (line 6) 40766 * acosl: Other Builtins. (line 6) 40767 * Ada: G++ and GCC. (line 30) 40768 * additional floating types: Floating Types. (line 6) 40769 * address constraints: Simple Constraints. (line 142) 40770 * address of a label: Labels as Values. (line 6) 40771 * address_operand: Simple Constraints. (line 146) 40772 * alias attribute: Function Attributes. 40773 (line 34) 40774 * aliasing of parameters: Code Gen Options. (line 374) 40775 * aligned attribute <1>: Variable Attributes. 40776 (line 23) 40777 * aligned attribute <2>: Function Attributes. 40778 (line 47) 40779 * aligned attribute: Type Attributes. (line 31) 40780 * alignment: Alignment. (line 6) 40781 * alloc_size attribute: Function Attributes. 40782 (line 67) 40783 * alloca: Other Builtins. (line 6) 40784 * alloca vs variable-length arrays: Variable Length. (line 27) 40785 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 40786 (line 651) 40787 * alternate keywords: Alternate Keywords. (line 6) 40788 * always_inline function attribute: Function Attributes. 40789 (line 88) 40790 * AMD x86-64 Options: i386 and x86-64 Options. 40791 (line 6) 40792 * AMD1: Standards. (line 13) 40793 * ANSI C: Standards. (line 13) 40794 * ANSI C standard: Standards. (line 13) 40795 * ANSI C89: Standards. (line 13) 40796 * ANSI support: C Dialect Options. (line 10) 40797 * ANSI X3.159-1989: Standards. (line 13) 40798 * apostrophes: Incompatibilities. (line 116) 40799 * application binary interface: Compatibility. (line 6) 40800 * ARC Options: ARC Options. (line 6) 40801 * ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 40802 (line 6) 40803 * ARM options: ARM Options. (line 6) 40804 * arrays of length zero: Zero Length. (line 6) 40805 * arrays of variable length: Variable Length. (line 6) 40806 * arrays, non-lvalue: Subscripting. (line 6) 40807 * artificial function attribute: Function Attributes. 40808 (line 130) 40809 * asin: Other Builtins. (line 6) 40810 * asinf: Other Builtins. (line 6) 40811 * asinh: Other Builtins. (line 6) 40812 * asinhf: Other Builtins. (line 6) 40813 * asinhl: Other Builtins. (line 6) 40814 * asinl: Other Builtins. (line 6) 40815 * asm constraints: Constraints. (line 6) 40816 * asm expressions: Extended Asm. (line 6) 40817 * assembler instructions: Extended Asm. (line 6) 40818 * assembler names for identifiers: Asm Labels. (line 6) 40819 * assembly code, invalid: Bug Criteria. (line 12) 40820 * atan: Other Builtins. (line 6) 40821 * atan2: Other Builtins. (line 6) 40822 * atan2f: Other Builtins. (line 6) 40823 * atan2l: Other Builtins. (line 6) 40824 * atanf: Other Builtins. (line 6) 40825 * atanh: Other Builtins. (line 6) 40826 * atanhf: Other Builtins. (line 6) 40827 * atanhl: Other Builtins. (line 6) 40828 * atanl: Other Builtins. (line 6) 40829 * attribute of types: Type Attributes. (line 6) 40830 * attribute of variables: Variable Attributes. 40831 (line 6) 40832 * attribute syntax: Attribute Syntax. (line 6) 40833 * autoincrement/decrement addressing: Simple Constraints. (line 28) 40834 * automatic inline for C++ member fns: Inline. (line 71) 40835 * AVR Options: AVR Options. (line 6) 40836 * Backwards Compatibility: Backwards Compatibility. 40837 (line 6) 40838 * base class members: Name lookup. (line 6) 40839 * bcmp: Other Builtins. (line 6) 40840 * below100 attribute: Variable Attributes. 40841 (line 480) 40842 * binary compatibility: Compatibility. (line 6) 40843 * Binary constants using the 0b prefix: Binary constants. (line 6) 40844 * Blackfin Options: Blackfin Options. (line 6) 40845 * bound pointer to member function: Bound member functions. 40846 (line 6) 40847 * bounds checking: Optimize Options. (line 330) 40848 * bug criteria: Bug Criteria. (line 6) 40849 * bugs: Bugs. (line 6) 40850 * bugs, known: Trouble. (line 6) 40851 * built-in functions <1>: C Dialect Options. (line 170) 40852 * built-in functions: Other Builtins. (line 6) 40853 * bzero: Other Builtins. (line 6) 40854 * C compilation options: Invoking GCC. (line 17) 40855 * C intermediate output, nonexistent: G++ and GCC. (line 35) 40856 * C language extensions: C Extensions. (line 6) 40857 * C language, traditional: C Dialect Options. (line 250) 40858 * C standard: Standards. (line 13) 40859 * C standards: Standards. (line 13) 40860 * c++: Invoking G++. (line 14) 40861 * C++: G++ and GCC. (line 30) 40862 * C++ comments: C++ Comments. (line 6) 40863 * C++ compilation options: Invoking GCC. (line 23) 40864 * C++ interface and implementation headers: C++ Interface. (line 6) 40865 * C++ language extensions: C++ Extensions. (line 6) 40866 * C++ member fns, automatically inline: Inline. (line 71) 40867 * C++ misunderstandings: C++ Misunderstandings. 40868 (line 6) 40869 * C++ options, command line: C++ Dialect Options. 40870 (line 6) 40871 * C++ pragmas, effect on inlining: C++ Interface. (line 66) 40872 * C++ source file suffixes: Invoking G++. (line 6) 40873 * C++ static data, declaring and defining: Static Definitions. 40874 (line 6) 40875 * C89: Standards. (line 13) 40876 * C90: Standards. (line 13) 40877 * C94: Standards. (line 13) 40878 * C95: Standards. (line 13) 40879 * C99: Standards. (line 13) 40880 * C9X: Standards. (line 13) 40881 * C_INCLUDE_PATH: Environment Variables. 40882 (line 127) 40883 * cabs: Other Builtins. (line 6) 40884 * cabsf: Other Builtins. (line 6) 40885 * cabsl: Other Builtins. (line 6) 40886 * cacos: Other Builtins. (line 6) 40887 * cacosf: Other Builtins. (line 6) 40888 * cacosh: Other Builtins. (line 6) 40889 * cacoshf: Other Builtins. (line 6) 40890 * cacoshl: Other Builtins. (line 6) 40891 * cacosl: Other Builtins. (line 6) 40892 * calling functions through the function vector on H8/300, M16C, and M32C processors: Function Attributes. 40893 (line 461) 40894 * calloc: Other Builtins. (line 6) 40895 * carg: Other Builtins. (line 6) 40896 * cargf: Other Builtins. (line 6) 40897 * cargl: Other Builtins. (line 6) 40898 * case labels in initializers: Designated Inits. (line 6) 40899 * case ranges: Case Ranges. (line 6) 40900 * casin: Other Builtins. (line 6) 40901 * casinf: Other Builtins. (line 6) 40902 * casinh: Other Builtins. (line 6) 40903 * casinhf: Other Builtins. (line 6) 40904 * casinhl: Other Builtins. (line 6) 40905 * casinl: Other Builtins. (line 6) 40906 * cast to a union: Cast to Union. (line 6) 40907 * catan: Other Builtins. (line 6) 40908 * catanf: Other Builtins. (line 6) 40909 * catanh: Other Builtins. (line 6) 40910 * catanhf: Other Builtins. (line 6) 40911 * catanhl: Other Builtins. (line 6) 40912 * catanl: Other Builtins. (line 6) 40913 * cbrt: Other Builtins. (line 6) 40914 * cbrtf: Other Builtins. (line 6) 40915 * cbrtl: Other Builtins. (line 6) 40916 * ccos: Other Builtins. (line 6) 40917 * ccosf: Other Builtins. (line 6) 40918 * ccosh: Other Builtins. (line 6) 40919 * ccoshf: Other Builtins. (line 6) 40920 * ccoshl: Other Builtins. (line 6) 40921 * ccosl: Other Builtins. (line 6) 40922 * ceil: Other Builtins. (line 6) 40923 * ceilf: Other Builtins. (line 6) 40924 * ceill: Other Builtins. (line 6) 40925 * cexp: Other Builtins. (line 6) 40926 * cexpf: Other Builtins. (line 6) 40927 * cexpl: Other Builtins. (line 6) 40928 * character set, execution: Preprocessor Options. 40929 (line 498) 40930 * character set, input: Preprocessor Options. 40931 (line 511) 40932 * character set, input normalization: Warning Options. (line 1053) 40933 * character set, wide execution: Preprocessor Options. 40934 (line 503) 40935 * cimag: Other Builtins. (line 6) 40936 * cimagf: Other Builtins. (line 6) 40937 * cimagl: Other Builtins. (line 6) 40938 * cleanup attribute: Variable Attributes. 40939 (line 83) 40940 * clog: Other Builtins. (line 6) 40941 * clogf: Other Builtins. (line 6) 40942 * clogl: Other Builtins. (line 6) 40943 * COBOL: G++ and GCC. (line 23) 40944 * code generation conventions: Code Gen Options. (line 6) 40945 * code, mixed with declarations: Mixed Declarations. (line 6) 40946 * cold function attribute: Function Attributes. 40947 (line 785) 40948 * command options: Invoking GCC. (line 6) 40949 * comments, C++ style: C++ Comments. (line 6) 40950 * common attribute: Variable Attributes. 40951 (line 99) 40952 * comparison of signed and unsigned values, warning: Warning Options. 40953 (line 922) 40954 * compiler bugs, reporting: Bug Reporting. (line 6) 40955 * compiler compared to C++ preprocessor: G++ and GCC. (line 35) 40956 * compiler options, C++: C++ Dialect Options. 40957 (line 6) 40958 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 40959 (line 6) 40960 * compiler version, specifying: Target Options. (line 6) 40961 * COMPILER_PATH: Environment Variables. 40962 (line 88) 40963 * complex conjugation: Complex. (line 34) 40964 * complex numbers: Complex. (line 6) 40965 * compound literals: Compound Literals. (line 6) 40966 * computed gotos: Labels as Values. (line 6) 40967 * conditional expressions, extensions: Conditionals. (line 6) 40968 * conflicting types: Disappointments. (line 21) 40969 * conj: Other Builtins. (line 6) 40970 * conjf: Other Builtins. (line 6) 40971 * conjl: Other Builtins. (line 6) 40972 * const applied to function: Function Attributes. 40973 (line 6) 40974 * const function attribute: Function Attributes. 40975 (line 177) 40976 * constants in constraints: Simple Constraints. (line 58) 40977 * constraint modifier characters: Modifiers. (line 6) 40978 * constraint, matching: Simple Constraints. (line 127) 40979 * constraints, asm: Constraints. (line 6) 40980 * constraints, machine specific: Machine Constraints. 40981 (line 6) 40982 * constructing calls: Constructing Calls. (line 6) 40983 * constructor expressions: Compound Literals. (line 6) 40984 * constructor function attribute: Function Attributes. 40985 (line 205) 40986 * contributors: Contributors. (line 6) 40987 * copysign: Other Builtins. (line 6) 40988 * copysignf: Other Builtins. (line 6) 40989 * copysignl: Other Builtins. (line 6) 40990 * core dump: Bug Criteria. (line 9) 40991 * cos: Other Builtins. (line 6) 40992 * cosf: Other Builtins. (line 6) 40993 * cosh: Other Builtins. (line 6) 40994 * coshf: Other Builtins. (line 6) 40995 * coshl: Other Builtins. (line 6) 40996 * cosl: Other Builtins. (line 6) 40997 * CPATH: Environment Variables. 40998 (line 126) 40999 * CPLUS_INCLUDE_PATH: Environment Variables. 41000 (line 128) 41001 * cpow: Other Builtins. (line 6) 41002 * cpowf: Other Builtins. (line 6) 41003 * cpowl: Other Builtins. (line 6) 41004 * cproj: Other Builtins. (line 6) 41005 * cprojf: Other Builtins. (line 6) 41006 * cprojl: Other Builtins. (line 6) 41007 * creal: Other Builtins. (line 6) 41008 * crealf: Other Builtins. (line 6) 41009 * creall: Other Builtins. (line 6) 41010 * CRIS Options: CRIS Options. (line 6) 41011 * cross compiling: Target Options. (line 6) 41012 * CRX Options: CRX Options. (line 6) 41013 * csin: Other Builtins. (line 6) 41014 * csinf: Other Builtins. (line 6) 41015 * csinh: Other Builtins. (line 6) 41016 * csinhf: Other Builtins. (line 6) 41017 * csinhl: Other Builtins. (line 6) 41018 * csinl: Other Builtins. (line 6) 41019 * csqrt: Other Builtins. (line 6) 41020 * csqrtf: Other Builtins. (line 6) 41021 * csqrtl: Other Builtins. (line 6) 41022 * ctan: Other Builtins. (line 6) 41023 * ctanf: Other Builtins. (line 6) 41024 * ctanh: Other Builtins. (line 6) 41025 * ctanhf: Other Builtins. (line 6) 41026 * ctanhl: Other Builtins. (line 6) 41027 * ctanl: Other Builtins. (line 6) 41028 * Darwin options: Darwin Options. (line 6) 41029 * dcgettext: Other Builtins. (line 6) 41030 * DD integer suffix: Decimal Float. (line 6) 41031 * dd integer suffix: Decimal Float. (line 6) 41032 * deallocating variable length arrays: Variable Length. (line 23) 41033 * debugging information options: Debugging Options. (line 6) 41034 * decimal floating types: Decimal Float. (line 6) 41035 * declaration scope: Incompatibilities. (line 80) 41036 * declarations inside expressions: Statement Exprs. (line 6) 41037 * declarations, mixed with code: Mixed Declarations. (line 6) 41038 * declaring attributes of functions: Function Attributes. 41039 (line 6) 41040 * declaring static data in C++: Static Definitions. (line 6) 41041 * defining static data in C++: Static Definitions. (line 6) 41042 * dependencies for make as output: Environment Variables. 41043 (line 154) 41044 * dependencies, make: Preprocessor Options. 41045 (line 175) 41046 * DEPENDENCIES_OUTPUT: Environment Variables. 41047 (line 153) 41048 * dependent name lookup: Name lookup. (line 6) 41049 * deprecated attribute: Variable Attributes. 41050 (line 107) 41051 * deprecated attribute.: Function Attributes. 41052 (line 227) 41053 * designated initializers: Designated Inits. (line 6) 41054 * designator lists: Designated Inits. (line 94) 41055 * designators: Designated Inits. (line 61) 41056 * destructor function attribute: Function Attributes. 41057 (line 205) 41058 * df integer suffix: Decimal Float. (line 6) 41059 * DF integer suffix: Decimal Float. (line 6) 41060 * dgettext: Other Builtins. (line 6) 41061 * diagnostic messages: Language Independent Options. 41062 (line 6) 41063 * dialect options: C Dialect Options. (line 6) 41064 * digits in constraint: Simple Constraints. (line 115) 41065 * directory options: Directory Options. (line 6) 41066 * dl integer suffix: Decimal Float. (line 6) 41067 * DL integer suffix: Decimal Float. (line 6) 41068 * dollar signs in identifier names: Dollar Signs. (line 6) 41069 * double-word arithmetic: Long Long. (line 6) 41070 * downward funargs: Nested Functions. (line 6) 41071 * drem: Other Builtins. (line 6) 41072 * dremf: Other Builtins. (line 6) 41073 * dreml: Other Builtins. (line 6) 41074 * E in constraint: Simple Constraints. (line 77) 41075 * earlyclobber operand: Modifiers. (line 25) 41076 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 41077 (line 328) 41078 * empty structures: Empty Structures. (line 6) 41079 * environment variables: Environment Variables. 41080 (line 6) 41081 * erf: Other Builtins. (line 6) 41082 * erfc: Other Builtins. (line 6) 41083 * erfcf: Other Builtins. (line 6) 41084 * erfcl: Other Builtins. (line 6) 41085 * erff: Other Builtins. (line 6) 41086 * erfl: Other Builtins. (line 6) 41087 * error function attribute: Function Attributes. 41088 (line 146) 41089 * error messages: Warnings and Errors. 41090 (line 6) 41091 * escaped newlines: Escaped Newlines. (line 6) 41092 * exception handler functions on the Blackfin processor: Function Attributes. 41093 (line 338) 41094 * exclamation point: Multi-Alternative. (line 33) 41095 * exit: Other Builtins. (line 6) 41096 * exp: Other Builtins. (line 6) 41097 * exp10: Other Builtins. (line 6) 41098 * exp10f: Other Builtins. (line 6) 41099 * exp10l: Other Builtins. (line 6) 41100 * exp2: Other Builtins. (line 6) 41101 * exp2f: Other Builtins. (line 6) 41102 * exp2l: Other Builtins. (line 6) 41103 * expf: Other Builtins. (line 6) 41104 * expl: Other Builtins. (line 6) 41105 * explicit register variables: Explicit Reg Vars. (line 6) 41106 * expm1: Other Builtins. (line 6) 41107 * expm1f: Other Builtins. (line 6) 41108 * expm1l: Other Builtins. (line 6) 41109 * expressions containing statements: Statement Exprs. (line 6) 41110 * expressions, constructor: Compound Literals. (line 6) 41111 * extended asm: Extended Asm. (line 6) 41112 * extensible constraints: Simple Constraints. (line 151) 41113 * extensions, ?:: Conditionals. (line 6) 41114 * extensions, C language: C Extensions. (line 6) 41115 * extensions, C++ language: C++ Extensions. (line 6) 41116 * external declaration scope: Incompatibilities. (line 80) 41117 * externally_visible attribute.: Function Attributes. 41118 (line 1108) 41119 * F in constraint: Simple Constraints. (line 82) 41120 * fabs: Other Builtins. (line 6) 41121 * fabsf: Other Builtins. (line 6) 41122 * fabsl: Other Builtins. (line 6) 41123 * fatal signal: Bug Criteria. (line 9) 41124 * fdim: Other Builtins. (line 6) 41125 * fdimf: Other Builtins. (line 6) 41126 * fdiml: Other Builtins. (line 6) 41127 * FDL, GNU Free Documentation License: GNU Free Documentation License. 41128 (line 6) 41129 * ffs: Other Builtins. (line 6) 41130 * file name suffix: Overall Options. (line 14) 41131 * file names: Link Options. (line 10) 41132 * fixed-point types: Fixed-Point. (line 6) 41133 * flatten function attribute: Function Attributes. 41134 (line 137) 41135 * flexible array members: Zero Length. (line 6) 41136 * float as function value type: Incompatibilities. (line 141) 41137 * floating point precision <1>: Disappointments. (line 68) 41138 * floating point precision: Optimize Options. (line 1163) 41139 * floor: Other Builtins. (line 6) 41140 * floorf: Other Builtins. (line 6) 41141 * floorl: Other Builtins. (line 6) 41142 * fma: Other Builtins. (line 6) 41143 * fmaf: Other Builtins. (line 6) 41144 * fmal: Other Builtins. (line 6) 41145 * fmax: Other Builtins. (line 6) 41146 * fmaxf: Other Builtins. (line 6) 41147 * fmaxl: Other Builtins. (line 6) 41148 * fmin: Other Builtins. (line 6) 41149 * fminf: Other Builtins. (line 6) 41150 * fminl: Other Builtins. (line 6) 41151 * fmod: Other Builtins. (line 6) 41152 * fmodf: Other Builtins. (line 6) 41153 * fmodl: Other Builtins. (line 6) 41154 * force_align_arg_pointer attribute: Function Attributes. 41155 (line 827) 41156 * format function attribute: Function Attributes. 41157 (line 369) 41158 * format_arg function attribute: Function Attributes. 41159 (line 422) 41160 * Fortran: G++ and GCC. (line 6) 41161 * forwarding calls: Constructing Calls. (line 6) 41162 * fprintf: Other Builtins. (line 6) 41163 * fprintf_unlocked: Other Builtins. (line 6) 41164 * fputs: Other Builtins. (line 6) 41165 * fputs_unlocked: Other Builtins. (line 6) 41166 * freestanding environment: Standards. (line 13) 41167 * freestanding implementation: Standards. (line 13) 41168 * frexp: Other Builtins. (line 6) 41169 * frexpf: Other Builtins. (line 6) 41170 * frexpl: Other Builtins. (line 6) 41171 * FRV Options: FRV Options. (line 6) 41172 * fscanf: Other Builtins. (line 6) 41173 * fscanf, and constant strings: Incompatibilities. (line 17) 41174 * function addressability on the M32R/D: Function Attributes. 41175 (line 611) 41176 * function attributes: Function Attributes. 41177 (line 6) 41178 * function pointers, arithmetic: Pointer Arith. (line 6) 41179 * function prototype declarations: Function Prototypes. 41180 (line 6) 41181 * function without a prologue/epilogue code: Function Attributes. 41182 (line 639) 41183 * function, size of pointer to: Pointer Arith. (line 6) 41184 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 41185 (line 565) 41186 * functions in arbitrary sections: Function Attributes. 41187 (line 6) 41188 * functions that are passed arguments in registers on the 386: Function Attributes. 41189 (line 803) 41190 * functions that behave like malloc: Function Attributes. 41191 (line 6) 41192 * functions that do not pop the argument stack on the 386: Function Attributes. 41193 (line 6) 41194 * functions that do pop the argument stack on the 386: Function Attributes. 41195 (line 171) 41196 * functions that have no side effects: Function Attributes. 41197 (line 6) 41198 * functions that never return: Function Attributes. 41199 (line 6) 41200 * functions that pop the argument stack on the 386: Function Attributes. 41201 (line 6) 41202 * functions that return more than once: Function Attributes. 41203 (line 6) 41204 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 41205 (line 645) 41206 * functions which handle memory bank switching: Function Attributes. 41207 (line 344) 41208 * functions with non-null pointer arguments: Function Attributes. 41209 (line 6) 41210 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 41211 (line 6) 41212 * g in constraint: Simple Constraints. (line 108) 41213 * G in constraint: Simple Constraints. (line 86) 41214 * G++: G++ and GCC. (line 30) 41215 * g++: Invoking G++. (line 14) 41216 * gamma: Other Builtins. (line 6) 41217 * gamma_r: Other Builtins. (line 6) 41218 * gammaf: Other Builtins. (line 6) 41219 * gammaf_r: Other Builtins. (line 6) 41220 * gammal: Other Builtins. (line 6) 41221 * gammal_r: Other Builtins. (line 6) 41222 * GCC: G++ and GCC. (line 6) 41223 * GCC command options: Invoking GCC. (line 6) 41224 * GCC_EXEC_PREFIX: Environment Variables. 41225 (line 52) 41226 * gcc_struct: Type Attributes. (line 303) 41227 * gcc_struct attribute: Variable Attributes. 41228 (line 337) 41229 * gcov: Debugging Options. (line 258) 41230 * gettext: Other Builtins. (line 6) 41231 * global offset table: Code Gen Options. (line 173) 41232 * global register after longjmp: Global Reg Vars. (line 66) 41233 * global register variables: Global Reg Vars. (line 6) 41234 * GNAT: G++ and GCC. (line 30) 41235 * GNU C Compiler: G++ and GCC. (line 6) 41236 * GNU Compiler Collection: G++ and GCC. (line 6) 41237 * gnu_inline function attribute: Function Attributes. 41238 (line 93) 41239 * goto with computed label: Labels as Values. (line 6) 41240 * gprof: Debugging Options. (line 219) 41241 * grouping options: Invoking GCC. (line 26) 41242 * H in constraint: Simple Constraints. (line 86) 41243 * hardware models and configurations, specifying: Submodel Options. 41244 (line 6) 41245 * hex floats: Hex Floats. (line 6) 41246 * hk fixed-suffix: Fixed-Point. (line 6) 41247 * HK fixed-suffix: Fixed-Point. (line 6) 41248 * hosted environment <1>: C Dialect Options. (line 204) 41249 * hosted environment: Standards. (line 13) 41250 * hosted implementation: Standards. (line 13) 41251 * hot function attribute: Function Attributes. 41252 (line 772) 41253 * HPPA Options: HPPA Options. (line 6) 41254 * hr fixed-suffix: Fixed-Point. (line 6) 41255 * HR fixed-suffix: Fixed-Point. (line 6) 41256 * hypot: Other Builtins. (line 6) 41257 * hypotf: Other Builtins. (line 6) 41258 * hypotl: Other Builtins. (line 6) 41259 * I in constraint: Simple Constraints. (line 69) 41260 * i in constraint: Simple Constraints. (line 58) 41261 * i386 Options: i386 and x86-64 Options. 41262 (line 6) 41263 * IA-64 Options: IA-64 Options. (line 6) 41264 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 41265 (line 6) 41266 * identifier names, dollar signs in: Dollar Signs. (line 6) 41267 * identifiers, names in assembler code: Asm Labels. (line 6) 41268 * ilogb: Other Builtins. (line 6) 41269 * ilogbf: Other Builtins. (line 6) 41270 * ilogbl: Other Builtins. (line 6) 41271 * imaxabs: Other Builtins. (line 6) 41272 * implementation-defined behavior, C language: C Implementation. 41273 (line 6) 41274 * implied #pragma implementation: C++ Interface. (line 46) 41275 * incompatibilities of GCC: Incompatibilities. (line 6) 41276 * increment operators: Bug Criteria. (line 17) 41277 * index: Other Builtins. (line 6) 41278 * indirect calls on ARM: Function Attributes. 41279 (line 555) 41280 * indirect calls on MIPS: Function Attributes. 41281 (line 577) 41282 * init_priority attribute: C++ Attributes. (line 9) 41283 * initializations in expressions: Compound Literals. (line 6) 41284 * initializers with labeled elements: Designated Inits. (line 6) 41285 * initializers, non-constant: Initializers. (line 6) 41286 * inline automatic for C++ member fns: Inline. (line 71) 41287 * inline functions: Inline. (line 6) 41288 * inline functions, omission of: Inline. (line 51) 41289 * inlining and C++ pragmas: C++ Interface. (line 66) 41290 * installation trouble: Trouble. (line 6) 41291 * integrating function code: Inline. (line 6) 41292 * Intel 386 Options: i386 and x86-64 Options. 41293 (line 6) 41294 * interface and implementation headers, C++: C++ Interface. (line 6) 41295 * intermediate C version, nonexistent: G++ and GCC. (line 35) 41296 * interrupt handler functions: Function Attributes. 41297 (line 504) 41298 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 41299 (line 529) 41300 * interrupt thread functions on fido: Function Attributes. 41301 (line 536) 41302 * introduction: Top. (line 6) 41303 * invalid assembly code: Bug Criteria. (line 12) 41304 * invalid input: Bug Criteria. (line 42) 41305 * invoking g++: Invoking G++. (line 22) 41306 * isalnum: Other Builtins. (line 6) 41307 * isalpha: Other Builtins. (line 6) 41308 * isascii: Other Builtins. (line 6) 41309 * isblank: Other Builtins. (line 6) 41310 * iscntrl: Other Builtins. (line 6) 41311 * isdigit: Other Builtins. (line 6) 41312 * isgraph: Other Builtins. (line 6) 41313 * islower: Other Builtins. (line 6) 41314 * ISO 9899: Standards. (line 13) 41315 * ISO C: Standards. (line 13) 41316 * ISO C standard: Standards. (line 13) 41317 * ISO C90: Standards. (line 13) 41318 * ISO C94: Standards. (line 13) 41319 * ISO C95: Standards. (line 13) 41320 * ISO C99: Standards. (line 13) 41321 * ISO C9X: Standards. (line 13) 41322 * ISO support: C Dialect Options. (line 10) 41323 * ISO/IEC 9899: Standards. (line 13) 41324 * isprint: Other Builtins. (line 6) 41325 * ispunct: Other Builtins. (line 6) 41326 * isspace: Other Builtins. (line 6) 41327 * isupper: Other Builtins. (line 6) 41328 * iswalnum: Other Builtins. (line 6) 41329 * iswalpha: Other Builtins. (line 6) 41330 * iswblank: Other Builtins. (line 6) 41331 * iswcntrl: Other Builtins. (line 6) 41332 * iswdigit: Other Builtins. (line 6) 41333 * iswgraph: Other Builtins. (line 6) 41334 * iswlower: Other Builtins. (line 6) 41335 * iswprint: Other Builtins. (line 6) 41336 * iswpunct: Other Builtins. (line 6) 41337 * iswspace: Other Builtins. (line 6) 41338 * iswupper: Other Builtins. (line 6) 41339 * iswxdigit: Other Builtins. (line 6) 41340 * isxdigit: Other Builtins. (line 6) 41341 * j0: Other Builtins. (line 6) 41342 * j0f: Other Builtins. (line 6) 41343 * j0l: Other Builtins. (line 6) 41344 * j1: Other Builtins. (line 6) 41345 * j1f: Other Builtins. (line 6) 41346 * j1l: Other Builtins. (line 6) 41347 * Java: G++ and GCC. (line 6) 41348 * java_interface attribute: C++ Attributes. (line 29) 41349 * jn: Other Builtins. (line 6) 41350 * jnf: Other Builtins. (line 6) 41351 * jnl: Other Builtins. (line 6) 41352 * k fixed-suffix: Fixed-Point. (line 6) 41353 * K fixed-suffix: Fixed-Point. (line 6) 41354 * keywords, alternate: Alternate Keywords. (line 6) 41355 * known causes of trouble: Trouble. (line 6) 41356 * l1_data variable attribute: Variable Attributes. 41357 (line 305) 41358 * l1_data_A variable attribute: Variable Attributes. 41359 (line 305) 41360 * l1_data_B variable attribute: Variable Attributes. 41361 (line 305) 41362 * l1_text function attribute: Function Attributes. 41363 (line 549) 41364 * labeled elements in initializers: Designated Inits. (line 6) 41365 * labels as values: Labels as Values. (line 6) 41366 * labs: Other Builtins. (line 6) 41367 * LANG: Environment Variables. 41368 (line 21) 41369 * language dialect options: C Dialect Options. (line 6) 41370 * LC_ALL: Environment Variables. 41371 (line 21) 41372 * LC_CTYPE: Environment Variables. 41373 (line 21) 41374 * LC_MESSAGES: Environment Variables. 41375 (line 21) 41376 * ldexp: Other Builtins. (line 6) 41377 * ldexpf: Other Builtins. (line 6) 41378 * ldexpl: Other Builtins. (line 6) 41379 * length-zero arrays: Zero Length. (line 6) 41380 * lgamma: Other Builtins. (line 6) 41381 * lgamma_r: Other Builtins. (line 6) 41382 * lgammaf: Other Builtins. (line 6) 41383 * lgammaf_r: Other Builtins. (line 6) 41384 * lgammal: Other Builtins. (line 6) 41385 * lgammal_r: Other Builtins. (line 6) 41386 * Libraries: Link Options. (line 24) 41387 * LIBRARY_PATH: Environment Variables. 41388 (line 94) 41389 * link options: Link Options. (line 6) 41390 * lk fixed-suffix: Fixed-Point. (line 6) 41391 * LK fixed-suffix: Fixed-Point. (line 6) 41392 * LL integer suffix: Long Long. (line 6) 41393 * llabs: Other Builtins. (line 6) 41394 * llk fixed-suffix: Fixed-Point. (line 6) 41395 * LLK fixed-suffix: Fixed-Point. (line 6) 41396 * llr fixed-suffix: Fixed-Point. (line 6) 41397 * LLR fixed-suffix: Fixed-Point. (line 6) 41398 * llrint: Other Builtins. (line 6) 41399 * llrintf: Other Builtins. (line 6) 41400 * llrintl: Other Builtins. (line 6) 41401 * llround: Other Builtins. (line 6) 41402 * llroundf: Other Builtins. (line 6) 41403 * llroundl: Other Builtins. (line 6) 41404 * load address instruction: Simple Constraints. (line 142) 41405 * local labels: Local Labels. (line 6) 41406 * local variables in macros: Typeof. (line 42) 41407 * local variables, specifying registers: Local Reg Vars. (line 6) 41408 * locale: Environment Variables. 41409 (line 21) 41410 * locale definition: Environment Variables. 41411 (line 103) 41412 * log: Other Builtins. (line 6) 41413 * log10: Other Builtins. (line 6) 41414 * log10f: Other Builtins. (line 6) 41415 * log10l: Other Builtins. (line 6) 41416 * log1p: Other Builtins. (line 6) 41417 * log1pf: Other Builtins. (line 6) 41418 * log1pl: Other Builtins. (line 6) 41419 * log2: Other Builtins. (line 6) 41420 * log2f: Other Builtins. (line 6) 41421 * log2l: Other Builtins. (line 6) 41422 * logb: Other Builtins. (line 6) 41423 * logbf: Other Builtins. (line 6) 41424 * logbl: Other Builtins. (line 6) 41425 * logf: Other Builtins. (line 6) 41426 * logl: Other Builtins. (line 6) 41427 * long long data types: Long Long. (line 6) 41428 * longjmp: Global Reg Vars. (line 66) 41429 * longjmp incompatibilities: Incompatibilities. (line 39) 41430 * longjmp warnings: Warning Options. (line 570) 41431 * lr fixed-suffix: Fixed-Point. (line 6) 41432 * LR fixed-suffix: Fixed-Point. (line 6) 41433 * lrint: Other Builtins. (line 6) 41434 * lrintf: Other Builtins. (line 6) 41435 * lrintl: Other Builtins. (line 6) 41436 * lround: Other Builtins. (line 6) 41437 * lroundf: Other Builtins. (line 6) 41438 * lroundl: Other Builtins. (line 6) 41439 * m in constraint: Simple Constraints. (line 17) 41440 * M32C options: M32C Options. (line 6) 41441 * M32R/D options: M32R/D Options. (line 6) 41442 * M680x0 options: M680x0 Options. (line 6) 41443 * M68hc1x options: M68hc1x Options. (line 6) 41444 * machine dependent options: Submodel Options. (line 6) 41445 * machine specific constraints: Machine Constraints. 41446 (line 6) 41447 * macro with variable arguments: Variadic Macros. (line 6) 41448 * macros containing asm: Extended Asm. (line 239) 41449 * macros, inline alternative: Inline. (line 6) 41450 * macros, local labels: Local Labels. (line 6) 41451 * macros, local variables in: Typeof. (line 42) 41452 * macros, statements in expressions: Statement Exprs. (line 6) 41453 * macros, types of arguments: Typeof. (line 6) 41454 * make: Preprocessor Options. 41455 (line 175) 41456 * malloc: Other Builtins. (line 6) 41457 * malloc attribute: Function Attributes. 41458 (line 587) 41459 * matching constraint: Simple Constraints. (line 127) 41460 * MCore options: MCore Options. (line 6) 41461 * member fns, automatically inline: Inline. (line 71) 41462 * memchr: Other Builtins. (line 6) 41463 * memcmp: Other Builtins. (line 6) 41464 * memcpy: Other Builtins. (line 6) 41465 * memory references in constraints: Simple Constraints. (line 17) 41466 * mempcpy: Other Builtins. (line 6) 41467 * memset: Other Builtins. (line 6) 41468 * Mercury: G++ and GCC. (line 23) 41469 * message formatting: Language Independent Options. 41470 (line 6) 41471 * messages, warning: Warning Options. (line 6) 41472 * messages, warning and error: Warnings and Errors. 41473 (line 6) 41474 * middle-operands, omitted: Conditionals. (line 6) 41475 * MIPS options: MIPS Options. (line 6) 41476 * mips16 attribute: Function Attributes. 41477 (line 597) 41478 * misunderstandings in C++: C++ Misunderstandings. 41479 (line 6) 41480 * mixed declarations and code: Mixed Declarations. (line 6) 41481 * mktemp, and constant strings: Incompatibilities. (line 13) 41482 * MMIX Options: MMIX Options. (line 6) 41483 * MN10300 options: MN10300 Options. (line 6) 41484 * mode attribute: Variable Attributes. 41485 (line 125) 41486 * modf: Other Builtins. (line 6) 41487 * modff: Other Builtins. (line 6) 41488 * modfl: Other Builtins. (line 6) 41489 * modifiers in constraints: Modifiers. (line 6) 41490 * ms_struct: Type Attributes. (line 303) 41491 * ms_struct attribute: Variable Attributes. 41492 (line 337) 41493 * MT options: MT Options. (line 6) 41494 * mudflap: Optimize Options. (line 330) 41495 * multiple alternative constraints: Multi-Alternative. (line 6) 41496 * multiprecision arithmetic: Long Long. (line 6) 41497 * n in constraint: Simple Constraints. (line 63) 41498 * names used in assembler code: Asm Labels. (line 6) 41499 * naming convention, implementation headers: C++ Interface. (line 46) 41500 * nearbyint: Other Builtins. (line 6) 41501 * nearbyintf: Other Builtins. (line 6) 41502 * nearbyintl: Other Builtins. (line 6) 41503 * nested functions: Nested Functions. (line 6) 41504 * newlines (escaped): Escaped Newlines. (line 6) 41505 * nextafter: Other Builtins. (line 6) 41506 * nextafterf: Other Builtins. (line 6) 41507 * nextafterl: Other Builtins. (line 6) 41508 * nexttoward: Other Builtins. (line 6) 41509 * nexttowardf: Other Builtins. (line 6) 41510 * nexttowardl: Other Builtins. (line 6) 41511 * NFC: Warning Options. (line 1053) 41512 * NFKC: Warning Options. (line 1053) 41513 * NMI handler functions on the Blackfin processor: Function Attributes. 41514 (line 656) 41515 * no_instrument_function function attribute: Function Attributes. 41516 (line 662) 41517 * nocommon attribute: Variable Attributes. 41518 (line 99) 41519 * noinline function attribute: Function Attributes. 41520 (line 667) 41521 * nomips16 attribute: Function Attributes. 41522 (line 597) 41523 * non-constant initializers: Initializers. (line 6) 41524 * non-static inline function: Inline. (line 85) 41525 * nonnull function attribute: Function Attributes. 41526 (line 677) 41527 * noreturn function attribute: Function Attributes. 41528 (line 700) 41529 * nothrow function attribute: Function Attributes. 41530 (line 742) 41531 * o in constraint: Simple Constraints. (line 21) 41532 * OBJC_INCLUDE_PATH: Environment Variables. 41533 (line 129) 41534 * Objective-C <1>: Standards. (line 153) 41535 * Objective-C: G++ and GCC. (line 6) 41536 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 41537 (line 6) 41538 * Objective-C++ <1>: G++ and GCC. (line 6) 41539 * Objective-C++: Standards. (line 153) 41540 * offsettable address: Simple Constraints. (line 21) 41541 * old-style function definitions: Function Prototypes. 41542 (line 6) 41543 * omitted middle-operands: Conditionals. (line 6) 41544 * open coding: Inline. (line 6) 41545 * openmp parallel: C Dialect Options. (line 221) 41546 * operand constraints, asm: Constraints. (line 6) 41547 * optimize options: Optimize Options. (line 6) 41548 * options to control diagnostics formatting: Language Independent Options. 41549 (line 6) 41550 * options to control warnings: Warning Options. (line 6) 41551 * options, C++: C++ Dialect Options. 41552 (line 6) 41553 * options, code generation: Code Gen Options. (line 6) 41554 * options, debugging: Debugging Options. (line 6) 41555 * options, dialect: C Dialect Options. (line 6) 41556 * options, directory search: Directory Options. (line 6) 41557 * options, GCC command: Invoking GCC. (line 6) 41558 * options, grouping: Invoking GCC. (line 26) 41559 * options, linking: Link Options. (line 6) 41560 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 41561 (line 6) 41562 * options, optimization: Optimize Options. (line 6) 41563 * options, order: Invoking GCC. (line 30) 41564 * options, preprocessor: Preprocessor Options. 41565 (line 6) 41566 * order of evaluation, side effects: Non-bugs. (line 196) 41567 * order of options: Invoking GCC. (line 30) 41568 * other register constraints: Simple Constraints. (line 151) 41569 * output file option: Overall Options. (line 181) 41570 * overloaded virtual fn, warning: C++ Dialect Options. 41571 (line 436) 41572 * p in constraint: Simple Constraints. (line 142) 41573 * packed attribute: Variable Attributes. 41574 (line 136) 41575 * parameter forward declaration: Variable Length. (line 60) 41576 * parameters, aliased: Code Gen Options. (line 374) 41577 * Pascal: G++ and GCC. (line 23) 41578 * PDP-11 Options: PDP-11 Options. (line 6) 41579 * PIC: Code Gen Options. (line 173) 41580 * pmf: Bound member functions. 41581 (line 6) 41582 * pointer arguments: Function Attributes. 41583 (line 182) 41584 * pointer to member function: Bound member functions. 41585 (line 6) 41586 * portions of temporary objects, pointers to: Temporaries. (line 6) 41587 * pow: Other Builtins. (line 6) 41588 * pow10: Other Builtins. (line 6) 41589 * pow10f: Other Builtins. (line 6) 41590 * pow10l: Other Builtins. (line 6) 41591 * PowerPC options: PowerPC Options. (line 6) 41592 * powf: Other Builtins. (line 6) 41593 * powl: Other Builtins. (line 6) 41594 * pragma, align: Solaris Pragmas. (line 11) 41595 * pragma, diagnostic: Diagnostic Pragmas. (line 14) 41596 * pragma, extern_prefix: Symbol-Renaming Pragmas. 41597 (line 19) 41598 * pragma, fini: Solaris Pragmas. (line 19) 41599 * pragma, init: Solaris Pragmas. (line 24) 41600 * pragma, long_calls: ARM Pragmas. (line 11) 41601 * pragma, long_calls_off: ARM Pragmas. (line 17) 41602 * pragma, longcall: RS/6000 and PowerPC Pragmas. 41603 (line 14) 41604 * pragma, mark: Darwin Pragmas. (line 11) 41605 * pragma, memregs: M32C Pragmas. (line 7) 41606 * pragma, no_long_calls: ARM Pragmas. (line 14) 41607 * pragma, options align: Darwin Pragmas. (line 14) 41608 * pragma, reason for not using: Function Attributes. 41609 (line 1117) 41610 * pragma, redefine_extname: Symbol-Renaming Pragmas. 41611 (line 14) 41612 * pragma, segment: Darwin Pragmas. (line 21) 41613 * pragma, unused: Darwin Pragmas. (line 24) 41614 * pragma, visibility: Visibility Pragmas. (line 8) 41615 * pragma, weak: Weak Pragmas. (line 10) 41616 * pragmas: Pragmas. (line 6) 41617 * pragmas in C++, effect on inlining: C++ Interface. (line 66) 41618 * pragmas, interface and implementation: C++ Interface. (line 6) 41619 * pragmas, warning of unknown: Warning Options. (line 588) 41620 * precompiled headers: Precompiled Headers. 41621 (line 6) 41622 * preprocessing numbers: Incompatibilities. (line 173) 41623 * preprocessing tokens: Incompatibilities. (line 173) 41624 * preprocessor options: Preprocessor Options. 41625 (line 6) 41626 * printf: Other Builtins. (line 6) 41627 * printf_unlocked: Other Builtins. (line 6) 41628 * prof: Debugging Options. (line 213) 41629 * progmem variable attribute: Variable Attributes. 41630 (line 491) 41631 * promotion of formal parameters: Function Prototypes. 41632 (line 6) 41633 * pure function attribute: Function Attributes. 41634 (line 750) 41635 * push address instruction: Simple Constraints. (line 142) 41636 * putchar: Other Builtins. (line 6) 41637 * puts: Other Builtins. (line 6) 41638 * q floating point suffix: Floating Types. (line 6) 41639 * Q floating point suffix: Floating Types. (line 6) 41640 * qsort, and global register variables: Global Reg Vars. (line 42) 41641 * question mark: Multi-Alternative. (line 27) 41642 * R fixed-suffix: Fixed-Point. (line 6) 41643 * r fixed-suffix: Fixed-Point. (line 6) 41644 * r in constraint: Simple Constraints. (line 54) 41645 * ranges in case statements: Case Ranges. (line 6) 41646 * read-only strings: Incompatibilities. (line 9) 41647 * register variable after longjmp: Global Reg Vars. (line 66) 41648 * registers: Extended Asm. (line 6) 41649 * registers for local variables: Local Reg Vars. (line 6) 41650 * registers in constraints: Simple Constraints. (line 54) 41651 * registers, global allocation: Explicit Reg Vars. (line 6) 41652 * registers, global variables in: Global Reg Vars. (line 6) 41653 * regparm attribute: Function Attributes. 41654 (line 803) 41655 * relocation truncated to fit (MIPS): MIPS Options. (line 179) 41656 * remainder: Other Builtins. (line 6) 41657 * remainderf: Other Builtins. (line 6) 41658 * remainderl: Other Builtins. (line 6) 41659 * remquo: Other Builtins. (line 6) 41660 * remquof: Other Builtins. (line 6) 41661 * remquol: Other Builtins. (line 6) 41662 * reordering, warning: C++ Dialect Options. 41663 (line 357) 41664 * reporting bugs: Bugs. (line 6) 41665 * rest argument (in macro): Variadic Macros. (line 6) 41666 * restricted pointers: Restricted Pointers. 41667 (line 6) 41668 * restricted references: Restricted Pointers. 41669 (line 6) 41670 * restricted this pointer: Restricted Pointers. 41671 (line 6) 41672 * returns_twice attribute: Function Attributes. 41673 (line 840) 41674 * rindex: Other Builtins. (line 6) 41675 * rint: Other Builtins. (line 6) 41676 * rintf: Other Builtins. (line 6) 41677 * rintl: Other Builtins. (line 6) 41678 * round: Other Builtins. (line 6) 41679 * roundf: Other Builtins. (line 6) 41680 * roundl: Other Builtins. (line 6) 41681 * RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 41682 (line 6) 41683 * RTTI: Vague Linkage. (line 43) 41684 * run-time options: Code Gen Options. (line 6) 41685 * s in constraint: Simple Constraints. (line 90) 41686 * S/390 and zSeries Options: S/390 and zSeries Options. 41687 (line 6) 41688 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 41689 (line 849) 41690 * scalb: Other Builtins. (line 6) 41691 * scalbf: Other Builtins. (line 6) 41692 * scalbl: Other Builtins. (line 6) 41693 * scalbln: Other Builtins. (line 6) 41694 * scalblnf: Other Builtins. (line 6) 41695 * scalbn: Other Builtins. (line 6) 41696 * scalbnf: Other Builtins. (line 6) 41697 * scanf, and constant strings: Incompatibilities. (line 17) 41698 * scanfnl: Other Builtins. (line 6) 41699 * scope of a variable length array: Variable Length. (line 23) 41700 * scope of declaration: Disappointments. (line 21) 41701 * scope of external declarations: Incompatibilities. (line 80) 41702 * Score Options: Score Options. (line 6) 41703 * search path: Directory Options. (line 6) 41704 * section function attribute: Function Attributes. 41705 (line 854) 41706 * section variable attribute: Variable Attributes. 41707 (line 151) 41708 * sentinel function attribute: Function Attributes. 41709 (line 870) 41710 * setjmp: Global Reg Vars. (line 66) 41711 * setjmp incompatibilities: Incompatibilities. (line 39) 41712 * shared strings: Incompatibilities. (line 9) 41713 * shared variable attribute: Variable Attributes. 41714 (line 196) 41715 * side effect in ?:: Conditionals. (line 20) 41716 * side effects, macro argument: Statement Exprs. (line 35) 41717 * side effects, order of evaluation: Non-bugs. (line 196) 41718 * signal handler functions on the AVR processors: Function Attributes. 41719 (line 901) 41720 * signbit: Other Builtins. (line 6) 41721 * signbitd128: Other Builtins. (line 6) 41722 * signbitd32: Other Builtins. (line 6) 41723 * signbitd64: Other Builtins. (line 6) 41724 * signbitf: Other Builtins. (line 6) 41725 * signbitl: Other Builtins. (line 6) 41726 * signed and unsigned values, comparison warning: Warning Options. 41727 (line 922) 41728 * significand: Other Builtins. (line 6) 41729 * significandf: Other Builtins. (line 6) 41730 * significandl: Other Builtins. (line 6) 41731 * simple constraints: Simple Constraints. (line 6) 41732 * sin: Other Builtins. (line 6) 41733 * sincos: Other Builtins. (line 6) 41734 * sincosf: Other Builtins. (line 6) 41735 * sincosl: Other Builtins. (line 6) 41736 * sinf: Other Builtins. (line 6) 41737 * sinh: Other Builtins. (line 6) 41738 * sinhf: Other Builtins. (line 6) 41739 * sinhl: Other Builtins. (line 6) 41740 * sinl: Other Builtins. (line 6) 41741 * sizeof: Typeof. (line 6) 41742 * smaller data references: M32R/D Options. (line 57) 41743 * smaller data references (PowerPC): RS/6000 and PowerPC Options. 41744 (line 629) 41745 * snprintf: Other Builtins. (line 6) 41746 * SPARC options: SPARC Options. (line 6) 41747 * Spec Files: Spec Files. (line 6) 41748 * specified registers: Explicit Reg Vars. (line 6) 41749 * specifying compiler version and target machine: Target Options. 41750 (line 6) 41751 * specifying hardware config: Submodel Options. (line 6) 41752 * specifying machine version: Target Options. (line 6) 41753 * specifying registers for local variables: Local Reg Vars. (line 6) 41754 * speed of compilation: Precompiled Headers. 41755 (line 6) 41756 * sprintf: Other Builtins. (line 6) 41757 * SPU options: SPU Options. (line 6) 41758 * sqrt: Other Builtins. (line 6) 41759 * sqrtf: Other Builtins. (line 6) 41760 * sqrtl: Other Builtins. (line 6) 41761 * sscanf: Other Builtins. (line 6) 41762 * sscanf, and constant strings: Incompatibilities. (line 17) 41763 * sseregparm attribute: Function Attributes. 41764 (line 820) 41765 * statements inside expressions: Statement Exprs. (line 6) 41766 * static data in C++, declaring and defining: Static Definitions. 41767 (line 6) 41768 * stpcpy: Other Builtins. (line 6) 41769 * stpncpy: Other Builtins. (line 6) 41770 * strcasecmp: Other Builtins. (line 6) 41771 * strcat: Other Builtins. (line 6) 41772 * strchr: Other Builtins. (line 6) 41773 * strcmp: Other Builtins. (line 6) 41774 * strcpy: Other Builtins. (line 6) 41775 * strcspn: Other Builtins. (line 6) 41776 * strdup: Other Builtins. (line 6) 41777 * strfmon: Other Builtins. (line 6) 41778 * strftime: Other Builtins. (line 6) 41779 * string constants: Incompatibilities. (line 9) 41780 * strlen: Other Builtins. (line 6) 41781 * strncasecmp: Other Builtins. (line 6) 41782 * strncat: Other Builtins. (line 6) 41783 * strncmp: Other Builtins. (line 6) 41784 * strncpy: Other Builtins. (line 6) 41785 * strndup: Other Builtins. (line 6) 41786 * strpbrk: Other Builtins. (line 6) 41787 * strrchr: Other Builtins. (line 6) 41788 * strspn: Other Builtins. (line 6) 41789 * strstr: Other Builtins. (line 6) 41790 * struct: Unnamed Fields. (line 6) 41791 * structures: Incompatibilities. (line 146) 41792 * structures, constructor expression: Compound Literals. (line 6) 41793 * submodel options: Submodel Options. (line 6) 41794 * subscripting: Subscripting. (line 6) 41795 * subscripting and function values: Subscripting. (line 6) 41796 * suffixes for C++ source: Invoking G++. (line 6) 41797 * SUNPRO_DEPENDENCIES: Environment Variables. 41798 (line 169) 41799 * suppressing warnings: Warning Options. (line 6) 41800 * surprises in C++: C++ Misunderstandings. 41801 (line 6) 41802 * syntax checking: Warning Options. (line 13) 41803 * system headers, warnings from: Warning Options. (line 702) 41804 * tan: Other Builtins. (line 6) 41805 * tanf: Other Builtins. (line 6) 41806 * tanh: Other Builtins. (line 6) 41807 * tanhf: Other Builtins. (line 6) 41808 * tanhl: Other Builtins. (line 6) 41809 * tanl: Other Builtins. (line 6) 41810 * target machine, specifying: Target Options. (line 6) 41811 * target options: Target Options. (line 6) 41812 * TC1: Standards. (line 13) 41813 * TC2: Standards. (line 13) 41814 * TC3: Standards. (line 13) 41815 * Technical Corrigenda: Standards. (line 13) 41816 * Technical Corrigendum 1: Standards. (line 13) 41817 * Technical Corrigendum 2: Standards. (line 13) 41818 * Technical Corrigendum 3: Standards. (line 13) 41819 * template instantiation: Template Instantiation. 41820 (line 6) 41821 * temporaries, lifetime of: Temporaries. (line 6) 41822 * tgamma: Other Builtins. (line 6) 41823 * tgammaf: Other Builtins. (line 6) 41824 * tgammal: Other Builtins. (line 6) 41825 * Thread-Local Storage: Thread-Local. (line 6) 41826 * thunks: Nested Functions. (line 6) 41827 * tiny data section on the H8/300H and H8S: Function Attributes. 41828 (line 923) 41829 * TLS: Thread-Local. (line 6) 41830 * tls_model attribute: Variable Attributes. 41831 (line 220) 41832 * TMPDIR: Environment Variables. 41833 (line 45) 41834 * toascii: Other Builtins. (line 6) 41835 * tolower: Other Builtins. (line 6) 41836 * toupper: Other Builtins. (line 6) 41837 * towlower: Other Builtins. (line 6) 41838 * towupper: Other Builtins. (line 6) 41839 * traditional C language: C Dialect Options. (line 250) 41840 * treelang <1>: G++ and GCC. (line 6) 41841 * treelang: Standards. (line 169) 41842 * trunc: Other Builtins. (line 6) 41843 * truncf: Other Builtins. (line 6) 41844 * truncl: Other Builtins. (line 6) 41845 * two-stage name lookup: Name lookup. (line 6) 41846 * type alignment: Alignment. (line 6) 41847 * type attributes: Type Attributes. (line 6) 41848 * type_info: Vague Linkage. (line 43) 41849 * typedef names as function parameters: Incompatibilities. (line 97) 41850 * typeof: Typeof. (line 6) 41851 * uhk fixed-suffix: Fixed-Point. (line 6) 41852 * UHK fixed-suffix: Fixed-Point. (line 6) 41853 * uhr fixed-suffix: Fixed-Point. (line 6) 41854 * UHR fixed-suffix: Fixed-Point. (line 6) 41855 * uk fixed-suffix: Fixed-Point. (line 6) 41856 * UK fixed-suffix: Fixed-Point. (line 6) 41857 * ULK fixed-suffix: Fixed-Point. (line 6) 41858 * ulk fixed-suffix: Fixed-Point. (line 6) 41859 * ULL integer suffix: Long Long. (line 6) 41860 * ullk fixed-suffix: Fixed-Point. (line 6) 41861 * ULLK fixed-suffix: Fixed-Point. (line 6) 41862 * ULLR fixed-suffix: Fixed-Point. (line 6) 41863 * ullr fixed-suffix: Fixed-Point. (line 6) 41864 * ulr fixed-suffix: Fixed-Point. (line 6) 41865 * ULR fixed-suffix: Fixed-Point. (line 6) 41866 * undefined behavior: Bug Criteria. (line 17) 41867 * undefined function value: Bug Criteria. (line 17) 41868 * underscores in variables in macros: Typeof. (line 42) 41869 * union: Unnamed Fields. (line 6) 41870 * union, casting to a: Cast to Union. (line 6) 41871 * unions: Incompatibilities. (line 146) 41872 * unknown pragmas, warning: Warning Options. (line 588) 41873 * unresolved references and -nodefaultlibs: Link Options. (line 79) 41874 * unresolved references and -nostdlib: Link Options. (line 79) 41875 * unused attribute.: Function Attributes. 41876 (line 935) 41877 * ur fixed-suffix: Fixed-Point. (line 6) 41878 * UR fixed-suffix: Fixed-Point. (line 6) 41879 * used attribute.: Function Attributes. 41880 (line 940) 41881 * User stack pointer in interrupts on the Blackfin: Function Attributes. 41882 (line 544) 41883 * V in constraint: Simple Constraints. (line 41) 41884 * V850 Options: V850 Options. (line 6) 41885 * vague linkage: Vague Linkage. (line 6) 41886 * value after longjmp: Global Reg Vars. (line 66) 41887 * variable addressability on the IA-64: Function Attributes. 41888 (line 611) 41889 * variable addressability on the M32R/D: Variable Attributes. 41890 (line 318) 41891 * variable alignment: Alignment. (line 6) 41892 * variable attributes: Variable Attributes. 41893 (line 6) 41894 * variable number of arguments: Variadic Macros. (line 6) 41895 * variable-length array scope: Variable Length. (line 23) 41896 * variable-length arrays: Variable Length. (line 6) 41897 * variables in specified registers: Explicit Reg Vars. (line 6) 41898 * variables, local, in macros: Typeof. (line 42) 41899 * variadic macros: Variadic Macros. (line 6) 41900 * VAX options: VAX Options. (line 6) 41901 * version_id attribute on IA64 HP-UX: Function Attributes. 41902 (line 946) 41903 * vfprintf: Other Builtins. (line 6) 41904 * vfscanf: Other Builtins. (line 6) 41905 * visibility attribute: Function Attributes. 41906 (line 956) 41907 * VLAs: Variable Length. (line 6) 41908 * void pointers, arithmetic: Pointer Arith. (line 6) 41909 * void, size of pointer to: Pointer Arith. (line 6) 41910 * volatile access: Volatiles. (line 6) 41911 * volatile applied to function: Function Attributes. 41912 (line 6) 41913 * volatile read: Volatiles. (line 6) 41914 * volatile write: Volatiles. (line 6) 41915 * vprintf: Other Builtins. (line 6) 41916 * vscanf: Other Builtins. (line 6) 41917 * vsnprintf: Other Builtins. (line 6) 41918 * vsprintf: Other Builtins. (line 6) 41919 * vsscanf: Other Builtins. (line 6) 41920 * vtable: Vague Linkage. (line 28) 41921 * VxWorks Options: VxWorks Options. (line 6) 41922 * w floating point suffix: Floating Types. (line 6) 41923 * W floating point suffix: Floating Types. (line 6) 41924 * warn_unused_result attribute: Function Attributes. 41925 (line 1050) 41926 * warning for comparison of signed and unsigned values: Warning Options. 41927 (line 922) 41928 * warning for overloaded virtual fn: C++ Dialect Options. 41929 (line 436) 41930 * warning for reordering of member initializers: C++ Dialect Options. 41931 (line 357) 41932 * warning for unknown pragmas: Warning Options. (line 588) 41933 * warning function attribute: Function Attributes. 41934 (line 159) 41935 * warning messages: Warning Options. (line 6) 41936 * warnings from system headers: Warning Options. (line 702) 41937 * warnings vs errors: Warnings and Errors. 41938 (line 6) 41939 * weak attribute: Function Attributes. 41940 (line 1067) 41941 * weakref attribute: Function Attributes. 41942 (line 1076) 41943 * whitespace: Incompatibilities. (line 112) 41944 * X in constraint: Simple Constraints. (line 112) 41945 * X3.159-1989: Standards. (line 13) 41946 * x86-64 Options: i386 and x86-64 Options. 41947 (line 6) 41948 * x86-64 options: x86-64 Options. (line 6) 41949 * Xstormy16 Options: Xstormy16 Options. (line 6) 41950 * Xtensa Options: Xtensa Options. (line 6) 41951 * y0: Other Builtins. (line 6) 41952 * y0f: Other Builtins. (line 6) 41953 * y0l: Other Builtins. (line 6) 41954 * y1: Other Builtins. (line 6) 41955 * y1f: Other Builtins. (line 6) 41956 * y1l: Other Builtins. (line 6) 41957 * yn: Other Builtins. (line 6) 41958 * ynf: Other Builtins. (line 6) 41959 * ynl: Other Builtins. (line 6) 41960 * zero-length arrays: Zero Length. (line 6) 41961 * zero-size structures: Empty Structures. (line 6) 41962 * zSeries options: zSeries Options. (line 6) 41963 41964 41965 41966 Tag Table: 41967 Node: Top2150 41968 Node: G++ and GCC3849 41969 Node: Standards5914 41970 Node: Invoking GCC15207 41971 Node: Option Summary19024 41972 Node: Overall Options49828 41973 Node: Invoking G++63348 41974 Node: C Dialect Options64871 41975 Node: C++ Dialect Options78760 41976 Node: Objective-C and Objective-C++ Dialect Options99470 41977 Node: Language Independent Options111251 41978 Node: Warning Options114021 41979 Node: Debugging Options170580 41980 Node: Optimize Options207403 41981 Node: Preprocessor Options299912 41982 Ref: Wtrigraphs303997 41983 Ref: dashMF308801 41984 Ref: fdollars-in-identifiers319320 41985 Node: Assembler Options327556 41986 Node: Link Options328261 41987 Ref: Link Options-Footnote-1336829 41988 Node: Directory Options337163 41989 Node: Spec Files343225 41990 Node: Target Options363564 41991 Node: Submodel Options364988 41992 Node: ARC Options366628 41993 Node: ARM Options367818 41994 Node: AVR Options381070 41995 Node: Blackfin Options383203 41996 Node: CRIS Options389245 41997 Node: CRX Options393464 41998 Node: Darwin Options393889 41999 Node: DEC Alpha Options401382 42000 Node: DEC Alpha/VMS Options412859 42001 Node: FRV Options413244 42002 Node: GNU/Linux Options419970 42003 Node: H8/300 Options420428 42004 Node: HPPA Options421495 42005 Node: i386 and x86-64 Options431088 42006 Node: IA-64 Options458003 42007 Node: M32C Options465320 42008 Node: M32R/D Options466611 42009 Node: M680x0 Options470198 42010 Node: M68hc1x Options482771 42011 Node: MCore Options484339 42012 Node: MIPS Options485360 42013 Node: MMIX Options507594 42014 Node: MN10300 Options510076 42015 Node: MT Options511494 42016 Node: PDP-11 Options512408 42017 Node: PowerPC Options514242 42018 Node: RS/6000 and PowerPC Options514476 42019 Node: S/390 and zSeries Options543897 42020 Node: Score Options551380 42021 Node: SH Options552208 42022 Node: SPARC Options562045 42023 Node: SPU Options573018 42024 Node: System V Options575337 42025 Node: V850 Options576160 42026 Node: VAX Options579300 42027 Node: VxWorks Options579848 42028 Node: x86-64 Options581003 42029 Node: Xstormy16 Options581221 42030 Node: Xtensa Options581510 42031 Node: zSeries Options585350 42032 Node: Code Gen Options585546 42033 Node: Environment Variables608315 42034 Node: Precompiled Headers616211 42035 Node: Running Protoize622454 42036 Node: C Implementation628791 42037 Node: Translation implementation630454 42038 Node: Environment implementation631028 42039 Node: Identifiers implementation631578 42040 Node: Characters implementation632632 42041 Node: Integers implementation635438 42042 Node: Floating point implementation637263 42043 Node: Arrays and pointers implementation640192 42044 Ref: Arrays and pointers implementation-Footnote-1641627 42045 Node: Hints implementation641751 42046 Node: Structures unions enumerations and bit-fields implementation643217 42047 Node: Qualifiers implementation645180 42048 Node: Declarators implementation646952 42049 Node: Statements implementation647294 42050 Node: Preprocessing directives implementation647621 42051 Node: Library functions implementation649726 42052 Node: Architecture implementation650366 42053 Node: Locale-specific behavior implementation651069 42054 Node: C Extensions651374 42055 Node: Statement Exprs655930 42056 Node: Local Labels660443 42057 Node: Labels as Values663422 42058 Ref: Labels as Values-Footnote-1665795 42059 Node: Nested Functions665978 42060 Node: Constructing Calls669872 42061 Node: Typeof674595 42062 Node: Conditionals677761 42063 Node: Long Long678652 42064 Node: Complex680153 42065 Node: Floating Types682723 42066 Node: Decimal Float683842 42067 Node: Hex Floats685414 42068 Node: Fixed-Point686455 42069 Node: Zero Length689585 42070 Node: Empty Structures692863 42071 Node: Variable Length693279 42072 Node: Variadic Macros696046 42073 Node: Escaped Newlines698428 42074 Node: Subscripting699267 42075 Node: Pointer Arith699990 42076 Node: Initializers700558 42077 Node: Compound Literals701054 42078 Node: Designated Inits703229 42079 Node: Case Ranges706884 42080 Node: Cast to Union707567 42081 Node: Mixed Declarations708663 42082 Node: Function Attributes709169 42083 Node: Attribute Syntax762694 42084 Node: Function Prototypes772964 42085 Node: C++ Comments774745 42086 Node: Dollar Signs775264 42087 Node: Character Escapes775729 42088 Node: Alignment776023 42089 Node: Variable Attributes777397 42090 Ref: i386 Variable Attributes791297 42091 Node: Type Attributes797320 42092 Ref: i386 Type Attributes810632 42093 Ref: PowerPC Type Attributes811476 42094 Ref: SPU Type Attributes812329 42095 Node: Inline812620 42096 Node: Extended Asm817567 42097 Ref: Example of asm with clobbered asm reg823653 42098 Node: Constraints837749 42099 Node: Simple Constraints838599 42100 Node: Multi-Alternative845126 42101 Node: Modifiers846843 42102 Node: Machine Constraints849737 42103 Node: Asm Labels881167 42104 Node: Explicit Reg Vars882843 42105 Node: Global Reg Vars884451 42106 Node: Local Reg Vars889001 42107 Node: Alternate Keywords891442 42108 Node: Incomplete Enums892870 42109 Node: Function Names893627 42110 Node: Return Address895817 42111 Node: Vector Extensions898614 42112 Node: Offsetof902116 42113 Node: Atomic Builtins902902 42114 Node: Object Size Checking907987 42115 Node: Other Builtins913345 42116 Node: Target Builtins937016 42117 Node: Alpha Built-in Functions937807 42118 Node: ARM iWMMXt Built-in Functions940806 42119 Node: ARM NEON Intrinsics947525 42120 Node: Blackfin Built-in Functions1155363 42121 Node: FR-V Built-in Functions1155977 42122 Node: Argument Types1156836 42123 Node: Directly-mapped Integer Functions1158592 42124 Node: Directly-mapped Media Functions1159674 42125 Node: Raw read/write Functions1166706 42126 Node: Other Built-in Functions1167618 42127 Node: X86 Built-in Functions1168807 42128 Node: MIPS DSP Built-in Functions1205405 42129 Node: MIPS Paired-Single Support1217559 42130 Node: Paired-Single Arithmetic1219169 42131 Node: Paired-Single Built-in Functions1220109 42132 Node: MIPS-3D Built-in Functions1222773 42133 Node: PowerPC AltiVec Built-in Functions1228142 42134 Node: SPARC VIS Built-in Functions1329446 42135 Node: SPU Built-in Functions1331138 42136 Node: Target Format Checks1332920 42137 Node: Solaris Format Checks1333327 42138 Node: Pragmas1333724 42139 Node: ARM Pragmas1334354 42140 Node: M32C Pragmas1334957 42141 Node: RS/6000 and PowerPC Pragmas1335533 42142 Node: Darwin Pragmas1336275 42143 Node: Solaris Pragmas1337342 42144 Node: Symbol-Renaming Pragmas1338503 42145 Node: Structure-Packing Pragmas1341125 42146 Node: Weak Pragmas1342756 42147 Node: Diagnostic Pragmas1343558 42148 Node: Visibility Pragmas1345551 42149 Node: Unnamed Fields1346272 42150 Node: Thread-Local1347782 42151 Node: C99 Thread-Local Edits1349891 42152 Node: C++98 Thread-Local Edits1351903 42153 Node: Binary constants1355348 42154 Node: C++ Extensions1356019 42155 Node: Volatiles1357652 42156 Node: Restricted Pointers1360328 42157 Node: Vague Linkage1361922 42158 Node: C++ Interface1365578 42159 Ref: C++ Interface-Footnote-11369875 42160 Node: Template Instantiation1370012 42161 Node: Bound member functions1377024 42162 Node: C++ Attributes1378567 42163 Node: Namespace Association1380225 42164 Node: Type Traits1381639 42165 Node: Java Exceptions1387198 42166 Node: Deprecated Features1388595 42167 Node: Backwards Compatibility1391559 42168 Node: Objective-C1392914 42169 Node: Executing code before main1393495 42170 Node: What you can and what you cannot do in +load1396101 42171 Node: Type encoding1398268 42172 Node: Garbage Collection1401655 42173 Node: Constant string objects1404279 42174 Node: compatibility_alias1406787 42175 Node: Compatibility1407665 42176 Node: Gcov1414232 42177 Node: Gcov Intro1414756 42178 Node: Invoking Gcov1417472 42179 Node: Gcov and Optimization1429333 42180 Node: Gcov Data Files1431986 42181 Node: Cross-profiling1433124 42182 Node: Trouble1434950 42183 Node: Actual Bugs1436490 42184 Node: Cross-Compiler Problems1437230 42185 Node: Interoperation1437644 42186 Node: Incompatibilities1444781 42187 Node: Fixed Headers1452931 42188 Node: Standard Libraries1454594 42189 Node: Disappointments1455966 42190 Node: C++ Misunderstandings1460324 42191 Node: Static Definitions1461143 42192 Node: Name lookup1462196 42193 Ref: Name lookup-Footnote-11466974 42194 Node: Temporaries1467161 42195 Node: Copy Assignment1469137 42196 Node: Protoize Caveats1470944 42197 Node: Non-bugs1474917 42198 Node: Warnings and Errors1485421 42199 Node: Bugs1487185 42200 Node: Bug Criteria1487749 42201 Node: Bug Reporting1489959 42202 Node: Service1490180 42203 Node: Contributing1490999 42204 Node: Funding1491739 42205 Node: GNU Project1494228 42206 Node: Copying1494874 42207 Node: GNU Free Documentation License1532402 42208 Node: Contributors1554808 42209 Node: Option Index1591003 42210 Node: Keyword Index1743915 42211 42212 End Tag Table 42213