1 This is gcc.info, produced by makeinfo version 5.2 from gcc.texi. 2 3 Copyright (C) 1988-2013 Free Software Foundation, Inc. 4 5 Permission is granted to copy, distribute and/or modify this document 6 under the terms of the GNU Free Documentation License, Version 1.3 or 7 any later version published by the Free Software Foundation; with the 8 Invariant Sections being "Funding Free Software", the Front-Cover Texts 9 being (a) (see below), and with the Back-Cover Texts being (b) (see 10 below). A copy of the license is included in the section entitled "GNU 11 Free Documentation License". 12 13 (a) The FSF's Front-Cover Text is: 14 15 A GNU Manual 16 17 (b) The FSF's Back-Cover Text is: 18 19 You have freedom to copy and modify this GNU Manual, like GNU software. 20 Copies published by the Free Software Foundation raise funds for GNU 21 development. 22 INFO-DIR-SECTION Software development 23 START-INFO-DIR-ENTRY 24 * gcc: (gcc). The GNU Compiler Collection. 25 * g++: (gcc). The GNU C++ compiler. 26 * gcov: (gcc) Gcov. 'gcov'--a test coverage program. 27 END-INFO-DIR-ENTRY 28 29 This file documents the use of the GNU compilers. 30 31 Copyright (C) 1988-2013 Free Software Foundation, Inc. 32 33 Permission is granted to copy, distribute and/or modify this document 34 under the terms of the GNU Free Documentation License, Version 1.3 or 35 any later version published by the Free Software Foundation; with the 36 Invariant Sections being "Funding Free Software", the Front-Cover Texts 37 being (a) (see below), and with the Back-Cover Texts being (b) (see 38 below). A copy of the license is included in the section entitled "GNU 39 Free Documentation License". 40 41 (a) The FSF's Front-Cover Text is: 42 43 A GNU Manual 44 45 (b) The FSF's Back-Cover Text is: 46 47 You have freedom to copy and modify this GNU Manual, like GNU software. 48 Copies published by the Free Software Foundation raise funds for GNU 49 development. 50 51 52 File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 53 54 Introduction 55 ************ 56 57 This manual documents how to use the GNU compilers, as well as their 58 features and incompatibilities, and how to report bugs. It corresponds 59 to the compilers (GCC) version 4.8.3. The internals of the GNU 60 compilers, including how to port them to new targets and some 61 information about how to write front ends for new languages, are 62 documented in a separate manual. *Note Introduction: (gccint)Top. 63 64 * Menu: 65 66 * G++ and GCC:: You can compile C or C++ programs. 67 * Standards:: Language standards supported by GCC. 68 * Invoking GCC:: Command options supported by 'gcc'. 69 * C Implementation:: How GCC implements the ISO C specification. 70 * C++ Implementation:: How GCC implements the ISO C++ specification. 71 * C Extensions:: GNU extensions to the C language family. 72 * C++ Extensions:: GNU extensions to the C++ language. 73 * Objective-C:: GNU Objective-C runtime features. 74 * Compatibility:: Binary Compatibility 75 * Gcov:: 'gcov'--a test coverage program. 76 * Trouble:: If you have trouble using GCC. 77 * Bugs:: How, why and where to report bugs. 78 * Service:: How to find suppliers of support for GCC. 79 * Contributing:: How to contribute to testing and developing GCC. 80 81 * Funding:: How to help assure funding for free software. 82 * GNU Project:: The GNU Project and GNU/Linux. 83 84 * Copying:: GNU General Public License says 85 how you can copy and share GCC. 86 * GNU Free Documentation License:: How you can copy and share this manual. 87 * Contributors:: People who have contributed to GCC. 88 89 * Option Index:: Index to command line options. 90 * Keyword Index:: Index of concepts and symbol names. 91 92 93 File: gcc.info, Node: G++ and GCC, Next: Standards, Up: Top 94 95 1 Programming Languages Supported by GCC 96 **************************************** 97 98 GCC stands for "GNU Compiler Collection". GCC is an integrated 99 distribution of compilers for several major programming languages. 100 These languages currently include C, C++, Objective-C, Objective-C++, 101 Java, Fortran, Ada, and Go. 102 103 The abbreviation "GCC" has multiple meanings in common use. The 104 current official meaning is "GNU Compiler Collection", which refers 105 generically to the complete suite of tools. The name historically stood 106 for "GNU C Compiler", and this usage is still common when the emphasis 107 is on compiling C programs. Finally, the name is also used when 108 speaking of the "language-independent" component of GCC: code shared 109 among the compilers for all supported languages. 110 111 The language-independent component of GCC includes the majority of the 112 optimizers, as well as the "back ends" that generate machine code for 113 various processors. 114 115 The part of a compiler that is specific to a particular language is 116 called the "front end". In addition to the front ends that are 117 integrated components of GCC, there are several other front ends that 118 are maintained separately. These support languages such as Pascal, 119 Mercury, and COBOL. To use these, they must be built together with GCC 120 proper. 121 122 Most of the compilers for languages other than C have their own names. 123 The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 124 talk about compiling one of those languages, we might refer to that 125 compiler by its own name, or as GCC. Either is correct. 126 127 Historically, compilers for many languages, including C++ and Fortran, 128 have been implemented as "preprocessors" which emit another high level 129 language such as C. None of the compilers included in GCC are 130 implemented this way; they all generate machine code directly. This 131 sort of preprocessor should not be confused with the "C preprocessor", 132 which is an integral feature of the C, C++, Objective-C and 133 Objective-C++ languages. 134 135 136 File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 137 138 2 Language Standards Supported by GCC 139 ************************************* 140 141 For each language compiled by GCC for which there is a standard, GCC 142 attempts to follow one or more versions of that standard, possibly with 143 some exceptions, and possibly with some extensions. 144 145 2.1 C language 146 ============== 147 148 GCC supports three versions of the C standard, although support for the 149 most recent version is not yet complete. 150 151 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 152 published in 1990. This standard was ratified as an ISO standard 153 (ISO/IEC 9899:1990) later in 1990. There were no technical differences 154 between these publications, although the sections of the ANSI standard 155 were renumbered and became clauses in the ISO standard. This standard, 156 in both its forms, is commonly known as "C89", or occasionally as "C90", 157 from the dates of ratification. The ANSI standard, but not the ISO 158 standard, also came with a Rationale document. To select this standard 159 in GCC, use one of the options '-ansi', '-std=c90' or 160 '-std=iso9899:1990'; to obtain all the diagnostics required by the 161 standard, you should also specify '-pedantic' (or '-pedantic-errors' if 162 you want them to be errors rather than warnings). *Note Options 163 Controlling C Dialect: C Dialect Options. 164 165 Errors in the 1990 ISO C standard were corrected in two Technical 166 Corrigenda published in 1994 and 1996. GCC does not support the 167 uncorrected version. 168 169 An amendment to the 1990 standard was published in 1995. This 170 amendment added digraphs and '__STDC_VERSION__' to the language, but 171 otherwise concerned the library. This amendment is commonly known as 172 "AMD1"; the amended standard is sometimes known as "C94" or "C95". To 173 select this standard in GCC, use the option '-std=iso9899:199409' (with, 174 as for other standard versions, '-pedantic' to receive all required 175 diagnostics). 176 177 A new edition of the ISO C standard was published in 1999 as ISO/IEC 178 9899:1999, and is commonly known as "C99". GCC has incomplete support 179 for this standard version; see <http://gcc.gnu.org/c99status.html> for 180 details. To select this standard, use '-std=c99' or 181 '-std=iso9899:1999'. (While in development, drafts of this standard 182 version were referred to as "C9X".) 183 184 Errors in the 1999 ISO C standard were corrected in three Technical 185 Corrigenda published in 2001, 2004 and 2007. GCC does not support the 186 uncorrected version. 187 188 A fourth version of the C standard, known as "C11", was published in 189 2011 as ISO/IEC 9899:2011. GCC has limited incomplete support for parts 190 of this standard, enabled with '-std=c11' or '-std=iso9899:2011'. 191 (While in development, drafts of this standard version were referred to 192 as "C1X".) 193 194 By default, GCC provides some extensions to the C language that on rare 195 occasions conflict with the C standard. *Note Extensions to the C 196 Language Family: C Extensions. Use of the '-std' options listed above 197 will disable these extensions where they conflict with the C standard 198 version selected. You may also select an extended version of the C 199 language explicitly with '-std=gnu90' (for C90 with GNU extensions), 200 '-std=gnu99' (for C99 with GNU extensions) or '-std=gnu11' (for C11 with 201 GNU extensions). The default, if no C language dialect options are 202 given, is '-std=gnu90'; this will change to '-std=gnu99' or '-std=gnu11' 203 in some future release when the C99 or C11 support is complete. Some 204 features that are part of the C99 standard are accepted as extensions in 205 C90 mode, and some features that are part of the C11 standard are 206 accepted as extensions in C90 and C99 modes. 207 208 The ISO C standard defines (in clause 4) two classes of conforming 209 implementation. A "conforming hosted implementation" supports the whole 210 standard including all the library facilities; a "conforming 211 freestanding implementation" is only required to provide certain library 212 facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and 213 '<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also 214 those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in 215 '<stdalign.h>' and '<stdnoreturn.h>'. In addition, complex types, added 216 in C99, are not required for freestanding implementations. The standard 217 also defines two environments for programs, a "freestanding 218 environment", required of all implementations and which may not have 219 library facilities beyond those required of freestanding 220 implementations, where the handling of program startup and termination 221 are implementation-defined, and a "hosted environment", which is not 222 required, in which all the library facilities are provided and startup 223 is through a function 'int main (void)' or 'int main (int, char *[])'. 224 An OS kernel would be a freestanding environment; a program using the 225 facilities of an operating system would normally be in a hosted 226 implementation. 227 228 GCC aims towards being usable as a conforming freestanding 229 implementation, or as the compiler for a conforming hosted 230 implementation. By default, it will act as the compiler for a hosted 231 implementation, defining '__STDC_HOSTED__' as '1' and presuming that 232 when the names of ISO C functions are used, they have the semantics 233 defined in the standard. To make it act as a conforming freestanding 234 implementation for a freestanding environment, use the option 235 '-ffreestanding'; it will then define '__STDC_HOSTED__' to '0' and not 236 make assumptions about the meanings of function names from the standard 237 library, with exceptions noted below. To build an OS kernel, you may 238 well still need to make your own arrangements for linking and startup. 239 *Note Options Controlling C Dialect: C Dialect Options. 240 241 GCC does not provide the library facilities required only of hosted 242 implementations, nor yet all the facilities required by C99 of 243 freestanding implementations; to use the facilities of a hosted 244 environment, you will need to find them elsewhere (for example, in the 245 GNU C library). *Note Standard Libraries: Standard Libraries. 246 247 Most of the compiler support routines used by GCC are present in 248 'libgcc', but there are a few exceptions. GCC requires the freestanding 249 environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'. 250 Finally, if '__builtin_trap' is used, and the target does not implement 251 the 'trap' pattern, then GCC will emit a call to 'abort'. 252 253 For references to Technical Corrigenda, Rationale documents and 254 information concerning the history of C that is available online, see 255 <http://gcc.gnu.org/readings.html> 256 257 2.2 C++ language 258 ================ 259 260 GCC supports the original ISO C++ standard (1998) and contains 261 experimental support for the second ISO C++ standard (2011). 262 263 The original ISO C++ standard was published as the ISO standard 264 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 265 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 266 C++03, respectively. GCC implements the majority of C++98 ('export' is 267 a notable exception) and most of the changes in C++03. To select this 268 standard in GCC, use one of the options '-ansi', '-std=c++98', or 269 '-std=c++03'; to obtain all the diagnostics required by the standard, 270 you should also specify '-pedantic' (or '-pedantic-errors' if you want 271 them to be errors rather than warnings). 272 273 A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011, 274 and is referred to as C++11; before its publication it was commonly 275 referred to as C++0x. C++11 contains several changes to the C++ 276 language, most of which have been implemented in an experimental C++11 277 mode in GCC. For information regarding the C++11 features available in 278 the experimental C++11 mode, see 279 <http://gcc.gnu.org/projects/cxx0x.html>. To select this standard in 280 GCC, use the option '-std=c++11'; to obtain all the diagnostics required 281 by the standard, you should also specify '-pedantic' (or 282 '-pedantic-errors' if you want them to be errors rather than warnings). 283 284 More information about the C++ standards is available on the ISO C++ 285 committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>. 286 287 By default, GCC provides some extensions to the C++ language; *Note 288 Options Controlling C++ Dialect: C++ Dialect Options. Use of the '-std' 289 option listed above will disable these extensions. You may also select 290 an extended version of the C++ language explicitly with '-std=gnu++98' 291 (for C++98 with GNU extensions) or '-std=gnu++11' (for C++11 with GNU 292 extensions). The default, if no C++ language dialect options are given, 293 is '-std=gnu++98'. 294 295 2.3 Objective-C and Objective-C++ languages 296 =========================================== 297 298 GCC supports "traditional" Objective-C (also known as "Objective-C 1.0") 299 and contains support for the Objective-C exception and synchronization 300 syntax. It has also support for a number of "Objective-C 2.0" language 301 extensions, including properties, fast enumeration (only for 302 Objective-C), method attributes and the @optional and @required keywords 303 in protocols. GCC supports Objective-C++ and features available in 304 Objective-C are also available in Objective-C++. 305 306 GCC by default uses the GNU Objective-C runtime library, which is part 307 of GCC and is not the same as the Apple/NeXT Objective-C runtime library 308 used on Apple systems. There are a number of differences documented in 309 this manual. The options '-fgnu-runtime' and '-fnext-runtime' allow you 310 to switch between producing output that works with the GNU Objective-C 311 runtime library and output that works with the Apple/NeXT Objective-C 312 runtime library. 313 314 There is no formal written standard for Objective-C or Objective-C++. 315 The authoritative manual on traditional Objective-C (1.0) is 316 "Object-Oriented Programming and the Objective-C Language", available at 317 a number of web sites: 318 * <http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf> 319 is the original NeXTstep document; 320 * <http://objc.toodarkpark.net> is the same document in another 321 format; 322 * 323 <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/> 324 has an updated version but make sure you search for "Object 325 Oriented Programming and the Objective-C Programming Language 1.0", 326 not documentation on the newer "Objective-C 2.0" language 327 328 The Objective-C exception and synchronization syntax (that is, the 329 keywords @try, @throw, @catch, @finally and @synchronized) is supported 330 by GCC and is enabled with the option '-fobjc-exceptions'. The syntax 331 is briefly documented in this manual and in the Objective-C 2.0 manuals 332 from Apple. 333 334 The Objective-C 2.0 language extensions and features are automatically 335 enabled; they include properties (via the @property, @synthesize and 336 @dynamic keywords), fast enumeration (not available in Objective-C++), 337 attributes for methods (such as deprecated, noreturn, sentinel, format), 338 the unused attribute for method arguments, the @package keyword for 339 instance variables and the @optional and @required keywords in 340 protocols. You can disable all these Objective-C 2.0 language 341 extensions with the option '-fobjc-std=objc1', which causes the compiler 342 to recognize the same Objective-C language syntax recognized by GCC 4.0, 343 and to produce an error if one of the new features is used. 344 345 GCC has currently no support for non-fragile instance variables. 346 347 The authoritative manual on Objective-C 2.0 is available from Apple: 348 * 349 <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/> 350 351 For more information concerning the history of Objective-C that is 352 available online, see <http://gcc.gnu.org/readings.html> 353 354 2.4 Go language 355 =============== 356 357 As of the GCC 4.7.1 release, GCC supports the Go 1 language standard, 358 described at <http://golang.org/doc/go1.html>. 359 360 2.5 References for other languages 361 ================================== 362 363 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 364 conformance and compatibility of the Ada compiler. 365 366 *Note Standards: (gfortran)Standards, for details of standards 367 supported by GNU Fortran. 368 369 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 370 details of compatibility between 'gcj' and the Java Platform. 371 372 373 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 374 375 3 GCC Command Options 376 ********************* 377 378 When you invoke GCC, it normally does preprocessing, compilation, 379 assembly and linking. The "overall options" allow you to stop this 380 process at an intermediate stage. For example, the '-c' option says not 381 to run the linker. Then the output consists of object files output by 382 the assembler. 383 384 Other options are passed on to one stage of processing. Some options 385 control the preprocessor and others the compiler itself. Yet other 386 options control the assembler and linker; most of these are not 387 documented here, since you rarely need to use any of them. 388 389 Most of the command-line options that you can use with GCC are useful 390 for C programs; when an option is only useful with another language 391 (usually C++), the explanation says so explicitly. If the description 392 for a particular option does not mention a source language, you can use 393 that option with all supported languages. 394 395 *Note Compiling C++ Programs: Invoking G++, for a summary of special 396 options for compiling C++ programs. 397 398 The 'gcc' program accepts options and file names as operands. Many 399 options have multi-letter names; therefore multiple single-letter 400 options may _not_ be grouped: '-dv' is very different from '-d -v'. 401 402 You can mix options and other arguments. For the most part, the order 403 you use doesn't matter. Order does matter when you use several options 404 of the same kind; for example, if you specify '-L' more than once, the 405 directories are searched in the order specified. Also, the placement of 406 the '-l' option is significant. 407 408 Many options have long names starting with '-f' or with '-W'--for 409 example, '-fmove-loop-invariants', '-Wformat' and so on. Most of these 410 have both positive and negative forms; the negative form of '-ffoo' is 411 '-fno-foo'. This manual documents only one of these two forms, 412 whichever one is not the default. 413 414 *Note Option Index::, for an index to GCC's options. 415 416 * Menu: 417 418 * Option Summary:: Brief list of all options, without explanations. 419 * Overall Options:: Controlling the kind of output: 420 an executable, object files, assembler files, 421 or preprocessed source. 422 * Invoking G++:: Compiling C++ programs. 423 * C Dialect Options:: Controlling the variant of C language compiled. 424 * C++ Dialect Options:: Variations on C++. 425 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 426 and Objective-C++. 427 * Language Independent Options:: Controlling how diagnostics should be 428 formatted. 429 * Warning Options:: How picky should the compiler be? 430 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 431 * Optimize Options:: How much optimization? 432 * Preprocessor Options:: Controlling header files and macro definitions. 433 Also, getting dependency information for Make. 434 * Assembler Options:: Passing options to the assembler. 435 * Link Options:: Specifying libraries and so on. 436 * Directory Options:: Where to find header files and libraries. 437 Where to find the compiler executable files. 438 * Spec Files:: How to pass switches to sub-processes. 439 * Target Options:: Running a cross-compiler, or an old version of GCC. 440 * Submodel Options:: Specifying minor hardware or convention variations, 441 such as 68010 vs 68020. 442 * Code Gen Options:: Specifying conventions for function calls, data layout 443 and register usage. 444 * Environment Variables:: Env vars that affect GCC. 445 * Precompiled Headers:: Compiling a header once, and using it many times. 446 447 448 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 449 450 3.1 Option Summary 451 ================== 452 453 Here is a summary of all the options, grouped by type. Explanations are 454 in the following sections. 455 456 _Overall Options_ 457 *Note Options Controlling the Kind of Output: Overall Options. 458 -c -S -E -o FILE -no-canonical-prefixes 459 -pipe -pass-exit-codes 460 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 461 --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG 462 -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE 463 464 _C Language Options_ 465 *Note Options Controlling C Dialect: C Dialect Options. 466 -ansi -std=STANDARD -fgnu89-inline 467 -aux-info FILENAME -fallow-parameterless-variadic-functions 468 -fno-asm -fno-builtin -fno-builtin-FUNCTION 469 -fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions 470 -trigraphs -traditional -traditional-cpp 471 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 472 -fsigned-bitfields -fsigned-char 473 -funsigned-bitfields -funsigned-char 474 475 _C++ Language Options_ 476 *Note Options Controlling C++ Dialect: C++ Dialect Options. 477 -fabi-version=N -fno-access-control -fcheck-new 478 -fconstexpr-depth=N -ffriend-injection 479 -fno-elide-constructors 480 -fno-enforce-eh-specs 481 -ffor-scope -fno-for-scope -fno-gnu-keywords 482 -fno-implicit-templates 483 -fno-implicit-inline-templates 484 -fno-implement-inlines -fms-extensions 485 -fno-nonansi-builtins -fnothrow-opt -fno-operator-names 486 -fno-optional-diags -fpermissive 487 -fno-pretty-templates 488 -frepo -fno-rtti -fstats -ftemplate-backtrace-limit=N 489 -ftemplate-depth=N 490 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 491 -fno-default-inline -fvisibility-inlines-hidden 492 -fvisibility-ms-compat 493 -fext-numeric-literals 494 -Wabi -Wconversion-null -Wctor-dtor-privacy 495 -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing 496 -Wnoexcept -Wnon-virtual-dtor -Wreorder 497 -Weffc++ -Wstrict-null-sentinel 498 -Wno-non-template-friend -Wold-style-cast 499 -Woverloaded-virtual -Wno-pmf-conversions 500 -Wsign-promo 501 502 _Objective-C and Objective-C++ Language Options_ 503 *Note Options Controlling Objective-C and Objective-C++ Dialects: 504 Objective-C and Objective-C++ Dialect Options. 505 -fconstant-string-class=CLASS-NAME 506 -fgnu-runtime -fnext-runtime 507 -fno-nil-receivers 508 -fobjc-abi-version=N 509 -fobjc-call-cxx-cdtors 510 -fobjc-direct-dispatch 511 -fobjc-exceptions 512 -fobjc-gc 513 -fobjc-nilcheck 514 -fobjc-std=objc1 515 -freplace-objc-classes 516 -fzero-link 517 -gen-decls 518 -Wassign-intercept 519 -Wno-protocol -Wselector 520 -Wstrict-selector-match 521 -Wundeclared-selector 522 523 _Language Independent Options_ 524 *Note Options to Control Diagnostic Messages Formatting: Language 525 Independent Options. 526 -fmessage-length=N 527 -fdiagnostics-show-location=[once|every-line] 528 -fno-diagnostics-show-option -fno-diagnostics-show-caret 529 530 _Warning Options_ 531 *Note Options to Request or Suppress Warnings: Warning Options. 532 -fsyntax-only -fmax-errors=N -Wpedantic 533 -pedantic-errors 534 -w -Wextra -Wall -Waddress -Waggregate-return 535 -Waggressive-loop-optimizations -Warray-bounds 536 -Wno-attributes -Wno-builtin-macro-redefined 537 -Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual 538 -Wchar-subscripts -Wclobbered -Wcomment 539 -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated 540 -Wno-deprecated-declarations -Wdisabled-optimization 541 -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare 542 -Wno-endif-labels -Werror -Werror=* 543 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 544 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 545 -Wformat-security -Wformat-y2k 546 -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init 547 -Wignored-qualifiers 548 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 549 -Winit-self -Winline -Wmaybe-uninitialized 550 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 551 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 552 -Wlogical-op -Wlong-long 553 -Wmain -Wmaybe-uninitialized -Wmissing-braces -Wmissing-field-initializers 554 -Wmissing-include-dirs 555 -Wno-mudflap 556 -Wno-multichar -Wnonnull -Wno-overflow 557 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 558 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 559 -Wpointer-arith -Wno-pointer-to-int-cast 560 -Wredundant-decls -Wno-return-local-addr 561 -Wreturn-type -Wsequence-point -Wshadow 562 -Wsign-compare -Wsign-conversion -Wsizeof-pointer-memaccess 563 -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing 564 -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=N 565 -Wsuggest-attribute=[pure|const|noreturn|format] 566 -Wmissing-format-attribute 567 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand 568 -Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef 569 -Wuninitialized -Wunknown-pragmas -Wno-pragmas 570 -Wunsuffixed-float-constants -Wunused -Wunused-function 571 -Wunused-label -Wunused-local-typedefs -Wunused-parameter 572 -Wno-unused-result -Wunused-value -Wunused-variable 573 -Wunused-but-set-parameter -Wunused-but-set-variable 574 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance 575 -Wvla -Wvolatile-register-var -Wwrite-strings -Wzero-as-null-pointer-constant 576 577 _C and Objective-C-only Warning Options_ 578 -Wbad-function-cast -Wmissing-declarations 579 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 580 -Wold-style-declaration -Wold-style-definition 581 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 582 -Wdeclaration-after-statement -Wpointer-sign 583 584 _Debugging Options_ 585 *Note Options for Debugging Your Program or GCC: Debugging Options. 586 -dLETTERS -dumpspecs -dumpmachine -dumpversion 587 -fsanitize=STYLE 588 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 589 -fdisable-ipa-PASS_NAME 590 -fdisable-rtl-PASS_NAME 591 -fdisable-rtl-PASS-NAME=RANGE-LIST 592 -fdisable-tree-PASS_NAME 593 -fdisable-tree-PASS-NAME=RANGE-LIST 594 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links 595 -fdump-translation-unit[-N] 596 -fdump-class-hierarchy[-N] 597 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 598 -fdump-passes 599 -fdump-statistics 600 -fdump-tree-all 601 -fdump-tree-original[-N] 602 -fdump-tree-optimized[-N] 603 -fdump-tree-cfg -fdump-tree-alias 604 -fdump-tree-ch 605 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 606 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 607 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 608 -fdump-tree-dom[-N] 609 -fdump-tree-dse[-N] 610 -fdump-tree-phiprop[-N] 611 -fdump-tree-phiopt[-N] 612 -fdump-tree-forwprop[-N] 613 -fdump-tree-copyrename[-N] 614 -fdump-tree-nrv -fdump-tree-vect 615 -fdump-tree-sink 616 -fdump-tree-sra[-N] 617 -fdump-tree-forwprop[-N] 618 -fdump-tree-fre[-N] 619 -fdump-tree-vrp[-N] 620 -ftree-vectorizer-verbose=N 621 -fdump-tree-storeccp[-N] 622 -fdump-final-insns=FILE 623 -fcompare-debug[=OPTS] -fcompare-debug-second 624 -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types 625 -feliminate-unused-debug-symbols -femit-class-debug-always 626 -fenable-KIND-PASS 627 -fenable-KIND-PASS=RANGE-LIST 628 -fdebug-types-section -fmem-report-wpa 629 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 630 -fopt-info 631 -fopt-info-OPTIONS[=FILE] 632 -frandom-seed=STRING -fsched-verbose=N 633 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 634 -fstack-usage -ftest-coverage -ftime-report -fvar-tracking 635 -fvar-tracking-assignments -fvar-tracking-assignments-toggle 636 -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION 637 -ggdb -grecord-gcc-switches -gno-record-gcc-switches 638 -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 639 -gvms -gxcoff -gxcoff+ 640 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 641 -fdebug-prefix-map=OLD=NEW 642 -femit-struct-debug-baseonly -femit-struct-debug-reduced 643 -femit-struct-debug-detailed[=SPEC-LIST] 644 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 645 -print-multi-directory -print-multi-lib -print-multi-os-directory 646 -print-prog-name=PROGRAM -print-search-dirs -Q 647 -print-sysroot -print-sysroot-headers-suffix 648 -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] 649 650 _Optimization Options_ 651 *Note Options that Control Optimization: Optimize Options. 652 -faggressive-loop-optimizations -falign-functions[=N] 653 -falign-jumps[=N] 654 -falign-labels[=N] -falign-loops[=N] 655 -fassociative-math -fauto-inc-dec -fbranch-probabilities 656 -fbranch-target-load-optimize -fbranch-target-load-optimize2 657 -fbtr-bb-exclusive -fcaller-saves 658 -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack 659 -fcompare-elim -fcprop-registers -fcrossjumping 660 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules 661 -fcx-limited-range 662 -fdata-sections -fdce -fdelayed-branch 663 -fdelete-null-pointer-checks -fdevirtualize -fdse 664 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects 665 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE 666 -fforward-propagate -ffp-contract=STYLE -ffunction-sections 667 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity 668 -fgcse-sm -fhoist-adjacent-loads -fif-conversion 669 -fif-conversion2 -findirect-inlining 670 -finline-functions -finline-functions-called-once -finline-limit=N 671 -finline-small-functions -fipa-cp -fipa-cp-clone 672 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference 673 -fira-algorithm=ALGORITHM 674 -fira-region=REGION -fira-hoist-pressure 675 -fira-loop-pressure -fno-ira-share-save-slots 676 -fno-ira-share-spill-slots -fira-verbose=N 677 -fivopts -fkeep-inline-functions -fkeep-static-consts 678 -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize 679 -floop-parallelize-all -flto -flto-compression-level 680 -flto-partition=ALG -flto-report -fmerge-all-constants 681 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves 682 -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg 683 -fno-default-inline 684 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 685 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 686 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 687 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 688 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 689 -fpartial-inlining -fpeel-loops -fpredictive-commoning 690 -fprefetch-loop-arrays -fprofile-report 691 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 692 -fprofile-generate=PATH 693 -fprofile-use -fprofile-use=PATH -fprofile-values 694 -freciprocal-math -free -fregmove -frename-registers -freorder-blocks 695 -freorder-blocks-and-partition -freorder-functions 696 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 697 -frounding-math -fsched2-use-superblocks -fsched-pressure 698 -fsched-spec-load -fsched-spec-load-dangerous 699 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 700 -fsched-group-heuristic -fsched-critical-path-heuristic 701 -fsched-spec-insn-heuristic -fsched-rank-heuristic 702 -fsched-last-insn-heuristic -fsched-dep-count-heuristic 703 -fschedule-insns -fschedule-insns2 -fsection-anchors 704 -fselective-scheduling -fselective-scheduling2 705 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 706 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant 707 -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector 708 -fstack-protector-all -fstrict-aliasing -fstrict-overflow 709 -fthread-jumps -ftracer -ftree-bit-ccp 710 -ftree-builtin-call-dce -ftree-ccp -ftree-ch 711 -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop 712 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse 713 -ftree-forwprop -ftree-fre -ftree-loop-if-convert 714 -ftree-loop-if-convert-stores -ftree-loop-im 715 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns 716 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 717 -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta 718 -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra 719 -ftree-switch-conversion -ftree-tail-merge 720 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp 721 -funit-at-a-time -funroll-all-loops -funroll-loops 722 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 723 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 724 -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin 725 --param NAME=VALUE 726 -O -O0 -O1 -O2 -O3 -Os -Ofast -Og 727 728 _Preprocessor Options_ 729 *Note Options Controlling the Preprocessor: Preprocessor Options. 730 -AQUESTION=ANSWER 731 -A-QUESTION[=ANSWER] 732 -C -dD -dI -dM -dN 733 -DMACRO[=DEFN] -E -H 734 -idirafter DIR 735 -include FILE -imacros FILE 736 -iprefix FILE -iwithprefix DIR 737 -iwithprefixbefore DIR -isystem DIR 738 -imultilib DIR -isysroot DIR 739 -M -MM -MF -MG -MP -MQ -MT -nostdinc 740 -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory 741 -remap -trigraphs -undef -UMACRO 742 -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp 743 744 _Assembler Option_ 745 *Note Passing Options to the Assembler: Assembler Options. 746 -Wa,OPTION -Xassembler OPTION 747 748 _Linker Options_ 749 *Note Options for Linking: Link Options. 750 OBJECT-FILE-NAME -lLIBRARY 751 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 752 -s -static -static-libgcc -static-libstdc++ 753 -static-libasan -static-libtsan 754 -shared -shared-libgcc -symbolic 755 -T SCRIPT -Wl,OPTION -Xlinker OPTION 756 -u SYMBOL 757 758 _Directory Options_ 759 *Note Options for Directory Search: Directory Options. 760 -BPREFIX -IDIR -iplugindir=DIR 761 -iquoteDIR -LDIR -specs=FILE -I- 762 --sysroot=DIR --no-sysroot-suffix 763 764 _Machine Dependent Options_ 765 *Note Hardware Models and Configurations: Submodel Options. 766 767 _AArch64 Options_ 768 -mbig-endian -mlittle-endian 769 -mgeneral-regs-only 770 -mcmodel=tiny -mcmodel=small -mcmodel=large 771 -mstrict-align 772 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 773 -mtls-dialect=desc -mtls-dialect=traditional 774 -march=NAME -mcpu=NAME -mtune=NAME 775 776 _Adapteva Epiphany Options_ 777 -mhalf-reg-file -mprefer-short-insn-regs 778 -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf 779 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM 780 -mround-nearest -mlong-calls -mshort-calls -msmall16 781 -mfp-mode=MODE -mvect-double -max-vect-align=NUM 782 -msplit-vecmove-early -m1reg-REG 783 784 _ARM Options_ 785 -mapcs-frame -mno-apcs-frame 786 -mabi=NAME 787 -mapcs-stack-check -mno-apcs-stack-check 788 -mapcs-float -mno-apcs-float 789 -mapcs-reentrant -mno-apcs-reentrant 790 -msched-prolog -mno-sched-prolog 791 -mlittle-endian -mbig-endian -mwords-little-endian 792 -mfloat-abi=NAME 793 -mfp16-format=NAME 794 -mthumb-interwork -mno-thumb-interwork 795 -mcpu=NAME -march=NAME -mfpu=NAME 796 -mstructure-size-boundary=N 797 -mabort-on-noreturn 798 -mlong-calls -mno-long-calls 799 -msingle-pic-base -mno-single-pic-base 800 -mpic-register=REG 801 -mnop-fun-dllimport 802 -mpoke-function-name 803 -mthumb -marm 804 -mtpcs-frame -mtpcs-leaf-frame 805 -mcaller-super-interworking -mcallee-super-interworking 806 -mtp=NAME -mtls-dialect=DIALECT 807 -mword-relocations 808 -mfix-cortex-m3-ldrd 809 -munaligned-access 810 811 _AVR Options_ 812 -mmcu=MCU -maccumulate-args -mbranch-cost=COST 813 -mcall-prologues -mint8 -mno-interrupts -mrelax 814 -mstrict-X -mtiny-stack -Waddr-space-convert 815 816 _Blackfin Options_ 817 -mcpu=CPU[-SIREVISION] 818 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 819 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 820 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 821 -mno-id-shared-library -mshared-library-id=N 822 -mleaf-id-shared-library -mno-leaf-id-shared-library 823 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 824 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 825 -micplb 826 827 _C6X Options_ 828 -mbig-endian -mlittle-endian -march=CPU 829 -msim -msdata=SDATA-TYPE 830 831 _CRIS Options_ 832 -mcpu=CPU -march=CPU -mtune=CPU 833 -mmax-stack-frame=N -melinux-stacksize=N 834 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 835 -mstack-align -mdata-align -mconst-align 836 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 837 -melf -maout -melinux -mlinux -sim -sim2 838 -mmul-bug-workaround -mno-mul-bug-workaround 839 840 _CR16 Options_ 841 -mmac 842 -mcr16cplus -mcr16c 843 -msim -mint32 -mbit-ops 844 -mdata-model=MODEL 845 846 _Darwin Options_ 847 -all_load -allowable_client -arch -arch_errors_fatal 848 -arch_only -bind_at_load -bundle -bundle_loader 849 -client_name -compatibility_version -current_version 850 -dead_strip 851 -dependency-file -dylib_file -dylinker_install_name 852 -dynamic -dynamiclib -exported_symbols_list 853 -filelist -flat_namespace -force_cpusubtype_ALL 854 -force_flat_namespace -headerpad_max_install_names 855 -iframework 856 -image_base -init -install_name -keep_private_externs 857 -multi_module -multiply_defined -multiply_defined_unused 858 -noall_load -no_dead_strip_inits_and_terms 859 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 860 -pagezero_size -prebind -prebind_all_twolevel_modules 861 -private_bundle -read_only_relocs -sectalign 862 -sectobjectsymbols -whyload -seg1addr 863 -sectcreate -sectobjectsymbols -sectorder 864 -segaddr -segs_read_only_addr -segs_read_write_addr 865 -seg_addr_table -seg_addr_table_filename -seglinkedit 866 -segprot -segs_read_only_addr -segs_read_write_addr 867 -single_module -static -sub_library -sub_umbrella 868 -twolevel_namespace -umbrella -undefined 869 -unexported_symbols_list -weak_reference_mismatches 870 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 871 -mkernel -mone-byte-bool 872 873 _DEC Alpha Options_ 874 -mno-fp-regs -msoft-float 875 -mieee -mieee-with-inexact -mieee-conformant 876 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 877 -mtrap-precision=MODE -mbuild-constants 878 -mcpu=CPU-TYPE -mtune=CPU-TYPE 879 -mbwx -mmax -mfix -mcix 880 -mfloat-vax -mfloat-ieee 881 -mexplicit-relocs -msmall-data -mlarge-data 882 -msmall-text -mlarge-text 883 -mmemory-latency=TIME 884 885 _FR30 Options_ 886 -msmall-model -mno-lsim 887 888 _FRV Options_ 889 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 890 -mhard-float -msoft-float 891 -malloc-cc -mfixed-cc -mdword -mno-dword 892 -mdouble -mno-double 893 -mmedia -mno-media -mmuladd -mno-muladd 894 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 895 -mlinked-fp -mlong-calls -malign-labels 896 -mlibrary-pic -macc-4 -macc-8 897 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 898 -moptimize-membar -mno-optimize-membar 899 -mscc -mno-scc -mcond-exec -mno-cond-exec 900 -mvliw-branch -mno-vliw-branch 901 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 902 -mno-nested-cond-exec -mtomcat-stats 903 -mTLS -mtls 904 -mcpu=CPU 905 906 _GNU/Linux Options_ 907 -mglibc -muclibc -mbionic -mandroid 908 -tno-android-cc -tno-android-ld 909 910 _H8/300 Options_ 911 -mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300 912 913 _HPPA Options_ 914 -march=ARCHITECTURE-TYPE 915 -mbig-switch -mdisable-fpregs -mdisable-indexing 916 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 917 -mfixed-range=REGISTER-RANGE 918 -mjump-in-delay -mlinker-opt -mlong-calls 919 -mlong-load-store -mno-big-switch -mno-disable-fpregs 920 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 921 -mno-jump-in-delay -mno-long-load-store 922 -mno-portable-runtime -mno-soft-float 923 -mno-space-regs -msoft-float -mpa-risc-1-0 924 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 925 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 926 -munix=UNIX-STD -nolibdld -static -threads 927 928 _i386 and x86-64 Options_ 929 -mtune=CPU-TYPE -march=CPU-TYPE 930 -mfpmath=UNIT 931 -masm=DIALECT -mno-fancy-math-387 932 -mno-fp-ret-in-387 -msoft-float 933 -mno-wide-multiply -mrtd -malign-double 934 -mpreferred-stack-boundary=NUM 935 -mincoming-stack-boundary=NUM 936 -mcld -mcx16 -msahf -mmovbe -mcrc32 937 -mrecip -mrecip=OPT 938 -mvzeroupper -mprefer-avx128 939 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 940 -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma 941 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt 942 -mbmi2 -mrtm -mlwp -mthreads 943 -mno-align-stringops -minline-all-stringops 944 -minline-stringops-dynamically -mstringop-strategy=ALG 945 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 946 -m96bit-long-double -mlong-double-64 -mlong-double-80 947 -mregparm=NUM -msseregparm 948 -mveclibabi=TYPE -mvect8-ret-in-mem 949 -mpc32 -mpc64 -mpc80 -mstackrealign 950 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 951 -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE 952 -m32 -m64 -mx32 -mlarge-data-threshold=NUM 953 -msse2avx -mfentry -m8bit-idiv 954 -mavx256-split-unaligned-load -mavx256-split-unaligned-store 955 956 _i386 and x86-64 Windows Options_ 957 -mconsole -mcygwin -mno-cygwin -mdll 958 -mnop-fun-dllimport -mthread 959 -municode -mwin32 -mwindows -fno-set-stack-executable 960 961 _IA-64 Options_ 962 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 963 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 964 -mconstant-gp -mauto-pic -mfused-madd 965 -minline-float-divide-min-latency 966 -minline-float-divide-max-throughput 967 -mno-inline-float-divide 968 -minline-int-divide-min-latency 969 -minline-int-divide-max-throughput 970 -mno-inline-int-divide 971 -minline-sqrt-min-latency -minline-sqrt-max-throughput 972 -mno-inline-sqrt 973 -mdwarf2-asm -mearly-stop-bits 974 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 975 -mtune=CPU-TYPE -milp32 -mlp64 976 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 977 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 978 -msched-spec-ldc -msched-spec-control-ldc 979 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 980 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 981 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 982 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 983 984 _LM32 Options_ 985 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 986 -msign-extend-enabled -muser-enabled 987 988 _M32R/D Options_ 989 -m32r2 -m32rx -m32r 990 -mdebug 991 -malign-loops -mno-align-loops 992 -missue-rate=NUMBER 993 -mbranch-cost=NUMBER 994 -mmodel=CODE-SIZE-MODEL-TYPE 995 -msdata=SDATA-TYPE 996 -mno-flush-func -mflush-func=NAME 997 -mno-flush-trap -mflush-trap=NUMBER 998 -G NUM 999 1000 _M32C Options_ 1001 -mcpu=CPU -msim -memregs=NUMBER 1002 1003 _M680x0 Options_ 1004 -march=ARCH -mcpu=CPU -mtune=TUNE 1005 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 1006 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 1007 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 1008 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 1009 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 1010 -malign-int -mstrict-align -msep-data -mno-sep-data 1011 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 1012 -mxgot -mno-xgot 1013 1014 _MCore Options_ 1015 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 1016 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 1017 -m4byte-functions -mno-4byte-functions -mcallgraph-data 1018 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 1019 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 1020 1021 _MeP Options_ 1022 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 1023 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 1024 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 1025 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 1026 -mtiny=N 1027 1028 _MicroBlaze Options_ 1029 -msoft-float -mhard-float -msmall-divides -mcpu=CPU 1030 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift 1031 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss 1032 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt 1033 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL 1034 1035 _MIPS Options_ 1036 -EL -EB -march=ARCH -mtune=ARCH 1037 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 1038 -mips64 -mips64r2 1039 -mips16 -mno-mips16 -mflip-mips16 1040 -minterlink-mips16 -mno-interlink-mips16 1041 -mabi=ABI -mabicalls -mno-abicalls 1042 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 1043 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 1044 -mno-float -msingle-float -mdouble-float 1045 -mdsp -mno-dsp -mdspr2 -mno-dspr2 1046 -mmcu -mmno-mcu 1047 -mfpu=FPU-TYPE 1048 -msmartmips -mno-smartmips 1049 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 1050 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 1051 -mlong64 -mlong32 -msym32 -mno-sym32 1052 -GNUM -mlocal-sdata -mno-local-sdata 1053 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 1054 -membedded-data -mno-embedded-data 1055 -muninit-const-in-rodata -mno-uninit-const-in-rodata 1056 -mcode-readable=SETTING 1057 -msplit-addresses -mno-split-addresses 1058 -mexplicit-relocs -mno-explicit-relocs 1059 -mcheck-zero-division -mno-check-zero-division 1060 -mdivide-traps -mdivide-breaks 1061 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 1062 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 1063 -mfix-24k -mno-fix-24k 1064 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 1065 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 1066 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 1067 -mflush-func=FUNC -mno-flush-func 1068 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 1069 -mfp-exceptions -mno-fp-exceptions 1070 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 1071 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 1072 1073 _MMIX Options_ 1074 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 1075 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 1076 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 1077 -mno-base-addresses -msingle-exit -mno-single-exit 1078 1079 _MN10300 Options_ 1080 -mmult-bug -mno-mult-bug 1081 -mno-am33 -mam33 -mam33-2 -mam34 1082 -mtune=CPU-TYPE 1083 -mreturn-pointer-on-d0 1084 -mno-crt0 -mrelax -mliw -msetlb 1085 1086 _Moxie Options_ 1087 -meb -mel -mno-crt0 1088 1089 _PDP-11 Options_ 1090 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 1091 -mbcopy -mbcopy-builtin -mint32 -mno-int16 1092 -mint16 -mno-int32 -mfloat32 -mno-float64 1093 -mfloat64 -mno-float32 -mabshi -mno-abshi 1094 -mbranch-expensive -mbranch-cheap 1095 -munix-asm -mdec-asm 1096 1097 _picoChip Options_ 1098 -mae=AE_TYPE -mvliw-lookahead=N 1099 -msymbol-as-address -mno-inefficient-warnings 1100 1101 _PowerPC Options_ See RS/6000 and PowerPC Options. 1102 1103 _RL78 Options_ 1104 -msim -mmul=none -mmul=g13 -mmul=rl78 1105 1106 _RS/6000 and PowerPC Options_ 1107 -mcpu=CPU-TYPE 1108 -mtune=CPU-TYPE 1109 -mcmodel=CODE-MODEL 1110 -mpowerpc64 1111 -maltivec -mno-altivec 1112 -mpowerpc-gpopt -mno-powerpc-gpopt 1113 -mpowerpc-gfxopt -mno-powerpc-gfxopt 1114 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 1115 -mfprnd -mno-fprnd 1116 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 1117 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 1118 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 1119 -malign-power -malign-natural 1120 -msoft-float -mhard-float -mmultiple -mno-multiple 1121 -msingle-float -mdouble-float -msimple-fpu 1122 -mstring -mno-string -mupdate -mno-update 1123 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1124 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1125 -mstrict-align -mno-strict-align -mrelocatable 1126 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1127 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1128 -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base 1129 -mprioritize-restricted-insns=PRIORITY 1130 -msched-costly-dep=DEPENDENCE_TYPE 1131 -minsert-sched-nops=SCHEME 1132 -mcall-sysv -mcall-netbsd 1133 -maix-struct-return -msvr4-struct-return 1134 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1135 -mblock-move-inline-limit=NUM 1136 -misel -mno-isel 1137 -misel=yes -misel=no 1138 -mspe -mno-spe 1139 -mspe=yes -mspe=no 1140 -mpaired 1141 -mgen-cell-microcode -mwarn-cell-microcode 1142 -mvrsave -mno-vrsave 1143 -mmulhw -mno-mulhw 1144 -mdlmzb -mno-dlmzb 1145 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1146 -mprototype -mno-prototype 1147 -msim -mmvme -mads -myellowknife -memb -msdata 1148 -msdata=OPT -mvxworks -G NUM -pthread 1149 -mrecip -mrecip=OPT -mno-recip -mrecip-precision 1150 -mno-recip-precision 1151 -mveclibabi=TYPE -mfriz -mno-friz 1152 -mpointers-to-nested-functions -mno-pointers-to-nested-functions 1153 -msave-toc-indirect -mno-save-toc-indirect 1154 -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector 1155 -mcrypto -mno-crypto -mdirect-move -mno-direct-move 1156 -mquad-memory -mno-quad-memory 1157 -mquad-memory-atomic -mno-quad-memory-atomic 1158 -mcompat-align-parm -mno-compat-align-parm 1159 1160 _RX Options_ 1161 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1162 -mcpu= 1163 -mbig-endian-data -mlittle-endian-data 1164 -msmall-data 1165 -msim -mno-sim 1166 -mas100-syntax -mno-as100-syntax 1167 -mrelax 1168 -mmax-constant-size= 1169 -mint-register= 1170 -mpid 1171 -mno-warn-multiple-fast-interrupts 1172 -msave-acc-in-interrupts 1173 1174 _S/390 and zSeries Options_ 1175 -mtune=CPU-TYPE -march=CPU-TYPE 1176 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1177 -mlong-double-64 -mlong-double-128 1178 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1179 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1180 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1181 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1182 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1183 -mhotpatch[=HALFWORDS] -mno-hotpatch 1184 1185 _Score Options_ 1186 -meb -mel 1187 -mnhwloop 1188 -muls 1189 -mmac 1190 -mscore5 -mscore5u -mscore7 -mscore7d 1191 1192 _SH Options_ 1193 -m1 -m2 -m2e 1194 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1195 -m3 -m3e 1196 -m4-nofpu -m4-single-only -m4-single -m4 1197 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1198 -m5-64media -m5-64media-nofpu 1199 -m5-32media -m5-32media-nofpu 1200 -m5-compact -m5-compact-nofpu 1201 -mb -ml -mdalign -mrelax 1202 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1203 -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct 1204 -mspace -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1205 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1206 -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1207 -maccumulate-outgoing-args -minvalid-symbols 1208 -matomic-model=ATOMIC-MODEL 1209 -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi 1210 -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra 1211 -mpretend-cmove -mtas 1212 1213 _Solaris 2 Options_ 1214 -mimpure-text -mno-impure-text 1215 -pthreads -pthread 1216 1217 _SPARC Options_ 1218 -mcpu=CPU-TYPE 1219 -mtune=CPU-TYPE 1220 -mcmodel=CODE-MODEL 1221 -mmemory-model=MEM-MODEL 1222 -m32 -m64 -mapp-regs -mno-app-regs 1223 -mfaster-structs -mno-faster-structs -mflat -mno-flat 1224 -mfpu -mno-fpu -mhard-float -msoft-float 1225 -mhard-quad-float -msoft-quad-float 1226 -mstack-bias -mno-stack-bias 1227 -munaligned-doubles -mno-unaligned-doubles 1228 -muser-mode -mno-user-mode 1229 -mv8plus -mno-v8plus -mvis -mno-vis 1230 -mvis2 -mno-vis2 -mvis3 -mno-vis3 1231 -mcbcond -mno-cbcond 1232 -mfmaf -mno-fmaf -mpopc -mno-popc 1233 -mfix-at697f -mfix-ut699 1234 1235 _SPU Options_ 1236 -mwarn-reloc -merror-reloc 1237 -msafe-dma -munsafe-dma 1238 -mbranch-hints 1239 -msmall-mem -mlarge-mem -mstdmain 1240 -mfixed-range=REGISTER-RANGE 1241 -mea32 -mea64 1242 -maddress-space-conversion -mno-address-space-conversion 1243 -mcache-size=CACHE-SIZE 1244 -matomic-updates -mno-atomic-updates 1245 1246 _System V Options_ 1247 -Qy -Qn -YP,PATHS -Ym,DIR 1248 1249 _TILE-Gx Options_ 1250 -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL 1251 1252 _TILEPro Options_ 1253 -mcpu=CPU -m32 1254 1255 _V850 Options_ 1256 -mlong-calls -mno-long-calls -mep -mno-ep 1257 -mprolog-function -mno-prolog-function -mspace 1258 -mtda=N -msda=N -mzda=N 1259 -mapp-regs -mno-app-regs 1260 -mdisable-callt -mno-disable-callt 1261 -mv850e2v3 -mv850e2 -mv850e1 -mv850es 1262 -mv850e -mv850 -mv850e3v5 1263 -mloop 1264 -mrelax 1265 -mlong-jumps 1266 -msoft-float 1267 -mhard-float 1268 -mgcc-abi 1269 -mrh850-abi 1270 -mbig-switch 1271 1272 _VAX Options_ 1273 -mg -mgnu -munix 1274 1275 _VMS Options_ 1276 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 1277 -mpointer-size=SIZE 1278 1279 _VxWorks Options_ 1280 -mrtp -non-static -Bstatic -Bdynamic 1281 -Xbind-lazy -Xbind-now 1282 1283 _x86-64 Options_ See i386 and x86-64 Options. 1284 1285 _Xstormy16 Options_ 1286 -msim 1287 1288 _Xtensa Options_ 1289 -mconst16 -mno-const16 1290 -mfused-madd -mno-fused-madd 1291 -mforce-no-pic 1292 -mserialize-volatile -mno-serialize-volatile 1293 -mtext-section-literals -mno-text-section-literals 1294 -mtarget-align -mno-target-align 1295 -mlongcalls -mno-longcalls 1296 1297 _zSeries Options_ See S/390 and zSeries Options. 1298 1299 _Code Generation Options_ 1300 *Note Options for Code Generation Conventions: Code Gen Options. 1301 -fcall-saved-REG -fcall-used-REG 1302 -ffixed-REG -fexceptions 1303 -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables 1304 -fasynchronous-unwind-tables 1305 -finhibit-size-directive -finstrument-functions 1306 -finstrument-functions-exclude-function-list=SYM,SYM,... 1307 -finstrument-functions-exclude-file-list=FILE,FILE,... 1308 -fno-common -fno-ident 1309 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1310 -fno-jump-tables 1311 -frecord-gcc-switches 1312 -freg-struct-return -fshort-enums 1313 -fshort-double -fshort-wchar 1314 -fverbose-asm -fpack-struct[=N] -fstack-check 1315 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1316 -fno-stack-limit -fsplit-stack 1317 -fleading-underscore -ftls-model=MODEL 1318 -fstack-reuse=REUSE_LEVEL 1319 -ftrapv -fwrapv -fbounds-check 1320 -fvisibility -fstrict-volatile-bitfields -fsync-libcalls 1321 1322 * Menu: 1323 1324 * Overall Options:: Controlling the kind of output: 1325 an executable, object files, assembler files, 1326 or preprocessed source. 1327 * C Dialect Options:: Controlling the variant of C language compiled. 1328 * C++ Dialect Options:: Variations on C++. 1329 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1330 and Objective-C++. 1331 * Language Independent Options:: Controlling how diagnostics should be 1332 formatted. 1333 * Warning Options:: How picky should the compiler be? 1334 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 1335 * Optimize Options:: How much optimization? 1336 * Preprocessor Options:: Controlling header files and macro definitions. 1337 Also, getting dependency information for Make. 1338 * Assembler Options:: Passing options to the assembler. 1339 * Link Options:: Specifying libraries and so on. 1340 * Directory Options:: Where to find header files and libraries. 1341 Where to find the compiler executable files. 1342 * Spec Files:: How to pass switches to sub-processes. 1343 * Target Options:: Running a cross-compiler, or an old version of GCC. 1344 1345 1346 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1347 1348 3.2 Options Controlling the Kind of Output 1349 ========================================== 1350 1351 Compilation can involve up to four stages: preprocessing, compilation 1352 proper, assembly and linking, always in that order. GCC is capable of 1353 preprocessing and compiling several files either into several assembler 1354 input files, or into one assembler input file; then each assembler input 1355 file produces an object file, and linking combines all the object files 1356 (those newly compiled, and those specified as input) into an executable 1357 file. 1358 1359 For any given input file, the file name suffix determines what kind of 1360 compilation is done: 1361 1362 'FILE.c' 1363 C source code that must be preprocessed. 1364 1365 'FILE.i' 1366 C source code that should not be preprocessed. 1367 1368 'FILE.ii' 1369 C++ source code that should not be preprocessed. 1370 1371 'FILE.m' 1372 Objective-C source code. Note that you must link with the 1373 'libobjc' library to make an Objective-C program work. 1374 1375 'FILE.mi' 1376 Objective-C source code that should not be preprocessed. 1377 1378 'FILE.mm' 1379 'FILE.M' 1380 Objective-C++ source code. Note that you must link with the 1381 'libobjc' library to make an Objective-C++ program work. Note that 1382 '.M' refers to a literal capital M. 1383 1384 'FILE.mii' 1385 Objective-C++ source code that should not be preprocessed. 1386 1387 'FILE.h' 1388 C, C++, Objective-C or Objective-C++ header file to be turned into 1389 a precompiled header (default), or C, C++ header file to be turned 1390 into an Ada spec (via the '-fdump-ada-spec' switch). 1391 1392 'FILE.cc' 1393 'FILE.cp' 1394 'FILE.cxx' 1395 'FILE.cpp' 1396 'FILE.CPP' 1397 'FILE.c++' 1398 'FILE.C' 1399 C++ source code that must be preprocessed. Note that in '.cxx', 1400 the last two letters must both be literally 'x'. Likewise, '.C' 1401 refers to a literal capital C. 1402 1403 'FILE.mm' 1404 'FILE.M' 1405 Objective-C++ source code that must be preprocessed. 1406 1407 'FILE.mii' 1408 Objective-C++ source code that should not be preprocessed. 1409 1410 'FILE.hh' 1411 'FILE.H' 1412 'FILE.hp' 1413 'FILE.hxx' 1414 'FILE.hpp' 1415 'FILE.HPP' 1416 'FILE.h++' 1417 'FILE.tcc' 1418 C++ header file to be turned into a precompiled header or Ada spec. 1419 1420 'FILE.f' 1421 'FILE.for' 1422 'FILE.ftn' 1423 Fixed form Fortran source code that should not be preprocessed. 1424 1425 'FILE.F' 1426 'FILE.FOR' 1427 'FILE.fpp' 1428 'FILE.FPP' 1429 'FILE.FTN' 1430 Fixed form Fortran source code that must be preprocessed (with the 1431 traditional preprocessor). 1432 1433 'FILE.f90' 1434 'FILE.f95' 1435 'FILE.f03' 1436 'FILE.f08' 1437 Free form Fortran source code that should not be preprocessed. 1438 1439 'FILE.F90' 1440 'FILE.F95' 1441 'FILE.F03' 1442 'FILE.F08' 1443 Free form Fortran source code that must be preprocessed (with the 1444 traditional preprocessor). 1445 1446 'FILE.go' 1447 Go source code. 1448 1449 'FILE.ads' 1450 Ada source code file that contains a library unit declaration (a 1451 declaration of a package, subprogram, or generic, or a generic 1452 instantiation), or a library unit renaming declaration (a package, 1453 generic, or subprogram renaming declaration). Such files are also 1454 called "specs". 1455 1456 'FILE.adb' 1457 Ada source code file containing a library unit body (a subprogram 1458 or package body). Such files are also called "bodies". 1459 1460 'FILE.s' 1461 Assembler code. 1462 1463 'FILE.S' 1464 'FILE.sx' 1465 Assembler code that must be preprocessed. 1466 1467 'OTHER' 1468 An object file to be fed straight into linking. Any file name with 1469 no recognized suffix is treated this way. 1470 1471 You can specify the input language explicitly with the '-x' option: 1472 1473 '-x LANGUAGE' 1474 Specify explicitly the LANGUAGE for the following input files 1475 (rather than letting the compiler choose a default based on the 1476 file name suffix). This option applies to all following input 1477 files until the next '-x' option. Possible values for LANGUAGE 1478 are: 1479 c c-header cpp-output 1480 c++ c++-header c++-cpp-output 1481 objective-c objective-c-header objective-c-cpp-output 1482 objective-c++ objective-c++-header objective-c++-cpp-output 1483 assembler assembler-with-cpp 1484 ada 1485 f77 f77-cpp-input f95 f95-cpp-input 1486 go 1487 java 1488 1489 '-x none' 1490 Turn off any specification of a language, so that subsequent files 1491 are handled according to their file name suffixes (as they are if 1492 '-x' has not been used at all). 1493 1494 '-pass-exit-codes' 1495 Normally the 'gcc' program exits with the code of 1 if any phase of 1496 the compiler returns a non-success return code. If you specify 1497 '-pass-exit-codes', the 'gcc' program instead returns with the 1498 numerically highest error produced by any phase returning an error 1499 indication. The C, C++, and Fortran front ends return 4 if an 1500 internal compiler error is encountered. 1501 1502 If you only want some of the stages of compilation, you can use '-x' 1503 (or filename suffixes) to tell 'gcc' where to start, and one of the 1504 options '-c', '-S', or '-E' to say where 'gcc' is to stop. Note that 1505 some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do 1506 nothing at all. 1507 1508 '-c' 1509 Compile or assemble the source files, but do not link. The linking 1510 stage simply is not done. The ultimate output is in the form of an 1511 object file for each source file. 1512 1513 By default, the object file name for a source file is made by 1514 replacing the suffix '.c', '.i', '.s', etc., with '.o'. 1515 1516 Unrecognized input files, not requiring compilation or assembly, 1517 are ignored. 1518 1519 '-S' 1520 Stop after the stage of compilation proper; do not assemble. The 1521 output is in the form of an assembler code file for each 1522 non-assembler input file specified. 1523 1524 By default, the assembler file name for a source file is made by 1525 replacing the suffix '.c', '.i', etc., with '.s'. 1526 1527 Input files that don't require compilation are ignored. 1528 1529 '-E' 1530 Stop after the preprocessing stage; do not run the compiler proper. 1531 The output is in the form of preprocessed source code, which is 1532 sent to the standard output. 1533 1534 Input files that don't require preprocessing are ignored. 1535 1536 '-o FILE' 1537 Place output in file FILE. This applies to whatever sort of output 1538 is being produced, whether it be an executable file, an object 1539 file, an assembler file or preprocessed C code. 1540 1541 If '-o' is not specified, the default is to put an executable file 1542 in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its 1543 assembler file in 'SOURCE.s', a precompiled header file in 1544 'SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1545 output. 1546 1547 '-v' 1548 Print (on standard error output) the commands executed to run the 1549 stages of compilation. Also print the version number of the 1550 compiler driver program and of the preprocessor and the compiler 1551 proper. 1552 1553 '-###' 1554 Like '-v' except the commands are not executed and arguments are 1555 quoted unless they contain only alphanumeric characters or './-_'. 1556 This is useful for shell scripts to capture the driver-generated 1557 command lines. 1558 1559 '-pipe' 1560 Use pipes rather than temporary files for communication between the 1561 various stages of compilation. This fails to work on some systems 1562 where the assembler is unable to read from a pipe; but the GNU 1563 assembler has no trouble. 1564 1565 '--help' 1566 Print (on the standard output) a description of the command-line 1567 options understood by 'gcc'. If the '-v' option is also specified 1568 then '--help' is also passed on to the various processes invoked by 1569 'gcc', so that they can display the command-line options they 1570 accept. If the '-Wextra' option has also been specified (prior to 1571 the '--help' option), then command-line options that have no 1572 documentation associated with them are also displayed. 1573 1574 '--target-help' 1575 Print (on the standard output) a description of target-specific 1576 command-line options for each tool. For some targets extra 1577 target-specific information may also be printed. 1578 1579 '--help={CLASS|[^]QUALIFIER}[,...]' 1580 Print (on the standard output) a description of the command-line 1581 options understood by the compiler that fit into all specified 1582 classes and qualifiers. These are the supported classes: 1583 1584 'optimizers' 1585 Display all of the optimization options supported by the 1586 compiler. 1587 1588 'warnings' 1589 Display all of the options controlling warning messages 1590 produced by the compiler. 1591 1592 'target' 1593 Display target-specific options. Unlike the '--target-help' 1594 option however, target-specific options of the linker and 1595 assembler are not displayed. This is because those tools do 1596 not currently support the extended '--help=' syntax. 1597 1598 'params' 1599 Display the values recognized by the '--param' option. 1600 1601 LANGUAGE 1602 Display the options supported for LANGUAGE, where LANGUAGE is 1603 the name of one of the languages supported in this version of 1604 GCC. 1605 1606 'common' 1607 Display the options that are common to all languages. 1608 1609 These are the supported qualifiers: 1610 1611 'undocumented' 1612 Display only those options that are undocumented. 1613 1614 'joined' 1615 Display options taking an argument that appears after an equal 1616 sign in the same continuous piece of text, such as: 1617 '--help=target'. 1618 1619 'separate' 1620 Display options taking an argument that appears as a separate 1621 word following the original option, such as: '-o output-file'. 1622 1623 Thus for example to display all the undocumented target-specific 1624 switches supported by the compiler, use: 1625 1626 --help=target,undocumented 1627 1628 The sense of a qualifier can be inverted by prefixing it with the 1629 '^' character, so for example to display all binary warning options 1630 (i.e., ones that are either on or off and that do not take an 1631 argument) that have a description, use: 1632 1633 --help=warnings,^joined,^undocumented 1634 1635 The argument to '--help=' should not consist solely of inverted 1636 qualifiers. 1637 1638 Combining several classes is possible, although this usually 1639 restricts the output so much that there is nothing to display. One 1640 case where it does work, however, is when one of the classes is 1641 TARGET. For example, to display all the target-specific 1642 optimization options, use: 1643 1644 --help=target,optimizers 1645 1646 The '--help=' option can be repeated on the command line. Each 1647 successive use displays its requested class of options, skipping 1648 those that have already been displayed. 1649 1650 If the '-Q' option appears on the command line before the '--help=' 1651 option, then the descriptive text displayed by '--help=' is 1652 changed. Instead of describing the displayed options, an 1653 indication is given as to whether the option is enabled, disabled 1654 or set to a specific value (assuming that the compiler knows this 1655 at the point where the '--help=' option is used). 1656 1657 Here is a truncated example from the ARM port of 'gcc': 1658 1659 % gcc -Q -mabi=2 --help=target -c 1660 The following options are target specific: 1661 -mabi= 2 1662 -mabort-on-noreturn [disabled] 1663 -mapcs [disabled] 1664 1665 The output is sensitive to the effects of previous command-line 1666 options, so for example it is possible to find out which 1667 optimizations are enabled at '-O2' by using: 1668 1669 -Q -O2 --help=optimizers 1670 1671 Alternatively you can discover which binary optimizations are 1672 enabled by '-O3' by using: 1673 1674 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1675 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1676 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1677 1678 '-no-canonical-prefixes' 1679 Do not expand any symbolic links, resolve references to '/../' or 1680 '/./', or make the path absolute when generating a relative prefix. 1681 1682 '--version' 1683 Display the version number and copyrights of the invoked GCC. 1684 1685 '-wrapper' 1686 Invoke all subcommands under a wrapper program. The name of the 1687 wrapper program and its parameters are passed as a comma separated 1688 list. 1689 1690 gcc -c t.c -wrapper gdb,--args 1691 1692 This invokes all subprograms of 'gcc' under 'gdb --args', thus the 1693 invocation of 'cc1' is 'gdb --args cc1 ...'. 1694 1695 '-fplugin=NAME.so' 1696 Load the plugin code in file NAME.so, assumed to be a shared object 1697 to be dlopen'd by the compiler. The base name of the shared object 1698 file is used to identify the plugin for the purposes of argument 1699 parsing (See '-fplugin-arg-NAME-KEY=VALUE' below). Each plugin 1700 should define the callback functions specified in the Plugins API. 1701 1702 '-fplugin-arg-NAME-KEY=VALUE' 1703 Define an argument called KEY with a value of VALUE for the plugin 1704 called NAME. 1705 1706 '-fdump-ada-spec[-slim]' 1707 For C and C++ source and include files, generate corresponding Ada 1708 specs. *Note (gnat_ugn)Generating Ada Bindings for C and C++ 1709 headers::, which provides detailed documentation on this feature. 1710 1711 '-fada-spec-parent=UNIT' 1712 In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada 1713 specs as child units of parent UNIT. 1714 1715 '-fdump-go-spec=FILE' 1716 For input files in any language, generate corresponding Go 1717 declarations in FILE. This generates Go 'const', 'type', 'var', 1718 and 'func' declarations which may be a useful way to start writing 1719 a Go interface to code written in some other language. 1720 1721 '@FILE' 1722 Read command-line options from FILE. The options read are inserted 1723 in place of the original @FILE option. If FILE does not exist, or 1724 cannot be read, then the option will be treated literally, and not 1725 removed. 1726 1727 Options in FILE are separated by whitespace. A whitespace 1728 character may be included in an option by surrounding the entire 1729 option in either single or double quotes. Any character (including 1730 a backslash) may be included by prefixing the character to be 1731 included with a backslash. The FILE may itself contain additional 1732 @FILE options; any such options will be processed recursively. 1733 1734 1735 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1736 1737 3.3 Compiling C++ Programs 1738 ========================== 1739 1740 C++ source files conventionally use one of the suffixes '.C', '.cc', 1741 '.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use 1742 '.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and 1743 preprocessed C++ files use the suffix '.ii'. GCC recognizes files with 1744 these names and compiles them as C++ programs even if you call the 1745 compiler the same way as for compiling C programs (usually with the name 1746 'gcc'). 1747 1748 However, the use of 'gcc' does not add the C++ library. 'g++' is a 1749 program that calls GCC and automatically specifies linking against the 1750 C++ library. It treats '.c', '.h' and '.i' files as C++ source files 1751 instead of C source files unless '-x' is used. This program is also 1752 useful when precompiling a C header file with a '.h' extension for use 1753 in C++ compilations. On many systems, 'g++' is also installed with the 1754 name 'c++'. 1755 1756 When you compile C++ programs, you may specify many of the same 1757 command-line options that you use for compiling programs in any 1758 language; or command-line options meaningful for C and related 1759 languages; or options that are meaningful only for C++ programs. *Note 1760 Options Controlling C Dialect: C Dialect Options, for explanations of 1761 options for languages related to C. *Note Options Controlling C++ 1762 Dialect: C++ Dialect Options, for explanations of options that are 1763 meaningful only for C++ programs. 1764 1765 1766 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1767 1768 3.4 Options Controlling C Dialect 1769 ================================= 1770 1771 The following options control the dialect of C (or languages derived 1772 from C, such as C++, Objective-C and Objective-C++) that the compiler 1773 accepts: 1774 1775 '-ansi' 1776 In C mode, this is equivalent to '-std=c90'. In C++ mode, it is 1777 equivalent to '-std=c++98'. 1778 1779 This turns off certain features of GCC that are incompatible with 1780 ISO C90 (when compiling C code), or of standard C++ (when compiling 1781 C++ code), such as the 'asm' and 'typeof' keywords, and predefined 1782 macros such as 'unix' and 'vax' that identify the type of system 1783 you are using. It also enables the undesirable and rarely used ISO 1784 trigraph feature. For the C compiler, it disables recognition of 1785 C++ style '//' comments as well as the 'inline' keyword. 1786 1787 The alternate keywords '__asm__', '__extension__', '__inline__' and 1788 '__typeof__' continue to work despite '-ansi'. You would not want 1789 to use them in an ISO C program, of course, but it is useful to put 1790 them in header files that might be included in compilations done 1791 with '-ansi'. Alternate predefined macros such as '__unix__' and 1792 '__vax__' are also available, with or without '-ansi'. 1793 1794 The '-ansi' option does not cause non-ISO programs to be rejected 1795 gratuitously. For that, '-Wpedantic' is required in addition to 1796 '-ansi'. *Note Warning Options::. 1797 1798 The macro '__STRICT_ANSI__' is predefined when the '-ansi' option 1799 is used. Some header files may notice this macro and refrain from 1800 declaring certain functions or defining certain macros that the ISO 1801 standard doesn't call for; this is to avoid interfering with any 1802 programs that might use these names for other things. 1803 1804 Functions that are normally built in but do not have semantics 1805 defined by ISO C (such as 'alloca' and 'ffs') are not built-in 1806 functions when '-ansi' is used. *Note Other built-in functions 1807 provided by GCC: Other Builtins, for details of the functions 1808 affected. 1809 1810 '-std=' 1811 Determine the language standard. *Note Language Standards 1812 Supported by GCC: Standards, for details of these standard 1813 versions. This option is currently only supported when compiling C 1814 or C++. 1815 1816 The compiler can accept several base standards, such as 'c90' or 1817 'c++98', and GNU dialects of those standards, such as 'gnu90' or 1818 'gnu++98'. When a base standard is specified, the compiler accepts 1819 all programs following that standard plus those using GNU 1820 extensions that do not contradict it. For example, '-std=c90' 1821 turns off certain features of GCC that are incompatible with ISO 1822 C90, such as the 'asm' and 'typeof' keywords, but not other GNU 1823 extensions that do not have a meaning in ISO C90, such as omitting 1824 the middle term of a '?:' expression. On the other hand, when a 1825 GNU dialect of a standard is specified, all features supported by 1826 the compiler are enabled, even when those features change the 1827 meaning of the base standard. As a result, some strict-conforming 1828 programs may be rejected. The particular standard is used by 1829 '-Wpedantic' to identify which features are GNU extensions given 1830 that version of the standard. For example '-std=gnu90 -Wpedantic' 1831 warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic' 1832 does not. 1833 1834 A value for this option must be provided; possible values are 1835 1836 'c90' 1837 'c89' 1838 'iso9899:1990' 1839 Support all ISO C90 programs (certain GNU extensions that 1840 conflict with ISO C90 are disabled). Same as '-ansi' for C 1841 code. 1842 1843 'iso9899:199409' 1844 ISO C90 as modified in amendment 1. 1845 1846 'c99' 1847 'c9x' 1848 'iso9899:1999' 1849 'iso9899:199x' 1850 ISO C99. Note that this standard is not yet fully supported; 1851 see <http://gcc.gnu.org/c99status.html> for more information. 1852 The names 'c9x' and 'iso9899:199x' are deprecated. 1853 1854 'c11' 1855 'c1x' 1856 'iso9899:2011' 1857 ISO C11, the 2011 revision of the ISO C standard. Support is 1858 incomplete and experimental. The name 'c1x' is deprecated. 1859 1860 'gnu90' 1861 'gnu89' 1862 GNU dialect of ISO C90 (including some C99 features). This is 1863 the default for C code. 1864 1865 'gnu99' 1866 'gnu9x' 1867 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1868 GCC, this will become the default. The name 'gnu9x' is 1869 deprecated. 1870 1871 'gnu11' 1872 'gnu1x' 1873 GNU dialect of ISO C11. Support is incomplete and 1874 experimental. The name 'gnu1x' is deprecated. 1875 1876 'c++98' 1877 'c++03' 1878 The 1998 ISO C++ standard plus the 2003 technical corrigendum 1879 and some additional defect reports. Same as '-ansi' for C++ 1880 code. 1881 1882 'gnu++98' 1883 'gnu++03' 1884 GNU dialect of '-std=c++98'. This is the default for C++ 1885 code. 1886 1887 'c++11' 1888 'c++0x' 1889 The 2011 ISO C++ standard plus amendments. Support for C++11 1890 is still experimental, and may change in incompatible ways in 1891 future releases. The name 'c++0x' is deprecated. 1892 1893 'gnu++11' 1894 'gnu++0x' 1895 GNU dialect of '-std=c++11'. Support for C++11 is still 1896 experimental, and may change in incompatible ways in future 1897 releases. The name 'gnu++0x' is deprecated. 1898 1899 'c++1y' 1900 The next revision of the ISO C++ standard, tentatively planned 1901 for 2017. Support is highly experimental, and will almost 1902 certainly change in incompatible ways in future releases. 1903 1904 'gnu++1y' 1905 GNU dialect of '-std=c++1y'. Support is highly experimental, 1906 and will almost certainly change in incompatible ways in 1907 future releases. 1908 1909 '-fgnu89-inline' 1910 The option '-fgnu89-inline' tells GCC to use the traditional GNU 1911 semantics for 'inline' functions when in C99 mode. *Note An Inline 1912 Function is As Fast As a Macro: Inline. This option is accepted 1913 and ignored by GCC versions 4.1.3 up to but not including 4.3. In 1914 GCC versions 4.3 and later it changes the behavior of GCC in C99 1915 mode. Using this option is roughly equivalent to adding the 1916 'gnu_inline' function attribute to all inline functions (*note 1917 Function Attributes::). 1918 1919 The option '-fno-gnu89-inline' explicitly tells GCC to use the C99 1920 semantics for 'inline' when in C99 or gnu99 mode (i.e., it 1921 specifies the default behavior). This option was first supported 1922 in GCC 4.3. This option is not supported in '-std=c90' or 1923 '-std=gnu90' mode. 1924 1925 The preprocessor macros '__GNUC_GNU_INLINE__' and 1926 '__GNUC_STDC_INLINE__' may be used to check which semantics are in 1927 effect for 'inline' functions. *Note (cpp)Common Predefined 1928 Macros::. 1929 1930 '-aux-info FILENAME' 1931 Output to the given filename prototyped declarations for all 1932 functions declared and/or defined in a translation unit, including 1933 those in header files. This option is silently ignored in any 1934 language other than C. 1935 1936 Besides declarations, the file indicates, in comments, the origin 1937 of each declaration (source file and line), whether the declaration 1938 was implicit, prototyped or unprototyped ('I', 'N' for new or 'O' 1939 for old, respectively, in the first character after the line number 1940 and the colon), and whether it came from a declaration or a 1941 definition ('C' or 'F', respectively, in the following character). 1942 In the case of function definitions, a K&R-style list of arguments 1943 followed by their declarations is also provided, inside comments, 1944 after the declaration. 1945 1946 '-fallow-parameterless-variadic-functions' 1947 Accept variadic functions without named parameters. 1948 1949 Although it is possible to define such a function, this is not very 1950 useful as it is not possible to read the arguments. This is only 1951 supported for C as this construct is allowed by C++. 1952 1953 '-fno-asm' 1954 Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that 1955 code can use these words as identifiers. You can use the keywords 1956 '__asm__', '__inline__' and '__typeof__' instead. '-ansi' implies 1957 '-fno-asm'. 1958 1959 In C++, this switch only affects the 'typeof' keyword, since 'asm' 1960 and 'inline' are standard keywords. You may want to use the 1961 '-fno-gnu-keywords' flag instead, which has the same effect. In 1962 C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the 1963 'asm' and 'typeof' keywords, since 'inline' is a standard keyword 1964 in ISO C99. 1965 1966 '-fno-builtin' 1967 '-fno-builtin-FUNCTION' 1968 Don't recognize built-in functions that do not begin with 1969 '__builtin_' as prefix. *Note Other built-in functions provided by 1970 GCC: Other Builtins, for details of the functions affected, 1971 including those which are not built-in functions when '-ansi' or 1972 '-std' options for strict ISO C conformance are used because they 1973 do not have an ISO standard meaning. 1974 1975 GCC normally generates special code to handle certain built-in 1976 functions more efficiently; for instance, calls to 'alloca' may 1977 become single instructions which adjust the stack directly, and 1978 calls to 'memcpy' may become inline copy loops. The resulting code 1979 is often both smaller and faster, but since the function calls no 1980 longer appear as such, you cannot set a breakpoint on those calls, 1981 nor can you change the behavior of the functions by linking with a 1982 different library. In addition, when a function is recognized as a 1983 built-in function, GCC may use information about that function to 1984 warn about problems with calls to that function, or to generate 1985 more efficient code, even if the resulting code still contains 1986 calls to that function. For example, warnings are given with 1987 '-Wformat' for bad calls to 'printf' when 'printf' is built in and 1988 'strlen' is known not to modify global memory. 1989 1990 With the '-fno-builtin-FUNCTION' option only the built-in function 1991 FUNCTION is disabled. FUNCTION must not begin with '__builtin_'. 1992 If a function is named that is not built-in in this version of GCC, 1993 this option is ignored. There is no corresponding 1994 '-fbuiltin-FUNCTION' option; if you wish to enable built-in 1995 functions selectively when using '-fno-builtin' or 1996 '-ffreestanding', you may define macros such as: 1997 1998 #define abs(n) __builtin_abs ((n)) 1999 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 2000 2001 '-fhosted' 2002 2003 Assert that compilation targets a hosted environment. This implies 2004 '-fbuiltin'. A hosted environment is one in which the entire 2005 standard library is available, and in which 'main' has a return 2006 type of 'int'. Examples are nearly everything except a kernel. 2007 This is equivalent to '-fno-freestanding'. 2008 2009 '-ffreestanding' 2010 2011 Assert that compilation targets a freestanding environment. This 2012 implies '-fno-builtin'. A freestanding environment is one in which 2013 the standard library may not exist, and program startup may not 2014 necessarily be at 'main'. The most obvious example is an OS 2015 kernel. This is equivalent to '-fno-hosted'. 2016 2017 *Note Language Standards Supported by GCC: Standards, for details 2018 of freestanding and hosted environments. 2019 2020 '-fopenmp' 2021 Enable handling of OpenMP directives '#pragma omp' in C/C++ and 2022 '!$omp' in Fortran. When '-fopenmp' is specified, the compiler 2023 generates parallel code according to the OpenMP Application Program 2024 Interface v3.0 <http://www.openmp.org/>. This option implies 2025 '-pthread', and thus is only supported on targets that have support 2026 for '-pthread'. 2027 2028 '-fgnu-tm' 2029 When the option '-fgnu-tm' is specified, the compiler generates 2030 code for the Linux variant of Intel's current Transactional Memory 2031 ABI specification document (Revision 1.1, May 6 2009). This is an 2032 experimental feature whose interface may change in future versions 2033 of GCC, as the official specification changes. Please note that 2034 not all architectures are supported for this feature. 2035 2036 For more information on GCC's support for transactional memory, 2037 *Note The GNU Transactional Memory Library: (libitm)Enabling 2038 libitm. 2039 2040 Note that the transactional memory feature is not supported with 2041 non-call exceptions ('-fnon-call-exceptions'). 2042 2043 '-fms-extensions' 2044 Accept some non-standard constructs used in Microsoft header files. 2045 2046 In C++ code, this allows member names in structures to be similar 2047 to previous types declarations. 2048 2049 typedef int UOW; 2050 struct ABC { 2051 UOW UOW; 2052 }; 2053 2054 Some cases of unnamed fields in structures and unions are only 2055 accepted with this option. *Note Unnamed struct/union fields 2056 within structs/unions: Unnamed Fields, for details. 2057 2058 '-fplan9-extensions' 2059 Accept some non-standard constructs used in Plan 9 code. 2060 2061 This enables '-fms-extensions', permits passing pointers to 2062 structures with anonymous fields to functions that expect pointers 2063 to elements of the type of the field, and permits referring to 2064 anonymous fields declared using a typedef. *Note Unnamed 2065 struct/union fields within structs/unions: Unnamed Fields, for 2066 details. This is only supported for C, not C++. 2067 2068 '-trigraphs' 2069 Support ISO C trigraphs. The '-ansi' option (and '-std' options 2070 for strict ISO C conformance) implies '-trigraphs'. 2071 2072 '-traditional' 2073 '-traditional-cpp' 2074 Formerly, these options caused GCC to attempt to emulate a 2075 pre-standard C compiler. They are now only supported with the '-E' 2076 switch. The preprocessor continues to support a pre-standard mode. 2077 See the GNU CPP manual for details. 2078 2079 '-fcond-mismatch' 2080 Allow conditional expressions with mismatched types in the second 2081 and third arguments. The value of such an expression is void. 2082 This option is not supported for C++. 2083 2084 '-flax-vector-conversions' 2085 Allow implicit conversions between vectors with differing numbers 2086 of elements and/or incompatible element types. This option should 2087 not be used for new code. 2088 2089 '-funsigned-char' 2090 Let the type 'char' be unsigned, like 'unsigned char'. 2091 2092 Each kind of machine has a default for what 'char' should be. It 2093 is either like 'unsigned char' by default or like 'signed char' by 2094 default. 2095 2096 Ideally, a portable program should always use 'signed char' or 2097 'unsigned char' when it depends on the signedness of an object. 2098 But many programs have been written to use plain 'char' and expect 2099 it to be signed, or expect it to be unsigned, depending on the 2100 machines they were written for. This option, and its inverse, let 2101 you make such a program work with the opposite default. 2102 2103 The type 'char' is always a distinct type from each of 'signed 2104 char' or 'unsigned char', even though its behavior is always just 2105 like one of those two. 2106 2107 '-fsigned-char' 2108 Let the type 'char' be signed, like 'signed char'. 2109 2110 Note that this is equivalent to '-fno-unsigned-char', which is the 2111 negative form of '-funsigned-char'. Likewise, the option 2112 '-fno-signed-char' is equivalent to '-funsigned-char'. 2113 2114 '-fsigned-bitfields' 2115 '-funsigned-bitfields' 2116 '-fno-signed-bitfields' 2117 '-fno-unsigned-bitfields' 2118 These options control whether a bit-field is signed or unsigned, 2119 when the declaration does not use either 'signed' or 'unsigned'. 2120 By default, such a bit-field is signed, because this is consistent: 2121 the basic integer types such as 'int' are signed types. 2122 2123 2124 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 2125 2126 3.5 Options Controlling C++ Dialect 2127 =================================== 2128 2129 This section describes the command-line options that are only meaningful 2130 for C++ programs. You can also use most of the GNU compiler options 2131 regardless of what language your program is in. For example, you might 2132 compile a file 'firstClass.C' like this: 2133 2134 g++ -g -frepo -O -c firstClass.C 2135 2136 In this example, only '-frepo' is an option meant only for C++ programs; 2137 you can use the other options with any language supported by GCC. 2138 2139 Here is a list of options that are _only_ for compiling C++ programs: 2140 2141 '-fabi-version=N' 2142 Use version N of the C++ ABI. The default is version 2. 2143 2144 Version 0 refers to the version conforming most closely to the C++ 2145 ABI specification. Therefore, the ABI obtained using version 0 2146 will change in different versions of G++ as ABI bugs are fixed. 2147 2148 Version 1 is the version of the C++ ABI that first appeared in G++ 2149 3.2. 2150 2151 Version 2 is the version of the C++ ABI that first appeared in G++ 2152 3.4. 2153 2154 Version 3 corrects an error in mangling a constant address as a 2155 template argument. 2156 2157 Version 4, which first appeared in G++ 4.5, implements a standard 2158 mangling for vector types. 2159 2160 Version 5, which first appeared in G++ 4.6, corrects the mangling 2161 of attribute const/volatile on function pointer types, decltype of 2162 a plain decl, and use of a function parameter in the declaration of 2163 another parameter. 2164 2165 Version 6, which first appeared in G++ 4.7, corrects the promotion 2166 behavior of C++11 scoped enums and the mangling of template 2167 argument packs, const/static_cast, prefix ++ and -, and a class 2168 scope function used as a template argument. 2169 2170 See also '-Wabi'. 2171 2172 '-fno-access-control' 2173 Turn off all access checking. This switch is mainly useful for 2174 working around bugs in the access control code. 2175 2176 '-fcheck-new' 2177 Check that the pointer returned by 'operator new' is non-null 2178 before attempting to modify the storage allocated. This check is 2179 normally unnecessary because the C++ standard specifies that 2180 'operator new' only returns '0' if it is declared 'throw()', in 2181 which case the compiler always checks the return value even without 2182 this option. In all other cases, when 'operator new' has a 2183 non-empty exception specification, memory exhaustion is signalled 2184 by throwing 'std::bad_alloc'. See also 'new (nothrow)'. 2185 2186 '-fconstexpr-depth=N' 2187 Set the maximum nested evaluation depth for C++11 constexpr 2188 functions to N. A limit is needed to detect endless recursion 2189 during constant expression evaluation. The minimum specified by 2190 the standard is 512. 2191 2192 '-fdeduce-init-list' 2193 Enable deduction of a template type parameter as 2194 'std::initializer_list' from a brace-enclosed initializer list, 2195 i.e. 2196 2197 template <class T> auto forward(T t) -> decltype (realfn (t)) 2198 { 2199 return realfn (t); 2200 } 2201 2202 void f() 2203 { 2204 forward({1,2}); // call forward<std::initializer_list<int>> 2205 } 2206 2207 This deduction was implemented as a possible extension to the 2208 originally proposed semantics for the C++11 standard, but was not 2209 part of the final standard, so it is disabled by default. This 2210 option is deprecated, and may be removed in a future version of 2211 G++. 2212 2213 '-ffriend-injection' 2214 Inject friend functions into the enclosing namespace, so that they 2215 are visible outside the scope of the class in which they are 2216 declared. Friend functions were documented to work this way in the 2217 old Annotated C++ Reference Manual, and versions of G++ before 4.1 2218 always worked that way. However, in ISO C++ a friend function that 2219 is not declared in an enclosing scope can only be found using 2220 argument dependent lookup. This option causes friends to be 2221 injected as they were in earlier releases. 2222 2223 This option is for compatibility, and may be removed in a future 2224 release of G++. 2225 2226 '-fno-elide-constructors' 2227 The C++ standard allows an implementation to omit creating a 2228 temporary that is only used to initialize another object of the 2229 same type. Specifying this option disables that optimization, and 2230 forces G++ to call the copy constructor in all cases. 2231 2232 '-fno-enforce-eh-specs' 2233 Don't generate code to check for violation of exception 2234 specifications at run time. This option violates the C++ standard, 2235 but may be useful for reducing code size in production builds, much 2236 like defining 'NDEBUG'. This does not give user code permission to 2237 throw exceptions in violation of the exception specifications; the 2238 compiler still optimizes based on the specifications, so throwing 2239 an unexpected exception results in undefined behavior at run time. 2240 2241 '-fextern-tls-init' 2242 '-fno-extern-tls-init' 2243 The C++11 and OpenMP standards allow 'thread_local' and 2244 'threadprivate' variables to have dynamic (runtime) initialization. 2245 To support this, any use of such a variable goes through a wrapper 2246 function that performs any necessary initialization. When the use 2247 and definition of the variable are in the same translation unit, 2248 this overhead can be optimized away, but when the use is in a 2249 different translation unit there is significant overhead even if 2250 the variable doesn't actually need dynamic initialization. If the 2251 programmer can be sure that no use of the variable in a 2252 non-defining TU needs to trigger dynamic initialization (either 2253 because the variable is statically initialized, or a use of the 2254 variable in the defining TU will be executed before any uses in 2255 another TU), they can avoid this overhead with the 2256 '-fno-extern-tls-init' option. 2257 2258 On targets that support symbol aliases, the default is 2259 '-fextern-tls-init'. On targets that do not support symbol 2260 aliases, the default is '-fno-extern-tls-init'. 2261 2262 '-ffor-scope' 2263 '-fno-for-scope' 2264 If '-ffor-scope' is specified, the scope of variables declared in a 2265 for-init-statement is limited to the 'for' loop itself, as 2266 specified by the C++ standard. If '-fno-for-scope' is specified, 2267 the scope of variables declared in a for-init-statement extends to 2268 the end of the enclosing scope, as was the case in old versions of 2269 G++, and other (traditional) implementations of C++. 2270 2271 If neither flag is given, the default is to follow the standard, 2272 but to allow and give a warning for old-style code that would 2273 otherwise be invalid, or have different behavior. 2274 2275 '-fno-gnu-keywords' 2276 Do not recognize 'typeof' as a keyword, so that code can use this 2277 word as an identifier. You can use the keyword '__typeof__' 2278 instead. '-ansi' implies '-fno-gnu-keywords'. 2279 2280 '-fno-implicit-templates' 2281 Never emit code for non-inline templates that are instantiated 2282 implicitly (i.e. by use); only emit code for explicit 2283 instantiations. *Note Template Instantiation::, for more 2284 information. 2285 2286 '-fno-implicit-inline-templates' 2287 Don't emit code for implicit instantiations of inline templates, 2288 either. The default is to handle inlines differently so that 2289 compiles with and without optimization need the same set of 2290 explicit instantiations. 2291 2292 '-fno-implement-inlines' 2293 To save space, do not emit out-of-line copies of inline functions 2294 controlled by '#pragma implementation'. This causes linker errors 2295 if these functions are not inlined everywhere they are called. 2296 2297 '-fms-extensions' 2298 Disable Wpedantic warnings about constructs used in MFC, such as 2299 implicit int and getting a pointer to member function via 2300 non-standard syntax. 2301 2302 '-fno-nonansi-builtins' 2303 Disable built-in declarations of functions that are not mandated by 2304 ANSI/ISO C. These include 'ffs', 'alloca', '_exit', 'index', 2305 'bzero', 'conjf', and other related functions. 2306 2307 '-fnothrow-opt' 2308 Treat a 'throw()' exception specification as if it were a 2309 'noexcept' specification to reduce or eliminate the text size 2310 overhead relative to a function with no exception specification. 2311 If the function has local variables of types with non-trivial 2312 destructors, the exception specification actually makes the 2313 function smaller because the EH cleanups for those variables can be 2314 optimized away. The semantic effect is that an exception thrown 2315 out of a function with such an exception specification results in a 2316 call to 'terminate' rather than 'unexpected'. 2317 2318 '-fno-operator-names' 2319 Do not treat the operator name keywords 'and', 'bitand', 'bitor', 2320 'compl', 'not', 'or' and 'xor' as synonyms as keywords. 2321 2322 '-fno-optional-diags' 2323 Disable diagnostics that the standard says a compiler does not need 2324 to issue. Currently, the only such diagnostic issued by G++ is the 2325 one for a name having multiple meanings within a class. 2326 2327 '-fpermissive' 2328 Downgrade some diagnostics about nonconformant code from errors to 2329 warnings. Thus, using '-fpermissive' allows some nonconforming 2330 code to compile. 2331 2332 '-fno-pretty-templates' 2333 When an error message refers to a specialization of a function 2334 template, the compiler normally prints the signature of the 2335 template followed by the template arguments and any typedefs or 2336 typenames in the signature (e.g. 'void f(T) [with T = int]' rather 2337 than 'void f(int)') so that it's clear which template is involved. 2338 When an error message refers to a specialization of a class 2339 template, the compiler omits any template arguments that match the 2340 default template arguments for that template. If either of these 2341 behaviors make it harder to understand the error message rather 2342 than easier, you can use '-fno-pretty-templates' to disable them. 2343 2344 '-frepo' 2345 Enable automatic template instantiation at link time. This option 2346 also implies '-fno-implicit-templates'. *Note Template 2347 Instantiation::, for more information. 2348 2349 '-fno-rtti' 2350 Disable generation of information about every class with virtual 2351 functions for use by the C++ run-time type identification features 2352 ('dynamic_cast' and 'typeid'). If you don't use those parts of the 2353 language, you can save some space by using this flag. Note that 2354 exception handling uses the same information, but G++ generates it 2355 as needed. The 'dynamic_cast' operator can still be used for casts 2356 that do not require run-time type information, i.e. casts to 'void 2357 *' or to unambiguous base classes. 2358 2359 '-fstats' 2360 Emit statistics about front-end processing at the end of the 2361 compilation. This information is generally only useful to the G++ 2362 development team. 2363 2364 '-fstrict-enums' 2365 Allow the compiler to optimize using the assumption that a value of 2366 enumerated type can only be one of the values of the enumeration 2367 (as defined in the C++ standard; basically, a value that can be 2368 represented in the minimum number of bits needed to represent all 2369 the enumerators). This assumption may not be valid if the program 2370 uses a cast to convert an arbitrary integer value to the enumerated 2371 type. 2372 2373 '-ftemplate-backtrace-limit=N' 2374 Set the maximum number of template instantiation notes for a single 2375 warning or error to N. The default value is 10. 2376 2377 '-ftemplate-depth=N' 2378 Set the maximum instantiation depth for template classes to N. A 2379 limit on the template instantiation depth is needed to detect 2380 endless recursions during template class instantiation. ANSI/ISO 2381 C++ conforming programs must not rely on a maximum depth greater 2382 than 17 (changed to 1024 in C++11). The default value is 900, as 2383 the compiler can run out of stack space before hitting 1024 in some 2384 situations. 2385 2386 '-fno-threadsafe-statics' 2387 Do not emit the extra code to use the routines specified in the C++ 2388 ABI for thread-safe initialization of local statics. You can use 2389 this option to reduce code size slightly in code that doesn't need 2390 to be thread-safe. 2391 2392 '-fuse-cxa-atexit' 2393 Register destructors for objects with static storage duration with 2394 the '__cxa_atexit' function rather than the 'atexit' function. 2395 This option is required for fully standards-compliant handling of 2396 static destructors, but only works if your C library supports 2397 '__cxa_atexit'. 2398 2399 '-fno-use-cxa-get-exception-ptr' 2400 Don't use the '__cxa_get_exception_ptr' runtime routine. This 2401 causes 'std::uncaught_exception' to be incorrect, but is necessary 2402 if the runtime routine is not available. 2403 2404 '-fvisibility-inlines-hidden' 2405 This switch declares that the user does not attempt to compare 2406 pointers to inline functions or methods where the addresses of the 2407 two functions are taken in different shared objects. 2408 2409 The effect of this is that GCC may, effectively, mark inline 2410 methods with '__attribute__ ((visibility ("hidden")))' so that they 2411 do not appear in the export table of a DSO and do not require a PLT 2412 indirection when used within the DSO. Enabling this option can 2413 have a dramatic effect on load and link times of a DSO as it 2414 massively reduces the size of the dynamic export table when the 2415 library makes heavy use of templates. 2416 2417 The behavior of this switch is not quite the same as marking the 2418 methods as hidden directly, because it does not affect static 2419 variables local to the function or cause the compiler to deduce 2420 that the function is defined in only one shared object. 2421 2422 You may mark a method as having a visibility explicitly to negate 2423 the effect of the switch for that method. For example, if you do 2424 want to compare pointers to a particular inline method, you might 2425 mark it as having default visibility. Marking the enclosing class 2426 with explicit visibility has no effect. 2427 2428 Explicitly instantiated inline methods are unaffected by this 2429 option as their linkage might otherwise cross a shared library 2430 boundary. *Note Template Instantiation::. 2431 2432 '-fvisibility-ms-compat' 2433 This flag attempts to use visibility settings to make GCC's C++ 2434 linkage model compatible with that of Microsoft Visual Studio. 2435 2436 The flag makes these changes to GCC's linkage model: 2437 2438 1. It sets the default visibility to 'hidden', like 2439 '-fvisibility=hidden'. 2440 2441 2. Types, but not their members, are not hidden by default. 2442 2443 3. The One Definition Rule is relaxed for types without explicit 2444 visibility specifications that are defined in more than one 2445 shared object: those declarations are permitted if they are 2446 permitted when this option is not used. 2447 2448 In new code it is better to use '-fvisibility=hidden' and export 2449 those classes that are intended to be externally visible. 2450 Unfortunately it is possible for code to rely, perhaps 2451 accidentally, on the Visual Studio behavior. 2452 2453 Among the consequences of these changes are that static data 2454 members of the same type with the same name but defined in 2455 different shared objects are different, so changing one does not 2456 change the other; and that pointers to function members defined in 2457 different shared objects may not compare equal. When this flag is 2458 given, it is a violation of the ODR to define types with the same 2459 name differently. 2460 2461 '-fno-weak' 2462 Do not use weak symbol support, even if it is provided by the 2463 linker. By default, G++ uses weak symbols if they are available. 2464 This option exists only for testing, and should not be used by 2465 end-users; it results in inferior code and has no benefits. This 2466 option may be removed in a future release of G++. 2467 2468 '-nostdinc++' 2469 Do not search for header files in the standard directories specific 2470 to C++, but do still search the other standard directories. (This 2471 option is used when building the C++ library.) 2472 2473 In addition, these optimization, warning, and code generation options 2474 have meanings only for C++ programs: 2475 2476 '-fno-default-inline' 2477 Do not assume 'inline' for functions defined inside a class scope. 2478 *Note Options That Control Optimization: Optimize Options. Note 2479 that these functions have linkage like inline functions; they just 2480 aren't inlined by default. 2481 2482 '-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2483 Warn when G++ generates code that is probably not compatible with 2484 the vendor-neutral C++ ABI. Although an effort has been made to 2485 warn about all such cases, there are probably some cases that are 2486 not warned about, even though G++ is generating incompatible code. 2487 There may also be cases where warnings are emitted even though the 2488 code that is generated is compatible. 2489 2490 You should rewrite your code to avoid these warnings if you are 2491 concerned about the fact that code generated by G++ may not be 2492 binary compatible with code generated by other compilers. 2493 2494 The known incompatibilities in '-fabi-version=2' (the default) 2495 include: 2496 2497 * A template with a non-type template parameter of reference 2498 type is mangled incorrectly: 2499 extern int N; 2500 template <int &> struct S {}; 2501 void n (S<N>) {2} 2502 2503 This is fixed in '-fabi-version=3'. 2504 2505 * SIMD vector types declared using '__attribute ((vector_size))' 2506 are mangled in a non-standard way that does not allow for 2507 overloading of functions taking vectors of different sizes. 2508 2509 The mangling is changed in '-fabi-version=4'. 2510 2511 The known incompatibilities in '-fabi-version=1' include: 2512 2513 * Incorrect handling of tail-padding for bit-fields. G++ may 2514 attempt to pack data into the same byte as a base class. For 2515 example: 2516 2517 struct A { virtual void f(); int f1 : 1; }; 2518 struct B : public A { int f2 : 1; }; 2519 2520 In this case, G++ places 'B::f2' into the same byte as 2521 'A::f1'; other compilers do not. You can avoid this problem 2522 by explicitly padding 'A' so that its size is a multiple of 2523 the byte size on your platform; that causes G++ and other 2524 compilers to lay out 'B' identically. 2525 2526 * Incorrect handling of tail-padding for virtual bases. G++ 2527 does not use tail padding when laying out virtual bases. For 2528 example: 2529 2530 struct A { virtual void f(); char c1; }; 2531 struct B { B(); char c2; }; 2532 struct C : public A, public virtual B {}; 2533 2534 In this case, G++ does not place 'B' into the tail-padding for 2535 'A'; other compilers do. You can avoid this problem by 2536 explicitly padding 'A' so that its size is a multiple of its 2537 alignment (ignoring virtual base classes); that causes G++ and 2538 other compilers to lay out 'C' identically. 2539 2540 * Incorrect handling of bit-fields with declared widths greater 2541 than that of their underlying types, when the bit-fields 2542 appear in a union. For example: 2543 2544 union U { int i : 4096; }; 2545 2546 Assuming that an 'int' does not have 4096 bits, G++ makes the 2547 union too small by the number of bits in an 'int'. 2548 2549 * Empty classes can be placed at incorrect offsets. For 2550 example: 2551 2552 struct A {}; 2553 2554 struct B { 2555 A a; 2556 virtual void f (); 2557 }; 2558 2559 struct C : public B, public A {}; 2560 2561 G++ places the 'A' base class of 'C' at a nonzero offset; it 2562 should be placed at offset zero. G++ mistakenly believes that 2563 the 'A' data member of 'B' is already at offset zero. 2564 2565 * Names of template functions whose types involve 'typename' or 2566 template template parameters can be mangled incorrectly. 2567 2568 template <typename Q> 2569 void f(typename Q::X) {} 2570 2571 template <template <typename> class Q> 2572 void f(typename Q<int>::X) {} 2573 2574 Instantiations of these templates may be mangled incorrectly. 2575 2576 It also warns about psABI-related changes. The known psABI changes 2577 at this point include: 2578 2579 * For SysV/x86-64, unions with 'long double' members are passed 2580 in memory as specified in psABI. For example: 2581 2582 union U { 2583 long double ld; 2584 int i; 2585 }; 2586 2587 'union U' is always passed in memory. 2588 2589 '-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2590 Warn when a class seems unusable because all the constructors or 2591 destructors in that class are private, and it has neither friends 2592 nor public static member functions. Also warn if there are no 2593 non-private methods, and there's at least one private member 2594 function that isn't a constructor or destructor. 2595 2596 '-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)' 2597 Warn when 'delete' is used to destroy an instance of a class that 2598 has virtual functions and non-virtual destructor. It is unsafe to 2599 delete an instance of a derived class through a pointer to a base 2600 class if the base class does not have a virtual destructor. This 2601 warning is enabled by '-Wall'. 2602 2603 '-Wliteral-suffix (C++ and Objective-C++ only)' 2604 Warn when a string or character literal is followed by a ud-suffix 2605 which does not begin with an underscore. As a conforming 2606 extension, GCC treats such suffixes as separate preprocessing 2607 tokens in order to maintain backwards compatibility with code that 2608 uses formatting macros from '<inttypes.h>'. For example: 2609 2610 #define __STDC_FORMAT_MACROS 2611 #include <inttypes.h> 2612 #include <stdio.h> 2613 2614 int main() { 2615 int64_t i64 = 123; 2616 printf("My int64: %"PRId64"\n", i64); 2617 } 2618 2619 In this case, 'PRId64' is treated as a separate preprocessing 2620 token. 2621 2622 This warning is enabled by default. 2623 2624 '-Wnarrowing (C++ and Objective-C++ only)' 2625 Warn when a narrowing conversion prohibited by C++11 occurs within 2626 '{ }', e.g. 2627 2628 int i = { 2.2 }; // error: narrowing from double to int 2629 2630 This flag is included in '-Wall' and '-Wc++11-compat'. 2631 2632 With '-std=c++11', '-Wno-narrowing' suppresses the diagnostic 2633 required by the standard. Note that this does not affect the 2634 meaning of well-formed code; narrowing conversions are still 2635 considered ill-formed in SFINAE context. 2636 2637 '-Wnoexcept (C++ and Objective-C++ only)' 2638 Warn when a noexcept-expression evaluates to false because of a 2639 call to a function that does not have a non-throwing exception 2640 specification (i.e. 'throw()' or 'noexcept') but is known by the 2641 compiler to never throw an exception. 2642 2643 '-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2644 Warn when a class has virtual functions and an accessible 2645 non-virtual destructor, in which case it is possible but unsafe to 2646 delete an instance of a derived class through a pointer to the base 2647 class. This warning is also enabled if '-Weffc++' is specified. 2648 2649 '-Wreorder (C++ and Objective-C++ only)' 2650 Warn when the order of member initializers given in the code does 2651 not match the order in which they must be executed. For instance: 2652 2653 struct A { 2654 int i; 2655 int j; 2656 A(): j (0), i (1) { } 2657 }; 2658 2659 The compiler rearranges the member initializers for 'i' and 'j' to 2660 match the declaration order of the members, emitting a warning to 2661 that effect. This warning is enabled by '-Wall'. 2662 2663 '-fext-numeric-literals (C++ and Objective-C++ only)' 2664 Accept imaginary, fixed-point, or machine-defined literal number 2665 suffixes as GNU extensions. When this option is turned off these 2666 suffixes are treated as C++11 user-defined literal numeric 2667 suffixes. This is on by default for all pre-C++11 dialects and all 2668 GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11', 2669 '-std=gnu++1y'. This option is off by default for ISO C++11 2670 onwards ('-std=c++11', ...). 2671 2672 The following '-W...' options are not affected by '-Wall'. 2673 2674 '-Weffc++ (C++ and Objective-C++ only)' 2675 Warn about violations of the following style guidelines from Scott 2676 Meyers' 'Effective C++, Second Edition' book: 2677 2678 * Item 11: Define a copy constructor and an assignment operator 2679 for classes with dynamically-allocated memory. 2680 2681 * Item 12: Prefer initialization to assignment in constructors. 2682 2683 * Item 14: Make destructors virtual in base classes. 2684 2685 * Item 15: Have 'operator=' return a reference to '*this'. 2686 2687 * Item 23: Don't try to return a reference when you must return 2688 an object. 2689 2690 Also warn about violations of the following style guidelines from 2691 Scott Meyers' 'More Effective C++' book: 2692 2693 * Item 6: Distinguish between prefix and postfix forms of 2694 increment and decrement operators. 2695 2696 * Item 7: Never overload '&&', '||', or ','. 2697 2698 When selecting this option, be aware that the standard library 2699 headers do not obey all of these guidelines; use 'grep -v' to 2700 filter out those warnings. 2701 2702 '-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2703 Warn about the use of an uncasted 'NULL' as sentinel. When 2704 compiling only with GCC this is a valid sentinel, as 'NULL' is 2705 defined to '__null'. Although it is a null pointer constant rather 2706 than a null pointer, it is guaranteed to be of the same size as a 2707 pointer. But this use is not portable across different compilers. 2708 2709 '-Wno-non-template-friend (C++ and Objective-C++ only)' 2710 Disable warnings when non-templatized friend functions are declared 2711 within a template. Since the advent of explicit template 2712 specification support in G++, if the name of the friend is an 2713 unqualified-id (i.e., 'friend foo(int)'), the C++ language 2714 specification demands that the friend declare or define an 2715 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2716 implemented explicit specification, unqualified-ids could be 2717 interpreted as a particular specialization of a templatized 2718 function. Because this non-conforming behavior is no longer the 2719 default behavior for G++, '-Wnon-template-friend' allows the 2720 compiler to check existing code for potential trouble spots and is 2721 on by default. This new compiler behavior can be turned off with 2722 '-Wno-non-template-friend', which keeps the conformant compiler 2723 code but disables the helpful warning. 2724 2725 '-Wold-style-cast (C++ and Objective-C++ only)' 2726 Warn if an old-style (C-style) cast to a non-void type is used 2727 within a C++ program. The new-style casts ('dynamic_cast', 2728 'static_cast', 'reinterpret_cast', and 'const_cast') are less 2729 vulnerable to unintended effects and much easier to search for. 2730 2731 '-Woverloaded-virtual (C++ and Objective-C++ only)' 2732 Warn when a function declaration hides virtual functions from a 2733 base class. For example, in: 2734 2735 struct A { 2736 virtual void f(); 2737 }; 2738 2739 struct B: public A { 2740 void f(int); 2741 }; 2742 2743 the 'A' class version of 'f' is hidden in 'B', and code like: 2744 2745 B* b; 2746 b->f(); 2747 2748 fails to compile. 2749 2750 '-Wno-pmf-conversions (C++ and Objective-C++ only)' 2751 Disable the diagnostic for converting a bound pointer to member 2752 function to a plain pointer. 2753 2754 '-Wsign-promo (C++ and Objective-C++ only)' 2755 Warn when overload resolution chooses a promotion from unsigned or 2756 enumerated type to a signed type, over a conversion to an unsigned 2757 type of the same size. Previous versions of G++ tried to preserve 2758 unsignedness, but the standard mandates the current behavior. 2759 2760 2761 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2762 2763 3.6 Options Controlling Objective-C and Objective-C++ Dialects 2764 ============================================================== 2765 2766 (NOTE: This manual does not describe the Objective-C and Objective-C++ 2767 languages themselves. *Note Language Standards Supported by GCC: 2768 Standards, for references.) 2769 2770 This section describes the command-line options that are only 2771 meaningful for Objective-C and Objective-C++ programs. You can also use 2772 most of the language-independent GNU compiler options. For example, you 2773 might compile a file 'some_class.m' like this: 2774 2775 gcc -g -fgnu-runtime -O -c some_class.m 2776 2777 In this example, '-fgnu-runtime' is an option meant only for Objective-C 2778 and Objective-C++ programs; you can use the other options with any 2779 language supported by GCC. 2780 2781 Note that since Objective-C is an extension of the C language, 2782 Objective-C compilations may also use options specific to the C 2783 front-end (e.g., '-Wtraditional'). Similarly, Objective-C++ 2784 compilations may use C++-specific options (e.g., '-Wabi'). 2785 2786 Here is a list of options that are _only_ for compiling Objective-C and 2787 Objective-C++ programs: 2788 2789 '-fconstant-string-class=CLASS-NAME' 2790 Use CLASS-NAME as the name of the class to instantiate for each 2791 literal string specified with the syntax '@"..."'. The default 2792 class name is 'NXConstantString' if the GNU runtime is being used, 2793 and 'NSConstantString' if the NeXT runtime is being used (see 2794 below). The '-fconstant-cfstrings' option, if also present, 2795 overrides the '-fconstant-string-class' setting and cause '@"..."' 2796 literals to be laid out as constant CoreFoundation strings. 2797 2798 '-fgnu-runtime' 2799 Generate object code compatible with the standard GNU Objective-C 2800 runtime. This is the default for most types of systems. 2801 2802 '-fnext-runtime' 2803 Generate output compatible with the NeXT runtime. This is the 2804 default for NeXT-based systems, including Darwin and Mac OS X. The 2805 macro '__NEXT_RUNTIME__' is predefined if (and only if) this option 2806 is used. 2807 2808 '-fno-nil-receivers' 2809 Assume that all Objective-C message dispatches ('[receiver 2810 message:arg]') in this translation unit ensure that the receiver is 2811 not 'nil'. This allows for more efficient entry points in the 2812 runtime to be used. This option is only available in conjunction 2813 with the NeXT runtime and ABI version 0 or 1. 2814 2815 '-fobjc-abi-version=N' 2816 Use version N of the Objective-C ABI for the selected runtime. 2817 This option is currently supported only for the NeXT runtime. In 2818 that case, Version 0 is the traditional (32-bit) ABI without 2819 support for properties and other Objective-C 2.0 additions. 2820 Version 1 is the traditional (32-bit) ABI with support for 2821 properties and other Objective-C 2.0 additions. Version 2 is the 2822 modern (64-bit) ABI. If nothing is specified, the default is 2823 Version 0 on 32-bit target machines, and Version 2 on 64-bit target 2824 machines. 2825 2826 '-fobjc-call-cxx-cdtors' 2827 For each Objective-C class, check if any of its instance variables 2828 is a C++ object with a non-trivial default constructor. If so, 2829 synthesize a special '- (id) .cxx_construct' instance method which 2830 runs non-trivial default constructors on any such instance 2831 variables, in order, and then return 'self'. Similarly, check if 2832 any instance variable is a C++ object with a non-trivial 2833 destructor, and if so, synthesize a special '- (void) 2834 .cxx_destruct' method which runs all such default destructors, in 2835 reverse order. 2836 2837 The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods 2838 thusly generated only operate on instance variables declared in the 2839 current Objective-C class, and not those inherited from 2840 superclasses. It is the responsibility of the Objective-C runtime 2841 to invoke all such methods in an object's inheritance hierarchy. 2842 The '- (id) .cxx_construct' methods are invoked by the runtime 2843 immediately after a new object instance is allocated; the '- (void) 2844 .cxx_destruct' methods are invoked immediately before the runtime 2845 deallocates an object instance. 2846 2847 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2848 later has support for invoking the '- (id) .cxx_construct' and '- 2849 (void) .cxx_destruct' methods. 2850 2851 '-fobjc-direct-dispatch' 2852 Allow fast jumps to the message dispatcher. On Darwin this is 2853 accomplished via the comm page. 2854 2855 '-fobjc-exceptions' 2856 Enable syntactic support for structured exception handling in 2857 Objective-C, similar to what is offered by C++ and Java. This 2858 option is required to use the Objective-C keywords '@try', 2859 '@throw', '@catch', '@finally' and '@synchronized'. This option is 2860 available with both the GNU runtime and the NeXT runtime (but not 2861 available in conjunction with the NeXT runtime on Mac OS X 10.2 and 2862 earlier). 2863 2864 '-fobjc-gc' 2865 Enable garbage collection (GC) in Objective-C and Objective-C++ 2866 programs. This option is only available with the NeXT runtime; the 2867 GNU runtime has a different garbage collection implementation that 2868 does not require special compiler flags. 2869 2870 '-fobjc-nilcheck' 2871 For the NeXT runtime with version 2 of the ABI, check for a nil 2872 receiver in method invocations before doing the actual method call. 2873 This is the default and can be disabled using '-fno-objc-nilcheck'. 2874 Class methods and super calls are never checked for nil in this way 2875 no matter what this flag is set to. Currently this flag does 2876 nothing when the GNU runtime, or an older version of the NeXT 2877 runtime ABI, is used. 2878 2879 '-fobjc-std=objc1' 2880 Conform to the language syntax of Objective-C 1.0, the language 2881 recognized by GCC 4.0. This only affects the Objective-C additions 2882 to the C/C++ language; it does not affect conformance to C/C++ 2883 standards, which is controlled by the separate C/C++ dialect option 2884 flags. When this option is used with the Objective-C or 2885 Objective-C++ compiler, any Objective-C syntax that is not 2886 recognized by GCC 4.0 is rejected. This is useful if you need to 2887 make sure that your Objective-C code can be compiled with older 2888 versions of GCC. 2889 2890 '-freplace-objc-classes' 2891 Emit a special marker instructing 'ld(1)' not to statically link in 2892 the resulting object file, and allow 'dyld(1)' to load it in at run 2893 time instead. This is used in conjunction with the 2894 Fix-and-Continue debugging mode, where the object file in question 2895 may be recompiled and dynamically reloaded in the course of program 2896 execution, without the need to restart the program itself. 2897 Currently, Fix-and-Continue functionality is only available in 2898 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2899 2900 '-fzero-link' 2901 When compiling for the NeXT runtime, the compiler ordinarily 2902 replaces calls to 'objc_getClass("...")' (when the name of the 2903 class is known at compile time) with static class references that 2904 get initialized at load time, which improves run-time performance. 2905 Specifying the '-fzero-link' flag suppresses this behavior and 2906 causes calls to 'objc_getClass("...")' to be retained. This is 2907 useful in Zero-Link debugging mode, since it allows for individual 2908 class implementations to be modified during program execution. The 2909 GNU runtime currently always retains calls to 2910 'objc_get_class("...")' regardless of command-line options. 2911 2912 '-gen-decls' 2913 Dump interface declarations for all classes seen in the source file 2914 to a file named 'SOURCENAME.decl'. 2915 2916 '-Wassign-intercept (Objective-C and Objective-C++ only)' 2917 Warn whenever an Objective-C assignment is being intercepted by the 2918 garbage collector. 2919 2920 '-Wno-protocol (Objective-C and Objective-C++ only)' 2921 If a class is declared to implement a protocol, a warning is issued 2922 for every method in the protocol that is not implemented by the 2923 class. The default behavior is to issue a warning for every method 2924 not explicitly implemented in the class, even if a method 2925 implementation is inherited from the superclass. If you use the 2926 '-Wno-protocol' option, then methods inherited from the superclass 2927 are considered to be implemented, and no warning is issued for 2928 them. 2929 2930 '-Wselector (Objective-C and Objective-C++ only)' 2931 Warn if multiple methods of different types for the same selector 2932 are found during compilation. The check is performed on the list 2933 of methods in the final stage of compilation. Additionally, a 2934 check is performed for each selector appearing in a 2935 '@selector(...)' expression, and a corresponding method for that 2936 selector has been found during compilation. Because these checks 2937 scan the method table only at the end of compilation, these 2938 warnings are not produced if the final stage of compilation is not 2939 reached, for example because an error is found during compilation, 2940 or because the '-fsyntax-only' option is being used. 2941 2942 '-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2943 Warn if multiple methods with differing argument and/or return 2944 types are found for a given selector when attempting to send a 2945 message using this selector to a receiver of type 'id' or 'Class'. 2946 When this flag is off (which is the default behavior), the compiler 2947 omits such warnings if any differences found are confined to types 2948 that share the same size and alignment. 2949 2950 '-Wundeclared-selector (Objective-C and Objective-C++ only)' 2951 Warn if a '@selector(...)' expression referring to an undeclared 2952 selector is found. A selector is considered undeclared if no 2953 method with that name has been declared before the '@selector(...)' 2954 expression, either explicitly in an '@interface' or '@protocol' 2955 declaration, or implicitly in an '@implementation' section. This 2956 option always performs its checks as soon as a '@selector(...)' 2957 expression is found, while '-Wselector' only performs its checks in 2958 the final stage of compilation. This also enforces the coding 2959 style convention that methods and selectors must be declared before 2960 being used. 2961 2962 '-print-objc-runtime-info' 2963 Generate C header describing the largest structure that is passed 2964 by value, if any. 2965 2966 2967 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2968 2969 3.7 Options to Control Diagnostic Messages Formatting 2970 ===================================================== 2971 2972 Traditionally, diagnostic messages have been formatted irrespective of 2973 the output device's aspect (e.g. its width, ...). You can use the 2974 options described below to control the formatting algorithm for 2975 diagnostic messages, e.g. how many characters per line, how often source 2976 location information should be reported. Note that some language front 2977 ends may not honor these options. 2978 2979 '-fmessage-length=N' 2980 Try to format error messages so that they fit on lines of about N 2981 characters. The default is 72 characters for 'g++' and 0 for the 2982 rest of the front ends supported by GCC. If N is zero, then no 2983 line-wrapping is done; each error message appears on a single line. 2984 2985 '-fdiagnostics-show-location=once' 2986 Only meaningful in line-wrapping mode. Instructs the diagnostic 2987 messages reporter to emit source location information _once_; that 2988 is, in case the message is too long to fit on a single physical 2989 line and has to be wrapped, the source location won't be emitted 2990 (as prefix) again, over and over, in subsequent continuation lines. 2991 This is the default behavior. 2992 2993 '-fdiagnostics-show-location=every-line' 2994 Only meaningful in line-wrapping mode. Instructs the diagnostic 2995 messages reporter to emit the same source location information (as 2996 prefix) for physical lines that result from the process of breaking 2997 a message which is too long to fit on a single line. 2998 2999 '-fno-diagnostics-show-option' 3000 By default, each diagnostic emitted includes text indicating the 3001 command-line option that directly controls the diagnostic (if such 3002 an option is known to the diagnostic machinery). Specifying the 3003 '-fno-diagnostics-show-option' flag suppresses that behavior. 3004 3005 '-fno-diagnostics-show-caret' 3006 By default, each diagnostic emitted includes the original source 3007 line and a caret '^' indicating the column. This option suppresses 3008 this information. 3009 3010 3011 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 3012 3013 3.8 Options to Request or Suppress Warnings 3014 =========================================== 3015 3016 Warnings are diagnostic messages that report constructions that are not 3017 inherently erroneous but that are risky or suggest there may have been 3018 an error. 3019 3020 The following language-independent options do not enable specific 3021 warnings but control the kinds of diagnostics produced by GCC. 3022 3023 '-fsyntax-only' 3024 Check the code for syntax errors, but don't do anything beyond 3025 that. 3026 3027 '-fmax-errors=N' 3028 Limits the maximum number of error messages to N, at which point 3029 GCC bails out rather than attempting to continue processing the 3030 source code. If N is 0 (the default), there is no limit on the 3031 number of error messages produced. If '-Wfatal-errors' is also 3032 specified, then '-Wfatal-errors' takes precedence over this option. 3033 3034 '-w' 3035 Inhibit all warning messages. 3036 3037 '-Werror' 3038 Make all warnings into errors. 3039 3040 '-Werror=' 3041 Make the specified warning into an error. The specifier for a 3042 warning is appended; for example '-Werror=switch' turns the 3043 warnings controlled by '-Wswitch' into errors. This switch takes a 3044 negative form, to be used to negate '-Werror' for specific 3045 warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings 3046 not be errors, even when '-Werror' is in effect. 3047 3048 The warning message for each controllable warning includes the 3049 option that controls the warning. That option can then be used 3050 with '-Werror=' and '-Wno-error=' as described above. (Printing of 3051 the option in the warning message can be disabled using the 3052 '-fno-diagnostics-show-option' flag.) 3053 3054 Note that specifying '-Werror='FOO automatically implies '-W'FOO. 3055 However, '-Wno-error='FOO does not imply anything. 3056 3057 '-Wfatal-errors' 3058 This option causes the compiler to abort compilation on the first 3059 error occurred rather than trying to keep going and printing 3060 further error messages. 3061 3062 You can request many specific warnings with options beginning with 3063 '-W', for example '-Wimplicit' to request warnings on implicit 3064 declarations. Each of these specific warning options also has a 3065 negative form beginning '-Wno-' to turn off warnings; for example, 3066 '-Wno-implicit'. This manual lists only one of the two forms, whichever 3067 is not the default. For further language-specific options also refer to 3068 *note C++ Dialect Options:: and *note Objective-C and Objective-C++ 3069 Dialect Options::. 3070 3071 When an unrecognized warning option is requested (e.g., 3072 '-Wunknown-warning'), GCC emits a diagnostic stating that the option is 3073 not recognized. However, if the '-Wno-' form is used, the behavior is 3074 slightly different: no diagnostic is produced for '-Wno-unknown-warning' 3075 unless other diagnostics are being produced. This allows the use of new 3076 '-Wno-' options with old compilers, but if something goes wrong, the 3077 compiler warns that an unrecognized option is present. 3078 3079 '-Wpedantic' 3080 '-pedantic' 3081 Issue all the warnings demanded by strict ISO C and ISO C++; reject 3082 all programs that use forbidden extensions, and some other programs 3083 that do not follow ISO C and ISO C++. For ISO C, follows the 3084 version of the ISO C standard specified by any '-std' option used. 3085 3086 Valid ISO C and ISO C++ programs should compile properly with or 3087 without this option (though a rare few require '-ansi' or a '-std' 3088 option specifying the required version of ISO C). However, without 3089 this option, certain GNU extensions and traditional C and C++ 3090 features are supported as well. With this option, they are 3091 rejected. 3092 3093 '-Wpedantic' does not cause warning messages for use of the 3094 alternate keywords whose names begin and end with '__'. Pedantic 3095 warnings are also disabled in the expression that follows 3096 '__extension__'. However, only system header files should use 3097 these escape routes; application programs should avoid them. *Note 3098 Alternate Keywords::. 3099 3100 Some users try to use '-Wpedantic' to check programs for strict ISO 3101 C conformance. They soon find that it does not do quite what they 3102 want: it finds some non-ISO practices, but not all--only those for 3103 which ISO C _requires_ a diagnostic, and some others for which 3104 diagnostics have been added. 3105 3106 A feature to report any failure to conform to ISO C might be useful 3107 in some instances, but would require considerable additional work 3108 and would be quite different from '-Wpedantic'. We don't have 3109 plans to support such a feature in the near future. 3110 3111 Where the standard specified with '-std' represents a GNU extended 3112 dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding 3113 "base standard", the version of ISO C on which the GNU extended 3114 dialect is based. Warnings from '-Wpedantic' are given where they 3115 are required by the base standard. (It does not make sense for 3116 such warnings to be given only for features not in the specified 3117 GNU C dialect, since by definition the GNU dialects of C include 3118 all features the compiler supports with the given option, and there 3119 would be nothing to warn about.) 3120 3121 '-pedantic-errors' 3122 Like '-Wpedantic', except that errors are produced rather than 3123 warnings. 3124 3125 '-Wall' 3126 This enables all the warnings about constructions that some users 3127 consider questionable, and that are easy to avoid (or modify to 3128 prevent the warning), even in conjunction with macros. This also 3129 enables some language-specific warnings described in *note C++ 3130 Dialect Options:: and *note Objective-C and Objective-C++ Dialect 3131 Options::. 3132 3133 '-Wall' turns on the following warning flags: 3134 3135 -Waddress 3136 -Warray-bounds (only with -O2) 3137 -Wc++11-compat 3138 -Wchar-subscripts 3139 -Wenum-compare (in C/ObjC; this is on by default in C++) 3140 -Wimplicit-int (C and Objective-C only) 3141 -Wimplicit-function-declaration (C and Objective-C only) 3142 -Wcomment 3143 -Wformat 3144 -Wmain (only for C/ObjC and unless -ffreestanding) 3145 -Wmaybe-uninitialized 3146 -Wmissing-braces (only for C/ObjC) 3147 -Wnonnull 3148 -Wparentheses 3149 -Wpointer-sign 3150 -Wreorder 3151 -Wreturn-type 3152 -Wsequence-point 3153 -Wsign-compare (only in C++) 3154 -Wstrict-aliasing 3155 -Wstrict-overflow=1 3156 -Wswitch 3157 -Wtrigraphs 3158 -Wuninitialized 3159 -Wunknown-pragmas 3160 -Wunused-function 3161 -Wunused-label 3162 -Wunused-value 3163 -Wunused-variable 3164 -Wvolatile-register-var 3165 3166 3167 Note that some warning flags are not implied by '-Wall'. Some of 3168 them warn about constructions that users generally do not consider 3169 questionable, but which occasionally you might wish to check for; 3170 others warn about constructions that are necessary or hard to avoid 3171 in some cases, and there is no simple way to modify the code to 3172 suppress the warning. Some of them are enabled by '-Wextra' but 3173 many of them must be enabled individually. 3174 3175 '-Wextra' 3176 This enables some extra warning flags that are not enabled by 3177 '-Wall'. (This option used to be called '-W'. The older name is 3178 still supported, but the newer name is more descriptive.) 3179 3180 -Wclobbered 3181 -Wempty-body 3182 -Wignored-qualifiers 3183 -Wmissing-field-initializers 3184 -Wmissing-parameter-type (C only) 3185 -Wold-style-declaration (C only) 3186 -Woverride-init 3187 -Wsign-compare 3188 -Wtype-limits 3189 -Wuninitialized 3190 -Wunused-parameter (only with -Wunused or -Wall) 3191 -Wunused-but-set-parameter (only with -Wunused or -Wall) 3192 3193 3194 The option '-Wextra' also prints warning messages for the following 3195 cases: 3196 3197 * A pointer is compared against integer zero with '<', '<=', 3198 '>', or '>='. 3199 3200 * (C++ only) An enumerator and a non-enumerator both appear in a 3201 conditional expression. 3202 3203 * (C++ only) Ambiguous virtual bases. 3204 3205 * (C++ only) Subscripting an array that has been declared 3206 'register'. 3207 3208 * (C++ only) Taking the address of a variable that has been 3209 declared 'register'. 3210 3211 * (C++ only) A base class is not initialized in a derived 3212 class's copy constructor. 3213 3214 '-Wchar-subscripts' 3215 Warn if an array subscript has type 'char'. This is a common cause 3216 of error, as programmers often forget that this type is signed on 3217 some machines. This warning is enabled by '-Wall'. 3218 3219 '-Wcomment' 3220 Warn whenever a comment-start sequence '/*' appears in a '/*' 3221 comment, or whenever a Backslash-Newline appears in a '//' comment. 3222 This warning is enabled by '-Wall'. 3223 3224 '-Wno-coverage-mismatch' 3225 Warn if feedback profiles do not match when using the 3226 '-fprofile-use' option. If a source file is changed between 3227 compiling with '-fprofile-gen' and with '-fprofile-use', the files 3228 with the profile feedback can fail to match the source file and GCC 3229 cannot use the profile feedback information. By default, this 3230 warning is enabled and is treated as an error. 3231 '-Wno-coverage-mismatch' can be used to disable the warning or 3232 '-Wno-error=coverage-mismatch' can be used to disable the error. 3233 Disabling the error for this warning can result in poorly optimized 3234 code and is useful only in the case of very minor changes such as 3235 bug fixes to an existing code-base. Completely disabling the 3236 warning is not recommended. 3237 3238 '-Wno-cpp' 3239 (C, Objective-C, C++, Objective-C++ and Fortran only) 3240 3241 Suppress warning messages emitted by '#warning' directives. 3242 3243 '-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' 3244 Give a warning when a value of type 'float' is implicitly promoted 3245 to 'double'. CPUs with a 32-bit "single-precision" floating-point 3246 unit implement 'float' in hardware, but emulate 'double' in 3247 software. On such a machine, doing computations using 'double' 3248 values is much more expensive because of the overhead required for 3249 software emulation. 3250 3251 It is easy to accidentally do computations with 'double' because 3252 floating-point literals are implicitly of type 'double'. For 3253 example, in: 3254 float area(float radius) 3255 { 3256 return 3.14159 * radius * radius; 3257 } 3258 the compiler performs the entire computation with 'double' because 3259 the floating-point literal is a 'double'. 3260 3261 '-Wformat' 3262 '-Wformat=N' 3263 Check calls to 'printf' and 'scanf', etc., to make sure that the 3264 arguments supplied have types appropriate to the format string 3265 specified, and that the conversions specified in the format string 3266 make sense. This includes standard functions, and others specified 3267 by format attributes (*note Function Attributes::), in the 3268 'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension, 3269 not in the C standard) families (or other target-specific 3270 families). Which functions are checked without format attributes 3271 having been specified depends on the standard version selected, and 3272 such checks of functions without the attribute specified are 3273 disabled by '-ffreestanding' or '-fno-builtin'. 3274 3275 The formats are checked against the format features supported by 3276 GNU libc version 2.2. These include all ISO C90 and C99 features, 3277 as well as features from the Single Unix Specification and some BSD 3278 and GNU extensions. Other library implementations may not support 3279 all these features; GCC does not support warning about features 3280 that go beyond a particular library's limitations. However, if 3281 '-Wpedantic' is used with '-Wformat', warnings are given about 3282 format features not in the selected standard version (but not for 3283 'strfmon' formats, since those are not in any version of the C 3284 standard). *Note Options Controlling C Dialect: C Dialect Options. 3285 3286 '-Wformat=1' 3287 '-Wformat' 3288 Option '-Wformat' is equivalent to '-Wformat=1', and 3289 '-Wno-format' is equivalent to '-Wformat=0'. Since '-Wformat' 3290 also checks for null format arguments for several functions, 3291 '-Wformat' also implies '-Wnonnull'. Some aspects of this 3292 level of format checking can be disabled by the options: 3293 '-Wno-format-contains-nul', '-Wno-format-extra-args', and 3294 '-Wno-format-zero-length'. '-Wformat' is enabled by '-Wall'. 3295 3296 '-Wno-format-contains-nul' 3297 If '-Wformat' is specified, do not warn about format strings 3298 that contain NUL bytes. 3299 3300 '-Wno-format-extra-args' 3301 If '-Wformat' is specified, do not warn about excess arguments 3302 to a 'printf' or 'scanf' format function. The C standard 3303 specifies that such arguments are ignored. 3304 3305 Where the unused arguments lie between used arguments that are 3306 specified with '$' operand number specifications, normally 3307 warnings are still given, since the implementation could not 3308 know what type to pass to 'va_arg' to skip the unused 3309 arguments. However, in the case of 'scanf' formats, this 3310 option suppresses the warning if the unused arguments are all 3311 pointers, since the Single Unix Specification says that such 3312 unused arguments are allowed. 3313 3314 '-Wno-format-zero-length' 3315 If '-Wformat' is specified, do not warn about zero-length 3316 formats. The C standard specifies that zero-length formats 3317 are allowed. 3318 3319 '-Wformat=2' 3320 Enable '-Wformat' plus additional format checks. Currently 3321 equivalent to '-Wformat -Wformat-nonliteral -Wformat-security 3322 -Wformat-y2k'. 3323 3324 '-Wformat-nonliteral' 3325 If '-Wformat' is specified, also warn if the format string is 3326 not a string literal and so cannot be checked, unless the 3327 format function takes its format arguments as a 'va_list'. 3328 3329 '-Wformat-security' 3330 If '-Wformat' is specified, also warn about uses of format 3331 functions that represent possible security problems. At 3332 present, this warns about calls to 'printf' and 'scanf' 3333 functions where the format string is not a string literal and 3334 there are no format arguments, as in 'printf (foo);'. This 3335 may be a security hole if the format string came from 3336 untrusted input and contains '%n'. (This is currently a 3337 subset of what '-Wformat-nonliteral' warns about, but in 3338 future warnings may be added to '-Wformat-security' that are 3339 not included in '-Wformat-nonliteral'.) 3340 3341 '-Wformat-y2k' 3342 If '-Wformat' is specified, also warn about 'strftime' formats 3343 that may yield only a two-digit year. 3344 3345 '-Wnonnull' 3346 Warn about passing a null pointer for arguments marked as requiring 3347 a non-null value by the 'nonnull' function attribute. 3348 3349 '-Wnonnull' is included in '-Wall' and '-Wformat'. It can be 3350 disabled with the '-Wno-nonnull' option. 3351 3352 '-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3353 Warn about uninitialized variables that are initialized with 3354 themselves. Note this option can only be used with the 3355 '-Wuninitialized' option. 3356 3357 For example, GCC warns about 'i' being uninitialized in the 3358 following snippet only when '-Winit-self' has been specified: 3359 int f() 3360 { 3361 int i = i; 3362 return i; 3363 } 3364 3365 This warning is enabled by '-Wall' in C++. 3366 3367 '-Wimplicit-int (C and Objective-C only)' 3368 Warn when a declaration does not specify a type. This warning is 3369 enabled by '-Wall'. 3370 3371 '-Wimplicit-function-declaration (C and Objective-C only)' 3372 Give a warning whenever a function is used before being declared. 3373 In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled 3374 by default and it is made into an error by '-pedantic-errors'. 3375 This warning is also enabled by '-Wall'. 3376 3377 '-Wimplicit (C and Objective-C only)' 3378 Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'. 3379 This warning is enabled by '-Wall'. 3380 3381 '-Wignored-qualifiers (C and C++ only)' 3382 Warn if the return type of a function has a type qualifier such as 3383 'const'. For ISO C such a type qualifier has no effect, since the 3384 value returned by a function is not an lvalue. For C++, the 3385 warning is only emitted for scalar types or 'void'. ISO C 3386 prohibits qualified 'void' return types on function definitions, so 3387 such return types always receive a warning even without this 3388 option. 3389 3390 This warning is also enabled by '-Wextra'. 3391 3392 '-Wmain' 3393 Warn if the type of 'main' is suspicious. 'main' should be a 3394 function with external linkage, returning int, taking either zero 3395 arguments, two, or three arguments of appropriate types. This 3396 warning is enabled by default in C++ and is enabled by either 3397 '-Wall' or '-Wpedantic'. 3398 3399 '-Wmissing-braces' 3400 Warn if an aggregate or union initializer is not fully bracketed. 3401 In the following example, the initializer for 'a' is not fully 3402 bracketed, but that for 'b' is fully bracketed. This warning is 3403 enabled by '-Wall' in C. 3404 3405 int a[2][2] = { 0, 1, 2, 3 }; 3406 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3407 3408 This warning is enabled by '-Wall'. 3409 3410 '-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3411 Warn if a user-supplied include directory does not exist. 3412 3413 '-Wparentheses' 3414 Warn if parentheses are omitted in certain contexts, such as when 3415 there is an assignment in a context where a truth value is 3416 expected, or when operators are nested whose precedence people 3417 often get confused about. 3418 3419 Also warn if a comparison like 'x<=y<=z' appears; this is 3420 equivalent to '(x<=y ? 1 : 0) <= z', which is a different 3421 interpretation from that of ordinary mathematical notation. 3422 3423 Also warn about constructions where there may be confusion to which 3424 'if' statement an 'else' branch belongs. Here is an example of 3425 such a case: 3426 3427 { 3428 if (a) 3429 if (b) 3430 foo (); 3431 else 3432 bar (); 3433 } 3434 3435 In C/C++, every 'else' branch belongs to the innermost possible 3436 'if' statement, which in this example is 'if (b)'. This is often 3437 not what the programmer expected, as illustrated in the above 3438 example by indentation the programmer chose. When there is the 3439 potential for this confusion, GCC issues a warning when this flag 3440 is specified. To eliminate the warning, add explicit braces around 3441 the innermost 'if' statement so there is no way the 'else' can 3442 belong to the enclosing 'if'. The resulting code looks like this: 3443 3444 { 3445 if (a) 3446 { 3447 if (b) 3448 foo (); 3449 else 3450 bar (); 3451 } 3452 } 3453 3454 Also warn for dangerous uses of the GNU extension to '?:' with 3455 omitted middle operand. When the condition in the '?': operator is 3456 a boolean expression, the omitted value is always 1. Often 3457 programmers expect it to be a value computed inside the conditional 3458 expression instead. 3459 3460 This warning is enabled by '-Wall'. 3461 3462 '-Wsequence-point' 3463 Warn about code that may have undefined semantics because of 3464 violations of sequence point rules in the C and C++ standards. 3465 3466 The C and C++ standards define the order in which expressions in a 3467 C/C++ program are evaluated in terms of "sequence points", which 3468 represent a partial ordering between the execution of parts of the 3469 program: those executed before the sequence point, and those 3470 executed after it. These occur after the evaluation of a full 3471 expression (one which is not part of a larger expression), after 3472 the evaluation of the first operand of a '&&', '||', '? :' or ',' 3473 (comma) operator, before a function is called (but after the 3474 evaluation of its arguments and the expression denoting the called 3475 function), and in certain other places. Other than as expressed by 3476 the sequence point rules, the order of evaluation of subexpressions 3477 of an expression is not specified. All these rules describe only a 3478 partial order rather than a total order, since, for example, if two 3479 functions are called within one expression with no sequence point 3480 between them, the order in which the functions are called is not 3481 specified. However, the standards committee have ruled that 3482 function calls do not overlap. 3483 3484 It is not specified when between sequence points modifications to 3485 the values of objects take effect. Programs whose behavior depends 3486 on this have undefined behavior; the C and C++ standards specify 3487 that "Between the previous and next sequence point an object shall 3488 have its stored value modified at most once by the evaluation of an 3489 expression. Furthermore, the prior value shall be read only to 3490 determine the value to be stored.". If a program breaks these 3491 rules, the results on any particular implementation are entirely 3492 unpredictable. 3493 3494 Examples of code with undefined behavior are 'a = a++;', 'a[n] = 3495 b[n++]' and 'a[i++] = i;'. Some more complicated cases are not 3496 diagnosed by this option, and it may give an occasional false 3497 positive result, but in general it has been found fairly effective 3498 at detecting this sort of problem in programs. 3499 3500 The standard is worded confusingly, therefore there is some debate 3501 over the precise meaning of the sequence point rules in subtle 3502 cases. Links to discussions of the problem, including proposed 3503 formal definitions, may be found on the GCC readings page, at 3504 <http://gcc.gnu.org/readings.html>. 3505 3506 This warning is enabled by '-Wall' for C and C++. 3507 3508 '-Wno-return-local-addr' 3509 Do not warn about returning a pointer (or in C++, a reference) to a 3510 variable that goes out of scope after the function returns. 3511 3512 '-Wreturn-type' 3513 Warn whenever a function is defined with a return type that 3514 defaults to 'int'. Also warn about any 'return' statement with no 3515 return value in a function whose return type is not 'void' (falling 3516 off the end of the function body is considered returning without a 3517 value), and about a 'return' statement with an expression in a 3518 function whose return type is 'void'. 3519 3520 For C++, a function without return type always produces a 3521 diagnostic message, even when '-Wno-return-type' is specified. The 3522 only exceptions are 'main' and functions defined in system headers. 3523 3524 This warning is enabled by '-Wall'. 3525 3526 '-Wswitch' 3527 Warn whenever a 'switch' statement has an index of enumerated type 3528 and lacks a 'case' for one or more of the named codes of that 3529 enumeration. (The presence of a 'default' label prevents this 3530 warning.) 'case' labels outside the enumeration range also provoke 3531 warnings when this option is used (even if there is a 'default' 3532 label). This warning is enabled by '-Wall'. 3533 3534 '-Wswitch-default' 3535 Warn whenever a 'switch' statement does not have a 'default' case. 3536 3537 '-Wswitch-enum' 3538 Warn whenever a 'switch' statement has an index of enumerated type 3539 and lacks a 'case' for one or more of the named codes of that 3540 enumeration. 'case' labels outside the enumeration range also 3541 provoke warnings when this option is used. The only difference 3542 between '-Wswitch' and this option is that this option gives a 3543 warning about an omitted enumeration code even if there is a 3544 'default' label. 3545 3546 '-Wsync-nand (C and C++ only)' 3547 Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch' 3548 built-in functions are used. These functions changed semantics in 3549 GCC 4.4. 3550 3551 '-Wtrigraphs' 3552 Warn if any trigraphs are encountered that might change the meaning 3553 of the program (trigraphs within comments are not warned about). 3554 This warning is enabled by '-Wall'. 3555 3556 '-Wunused-but-set-parameter' 3557 Warn whenever a function parameter is assigned to, but otherwise 3558 unused (aside from its declaration). 3559 3560 To suppress this warning use the 'unused' attribute (*note Variable 3561 Attributes::). 3562 3563 This warning is also enabled by '-Wunused' together with '-Wextra'. 3564 3565 '-Wunused-but-set-variable' 3566 Warn whenever a local variable is assigned to, but otherwise unused 3567 (aside from its declaration). This warning is enabled by '-Wall'. 3568 3569 To suppress this warning use the 'unused' attribute (*note Variable 3570 Attributes::). 3571 3572 This warning is also enabled by '-Wunused', which is enabled by 3573 '-Wall'. 3574 3575 '-Wunused-function' 3576 Warn whenever a static function is declared but not defined or a 3577 non-inline static function is unused. This warning is enabled by 3578 '-Wall'. 3579 3580 '-Wunused-label' 3581 Warn whenever a label is declared but not used. This warning is 3582 enabled by '-Wall'. 3583 3584 To suppress this warning use the 'unused' attribute (*note Variable 3585 Attributes::). 3586 3587 '-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)' 3588 Warn when a typedef locally defined in a function is not used. 3589 This warning is enabled by '-Wall'. 3590 3591 '-Wunused-parameter' 3592 Warn whenever a function parameter is unused aside from its 3593 declaration. 3594 3595 To suppress this warning use the 'unused' attribute (*note Variable 3596 Attributes::). 3597 3598 '-Wno-unused-result' 3599 Do not warn if a caller of a function marked with attribute 3600 'warn_unused_result' (*note Function Attributes::) does not use its 3601 return value. The default is '-Wunused-result'. 3602 3603 '-Wunused-variable' 3604 Warn whenever a local variable or non-constant static variable is 3605 unused aside from its declaration. This warning is enabled by 3606 '-Wall'. 3607 3608 To suppress this warning use the 'unused' attribute (*note Variable 3609 Attributes::). 3610 3611 '-Wunused-value' 3612 Warn whenever a statement computes a result that is explicitly not 3613 used. To suppress this warning cast the unused expression to 3614 'void'. This includes an expression-statement or the left-hand 3615 side of a comma expression that contains no side effects. For 3616 example, an expression such as 'x[i,j]' causes a warning, while 3617 'x[(void)i,j]' does not. 3618 3619 This warning is enabled by '-Wall'. 3620 3621 '-Wunused' 3622 All the above '-Wunused' options combined. 3623 3624 In order to get a warning about an unused function parameter, you 3625 must either specify '-Wextra -Wunused' (note that '-Wall' implies 3626 '-Wunused'), or separately specify '-Wunused-parameter'. 3627 3628 '-Wuninitialized' 3629 Warn if an automatic variable is used without first being 3630 initialized or if a variable may be clobbered by a 'setjmp' call. 3631 In C++, warn if a non-static reference or non-static 'const' member 3632 appears in a class without constructors. 3633 3634 If you want to warn about code that uses the uninitialized value of 3635 the variable in its own initializer, use the '-Winit-self' option. 3636 3637 These warnings occur for individual uninitialized or clobbered 3638 elements of structure, union or array variables as well as for 3639 variables that are uninitialized or clobbered as a whole. They do 3640 not occur for variables or elements declared 'volatile'. Because 3641 these warnings depend on optimization, the exact variables or 3642 elements for which there are warnings depends on the precise 3643 optimization options and version of GCC used. 3644 3645 Note that there may be no warning about a variable that is used 3646 only to compute a value that itself is never used, because such 3647 computations may be deleted by data flow analysis before the 3648 warnings are printed. 3649 3650 '-Wmaybe-uninitialized' 3651 For an automatic variable, if there exists a path from the function 3652 entry to a use of the variable that is initialized, but there exist 3653 some other paths for which the variable is not initialized, the 3654 compiler emits a warning if it cannot prove the uninitialized paths 3655 are not executed at run time. These warnings are made optional 3656 because GCC is not smart enough to see all the reasons why the code 3657 might be correct in spite of appearing to have an error. Here is 3658 one example of how this can happen: 3659 3660 { 3661 int x; 3662 switch (y) 3663 { 3664 case 1: x = 1; 3665 break; 3666 case 2: x = 4; 3667 break; 3668 case 3: x = 5; 3669 } 3670 foo (x); 3671 } 3672 3673 If the value of 'y' is always 1, 2 or 3, then 'x' is always 3674 initialized, but GCC doesn't know this. To suppress the warning, 3675 you need to provide a default case with assert(0) or similar code. 3676 3677 This option also warns when a non-volatile automatic variable might 3678 be changed by a call to 'longjmp'. These warnings as well are 3679 possible only in optimizing compilation. 3680 3681 The compiler sees only the calls to 'setjmp'. It cannot know where 3682 'longjmp' will be called; in fact, a signal handler could call it 3683 at any point in the code. As a result, you may get a warning even 3684 when there is in fact no problem because 'longjmp' cannot in fact 3685 be called at the place that would cause a problem. 3686 3687 Some spurious warnings can be avoided if you declare all the 3688 functions you use that never return as 'noreturn'. *Note Function 3689 Attributes::. 3690 3691 This warning is enabled by '-Wall' or '-Wextra'. 3692 3693 '-Wunknown-pragmas' 3694 Warn when a '#pragma' directive is encountered that is not 3695 understood by GCC. If this command-line option is used, warnings 3696 are even issued for unknown pragmas in system header files. This 3697 is not the case if the warnings are only enabled by the '-Wall' 3698 command-line option. 3699 3700 '-Wno-pragmas' 3701 Do not warn about misuses of pragmas, such as incorrect parameters, 3702 invalid syntax, or conflicts between pragmas. See also 3703 '-Wunknown-pragmas'. 3704 3705 '-Wstrict-aliasing' 3706 This option is only active when '-fstrict-aliasing' is active. It 3707 warns about code that might break the strict aliasing rules that 3708 the compiler is using for optimization. The warning does not catch 3709 all cases, but does attempt to catch the more common pitfalls. It 3710 is included in '-Wall'. It is equivalent to '-Wstrict-aliasing=3' 3711 3712 '-Wstrict-aliasing=n' 3713 This option is only active when '-fstrict-aliasing' is active. It 3714 warns about code that might break the strict aliasing rules that 3715 the compiler is using for optimization. Higher levels correspond 3716 to higher accuracy (fewer false positives). Higher levels also 3717 correspond to more effort, similar to the way '-O' works. 3718 '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'. 3719 3720 Level 1: Most aggressive, quick, least accurate. Possibly useful 3721 when higher levels do not warn but '-fstrict-aliasing' still breaks 3722 the code, as it has very few false negatives. However, it has many 3723 false positives. Warns for all pointer conversions between 3724 possibly incompatible types, even if never dereferenced. Runs in 3725 the front end only. 3726 3727 Level 2: Aggressive, quick, not too precise. May still have many 3728 false positives (not as many as level 1 though), and few false 3729 negatives (but possibly more than level 1). Unlike level 1, it 3730 only warns when an address is taken. Warns about incomplete types. 3731 Runs in the front end only. 3732 3733 Level 3 (default for '-Wstrict-aliasing'): Should have very few 3734 false positives and few false negatives. Slightly slower than 3735 levels 1 or 2 when optimization is enabled. Takes care of the 3736 common pun+dereference pattern in the front end: 3737 '*(int*)&some_float'. If optimization is enabled, it also runs in 3738 the back end, where it deals with multiple statement cases using 3739 flow-sensitive points-to information. Only warns when the 3740 converted pointer is dereferenced. Does not warn about incomplete 3741 types. 3742 3743 '-Wstrict-overflow' 3744 '-Wstrict-overflow=N' 3745 This option is only active when '-fstrict-overflow' is active. It 3746 warns about cases where the compiler optimizes based on the 3747 assumption that signed overflow does not occur. Note that it does 3748 not warn about all cases where the code might overflow: it only 3749 warns about cases where the compiler implements some optimization. 3750 Thus this warning depends on the optimization level. 3751 3752 An optimization that assumes that signed overflow does not occur is 3753 perfectly safe if the values of the variables involved are such 3754 that overflow never does, in fact, occur. Therefore this warning 3755 can easily give a false positive: a warning about code that is not 3756 actually a problem. To help focus on important issues, several 3757 warning levels are defined. No warnings are issued for the use of 3758 undefined signed overflow when estimating how many iterations a 3759 loop requires, in particular when determining whether a loop will 3760 be executed at all. 3761 3762 '-Wstrict-overflow=1' 3763 Warn about cases that are both questionable and easy to avoid. 3764 For example, with '-fstrict-overflow', the compiler simplifies 3765 'x + 1 > x' to '1'. This level of '-Wstrict-overflow' is 3766 enabled by '-Wall'; higher levels are not, and must be 3767 explicitly requested. 3768 3769 '-Wstrict-overflow=2' 3770 Also warn about other cases where a comparison is simplified 3771 to a constant. For example: 'abs (x) >= 0'. This can only be 3772 simplified when '-fstrict-overflow' is in effect, because 'abs 3773 (INT_MIN)' overflows to 'INT_MIN', which is less than zero. 3774 '-Wstrict-overflow' (with no level) is the same as 3775 '-Wstrict-overflow=2'. 3776 3777 '-Wstrict-overflow=3' 3778 Also warn about other cases where a comparison is simplified. 3779 For example: 'x + 1 > 1' is simplified to 'x > 0'. 3780 3781 '-Wstrict-overflow=4' 3782 Also warn about other simplifications not covered by the above 3783 cases. For example: '(x * 10) / 5' is simplified to 'x * 2'. 3784 3785 '-Wstrict-overflow=5' 3786 Also warn about cases where the compiler reduces the magnitude 3787 of a constant involved in a comparison. For example: 'x + 2 > 3788 y' is simplified to 'x + 1 >= y'. This is reported only at 3789 the highest warning level because this simplification applies 3790 to many comparisons, so this warning level gives a very large 3791 number of false positives. 3792 3793 '-Wsuggest-attribute=[pure|const|noreturn|format]' 3794 Warn for cases where adding an attribute may be beneficial. The 3795 attributes currently supported are listed below. 3796 3797 '-Wsuggest-attribute=pure' 3798 '-Wsuggest-attribute=const' 3799 '-Wsuggest-attribute=noreturn' 3800 3801 Warn about functions that might be candidates for attributes 3802 'pure', 'const' or 'noreturn'. The compiler only warns for 3803 functions visible in other compilation units or (in the case 3804 of 'pure' and 'const') if it cannot prove that the function 3805 returns normally. A function returns normally if it doesn't 3806 contain an infinite loop or return abnormally by throwing, 3807 calling 'abort()' or trapping. This analysis requires option 3808 '-fipa-pure-const', which is enabled by default at '-O' and 3809 higher. Higher optimization levels improve the accuracy of 3810 the analysis. 3811 3812 '-Wsuggest-attribute=format' 3813 '-Wmissing-format-attribute' 3814 3815 Warn about function pointers that might be candidates for 3816 'format' attributes. Note these are only possible candidates, 3817 not absolute ones. GCC guesses that function pointers with 3818 'format' attributes that are used in assignment, 3819 initialization, parameter passing or return statements should 3820 have a corresponding 'format' attribute in the resulting type. 3821 I.e. the left-hand side of the assignment or initialization, 3822 the type of the parameter variable, or the return type of the 3823 containing function respectively should also have a 'format' 3824 attribute to avoid the warning. 3825 3826 GCC also warns about function definitions that might be 3827 candidates for 'format' attributes. Again, these are only 3828 possible candidates. GCC guesses that 'format' attributes 3829 might be appropriate for any function that calls a function 3830 like 'vprintf' or 'vscanf', but this might not always be the 3831 case, and some functions for which 'format' attributes are 3832 appropriate may not be detected. 3833 3834 '-Warray-bounds' 3835 This option is only active when '-ftree-vrp' is active (default for 3836 '-O2' and above). It warns about subscripts to arrays that are 3837 always out of bounds. This warning is enabled by '-Wall'. 3838 3839 '-Wno-div-by-zero' 3840 Do not warn about compile-time integer division by zero. 3841 Floating-point division by zero is not warned about, as it can be a 3842 legitimate way of obtaining infinities and NaNs. 3843 3844 '-Wsystem-headers' 3845 Print warning messages for constructs found in system header files. 3846 Warnings from system headers are normally suppressed, on the 3847 assumption that they usually do not indicate real problems and 3848 would only make the compiler output harder to read. Using this 3849 command-line option tells GCC to emit warnings from system headers 3850 as if they occurred in user code. However, note that using '-Wall' 3851 in conjunction with this option does _not_ warn about unknown 3852 pragmas in system headers--for that, '-Wunknown-pragmas' must also 3853 be used. 3854 3855 '-Wtrampolines' 3856 Warn about trampolines generated for pointers to nested functions. 3857 3858 A trampoline is a small piece of data or code that is created at 3859 run time on the stack when the address of a nested function is 3860 taken, and is used to call the nested function indirectly. For 3861 some targets, it is made up of data only and thus requires no 3862 special treatment. But, for most targets, it is made up of code 3863 and thus requires the stack to be made executable in order for the 3864 program to work properly. 3865 3866 '-Wfloat-equal' 3867 Warn if floating-point values are used in equality comparisons. 3868 3869 The idea behind this is that sometimes it is convenient (for the 3870 programmer) to consider floating-point values as approximations to 3871 infinitely precise real numbers. If you are doing this, then you 3872 need to compute (by analyzing the code, or in some other way) the 3873 maximum or likely maximum error that the computation introduces, 3874 and allow for it when performing comparisons (and when producing 3875 output, but that's a different problem). In particular, instead of 3876 testing for equality, you should check to see whether the two 3877 values have ranges that overlap; and this is done with the 3878 relational operators, so equality comparisons are probably 3879 mistaken. 3880 3881 '-Wtraditional (C and Objective-C only)' 3882 Warn about certain constructs that behave differently in 3883 traditional and ISO C. Also warn about ISO C constructs that have 3884 no traditional C equivalent, and/or problematic constructs that 3885 should be avoided. 3886 3887 * Macro parameters that appear within string literals in the 3888 macro body. In traditional C macro replacement takes place 3889 within string literals, but in ISO C it does not. 3890 3891 * In traditional C, some preprocessor directives did not exist. 3892 Traditional preprocessors only considered a line to be a 3893 directive if the '#' appeared in column 1 on the line. 3894 Therefore '-Wtraditional' warns about directives that 3895 traditional C understands but ignores because the '#' does not 3896 appear as the first character on the line. It also suggests 3897 you hide directives like '#pragma' not understood by 3898 traditional C by indenting them. Some traditional 3899 implementations do not recognize '#elif', so this option 3900 suggests avoiding it altogether. 3901 3902 * A function-like macro that appears without arguments. 3903 3904 * The unary plus operator. 3905 3906 * The 'U' integer constant suffix, or the 'F' or 'L' 3907 floating-point constant suffixes. (Traditional C does support 3908 the 'L' suffix on integer constants.) Note, these suffixes 3909 appear in macros defined in the system headers of most modern 3910 systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'. Use 3911 of these macros in user code might normally lead to spurious 3912 warnings, however GCC's integrated preprocessor has enough 3913 context to avoid warning in these cases. 3914 3915 * A function declared external in one block and then used after 3916 the end of the block. 3917 3918 * A 'switch' statement has an operand of type 'long'. 3919 3920 * A non-'static' function declaration follows a 'static' one. 3921 This construct is not accepted by some traditional C 3922 compilers. 3923 3924 * The ISO type of an integer constant has a different width or 3925 signedness from its traditional type. This warning is only 3926 issued if the base of the constant is ten. I.e. hexadecimal 3927 or octal values, which typically represent bit patterns, are 3928 not warned about. 3929 3930 * Usage of ISO string concatenation is detected. 3931 3932 * Initialization of automatic aggregates. 3933 3934 * Identifier conflicts with labels. Traditional C lacks a 3935 separate namespace for labels. 3936 3937 * Initialization of unions. If the initializer is zero, the 3938 warning is omitted. This is done under the assumption that 3939 the zero initializer in user code appears conditioned on e.g. 3940 '__STDC__' to avoid missing initializer warnings and relies on 3941 default initialization to zero in the traditional C case. 3942 3943 * Conversions by prototypes between fixed/floating-point values 3944 and vice versa. The absence of these prototypes when 3945 compiling with traditional C causes serious problems. This is 3946 a subset of the possible conversion warnings; for the full set 3947 use '-Wtraditional-conversion'. 3948 3949 * Use of ISO C style function definitions. This warning 3950 intentionally is _not_ issued for prototype declarations or 3951 variadic functions because these ISO C features appear in your 3952 code when using libiberty's traditional C compatibility 3953 macros, 'PARAMS' and 'VPARAMS'. This warning is also bypassed 3954 for nested functions because that feature is already a GCC 3955 extension and thus not relevant to traditional C 3956 compatibility. 3957 3958 '-Wtraditional-conversion (C and Objective-C only)' 3959 Warn if a prototype causes a type conversion that is different from 3960 what would happen to the same argument in the absence of a 3961 prototype. This includes conversions of fixed point to floating 3962 and vice versa, and conversions changing the width or signedness of 3963 a fixed-point argument except when the same as the default 3964 promotion. 3965 3966 '-Wdeclaration-after-statement (C and Objective-C only)' 3967 Warn when a declaration is found after a statement in a block. 3968 This construct, known from C++, was introduced with ISO C99 and is 3969 by default allowed in GCC. It is not supported by ISO C90 and was 3970 not supported by GCC versions before GCC 3.0. *Note Mixed 3971 Declarations::. 3972 3973 '-Wundef' 3974 Warn if an undefined identifier is evaluated in an '#if' directive. 3975 3976 '-Wno-endif-labels' 3977 Do not warn whenever an '#else' or an '#endif' are followed by 3978 text. 3979 3980 '-Wshadow' 3981 Warn whenever a local variable or type declaration shadows another 3982 variable, parameter, type, or class member (in C++), or whenever a 3983 built-in function is shadowed. Note that in C++, the compiler 3984 warns if a local variable shadows an explicit typedef, but not if 3985 it shadows a struct/class/enum. 3986 3987 '-Wlarger-than=LEN' 3988 Warn whenever an object of larger than LEN bytes is defined. 3989 3990 '-Wframe-larger-than=LEN' 3991 Warn if the size of a function frame is larger than LEN bytes. The 3992 computation done to determine the stack frame size is approximate 3993 and not conservative. The actual requirements may be somewhat 3994 greater than LEN even if you do not get a warning. In addition, 3995 any space allocated via 'alloca', variable-length arrays, or 3996 related constructs is not included by the compiler when determining 3997 whether or not to issue a warning. 3998 3999 '-Wno-free-nonheap-object' 4000 Do not warn when attempting to free an object that was not 4001 allocated on the heap. 4002 4003 '-Wstack-usage=LEN' 4004 Warn if the stack usage of a function might be larger than LEN 4005 bytes. The computation done to determine the stack usage is 4006 conservative. Any space allocated via 'alloca', variable-length 4007 arrays, or related constructs is included by the compiler when 4008 determining whether or not to issue a warning. 4009 4010 The message is in keeping with the output of '-fstack-usage'. 4011 4012 * If the stack usage is fully static but exceeds the specified 4013 amount, it's: 4014 4015 warning: stack usage is 1120 bytes 4016 * If the stack usage is (partly) dynamic but bounded, it's: 4017 4018 warning: stack usage might be 1648 bytes 4019 * If the stack usage is (partly) dynamic and not bounded, it's: 4020 4021 warning: stack usage might be unbounded 4022 4023 '-Wunsafe-loop-optimizations' 4024 Warn if the loop cannot be optimized because the compiler cannot 4025 assume anything on the bounds of the loop indices. With 4026 '-funsafe-loop-optimizations' warn if the compiler makes such 4027 assumptions. 4028 4029 '-Wno-pedantic-ms-format (MinGW targets only)' 4030 When used in combination with '-Wformat' and '-pedantic' without 4031 GNU extensions, this option disables the warnings about non-ISO 4032 'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I' 4033 used on Windows targets, which depend on the MS runtime. 4034 4035 '-Wpointer-arith' 4036 Warn about anything that depends on the "size of" a function type 4037 or of 'void'. GNU C assigns these types a size of 1, for 4038 convenience in calculations with 'void *' pointers and pointers to 4039 functions. In C++, warn also when an arithmetic operation involves 4040 'NULL'. This warning is also enabled by '-Wpedantic'. 4041 4042 '-Wtype-limits' 4043 Warn if a comparison is always true or always false due to the 4044 limited range of the data type, but do not warn for constant 4045 expressions. For example, warn if an unsigned variable is compared 4046 against zero with '<' or '>='. This warning is also enabled by 4047 '-Wextra'. 4048 4049 '-Wbad-function-cast (C and Objective-C only)' 4050 Warn whenever a function call is cast to a non-matching type. For 4051 example, warn if 'int malloc()' is cast to 'anything *'. 4052 4053 '-Wc++-compat (C and Objective-C only)' 4054 Warn about ISO C constructs that are outside of the common subset 4055 of ISO C and ISO C++, e.g. request for implicit conversion from 4056 'void *' to a pointer to non-'void' type. 4057 4058 '-Wc++11-compat (C++ and Objective-C++ only)' 4059 Warn about C++ constructs whose meaning differs between ISO C++ 4060 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are 4061 keywords in ISO C++ 2011. This warning turns on '-Wnarrowing' and 4062 is enabled by '-Wall'. 4063 4064 '-Wcast-qual' 4065 Warn whenever a pointer is cast so as to remove a type qualifier 4066 from the target type. For example, warn if a 'const char *' is 4067 cast to an ordinary 'char *'. 4068 4069 Also warn when making a cast that introduces a type qualifier in an 4070 unsafe way. For example, casting 'char **' to 'const char **' is 4071 unsafe, as in this example: 4072 4073 /* p is char ** value. */ 4074 const char **q = (const char **) p; 4075 /* Assignment of readonly string to const char * is OK. */ 4076 *q = "string"; 4077 /* Now char** pointer points to read-only memory. */ 4078 **p = 'b'; 4079 4080 '-Wcast-align' 4081 Warn whenever a pointer is cast such that the required alignment of 4082 the target is increased. For example, warn if a 'char *' is cast 4083 to an 'int *' on machines where integers can only be accessed at 4084 two- or four-byte boundaries. 4085 4086 '-Wwrite-strings' 4087 When compiling C, give string constants the type 'const 4088 char[LENGTH]' so that copying the address of one into a non-'const' 4089 'char *' pointer produces a warning. These warnings help you find 4090 at compile time code that can try to write into a string constant, 4091 but only if you have been very careful about using 'const' in 4092 declarations and prototypes. Otherwise, it is just a nuisance. 4093 This is why we did not make '-Wall' request these warnings. 4094 4095 When compiling C++, warn about the deprecated conversion from 4096 string literals to 'char *'. This warning is enabled by default 4097 for C++ programs. 4098 4099 '-Wclobbered' 4100 Warn for variables that might be changed by 'longjmp' or 'vfork'. 4101 This warning is also enabled by '-Wextra'. 4102 4103 '-Wconversion' 4104 Warn for implicit conversions that may alter a value. This 4105 includes conversions between real and integer, like 'abs (x)' when 4106 'x' is 'double'; conversions between signed and unsigned, like 4107 'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf 4108 (M_PI)'. Do not warn for explicit casts like 'abs ((int) x)' and 4109 'ui = (unsigned) -1', or if the value is not changed by the 4110 conversion like in 'abs (2.0)'. Warnings about conversions between 4111 signed and unsigned integers can be disabled by using 4112 '-Wno-sign-conversion'. 4113 4114 For C++, also warn for confusing overload resolution for 4115 user-defined conversions; and conversions that never use a type 4116 conversion operator: conversions to 'void', the same type, a base 4117 class or a reference to them. Warnings about conversions between 4118 signed and unsigned integers are disabled by default in C++ unless 4119 '-Wsign-conversion' is explicitly enabled. 4120 4121 '-Wno-conversion-null (C++ and Objective-C++ only)' 4122 Do not warn for conversions between 'NULL' and non-pointer types. 4123 '-Wconversion-null' is enabled by default. 4124 4125 '-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)' 4126 Warn when a literal '0' is used as null pointer constant. This can 4127 be useful to facilitate the conversion to 'nullptr' in C++11. 4128 4129 '-Wuseless-cast (C++ and Objective-C++ only)' 4130 Warn when an expression is casted to its own type. 4131 4132 '-Wempty-body' 4133 Warn if an empty body occurs in an 'if', 'else' or 'do while' 4134 statement. This warning is also enabled by '-Wextra'. 4135 4136 '-Wenum-compare' 4137 Warn about a comparison between values of different enumerated 4138 types. In C++ enumeral mismatches in conditional expressions are 4139 also diagnosed and the warning is enabled by default. In C this 4140 warning is enabled by '-Wall'. 4141 4142 '-Wjump-misses-init (C, Objective-C only)' 4143 Warn if a 'goto' statement or a 'switch' statement jumps forward 4144 across the initialization of a variable, or jumps backward to a 4145 label after the variable has been initialized. This only warns 4146 about variables that are initialized when they are declared. This 4147 warning is only supported for C and Objective-C; in C++ this sort 4148 of branch is an error in any case. 4149 4150 '-Wjump-misses-init' is included in '-Wc++-compat'. It can be 4151 disabled with the '-Wno-jump-misses-init' option. 4152 4153 '-Wsign-compare' 4154 Warn when a comparison between signed and unsigned values could 4155 produce an incorrect result when the signed value is converted to 4156 unsigned. This warning is also enabled by '-Wextra'; to get the 4157 other warnings of '-Wextra' without this warning, use '-Wextra 4158 -Wno-sign-compare'. 4159 4160 '-Wsign-conversion' 4161 Warn for implicit conversions that may change the sign of an 4162 integer value, like assigning a signed integer expression to an 4163 unsigned integer variable. An explicit cast silences the warning. 4164 In C, this option is enabled also by '-Wconversion'. 4165 4166 '-Wsizeof-pointer-memaccess' 4167 Warn for suspicious length parameters to certain string and memory 4168 built-in functions if the argument uses 'sizeof'. This warning 4169 warns e.g. about 'memset (ptr, 0, sizeof (ptr));' if 'ptr' is not 4170 an array, but a pointer, and suggests a possible fix, or about 4171 'memcpy (&foo, ptr, sizeof (&foo));'. This warning is enabled by 4172 '-Wall'. 4173 4174 '-Waddress' 4175 Warn about suspicious uses of memory addresses. These include 4176 using the address of a function in a conditional expression, such 4177 as 'void func(void); if (func)', and comparisons against the memory 4178 address of a string literal, such as 'if (x == "abc")'. Such uses 4179 typically indicate a programmer error: the address of a function 4180 always evaluates to true, so their use in a conditional usually 4181 indicate that the programmer forgot the parentheses in a function 4182 call; and comparisons against string literals result in unspecified 4183 behavior and are not portable in C, so they usually indicate that 4184 the programmer intended to use 'strcmp'. This warning is enabled 4185 by '-Wall'. 4186 4187 '-Wlogical-op' 4188 Warn about suspicious uses of logical operators in expressions. 4189 This includes using logical operators in contexts where a bit-wise 4190 operator is likely to be expected. 4191 4192 '-Waggregate-return' 4193 Warn if any functions that return structures or unions are defined 4194 or called. (In languages where you can return an array, this also 4195 elicits a warning.) 4196 4197 '-Wno-aggressive-loop-optimizations' 4198 Warn if in a loop with constant number of iterations the compiler 4199 detects undefined behavior in some statement during one or more of 4200 the iterations. 4201 4202 '-Wno-attributes' 4203 Do not warn if an unexpected '__attribute__' is used, such as 4204 unrecognized attributes, function attributes applied to variables, 4205 etc. This does not stop errors for incorrect use of supported 4206 attributes. 4207 4208 '-Wno-builtin-macro-redefined' 4209 Do not warn if certain built-in macros are redefined. This 4210 suppresses warnings for redefinition of '__TIMESTAMP__', 4211 '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'. 4212 4213 '-Wstrict-prototypes (C and Objective-C only)' 4214 Warn if a function is declared or defined without specifying the 4215 argument types. (An old-style function definition is permitted 4216 without a warning if preceded by a declaration that specifies the 4217 argument types.) 4218 4219 '-Wold-style-declaration (C and Objective-C only)' 4220 Warn for obsolescent usages, according to the C Standard, in a 4221 declaration. For example, warn if storage-class specifiers like 4222 'static' are not the first things in a declaration. This warning 4223 is also enabled by '-Wextra'. 4224 4225 '-Wold-style-definition (C and Objective-C only)' 4226 Warn if an old-style function definition is used. A warning is 4227 given even if there is a previous prototype. 4228 4229 '-Wmissing-parameter-type (C and Objective-C only)' 4230 A function parameter is declared without a type specifier in 4231 K&R-style functions: 4232 4233 void foo(bar) { } 4234 4235 This warning is also enabled by '-Wextra'. 4236 4237 '-Wmissing-prototypes (C and Objective-C only)' 4238 Warn if a global function is defined without a previous prototype 4239 declaration. This warning is issued even if the definition itself 4240 provides a prototype. Use this option to detect global functions 4241 that do not have a matching prototype declaration in a header file. 4242 This option is not valid for C++ because all function declarations 4243 provide prototypes and a non-matching declaration will declare an 4244 overload rather than conflict with an earlier declaration. Use 4245 '-Wmissing-declarations' to detect missing declarations in C++. 4246 4247 '-Wmissing-declarations' 4248 Warn if a global function is defined without a previous 4249 declaration. Do so even if the definition itself provides a 4250 prototype. Use this option to detect global functions that are not 4251 declared in header files. In C, no warnings are issued for 4252 functions with previous non-prototype declarations; use 4253 '-Wmissing-prototype' to detect missing prototypes. In C++, no 4254 warnings are issued for function templates, or for inline 4255 functions, or for functions in anonymous namespaces. 4256 4257 '-Wmissing-field-initializers' 4258 Warn if a structure's initializer has some fields missing. For 4259 example, the following code causes such a warning, because 'x.h' is 4260 implicitly zero: 4261 4262 struct s { int f, g, h; }; 4263 struct s x = { 3, 4 }; 4264 4265 This option does not warn about designated initializers, so the 4266 following modification does not trigger a warning: 4267 4268 struct s { int f, g, h; }; 4269 struct s x = { .f = 3, .g = 4 }; 4270 4271 This warning is included in '-Wextra'. To get other '-Wextra' 4272 warnings without this one, use '-Wextra 4273 -Wno-missing-field-initializers'. 4274 4275 '-Wno-multichar' 4276 Do not warn if a multicharacter constant (''FOOF'') is used. 4277 Usually they indicate a typo in the user's code, as they have 4278 implementation-defined values, and should not be used in portable 4279 code. 4280 4281 '-Wnormalized=<none|id|nfc|nfkc>' 4282 In ISO C and ISO C++, two identifiers are different if they are 4283 different sequences of characters. However, sometimes when 4284 characters outside the basic ASCII character set are used, you can 4285 have two different character sequences that look the same. To 4286 avoid confusion, the ISO 10646 standard sets out some 4287 "normalization rules" which when applied ensure that two sequences 4288 that look the same are turned into the same sequence. GCC can warn 4289 you if you are using identifiers that have not been normalized; 4290 this option controls that warning. 4291 4292 There are four levels of warning supported by GCC. The default is 4293 '-Wnormalized=nfc', which warns about any identifier that is not in 4294 the ISO 10646 "C" normalized form, "NFC". NFC is the recommended 4295 form for most uses. 4296 4297 Unfortunately, there are some characters allowed in identifiers by 4298 ISO C and ISO C++ that, when turned into NFC, are not allowed in 4299 identifiers. That is, there's no way to use these symbols in 4300 portable ISO C or C++ and have all your identifiers in NFC. 4301 '-Wnormalized=id' suppresses the warning for these characters. It 4302 is hoped that future versions of the standards involved will 4303 correct this, which is why this option is not the default. 4304 4305 You can switch the warning off for all characters by writing 4306 '-Wnormalized=none'. You should only do this if you are using some 4307 other normalization scheme (like "D"), because otherwise you can 4308 easily create bugs that are literally impossible to see. 4309 4310 Some characters in ISO 10646 have distinct meanings but look 4311 identical in some fonts or display methodologies, especially once 4312 formatting has been applied. For instance '\u207F', "SUPERSCRIPT 4313 LATIN SMALL LETTER N", displays just like a regular 'n' that has 4314 been placed in a superscript. ISO 10646 defines the "NFKC" 4315 normalization scheme to convert all these into a standard form as 4316 well, and GCC warns if your code is not in NFKC if you use 4317 '-Wnormalized=nfkc'. This warning is comparable to warning about 4318 every identifier that contains the letter O because it might be 4319 confused with the digit 0, and so is not the default, but may be 4320 useful as a local coding convention if the programming environment 4321 cannot be fixed to display these characters distinctly. 4322 4323 '-Wno-deprecated' 4324 Do not warn about usage of deprecated features. *Note Deprecated 4325 Features::. 4326 4327 '-Wno-deprecated-declarations' 4328 Do not warn about uses of functions (*note Function Attributes::), 4329 variables (*note Variable Attributes::), and types (*note Type 4330 Attributes::) marked as deprecated by using the 'deprecated' 4331 attribute. 4332 4333 '-Wno-overflow' 4334 Do not warn about compile-time overflow in constant expressions. 4335 4336 '-Woverride-init (C and Objective-C only)' 4337 Warn if an initialized field without side effects is overridden 4338 when using designated initializers (*note Designated Initializers: 4339 Designated Inits.). 4340 4341 This warning is included in '-Wextra'. To get other '-Wextra' 4342 warnings without this one, use '-Wextra -Wno-override-init'. 4343 4344 '-Wpacked' 4345 Warn if a structure is given the packed attribute, but the packed 4346 attribute has no effect on the layout or size of the structure. 4347 Such structures may be mis-aligned for little benefit. For 4348 instance, in this code, the variable 'f.x' in 'struct bar' is 4349 misaligned even though 'struct bar' does not itself have the packed 4350 attribute: 4351 4352 struct foo { 4353 int x; 4354 char a, b, c, d; 4355 } __attribute__((packed)); 4356 struct bar { 4357 char z; 4358 struct foo f; 4359 }; 4360 4361 '-Wpacked-bitfield-compat' 4362 The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on 4363 bit-fields of type 'char'. This has been fixed in GCC 4.4 but the 4364 change can lead to differences in the structure layout. GCC 4365 informs you when the offset of such a field has changed in GCC 4.4. 4366 For example there is no longer a 4-bit padding between field 'a' 4367 and 'b' in this structure: 4368 4369 struct foo 4370 { 4371 char a:4; 4372 char b:8; 4373 } __attribute__ ((packed)); 4374 4375 This warning is enabled by default. Use 4376 '-Wno-packed-bitfield-compat' to disable this warning. 4377 4378 '-Wpadded' 4379 Warn if padding is included in a structure, either to align an 4380 element of the structure or to align the whole structure. 4381 Sometimes when this happens it is possible to rearrange the fields 4382 of the structure to reduce the padding and so make the structure 4383 smaller. 4384 4385 '-Wredundant-decls' 4386 Warn if anything is declared more than once in the same scope, even 4387 in cases where multiple declaration is valid and changes nothing. 4388 4389 '-Wnested-externs (C and Objective-C only)' 4390 Warn if an 'extern' declaration is encountered within a function. 4391 4392 '-Wno-inherited-variadic-ctor' 4393 Suppress warnings about use of C++11 inheriting constructors when 4394 the base class inherited from has a C variadic constructor; the 4395 warning is on by default because the ellipsis is not inherited. 4396 4397 '-Winline' 4398 Warn if a function that is declared as inline cannot be inlined. 4399 Even with this option, the compiler does not warn about failures to 4400 inline functions declared in system headers. 4401 4402 The compiler uses a variety of heuristics to determine whether or 4403 not to inline a function. For example, the compiler takes into 4404 account the size of the function being inlined and the amount of 4405 inlining that has already been done in the current function. 4406 Therefore, seemingly insignificant changes in the source program 4407 can cause the warnings produced by '-Winline' to appear or 4408 disappear. 4409 4410 '-Wno-invalid-offsetof (C++ and Objective-C++ only)' 4411 Suppress warnings from applying the 'offsetof' macro to a non-POD 4412 type. According to the 1998 ISO C++ standard, applying 'offsetof' 4413 to a non-POD type is undefined. In existing C++ implementations, 4414 however, 'offsetof' typically gives meaningful results even when 4415 applied to certain kinds of non-POD types (such as a simple 4416 'struct' that fails to be a POD type only by virtue of having a 4417 constructor). This flag is for users who are aware that they are 4418 writing nonportable code and who have deliberately chosen to ignore 4419 the warning about it. 4420 4421 The restrictions on 'offsetof' may be relaxed in a future version 4422 of the C++ standard. 4423 4424 '-Wno-int-to-pointer-cast' 4425 Suppress warnings from casts to pointer type of an integer of a 4426 different size. In C++, casting to a pointer type of smaller size 4427 is an error. 'Wint-to-pointer-cast' is enabled by default. 4428 4429 '-Wno-pointer-to-int-cast (C and Objective-C only)' 4430 Suppress warnings from casts from a pointer to an integer type of a 4431 different size. 4432 4433 '-Winvalid-pch' 4434 Warn if a precompiled header (*note Precompiled Headers::) is found 4435 in the search path but can't be used. 4436 4437 '-Wlong-long' 4438 Warn if 'long long' type is used. This is enabled by either 4439 '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes. To 4440 inhibit the warning messages, use '-Wno-long-long'. 4441 4442 '-Wvariadic-macros' 4443 Warn if variadic macros are used in pedantic ISO C90 mode, or the 4444 GNU alternate syntax when in pedantic ISO C99 mode. This is 4445 default. To inhibit the warning messages, use 4446 '-Wno-variadic-macros'. 4447 4448 '-Wvarargs' 4449 Warn upon questionable usage of the macros used to handle variable 4450 arguments like 'va_start'. This is default. To inhibit the 4451 warning messages, use '-Wno-varargs'. 4452 4453 '-Wvector-operation-performance' 4454 Warn if vector operation is not implemented via SIMD capabilities 4455 of the architecture. Mainly useful for the performance tuning. 4456 Vector operation can be implemented 'piecewise', which means that 4457 the scalar operation is performed on every vector element; 'in 4458 parallel', which means that the vector operation is implemented 4459 using scalars of wider type, which normally is more performance 4460 efficient; and 'as a single scalar', which means that vector fits 4461 into a scalar type. 4462 4463 '-Wno-virtual-move-assign' 4464 Suppress warnings about inheriting from a virtual base with a 4465 non-trivial C++11 move assignment operator. This is dangerous 4466 because if the virtual base is reachable along more than one path, 4467 it will be moved multiple times, which can mean both objects end up 4468 in the moved-from state. If the move assignment operator is 4469 written to avoid moving from a moved-from object, this warning can 4470 be disabled. 4471 4472 '-Wvla' 4473 Warn if variable length array is used in the code. '-Wno-vla' 4474 prevents the '-Wpedantic' warning of the variable length array. 4475 4476 '-Wvolatile-register-var' 4477 Warn if a register variable is declared volatile. The volatile 4478 modifier does not inhibit all optimizations that may eliminate 4479 reads and/or writes to register variables. This warning is enabled 4480 by '-Wall'. 4481 4482 '-Wdisabled-optimization' 4483 Warn if a requested optimization pass is disabled. This warning 4484 does not generally indicate that there is anything wrong with your 4485 code; it merely indicates that GCC's optimizers are unable to 4486 handle the code effectively. Often, the problem is that your code 4487 is too big or too complex; GCC refuses to optimize programs when 4488 the optimization itself is likely to take inordinate amounts of 4489 time. 4490 4491 '-Wpointer-sign (C and Objective-C only)' 4492 Warn for pointer argument passing or assignment with different 4493 signedness. This option is only supported for C and Objective-C. 4494 It is implied by '-Wall' and by '-Wpedantic', which can be disabled 4495 with '-Wno-pointer-sign'. 4496 4497 '-Wstack-protector' 4498 This option is only active when '-fstack-protector' is active. It 4499 warns about functions that are not protected against stack 4500 smashing. 4501 4502 '-Wno-mudflap' 4503 Suppress warnings about constructs that cannot be instrumented by 4504 '-fmudflap'. 4505 4506 '-Woverlength-strings' 4507 Warn about string constants that are longer than the "minimum 4508 maximum" length specified in the C standard. Modern compilers 4509 generally allow string constants that are much longer than the 4510 standard's minimum limit, but very portable programs should avoid 4511 using longer strings. 4512 4513 The limit applies _after_ string constant concatenation, and does 4514 not count the trailing NUL. In C90, the limit was 509 characters; 4515 in C99, it was raised to 4095. C++98 does not specify a normative 4516 minimum maximum, so we do not diagnose overlength strings in C++. 4517 4518 This option is implied by '-Wpedantic', and can be disabled with 4519 '-Wno-overlength-strings'. 4520 4521 '-Wunsuffixed-float-constants (C and Objective-C only)' 4522 4523 Issue a warning for any floating constant that does not have a 4524 suffix. When used together with '-Wsystem-headers' it warns about 4525 such constants in system header files. This can be useful when 4526 preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from 4527 the decimal floating-point extension to C99. 4528 4529 4530 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 4531 4532 3.9 Options for Debugging Your Program or GCC 4533 ============================================= 4534 4535 GCC has various special options that are used for debugging either your 4536 program or GCC: 4537 4538 '-g' 4539 Produce debugging information in the operating system's native 4540 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 4541 debugging information. 4542 4543 On most systems that use stabs format, '-g' enables use of extra 4544 debugging information that only GDB can use; this extra information 4545 makes debugging work better in GDB but probably makes other 4546 debuggers crash or refuse to read the program. If you want to 4547 control for certain whether to generate the extra information, use 4548 '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see 4549 below). 4550 4551 GCC allows you to use '-g' with '-O'. The shortcuts taken by 4552 optimized code may occasionally produce surprising results: some 4553 variables you declared may not exist at all; flow of control may 4554 briefly move where you did not expect it; some statements may not 4555 be executed because they compute constant results or their values 4556 are already at hand; some statements may execute in different 4557 places because they have been moved out of loops. 4558 4559 Nevertheless it proves possible to debug optimized output. This 4560 makes it reasonable to use the optimizer for programs that might 4561 have bugs. 4562 4563 The following options are useful when GCC is generated with the 4564 capability for more than one debugging format. 4565 4566 '-gsplit-dwarf' 4567 Separate as much dwarf debugging information as possible into a 4568 separate output file with the extension .dwo. This option allows 4569 the build system to avoid linking files with debug information. To 4570 be useful, this option requires a debugger capable of reading .dwo 4571 files. 4572 4573 '-ggdb' 4574 Produce debugging information for use by GDB. This means to use 4575 the most expressive format available (DWARF 2, stabs, or the native 4576 format if neither of those are supported), including GDB extensions 4577 if at all possible. 4578 4579 '-gpubnames' 4580 Generate dwarf .debug_pubnames and .debug_pubtypes sections. 4581 4582 '-gstabs' 4583 Produce debugging information in stabs format (if that is 4584 supported), without GDB extensions. This is the format used by DBX 4585 on most BSD systems. On MIPS, Alpha and System V Release 4 systems 4586 this option produces stabs debugging output that is not understood 4587 by DBX or SDB. On System V Release 4 systems this option requires 4588 the GNU assembler. 4589 4590 '-feliminate-unused-debug-symbols' 4591 Produce debugging information in stabs format (if that is 4592 supported), for only symbols that are actually used. 4593 4594 '-femit-class-debug-always' 4595 Instead of emitting debugging information for a C++ class in only 4596 one object file, emit it in all object files using the class. This 4597 option should be used only with debuggers that are unable to handle 4598 the way GCC normally emits debugging information for classes 4599 because using this option increases the size of debugging 4600 information by as much as a factor of two. 4601 4602 '-fdebug-types-section' 4603 When using DWARF Version 4 or higher, type DIEs can be put into 4604 their own '.debug_types' section instead of making them part of the 4605 '.debug_info' section. It is more efficient to put them in a 4606 separate comdat sections since the linker can then remove 4607 duplicates. But not all DWARF consumers support '.debug_types' 4608 sections yet and on some objects '.debug_types' produces larger 4609 instead of smaller debugging information. 4610 4611 '-gstabs+' 4612 Produce debugging information in stabs format (if that is 4613 supported), using GNU extensions understood only by the GNU 4614 debugger (GDB). The use of these extensions is likely to make 4615 other debuggers crash or refuse to read the program. 4616 4617 '-gcoff' 4618 Produce debugging information in COFF format (if that is 4619 supported). This is the format used by SDB on most System V 4620 systems prior to System V Release 4. 4621 4622 '-gxcoff' 4623 Produce debugging information in XCOFF format (if that is 4624 supported). This is the format used by the DBX debugger on IBM 4625 RS/6000 systems. 4626 4627 '-gxcoff+' 4628 Produce debugging information in XCOFF format (if that is 4629 supported), using GNU extensions understood only by the GNU 4630 debugger (GDB). The use of these extensions is likely to make 4631 other debuggers crash or refuse to read the program, and may cause 4632 assemblers other than the GNU assembler (GAS) to fail with an 4633 error. 4634 4635 '-gdwarf-VERSION' 4636 Produce debugging information in DWARF format (if that is 4637 supported). The value of VERSION may be either 2, 3 or 4; the 4638 default version for most targets is 4. 4639 4640 Note that with DWARF Version 2, some ports require and always use 4641 some non-conflicting DWARF 3 extensions in the unwind tables. 4642 4643 Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for 4644 maximum benefit. 4645 4646 '-grecord-gcc-switches' 4647 This switch causes the command-line options used to invoke the 4648 compiler that may affect code generation to be appended to the 4649 DW_AT_producer attribute in DWARF debugging information. The 4650 options are concatenated with spaces separating them from each 4651 other and from the compiler version. See also 4652 '-frecord-gcc-switches' for another way of storing compiler options 4653 into the object file. This is the default. 4654 4655 '-gno-record-gcc-switches' 4656 Disallow appending command-line options to the DW_AT_producer 4657 attribute in DWARF debugging information. 4658 4659 '-gstrict-dwarf' 4660 Disallow using extensions of later DWARF standard version than 4661 selected with '-gdwarf-VERSION'. On most targets using 4662 non-conflicting DWARF extensions from later standard versions is 4663 allowed. 4664 4665 '-gno-strict-dwarf' 4666 Allow using extensions of later DWARF standard version than 4667 selected with '-gdwarf-VERSION'. 4668 4669 '-gvms' 4670 Produce debugging information in Alpha/VMS debug format (if that is 4671 supported). This is the format used by DEBUG on Alpha/VMS systems. 4672 4673 '-gLEVEL' 4674 '-ggdbLEVEL' 4675 '-gstabsLEVEL' 4676 '-gcoffLEVEL' 4677 '-gxcoffLEVEL' 4678 '-gvmsLEVEL' 4679 Request debugging information and also use LEVEL to specify how 4680 much information. The default level is 2. 4681 4682 Level 0 produces no debug information at all. Thus, '-g0' negates 4683 '-g'. 4684 4685 Level 1 produces minimal information, enough for making backtraces 4686 in parts of the program that you don't plan to debug. This 4687 includes descriptions of functions and external variables, but no 4688 information about local variables and no line numbers. 4689 4690 Level 3 includes extra information, such as all the macro 4691 definitions present in the program. Some debuggers support macro 4692 expansion when you use '-g3'. 4693 4694 '-gdwarf-2' does not accept a concatenated debug level, because GCC 4695 used to support an option '-gdwarf' that meant to generate debug 4696 information in version 1 of the DWARF format (which is very 4697 different from version 2), and it would have been too confusing. 4698 That debug format is long obsolete, but the option cannot be 4699 changed now. Instead use an additional '-gLEVEL' option to change 4700 the debug level for DWARF. 4701 4702 '-gtoggle' 4703 Turn off generation of debug info, if leaving out this option 4704 generates it, or turn it on at level 2 otherwise. The position of 4705 this argument in the command line does not matter; it takes effect 4706 after all other options are processed, and it does so only once, no 4707 matter how many times it is given. This is mainly intended to be 4708 used with '-fcompare-debug'. 4709 4710 '-fsanitize=address' 4711 Enable AddressSanitizer, a fast memory error detector. Memory 4712 access instructions will be instrumented to detect out-of-bounds 4713 and use-after-free bugs. See 4714 <http://code.google.com/p/address-sanitizer/> for more details. 4715 4716 '-fsanitize=thread' 4717 Enable ThreadSanitizer, a fast data race detector. Memory access 4718 instructions will be instrumented to detect data race bugs. See 4719 <http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> for 4720 more details. 4721 4722 '-fdump-final-insns[=FILE]' 4723 Dump the final internal representation (RTL) to FILE. If the 4724 optional argument is omitted (or if FILE is '.'), the name of the 4725 dump file is determined by appending '.gkd' to the compilation 4726 output file name. 4727 4728 '-fcompare-debug[=OPTS]' 4729 If no error occurs during compilation, run the compiler a second 4730 time, adding OPTS and '-fcompare-debug-second' to the arguments 4731 passed to the second compilation. Dump the final internal 4732 representation in both compilations, and print an error if they 4733 differ. 4734 4735 If the equal sign is omitted, the default '-gtoggle' is used. 4736 4737 The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty 4738 and nonzero, implicitly enables '-fcompare-debug'. If 4739 'GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 4740 then it is used for OPTS, otherwise the default '-gtoggle' is used. 4741 4742 '-fcompare-debug=', with the equal sign but without OPTS, is 4743 equivalent to '-fno-compare-debug', which disables the dumping of 4744 the final representation and the second compilation, preventing 4745 even 'GCC_COMPARE_DEBUG' from taking effect. 4746 4747 To verify full coverage during '-fcompare-debug' testing, set 4748 'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which 4749 GCC rejects as an invalid option in any actual compilation (rather 4750 than preprocessing, assembly or linking). To get just a warning, 4751 setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden' 4752 will do. 4753 4754 '-fcompare-debug-second' 4755 This option is implicitly passed to the compiler for the second 4756 compilation requested by '-fcompare-debug', along with options to 4757 silence warnings, and omitting other options that would cause 4758 side-effect compiler outputs to files or to the standard output. 4759 Dump files and preserved temporary files are renamed so as to 4760 contain the '.gk' additional extension during the second 4761 compilation, to avoid overwriting those generated by the first. 4762 4763 When this option is passed to the compiler driver, it causes the 4764 _first_ compilation to be skipped, which makes it useful for little 4765 other than debugging the compiler proper. 4766 4767 '-feliminate-dwarf2-dups' 4768 Compress DWARF 2 debugging information by eliminating duplicated 4769 information about each symbol. This option only makes sense when 4770 generating DWARF 2 debugging information with '-gdwarf-2'. 4771 4772 '-femit-struct-debug-baseonly' 4773 Emit debug information for struct-like types only when the base 4774 name of the compilation source file matches the base name of file 4775 in which the struct is defined. 4776 4777 This option substantially reduces the size of debugging 4778 information, but at significant potential loss in type information 4779 to the debugger. See '-femit-struct-debug-reduced' for a less 4780 aggressive option. See '-femit-struct-debug-detailed' for more 4781 detailed control. 4782 4783 This option works only with DWARF 2. 4784 4785 '-femit-struct-debug-reduced' 4786 Emit debug information for struct-like types only when the base 4787 name of the compilation source file matches the base name of file 4788 in which the type is defined, unless the struct is a template or 4789 defined in a system header. 4790 4791 This option significantly reduces the size of debugging 4792 information, with some potential loss in type information to the 4793 debugger. See '-femit-struct-debug-baseonly' for a more aggressive 4794 option. See '-femit-struct-debug-detailed' for more detailed 4795 control. 4796 4797 This option works only with DWARF 2. 4798 4799 '-femit-struct-debug-detailed[=SPEC-LIST]' 4800 Specify the struct-like types for which the compiler generates 4801 debug information. The intent is to reduce duplicate struct debug 4802 information between different object files within the same program. 4803 4804 This option is a detailed version of '-femit-struct-debug-reduced' 4805 and '-femit-struct-debug-baseonly', which serves for most needs. 4806 4807 A specification has the syntax 4808 ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none') 4809 4810 The optional first word limits the specification to structs that 4811 are used directly ('dir:') or used indirectly ('ind:'). A struct 4812 type is used directly when it is the type of a variable, member. 4813 Indirect uses arise through pointers to structs. That is, when use 4814 of an incomplete struct is valid, the use is indirect. An example 4815 is 'struct one direct; struct two * indirect;'. 4816 4817 The optional second word limits the specification to ordinary 4818 structs ('ord:') or generic structs ('gen:'). Generic structs are 4819 a bit complicated to explain. For C++, these are non-explicit 4820 specializations of template classes, or non-template classes within 4821 the above. Other programming languages have generics, but 4822 '-femit-struct-debug-detailed' does not yet implement them. 4823 4824 The third word specifies the source files for those structs for 4825 which the compiler should emit debug information. The values 4826 'none' and 'any' have the normal meaning. The value 'base' means 4827 that the base of name of the file in which the type declaration 4828 appears must match the base of the name of the main compilation 4829 file. In practice, this means that when compiling 'foo.c', debug 4830 information is generated for types declared in that file and 4831 'foo.h', but not other header files. The value 'sys' means those 4832 types satisfying 'base' or declared in system or compiler headers. 4833 4834 You may need to experiment to determine the best settings for your 4835 application. 4836 4837 The default is '-femit-struct-debug-detailed=all'. 4838 4839 This option works only with DWARF 2. 4840 4841 '-fno-merge-debug-strings' 4842 Direct the linker to not merge together strings in the debugging 4843 information that are identical in different object files. Merging 4844 is not supported by all assemblers or linkers. Merging decreases 4845 the size of the debug information in the output file at the cost of 4846 increasing link processing time. Merging is enabled by default. 4847 4848 '-fdebug-prefix-map=OLD=NEW' 4849 When compiling files in directory 'OLD', record debugging 4850 information describing them as in 'NEW' instead. 4851 4852 '-fno-dwarf2-cfi-asm' 4853 Emit DWARF 2 unwind info as compiler generated '.eh_frame' section 4854 instead of using GAS '.cfi_*' directives. 4855 4856 '-p' 4857 Generate extra code to write profile information suitable for the 4858 analysis program 'prof'. You must use this option when compiling 4859 the source files you want data about, and you must also use it when 4860 linking. 4861 4862 '-pg' 4863 Generate extra code to write profile information suitable for the 4864 analysis program 'gprof'. You must use this option when compiling 4865 the source files you want data about, and you must also use it when 4866 linking. 4867 4868 '-Q' 4869 Makes the compiler print out each function name as it is compiled, 4870 and print some statistics about each pass when it finishes. 4871 4872 '-ftime-report' 4873 Makes the compiler print some statistics about the time consumed by 4874 each pass when it finishes. 4875 4876 '-fmem-report' 4877 Makes the compiler print some statistics about permanent memory 4878 allocation when it finishes. 4879 4880 '-fmem-report-wpa' 4881 Makes the compiler print some statistics about permanent memory 4882 allocation for the WPA phase only. 4883 4884 '-fpre-ipa-mem-report' 4885 '-fpost-ipa-mem-report' 4886 Makes the compiler print some statistics about permanent memory 4887 allocation before or after interprocedural optimization. 4888 4889 '-fprofile-report' 4890 Makes the compiler print some statistics about consistency of the 4891 (estimated) profile and effect of individual passes. 4892 4893 '-fstack-usage' 4894 Makes the compiler output stack usage information for the program, 4895 on a per-function basis. The filename for the dump is made by 4896 appending '.su' to the AUXNAME. AUXNAME is generated from the name 4897 of the output file, if explicitly specified and it is not an 4898 executable, otherwise it is the basename of the source file. An 4899 entry is made up of three fields: 4900 4901 * The name of the function. 4902 * A number of bytes. 4903 * One or more qualifiers: 'static', 'dynamic', 'bounded'. 4904 4905 The qualifier 'static' means that the function manipulates the 4906 stack statically: a fixed number of bytes are allocated for the 4907 frame on function entry and released on function exit; no stack 4908 adjustments are otherwise made in the function. The second field 4909 is this fixed number of bytes. 4910 4911 The qualifier 'dynamic' means that the function manipulates the 4912 stack dynamically: in addition to the static allocation described 4913 above, stack adjustments are made in the body of the function, for 4914 example to push/pop arguments around function calls. If the 4915 qualifier 'bounded' is also present, the amount of these 4916 adjustments is bounded at compile time and the second field is an 4917 upper bound of the total amount of stack used by the function. If 4918 it is not present, the amount of these adjustments is not bounded 4919 at compile time and the second field only represents the bounded 4920 part. 4921 4922 '-fprofile-arcs' 4923 Add code so that program flow "arcs" are instrumented. During 4924 execution the program records how many times each branch and call 4925 is executed and how many times it is taken or returns. When the 4926 compiled program exits it saves this data to a file called 4927 'AUXNAME.gcda' for each source file. The data may be used for 4928 profile-directed optimizations ('-fbranch-probabilities'), or for 4929 test coverage analysis ('-ftest-coverage'). Each object file's 4930 AUXNAME is generated from the name of the output file, if 4931 explicitly specified and it is not the final executable, otherwise 4932 it is the basename of the source file. In both cases any suffix is 4933 removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or 4934 'dir/foo.gcda' for output file specified as '-o dir/foo.o'). *Note 4935 Cross-profiling::. 4936 4937 '--coverage' 4938 4939 This option is used to compile and link code instrumented for 4940 coverage analysis. The option is a synonym for '-fprofile-arcs' 4941 '-ftest-coverage' (when compiling) and '-lgcov' (when linking). 4942 See the documentation for those options for more details. 4943 4944 * Compile the source files with '-fprofile-arcs' plus 4945 optimization and code generation options. For test coverage 4946 analysis, use the additional '-ftest-coverage' option. You do 4947 not need to profile every source file in a program. 4948 4949 * Link your object files with '-lgcov' or '-fprofile-arcs' (the 4950 latter implies the former). 4951 4952 * Run the program on a representative workload to generate the 4953 arc profile information. This may be repeated any number of 4954 times. You can run concurrent instances of your program, and 4955 provided that the file system supports locking, the data files 4956 will be correctly updated. Also 'fork' calls are detected and 4957 correctly handled (double counting will not happen). 4958 4959 * For profile-directed optimizations, compile the source files 4960 again with the same optimization and code generation options 4961 plus '-fbranch-probabilities' (*note Options that Control 4962 Optimization: Optimize Options.). 4963 4964 * For test coverage analysis, use 'gcov' to produce human 4965 readable information from the '.gcno' and '.gcda' files. 4966 Refer to the 'gcov' documentation for further information. 4967 4968 With '-fprofile-arcs', for each function of your program GCC 4969 creates a program flow graph, then finds a spanning tree for the 4970 graph. Only arcs that are not on the spanning tree have to be 4971 instrumented: the compiler adds code to count the number of times 4972 that these arcs are executed. When an arc is the only exit or only 4973 entrance to a block, the instrumentation code can be added to the 4974 block; otherwise, a new basic block must be created to hold the 4975 instrumentation code. 4976 4977 '-ftest-coverage' 4978 Produce a notes file that the 'gcov' code-coverage utility (*note 4979 'gcov'--a Test Coverage Program: Gcov.) can use to show program 4980 coverage. Each source file's note file is called 'AUXNAME.gcno'. 4981 Refer to the '-fprofile-arcs' option above for a description of 4982 AUXNAME and instructions on how to generate test coverage data. 4983 Coverage data matches the source files more closely if you do not 4984 optimize. 4985 4986 '-fdbg-cnt-list' 4987 Print the name and the counter upper bound for all debug counters. 4988 4989 '-fdbg-cnt=COUNTER-VALUE-LIST' 4990 Set the internal debug counter upper bound. COUNTER-VALUE-LIST is 4991 a comma-separated list of NAME:VALUE pairs which sets the upper 4992 bound of each debug counter NAME to VALUE. All debug counters have 4993 the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt()' returns 4994 true always unless the upper bound is set by this option. For 4995 example, with '-fdbg-cnt=dce:10,tail_call:0', 'dbg_cnt(dce)' 4996 returns true only for first 10 invocations. 4997 4998 '-fenable-KIND-PASS' 4999 '-fdisable-KIND-PASS=RANGE-LIST' 5000 5001 This is a set of options that are used to explicitly disable/enable 5002 optimization passes. These options are intended for use for 5003 debugging GCC. Compiler users should use regular options for 5004 enabling/disabling passes instead. 5005 5006 '-fdisable-ipa-PASS' 5007 Disable IPA pass PASS. PASS is the pass name. If the same 5008 pass is statically invoked in the compiler multiple times, the 5009 pass name should be appended with a sequential number starting 5010 from 1. 5011 5012 '-fdisable-rtl-PASS' 5013 '-fdisable-rtl-PASS=RANGE-LIST' 5014 Disable RTL pass PASS. PASS is the pass name. If the same 5015 pass is statically invoked in the compiler multiple times, the 5016 pass name should be appended with a sequential number starting 5017 from 1. RANGE-LIST is a comma-separated list of function 5018 ranges or assembler names. Each range is a number pair 5019 separated by a colon. The range is inclusive in both ends. 5020 If the range is trivial, the number pair can be simplified as 5021 a single number. If the function's call graph node's UID 5022 falls within one of the specified ranges, the PASS is disabled 5023 for that function. The UID is shown in the function header of 5024 a dump file, and the pass names can be dumped by using option 5025 '-fdump-passes'. 5026 5027 '-fdisable-tree-PASS' 5028 '-fdisable-tree-PASS=RANGE-LIST' 5029 Disable tree pass PASS. See '-fdisable-rtl' for the 5030 description of option arguments. 5031 5032 '-fenable-ipa-PASS' 5033 Enable IPA pass PASS. PASS is the pass name. If the same 5034 pass is statically invoked in the compiler multiple times, the 5035 pass name should be appended with a sequential number starting 5036 from 1. 5037 5038 '-fenable-rtl-PASS' 5039 '-fenable-rtl-PASS=RANGE-LIST' 5040 Enable RTL pass PASS. See '-fdisable-rtl' for option argument 5041 description and examples. 5042 5043 '-fenable-tree-PASS' 5044 '-fenable-tree-PASS=RANGE-LIST' 5045 Enable tree pass PASS. See '-fdisable-rtl' for the 5046 description of option arguments. 5047 5048 Here are some examples showing uses of these options. 5049 5050 5051 # disable ccp1 for all functions 5052 -fdisable-tree-ccp1 5053 # disable complete unroll for function whose cgraph node uid is 1 5054 -fenable-tree-cunroll=1 5055 # disable gcse2 for functions at the following ranges [1,1], 5056 # [300,400], and [400,1000] 5057 # disable gcse2 for functions foo and foo2 5058 -fdisable-rtl-gcse2=foo,foo2 5059 # disable early inlining 5060 -fdisable-tree-einline 5061 # disable ipa inlining 5062 -fdisable-ipa-inline 5063 # enable tree full unroll 5064 -fenable-tree-unroll 5065 5066 5067 '-dLETTERS' 5068 '-fdump-rtl-PASS' 5069 '-fdump-rtl-PASS=FILENAME' 5070 Says to make debugging dumps during compilation at times specified 5071 by LETTERS. This is used for debugging the RTL-based passes of the 5072 compiler. The file names for most of the dumps are made by 5073 appending a pass number and a word to the DUMPNAME, and the files 5074 are created in the directory of the output file. In case of 5075 '=FILENAME' option, the dump is output on the given file instead of 5076 the pass numbered dump files. Note that the pass number is 5077 computed statically as passes get registered into the pass manager. 5078 Thus the numbering is not related to the dynamic order of execution 5079 of passes. In particular, a pass installed by a plugin could have 5080 a number over 200 even if it executed quite early. DUMPNAME is 5081 generated from the name of the output file, if explicitly specified 5082 and it is not an executable, otherwise it is the basename of the 5083 source file. These switches may have different effects when '-E' 5084 is used for preprocessing. 5085 5086 Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d' 5087 option LETTERS. Here are the possible letters for use in PASS and 5088 LETTERS, and their meanings: 5089 5090 '-fdump-rtl-alignments' 5091 Dump after branch alignments have been computed. 5092 5093 '-fdump-rtl-asmcons' 5094 Dump after fixing rtl statements that have unsatisfied in/out 5095 constraints. 5096 5097 '-fdump-rtl-auto_inc_dec' 5098 Dump after auto-inc-dec discovery. This pass is only run on 5099 architectures that have auto inc or auto dec instructions. 5100 5101 '-fdump-rtl-barriers' 5102 Dump after cleaning up the barrier instructions. 5103 5104 '-fdump-rtl-bbpart' 5105 Dump after partitioning hot and cold basic blocks. 5106 5107 '-fdump-rtl-bbro' 5108 Dump after block reordering. 5109 5110 '-fdump-rtl-btl1' 5111 '-fdump-rtl-btl2' 5112 '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after 5113 the two branch target load optimization passes. 5114 5115 '-fdump-rtl-bypass' 5116 Dump after jump bypassing and control flow optimizations. 5117 5118 '-fdump-rtl-combine' 5119 Dump after the RTL instruction combination pass. 5120 5121 '-fdump-rtl-compgotos' 5122 Dump after duplicating the computed gotos. 5123 5124 '-fdump-rtl-ce1' 5125 '-fdump-rtl-ce2' 5126 '-fdump-rtl-ce3' 5127 '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3' 5128 enable dumping after the three if conversion passes. 5129 5130 '-fdump-rtl-cprop_hardreg' 5131 Dump after hard register copy propagation. 5132 5133 '-fdump-rtl-csa' 5134 Dump after combining stack adjustments. 5135 5136 '-fdump-rtl-cse1' 5137 '-fdump-rtl-cse2' 5138 '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after 5139 the two common subexpression elimination passes. 5140 5141 '-fdump-rtl-dce' 5142 Dump after the standalone dead code elimination passes. 5143 5144 '-fdump-rtl-dbr' 5145 Dump after delayed branch scheduling. 5146 5147 '-fdump-rtl-dce1' 5148 '-fdump-rtl-dce2' 5149 '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after 5150 the two dead store elimination passes. 5151 5152 '-fdump-rtl-eh' 5153 Dump after finalization of EH handling code. 5154 5155 '-fdump-rtl-eh_ranges' 5156 Dump after conversion of EH handling range regions. 5157 5158 '-fdump-rtl-expand' 5159 Dump after RTL generation. 5160 5161 '-fdump-rtl-fwprop1' 5162 '-fdump-rtl-fwprop2' 5163 '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping 5164 after the two forward propagation passes. 5165 5166 '-fdump-rtl-gcse1' 5167 '-fdump-rtl-gcse2' 5168 '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after 5169 global common subexpression elimination. 5170 5171 '-fdump-rtl-init-regs' 5172 Dump after the initialization of the registers. 5173 5174 '-fdump-rtl-initvals' 5175 Dump after the computation of the initial value sets. 5176 5177 '-fdump-rtl-into_cfglayout' 5178 Dump after converting to cfglayout mode. 5179 5180 '-fdump-rtl-ira' 5181 Dump after iterated register allocation. 5182 5183 '-fdump-rtl-jump' 5184 Dump after the second jump optimization. 5185 5186 '-fdump-rtl-loop2' 5187 '-fdump-rtl-loop2' enables dumping after the rtl loop 5188 optimization passes. 5189 5190 '-fdump-rtl-mach' 5191 Dump after performing the machine dependent reorganization 5192 pass, if that pass exists. 5193 5194 '-fdump-rtl-mode_sw' 5195 Dump after removing redundant mode switches. 5196 5197 '-fdump-rtl-rnreg' 5198 Dump after register renumbering. 5199 5200 '-fdump-rtl-outof_cfglayout' 5201 Dump after converting from cfglayout mode. 5202 5203 '-fdump-rtl-peephole2' 5204 Dump after the peephole pass. 5205 5206 '-fdump-rtl-postreload' 5207 Dump after post-reload optimizations. 5208 5209 '-fdump-rtl-pro_and_epilogue' 5210 Dump after generating the function prologues and epilogues. 5211 5212 '-fdump-rtl-regmove' 5213 Dump after the register move pass. 5214 5215 '-fdump-rtl-sched1' 5216 '-fdump-rtl-sched2' 5217 '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping 5218 after the basic block scheduling passes. 5219 5220 '-fdump-rtl-see' 5221 Dump after sign extension elimination. 5222 5223 '-fdump-rtl-seqabstr' 5224 Dump after common sequence discovery. 5225 5226 '-fdump-rtl-shorten' 5227 Dump after shortening branches. 5228 5229 '-fdump-rtl-sibling' 5230 Dump after sibling call optimizations. 5231 5232 '-fdump-rtl-split1' 5233 '-fdump-rtl-split2' 5234 '-fdump-rtl-split3' 5235 '-fdump-rtl-split4' 5236 '-fdump-rtl-split5' 5237 '-fdump-rtl-split1', '-fdump-rtl-split2', '-fdump-rtl-split3', 5238 '-fdump-rtl-split4' and '-fdump-rtl-split5' enable dumping 5239 after five rounds of instruction splitting. 5240 5241 '-fdump-rtl-sms' 5242 Dump after modulo scheduling. This pass is only run on some 5243 architectures. 5244 5245 '-fdump-rtl-stack' 5246 Dump after conversion from GCC's "flat register file" 5247 registers to the x87's stack-like registers. This pass is 5248 only run on x86 variants. 5249 5250 '-fdump-rtl-subreg1' 5251 '-fdump-rtl-subreg2' 5252 '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping 5253 after the two subreg expansion passes. 5254 5255 '-fdump-rtl-unshare' 5256 Dump after all rtl has been unshared. 5257 5258 '-fdump-rtl-vartrack' 5259 Dump after variable tracking. 5260 5261 '-fdump-rtl-vregs' 5262 Dump after converting virtual registers to hard registers. 5263 5264 '-fdump-rtl-web' 5265 Dump after live range splitting. 5266 5267 '-fdump-rtl-regclass' 5268 '-fdump-rtl-subregs_of_mode_init' 5269 '-fdump-rtl-subregs_of_mode_finish' 5270 '-fdump-rtl-dfinit' 5271 '-fdump-rtl-dfinish' 5272 These dumps are defined but always produce empty files. 5273 5274 '-da' 5275 '-fdump-rtl-all' 5276 Produce all the dumps listed above. 5277 5278 '-dA' 5279 Annotate the assembler output with miscellaneous debugging 5280 information. 5281 5282 '-dD' 5283 Dump all macro definitions, at the end of preprocessing, in 5284 addition to normal output. 5285 5286 '-dH' 5287 Produce a core dump whenever an error occurs. 5288 5289 '-dp' 5290 Annotate the assembler output with a comment indicating which 5291 pattern and alternative is used. The length of each 5292 instruction is also printed. 5293 5294 '-dP' 5295 Dump the RTL in the assembler output as a comment before each 5296 instruction. Also turns on '-dp' annotation. 5297 5298 '-dx' 5299 Just generate RTL for a function instead of compiling it. 5300 Usually used with '-fdump-rtl-expand'. 5301 5302 '-fdump-noaddr' 5303 When doing debugging dumps, suppress address output. This makes it 5304 more feasible to use diff on debugging dumps for compiler 5305 invocations with different compiler binaries and/or different text 5306 / bss / data / heap / stack / dso start locations. 5307 5308 '-fdump-unnumbered' 5309 When doing debugging dumps, suppress instruction numbers and 5310 address output. This makes it more feasible to use diff on 5311 debugging dumps for compiler invocations with different options, in 5312 particular with and without '-g'. 5313 5314 '-fdump-unnumbered-links' 5315 When doing debugging dumps (see '-d' option above), suppress 5316 instruction numbers for the links to the previous and next 5317 instructions in a sequence. 5318 5319 '-fdump-translation-unit (C++ only)' 5320 '-fdump-translation-unit-OPTIONS (C++ only)' 5321 Dump a representation of the tree structure for the entire 5322 translation unit to a file. The file name is made by appending 5323 '.tu' to the source file name, and the file is created in the same 5324 directory as the output file. If the '-OPTIONS' form is used, 5325 OPTIONS controls the details of the dump as described for the 5326 '-fdump-tree' options. 5327 5328 '-fdump-class-hierarchy (C++ only)' 5329 '-fdump-class-hierarchy-OPTIONS (C++ only)' 5330 Dump a representation of each class's hierarchy and virtual 5331 function table layout to a file. The file name is made by 5332 appending '.class' to the source file name, and the file is created 5333 in the same directory as the output file. If the '-OPTIONS' form 5334 is used, OPTIONS controls the details of the dump as described for 5335 the '-fdump-tree' options. 5336 5337 '-fdump-ipa-SWITCH' 5338 Control the dumping at various stages of inter-procedural analysis 5339 language tree to a file. The file name is generated by appending a 5340 switch specific suffix to the source file name, and the file is 5341 created in the same directory as the output file. The following 5342 dumps are possible: 5343 5344 'all' 5345 Enables all inter-procedural analysis dumps. 5346 5347 'cgraph' 5348 Dumps information about call-graph optimization, unused 5349 function removal, and inlining decisions. 5350 5351 'inline' 5352 Dump after function inlining. 5353 5354 '-fdump-passes' 5355 Dump the list of optimization passes that are turned on and off by 5356 the current command-line options. 5357 5358 '-fdump-statistics-OPTION' 5359 Enable and control dumping of pass statistics in a separate file. 5360 The file name is generated by appending a suffix ending in 5361 '.statistics' to the source file name, and the file is created in 5362 the same directory as the output file. If the '-OPTION' form is 5363 used, '-stats' causes counters to be summed over the whole 5364 compilation unit while '-details' dumps every event as the passes 5365 generate them. The default with no option is to sum counters for 5366 each function compiled. 5367 5368 '-fdump-tree-SWITCH' 5369 '-fdump-tree-SWITCH-OPTIONS' 5370 '-fdump-tree-SWITCH-OPTIONS=FILENAME' 5371 Control the dumping at various stages of processing the 5372 intermediate language tree to a file. The file name is generated 5373 by appending a switch-specific suffix to the source file name, and 5374 the file is created in the same directory as the output file. In 5375 case of '=FILENAME' option, the dump is output on the given file 5376 instead of the auto named dump files. If the '-OPTIONS' form is 5377 used, OPTIONS is a list of '-' separated options which control the 5378 details of the dump. Not all options are applicable to all dumps; 5379 those that are not meaningful are ignored. The following options 5380 are available 5381 5382 'address' 5383 Print the address of each node. Usually this is not 5384 meaningful as it changes according to the environment and 5385 source file. Its primary use is for tying up a dump file with 5386 a debug environment. 5387 'asmname' 5388 If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use 5389 that in the dump instead of 'DECL_NAME'. Its primary use is 5390 ease of use working backward from mangled names in the 5391 assembly file. 5392 'slim' 5393 When dumping front-end intermediate representations, inhibit 5394 dumping of members of a scope or body of a function merely 5395 because that scope has been reached. Only dump such items 5396 when they are directly reachable by some other path. 5397 5398 When dumping pretty-printed trees, this option inhibits 5399 dumping the bodies of control structures. 5400 5401 When dumping RTL, print the RTL in slim (condensed) form 5402 instead of the default LISP-like representation. 5403 'raw' 5404 Print a raw representation of the tree. By default, trees are 5405 pretty-printed into a C-like representation. 5406 'details' 5407 Enable more detailed dumps (not honored by every dump option). 5408 Also include information from the optimization passes. 5409 'stats' 5410 Enable dumping various statistics about the pass (not honored 5411 by every dump option). 5412 'blocks' 5413 Enable showing basic block boundaries (disabled in raw dumps). 5414 'graph' 5415 For each of the other indicated dump files 5416 ('-fdump-rtl-PASS'), dump a representation of the control flow 5417 graph suitable for viewing with GraphViz to 5418 'FILE.PASSID.PASS.dot'. Each function in the file is 5419 pretty-printed as a subgraph, so that GraphViz can render them 5420 all in a single plot. 5421 5422 This option currently only works for RTL dumps, and the RTL is 5423 always dumped in slim form. 5424 'vops' 5425 Enable showing virtual operands for every statement. 5426 'lineno' 5427 Enable showing line numbers for statements. 5428 'uid' 5429 Enable showing the unique ID ('DECL_UID') for each variable. 5430 'verbose' 5431 Enable showing the tree dump for each statement. 5432 'eh' 5433 Enable showing the EH region number holding each statement. 5434 'scev' 5435 Enable showing scalar evolution analysis details. 5436 'optimized' 5437 Enable showing optimization information (only available in 5438 certain passes). 5439 'missed' 5440 Enable showing missed optimization information (only available 5441 in certain passes). 5442 'notes' 5443 Enable other detailed optimization information (only available 5444 in certain passes). 5445 '=FILENAME' 5446 Instead of an auto named dump file, output into the given file 5447 name. The file names 'stdout' and 'stderr' are treated 5448 specially and are considered already open standard streams. 5449 For example, 5450 5451 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump 5452 -fdump-tree-pre=stderr file.c 5453 5454 outputs vectorizer dump into 'foo.dump', while the PRE dump is 5455 output on to 'stderr'. If two conflicting dump filenames are 5456 given for the same pass, then the latter option overrides the 5457 earlier one. 5458 5459 'all' 5460 Turn on all options, except 'raw', 'slim', 'verbose' and 5461 'lineno'. 5462 5463 'optall' 5464 Turn on all optimization options, i.e., 'optimized', 'missed', 5465 and 'note'. 5466 5467 The following tree dumps are possible: 5468 5469 'original' 5470 Dump before any tree based optimization, to 'FILE.original'. 5471 5472 'optimized' 5473 Dump after all tree based optimization, to 'FILE.optimized'. 5474 5475 'gimple' 5476 Dump each function before and after the gimplification pass to 5477 a file. The file name is made by appending '.gimple' to the 5478 source file name. 5479 5480 'cfg' 5481 Dump the control flow graph of each function to a file. The 5482 file name is made by appending '.cfg' to the source file name. 5483 5484 'ch' 5485 Dump each function after copying loop headers. The file name 5486 is made by appending '.ch' to the source file name. 5487 5488 'ssa' 5489 Dump SSA related information to a file. The file name is made 5490 by appending '.ssa' to the source file name. 5491 5492 'alias' 5493 Dump aliasing information for each function. The file name is 5494 made by appending '.alias' to the source file name. 5495 5496 'ccp' 5497 Dump each function after CCP. The file name is made by 5498 appending '.ccp' to the source file name. 5499 5500 'storeccp' 5501 Dump each function after STORE-CCP. The file name is made by 5502 appending '.storeccp' to the source file name. 5503 5504 'pre' 5505 Dump trees after partial redundancy elimination. The file 5506 name is made by appending '.pre' to the source file name. 5507 5508 'fre' 5509 Dump trees after full redundancy elimination. The file name 5510 is made by appending '.fre' to the source file name. 5511 5512 'copyprop' 5513 Dump trees after copy propagation. The file name is made by 5514 appending '.copyprop' to the source file name. 5515 5516 'store_copyprop' 5517 Dump trees after store copy-propagation. The file name is 5518 made by appending '.store_copyprop' to the source file name. 5519 5520 'dce' 5521 Dump each function after dead code elimination. The file name 5522 is made by appending '.dce' to the source file name. 5523 5524 'mudflap' 5525 Dump each function after adding mudflap instrumentation. The 5526 file name is made by appending '.mudflap' to the source file 5527 name. 5528 5529 'sra' 5530 Dump each function after performing scalar replacement of 5531 aggregates. The file name is made by appending '.sra' to the 5532 source file name. 5533 5534 'sink' 5535 Dump each function after performing code sinking. The file 5536 name is made by appending '.sink' to the source file name. 5537 5538 'dom' 5539 Dump each function after applying dominator tree 5540 optimizations. The file name is made by appending '.dom' to 5541 the source file name. 5542 5543 'dse' 5544 Dump each function after applying dead store elimination. The 5545 file name is made by appending '.dse' to the source file name. 5546 5547 'phiopt' 5548 Dump each function after optimizing PHI nodes into 5549 straightline code. The file name is made by appending 5550 '.phiopt' to the source file name. 5551 5552 'forwprop' 5553 Dump each function after forward propagating single use 5554 variables. The file name is made by appending '.forwprop' to 5555 the source file name. 5556 5557 'copyrename' 5558 Dump each function after applying the copy rename 5559 optimization. The file name is made by appending 5560 '.copyrename' to the source file name. 5561 5562 'nrv' 5563 Dump each function after applying the named return value 5564 optimization on generic trees. The file name is made by 5565 appending '.nrv' to the source file name. 5566 5567 'vect' 5568 Dump each function after applying vectorization of loops. The 5569 file name is made by appending '.vect' to the source file 5570 name. 5571 5572 'slp' 5573 Dump each function after applying vectorization of basic 5574 blocks. The file name is made by appending '.slp' to the 5575 source file name. 5576 5577 'vrp' 5578 Dump each function after Value Range Propagation (VRP). The 5579 file name is made by appending '.vrp' to the source file name. 5580 5581 'all' 5582 Enable all the available tree dumps with the flags provided in 5583 this option. 5584 5585 '-fopt-info' 5586 '-fopt-info-OPTIONS' 5587 '-fopt-info-OPTIONS=FILENAME' 5588 Controls optimization dumps from various optimization passes. If 5589 the '-OPTIONS' form is used, OPTIONS is a list of '-' separated 5590 options to select the dump details and optimizations. If OPTIONS 5591 is not specified, it defaults to 'all' for details and 'optall' for 5592 optimization groups. If the FILENAME is not specified, it defaults 5593 to 'stderr'. Note that the output FILENAME will be overwritten in 5594 case of multiple translation units. If a combined output from 5595 multiple translation units is desired, 'stderr' should be used 5596 instead. 5597 5598 The options can be divided into two groups, 1) options describing 5599 the verbosity of the dump, and 2) options describing which 5600 optimizations should be included. The options from both the groups 5601 can be freely mixed as they are non-overlapping. However, in case 5602 of any conflicts, the latter options override the earlier options 5603 on the command line. Though multiple -fopt-info options are 5604 accepted, only one of them can have '=filename'. If other 5605 filenames are provided then all but the first one are ignored. 5606 5607 The dump verbosity has the following options 5608 5609 'optimized' 5610 Print information when an optimization is successfully 5611 applied. It is up to a pass to decide which information is 5612 relevant. For example, the vectorizer passes print the source 5613 location of loops which got successfully vectorized. 5614 'missed' 5615 Print information about missed optimizations. Individual 5616 passes control which information to include in the output. 5617 For example, 5618 5619 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 5620 5621 will print information about missed optimization opportunities 5622 from vectorization passes on stderr. 5623 'note' 5624 Print verbose information about optimizations, such as certain 5625 transformations, more detailed messages about decisions etc. 5626 'all' 5627 Print detailed optimization information. This includes 5628 OPTIMIZED, MISSED, and NOTE. 5629 5630 The second set of options describes a group of optimizations and 5631 may include one or more of the following. 5632 5633 'ipa' 5634 Enable dumps from all interprocedural optimizations. 5635 'loop' 5636 Enable dumps from all loop optimizations. 5637 'inline' 5638 Enable dumps from all inlining optimizations. 5639 'vec' 5640 Enable dumps from all vectorization optimizations. 5641 5642 For example, 5643 gcc -O3 -fopt-info-missed=missed.all 5644 5645 outputs missed optimization report from all the passes into 5646 'missed.all'. 5647 5648 As another example, 5649 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 5650 5651 will output information about missed optimizations as well as 5652 optimized locations from all the inlining passes into 'inline.txt'. 5653 5654 If the FILENAME is provided, then the dumps from all the applicable 5655 optimizations are concatenated into the 'filename'. Otherwise the 5656 dump is output onto 'stderr'. If OPTIONS is omitted, it defaults 5657 to 'all-optall', which means dump all available optimization info 5658 from all the passes. In the following example, all optimization 5659 info is output on to 'stderr'. 5660 5661 gcc -O3 -fopt-info 5662 5663 Note that '-fopt-info-vec-missed' behaves the same as 5664 '-fopt-info-missed-vec'. 5665 5666 As another example, consider 5667 5668 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 5669 5670 Here the two output filenames 'vec.miss' and 'loop.opt' are in 5671 conflict since only one output file is allowed. In this case, only 5672 the first option takes effect and the subsequent options are 5673 ignored. Thus only the 'vec.miss' is produced which cotaints dumps 5674 from the vectorizer about missed opportunities. 5675 5676 '-ftree-vectorizer-verbose=N' 5677 This option is deprecated and is implemented in terms of 5678 '-fopt-info'. Please use '-fopt-info-KIND' form instead, where 5679 KIND is one of the valid opt-info options. It prints additional 5680 optimization information. For N=0 no diagnostic information is 5681 reported. If N=1 the vectorizer reports each loop that got 5682 vectorized, and the total number of loops that got vectorized. If 5683 N=2 the vectorizer reports locations which could not be vectorized 5684 and the reasons for those. For any higher verbosity levels all the 5685 analysis and transformation information from the vectorizer is 5686 reported. 5687 5688 Note that the information output by '-ftree-vectorizer-verbose' 5689 option is sent to 'stderr'. If the equivalent form 5690 '-fopt-info-OPTIONS=FILENAME' is used then the output is sent into 5691 FILENAME instead. 5692 5693 '-frandom-seed=STRING' 5694 This option provides a seed that GCC uses in place of random 5695 numbers in generating certain symbol names that have to be 5696 different in every compiled file. It is also used to place unique 5697 stamps in coverage data files and the object files that produce 5698 them. You can use the '-frandom-seed' option to produce 5699 reproducibly identical object files. 5700 5701 The STRING should be different for every file you compile. 5702 5703 '-fsched-verbose=N' 5704 On targets that use instruction scheduling, this option controls 5705 the amount of debugging output the scheduler prints. This 5706 information is written to standard error, unless 5707 '-fdump-rtl-sched1' or '-fdump-rtl-sched2' is specified, in which 5708 case it is output to the usual dump listing file, '.sched1' or 5709 '.sched2' respectively. However for N greater than nine, the 5710 output is always printed to standard error. 5711 5712 For N greater than zero, '-fsched-verbose' outputs the same 5713 information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'. For N 5714 greater than one, it also output basic block probabilities, 5715 detailed ready list information and unit/insn info. For N greater 5716 than two, it includes RTL at abort point, control-flow and regions 5717 info. And for N over four, '-fsched-verbose' also includes 5718 dependence info. 5719 5720 '-save-temps' 5721 '-save-temps=cwd' 5722 Store the usual "temporary" intermediate files permanently; place 5723 them in the current directory and name them based on the source 5724 file. Thus, compiling 'foo.c' with '-c -save-temps' produces files 5725 'foo.i' and 'foo.s', as well as 'foo.o'. This creates a 5726 preprocessed 'foo.i' output file even though the compiler now 5727 normally uses an integrated preprocessor. 5728 5729 When used in combination with the '-x' command-line option, 5730 '-save-temps' is sensible enough to avoid over writing an input 5731 source file with the same extension as an intermediate file. The 5732 corresponding intermediate file may be obtained by renaming the 5733 source file before using '-save-temps'. 5734 5735 If you invoke GCC in parallel, compiling several different source 5736 files that share a common base name in different subdirectories or 5737 the same source file compiled for multiple output destinations, it 5738 is likely that the different parallel compilers will interfere with 5739 each other, and overwrite the temporary files. For instance: 5740 5741 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 5742 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 5743 5744 may result in 'foo.i' and 'foo.o' being written to simultaneously 5745 by both compilers. 5746 5747 '-save-temps=obj' 5748 Store the usual "temporary" intermediate files permanently. If the 5749 '-o' option is used, the temporary files are based on the object 5750 file. If the '-o' option is not used, the '-save-temps=obj' switch 5751 behaves like '-save-temps'. 5752 5753 For example: 5754 5755 gcc -save-temps=obj -c foo.c 5756 gcc -save-temps=obj -c bar.c -o dir/xbar.o 5757 gcc -save-temps=obj foobar.c -o dir2/yfoobar 5758 5759 creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s', 5760 'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'. 5761 5762 '-time[=FILE]' 5763 Report the CPU time taken by each subprocess in the compilation 5764 sequence. For C source files, this is the compiler proper and 5765 assembler (plus the linker if linking is done). 5766 5767 Without the specification of an output file, the output looks like 5768 this: 5769 5770 # cc1 0.12 0.01 5771 # as 0.00 0.01 5772 5773 The first number on each line is the "user time", that is time 5774 spent executing the program itself. The second number is "system 5775 time", time spent executing operating system routines on behalf of 5776 the program. Both numbers are in seconds. 5777 5778 With the specification of an output file, the output is appended to 5779 the named file, and it looks like this: 5780 5781 0.12 0.01 cc1 OPTIONS 5782 0.00 0.01 as OPTIONS 5783 5784 The "user time" and the "system time" are moved before the program 5785 name, and the options passed to the program are displayed, so that 5786 one can later tell what file was being compiled, and with which 5787 options. 5788 5789 '-fvar-tracking' 5790 Run variable tracking pass. It computes where variables are stored 5791 at each position in code. Better debugging information is then 5792 generated (if the debugging information format supports this 5793 information). 5794 5795 It is enabled by default when compiling with optimization ('-Os', 5796 '-O', '-O2', ...), debugging information ('-g') and the debug info 5797 format supports it. 5798 5799 '-fvar-tracking-assignments' 5800 Annotate assignments to user variables early in the compilation and 5801 attempt to carry the annotations over throughout the compilation 5802 all the way to the end, in an attempt to improve debug information 5803 while optimizing. Use of '-gdwarf-4' is recommended along with it. 5804 5805 It can be enabled even if var-tracking is disabled, in which case 5806 annotations are created and maintained, but discarded at the end. 5807 5808 '-fvar-tracking-assignments-toggle' 5809 Toggle '-fvar-tracking-assignments', in the same way that 5810 '-gtoggle' toggles '-g'. 5811 5812 '-print-file-name=LIBRARY' 5813 Print the full absolute name of the library file LIBRARY that would 5814 be used when linking--and don't do anything else. With this 5815 option, GCC does not compile or link anything; it just prints the 5816 file name. 5817 5818 '-print-multi-directory' 5819 Print the directory name corresponding to the multilib selected by 5820 any other switches present in the command line. This directory is 5821 supposed to exist in 'GCC_EXEC_PREFIX'. 5822 5823 '-print-multi-lib' 5824 Print the mapping from multilib directory names to compiler 5825 switches that enable them. The directory name is separated from 5826 the switches by ';', and each switch starts with an '@' instead of 5827 the '-', without spaces between multiple switches. This is 5828 supposed to ease shell processing. 5829 5830 '-print-multi-os-directory' 5831 Print the path to OS libraries for the selected multilib, relative 5832 to some 'lib' subdirectory. If OS libraries are present in the 5833 'lib' subdirectory and no multilibs are used, this is usually just 5834 '.', if OS libraries are present in 'libSUFFIX' sibling directories 5835 this prints e.g. '../lib64', '../lib' or '../lib32', or if OS 5836 libraries are present in 'lib/SUBDIR' subdirectories it prints e.g. 5837 'amd64', 'sparcv9' or 'ev6'. 5838 5839 '-print-multiarch' 5840 Print the path to OS libraries for the selected multiarch, relative 5841 to some 'lib' subdirectory. 5842 5843 '-print-prog-name=PROGRAM' 5844 Like '-print-file-name', but searches for a program such as 'cpp'. 5845 5846 '-print-libgcc-file-name' 5847 Same as '-print-file-name=libgcc.a'. 5848 5849 This is useful when you use '-nostdlib' or '-nodefaultlibs' but you 5850 do want to link with 'libgcc.a'. You can do: 5851 5852 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 5853 5854 '-print-search-dirs' 5855 Print the name of the configured installation directory and a list 5856 of program and library directories 'gcc' searches--and don't do 5857 anything else. 5858 5859 This is useful when 'gcc' prints the error message 'installation 5860 problem, cannot exec cpp0: No such file or directory'. To resolve 5861 this you either need to put 'cpp0' and the other compiler 5862 components where 'gcc' expects to find them, or you can set the 5863 environment variable 'GCC_EXEC_PREFIX' to the directory where you 5864 installed them. Don't forget the trailing '/'. *Note Environment 5865 Variables::. 5866 5867 '-print-sysroot' 5868 Print the target sysroot directory that is used during compilation. 5869 This is the target sysroot specified either at configure time or 5870 using the '--sysroot' option, possibly with an extra suffix that 5871 depends on compilation options. If no target sysroot is specified, 5872 the option prints nothing. 5873 5874 '-print-sysroot-headers-suffix' 5875 Print the suffix added to the target sysroot when searching for 5876 headers, or give an error if the compiler is not configured with 5877 such a suffix--and don't do anything else. 5878 5879 '-dumpmachine' 5880 Print the compiler's target machine (for example, 5881 'i686-pc-linux-gnu')--and don't do anything else. 5882 5883 '-dumpversion' 5884 Print the compiler version (for example, '3.0')--and don't do 5885 anything else. 5886 5887 '-dumpspecs' 5888 Print the compiler's built-in specs--and don't do anything else. 5889 (This is used when GCC itself is being built.) *Note Spec Files::. 5890 5891 '-fno-eliminate-unused-debug-types' 5892 Normally, when producing DWARF 2 output, GCC avoids producing debug 5893 symbol output for types that are nowhere used in the source file 5894 being compiled. Sometimes it is useful to have GCC emit debugging 5895 information for all types declared in a compilation unit, 5896 regardless of whether or not they are actually used in that 5897 compilation unit, for example if, in the debugger, you want to cast 5898 a value to a type that is not actually used in your program (but is 5899 declared). More often, however, this results in a significant 5900 amount of wasted space. 5901 5902 5903 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 5904 5905 3.10 Options That Control Optimization 5906 ====================================== 5907 5908 These options control various sorts of optimizations. 5909 5910 Without any optimization option, the compiler's goal is to reduce the 5911 cost of compilation and to make debugging produce the expected results. 5912 Statements are independent: if you stop the program with a breakpoint 5913 between statements, you can then assign a new value to any variable or 5914 change the program counter to any other statement in the function and 5915 get exactly the results you expect from the source code. 5916 5917 Turning on optimization flags makes the compiler attempt to improve the 5918 performance and/or code size at the expense of compilation time and 5919 possibly the ability to debug the program. 5920 5921 The compiler performs optimization based on the knowledge it has of the 5922 program. Compiling multiple files at once to a single output file mode 5923 allows the compiler to use information gained from all of the files when 5924 compiling each of them. 5925 5926 Not all optimizations are controlled directly by a flag. Only 5927 optimizations that have a flag are listed in this section. 5928 5929 Most optimizations are only enabled if an '-O' level is set on the 5930 command line. Otherwise they are disabled, even if individual 5931 optimization flags are specified. 5932 5933 Depending on the target and how GCC was configured, a slightly 5934 different set of optimizations may be enabled at each '-O' level than 5935 those listed here. You can invoke GCC with '-Q --help=optimizers' to 5936 find out the exact set of optimizations that are enabled at each level. 5937 *Note Overall Options::, for examples. 5938 5939 '-O' 5940 '-O1' 5941 Optimize. Optimizing compilation takes somewhat more time, and a 5942 lot more memory for a large function. 5943 5944 With '-O', the compiler tries to reduce code size and execution 5945 time, without performing any optimizations that take a great deal 5946 of compilation time. 5947 5948 '-O' turns on the following optimization flags: 5949 -fauto-inc-dec 5950 -fcompare-elim 5951 -fcprop-registers 5952 -fdce 5953 -fdefer-pop 5954 -fdelayed-branch 5955 -fdse 5956 -fguess-branch-probability 5957 -fif-conversion2 5958 -fif-conversion 5959 -fipa-pure-const 5960 -fipa-profile 5961 -fipa-reference 5962 -fmerge-constants 5963 -fsplit-wide-types 5964 -ftree-bit-ccp 5965 -ftree-builtin-call-dce 5966 -ftree-ccp 5967 -ftree-ch 5968 -ftree-copyrename 5969 -ftree-dce 5970 -ftree-dominator-opts 5971 -ftree-dse 5972 -ftree-forwprop 5973 -ftree-fre 5974 -ftree-phiprop 5975 -ftree-slsr 5976 -ftree-sra 5977 -ftree-pta 5978 -ftree-ter 5979 -funit-at-a-time 5980 5981 '-O' also turns on '-fomit-frame-pointer' on machines where doing 5982 so does not interfere with debugging. 5983 5984 '-O2' 5985 Optimize even more. GCC performs nearly all supported 5986 optimizations that do not involve a space-speed tradeoff. As 5987 compared to '-O', this option increases both compilation time and 5988 the performance of the generated code. 5989 5990 '-O2' turns on all optimization flags specified by '-O'. It also 5991 turns on the following optimization flags: 5992 -fthread-jumps 5993 -falign-functions -falign-jumps 5994 -falign-loops -falign-labels 5995 -fcaller-saves 5996 -fcrossjumping 5997 -fcse-follow-jumps -fcse-skip-blocks 5998 -fdelete-null-pointer-checks 5999 -fdevirtualize 6000 -fexpensive-optimizations 6001 -fgcse -fgcse-lm 6002 -fhoist-adjacent-loads 6003 -finline-small-functions 6004 -findirect-inlining 6005 -fipa-sra 6006 -foptimize-sibling-calls 6007 -fpartial-inlining 6008 -fpeephole2 6009 -fregmove 6010 -freorder-blocks -freorder-functions 6011 -frerun-cse-after-loop 6012 -fsched-interblock -fsched-spec 6013 -fschedule-insns -fschedule-insns2 6014 -fstrict-aliasing -fstrict-overflow 6015 -ftree-switch-conversion -ftree-tail-merge 6016 -ftree-pre 6017 -ftree-vrp 6018 6019 Please note the warning under '-fgcse' about invoking '-O2' on 6020 programs that use computed gotos. 6021 6022 '-O3' 6023 Optimize yet more. '-O3' turns on all optimizations specified by 6024 '-O2' and also turns on the '-finline-functions', 6025 '-funswitch-loops', '-fpredictive-commoning', 6026 '-fgcse-after-reload', '-ftree-vectorize', '-fvect-cost-model', 6027 '-ftree-partial-pre' and '-fipa-cp-clone' options. 6028 6029 '-O0' 6030 Reduce compilation time and make debugging produce the expected 6031 results. This is the default. 6032 6033 '-Os' 6034 Optimize for size. '-Os' enables all '-O2' optimizations that do 6035 not typically increase code size. It also performs further 6036 optimizations designed to reduce code size. 6037 6038 '-Os' disables the following optimization flags: 6039 -falign-functions -falign-jumps -falign-loops 6040 -falign-labels -freorder-blocks -freorder-blocks-and-partition 6041 -fprefetch-loop-arrays -ftree-vect-loop-version 6042 6043 '-Ofast' 6044 Disregard strict standards compliance. '-Ofast' enables all '-O3' 6045 optimizations. It also enables optimizations that are not valid 6046 for all standard-compliant programs. It turns on '-ffast-math' and 6047 the Fortran-specific '-fno-protect-parens' and '-fstack-arrays'. 6048 6049 '-Og' 6050 Optimize debugging experience. '-Og' enables optimizations that do 6051 not interfere with debugging. It should be the optimization level 6052 of choice for the standard edit-compile-debug cycle, offering a 6053 reasonable level of optimization while maintaining fast compilation 6054 and a good debugging experience. 6055 6056 If you use multiple '-O' options, with or without level numbers, 6057 the last such option is the one that is effective. 6058 6059 Options of the form '-fFLAG' specify machine-independent flags. Most 6060 flags have both positive and negative forms; the negative form of 6061 '-ffoo' is '-fno-foo'. In the table below, only one of the forms is 6062 listed--the one you typically use. You can figure out the other form by 6063 either removing 'no-' or adding it. 6064 6065 The following options control specific optimizations. They are either 6066 activated by '-O' options or are related to ones that are. You can use 6067 the following flags in the rare cases when "fine-tuning" of 6068 optimizations to be performed is desired. 6069 6070 '-fno-default-inline' 6071 Do not make member functions inline by default merely because they 6072 are defined inside the class scope (C++ only). Otherwise, when you 6073 specify '-O', member functions defined inside class scope are 6074 compiled inline by default; i.e., you don't need to add 'inline' in 6075 front of the member function name. 6076 6077 '-fno-defer-pop' 6078 Always pop the arguments to each function call as soon as that 6079 function returns. For machines that must pop arguments after a 6080 function call, the compiler normally lets arguments accumulate on 6081 the stack for several function calls and pops them all at once. 6082 6083 Disabled at levels '-O', '-O2', '-O3', '-Os'. 6084 6085 '-fforward-propagate' 6086 Perform a forward propagation pass on RTL. The pass tries to 6087 combine two instructions and checks if the result can be 6088 simplified. If loop unrolling is active, two passes are performed 6089 and the second is scheduled after loop unrolling. 6090 6091 This option is enabled by default at optimization levels '-O', 6092 '-O2', '-O3', '-Os'. 6093 6094 '-ffp-contract=STYLE' 6095 '-ffp-contract=off' disables floating-point expression contraction. 6096 '-ffp-contract=fast' enables floating-point expression contraction 6097 such as forming of fused multiply-add operations if the target has 6098 native support for them. '-ffp-contract=on' enables floating-point 6099 expression contraction if allowed by the language standard. This 6100 is currently not implemented and treated equal to 6101 '-ffp-contract=off'. 6102 6103 The default is '-ffp-contract=fast'. 6104 6105 '-fomit-frame-pointer' 6106 Don't keep the frame pointer in a register for functions that don't 6107 need one. This avoids the instructions to save, set up and restore 6108 frame pointers; it also makes an extra register available in many 6109 functions. *It also makes debugging impossible on some machines.* 6110 6111 On some machines, such as the VAX, this flag has no effect, because 6112 the standard calling sequence automatically handles the frame 6113 pointer and nothing is saved by pretending it doesn't exist. The 6114 machine-description macro 'FRAME_POINTER_REQUIRED' controls whether 6115 a target machine supports this flag. *Note Register Usage: 6116 (gccint)Registers. 6117 6118 Starting with GCC version 4.6, the default setting (when not 6119 optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 6120 targets has been changed to '-fomit-frame-pointer'. The default 6121 can be reverted to '-fno-omit-frame-pointer' by configuring GCC 6122 with the '--enable-frame-pointer' configure option. 6123 6124 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6125 6126 '-foptimize-sibling-calls' 6127 Optimize sibling and tail recursive calls. 6128 6129 Enabled at levels '-O2', '-O3', '-Os'. 6130 6131 '-fno-inline' 6132 Do not expand any functions inline apart from those marked with the 6133 'always_inline' attribute. This is the default when not 6134 optimizing. 6135 6136 Single functions can be exempted from inlining by marking them with 6137 the 'noinline' attribute. 6138 6139 '-finline-small-functions' 6140 Integrate functions into their callers when their body is smaller 6141 than expected function call code (so overall size of program gets 6142 smaller). The compiler heuristically decides which functions are 6143 simple enough to be worth integrating in this way. This inlining 6144 applies to all functions, even those not declared inline. 6145 6146 Enabled at level '-O2'. 6147 6148 '-findirect-inlining' 6149 Inline also indirect calls that are discovered to be known at 6150 compile time thanks to previous inlining. This option has any 6151 effect only when inlining itself is turned on by the 6152 '-finline-functions' or '-finline-small-functions' options. 6153 6154 Enabled at level '-O2'. 6155 6156 '-finline-functions' 6157 Consider all functions for inlining, even if they are not declared 6158 inline. The compiler heuristically decides which functions are 6159 worth integrating in this way. 6160 6161 If all calls to a given function are integrated, and the function 6162 is declared 'static', then the function is normally not output as 6163 assembler code in its own right. 6164 6165 Enabled at level '-O3'. 6166 6167 '-finline-functions-called-once' 6168 Consider all 'static' functions called once for inlining into their 6169 caller even if they are not marked 'inline'. If a call to a given 6170 function is integrated, then the function is not output as 6171 assembler code in its own right. 6172 6173 Enabled at levels '-O1', '-O2', '-O3' and '-Os'. 6174 6175 '-fearly-inlining' 6176 Inline functions marked by 'always_inline' and functions whose body 6177 seems smaller than the function call overhead early before doing 6178 '-fprofile-generate' instrumentation and real inlining pass. Doing 6179 so makes profiling significantly cheaper and usually inlining 6180 faster on programs having large chains of nested wrapper functions. 6181 6182 Enabled by default. 6183 6184 '-fipa-sra' 6185 Perform interprocedural scalar replacement of aggregates, removal 6186 of unused parameters and replacement of parameters passed by 6187 reference by parameters passed by value. 6188 6189 Enabled at levels '-O2', '-O3' and '-Os'. 6190 6191 '-finline-limit=N' 6192 By default, GCC limits the size of functions that can be inlined. 6193 This flag allows coarse control of this limit. N is the size of 6194 functions that can be inlined in number of pseudo instructions. 6195 6196 Inlining is actually controlled by a number of parameters, which 6197 may be specified individually by using '--param NAME=VALUE'. The 6198 '-finline-limit=N' option sets some of these parameters as follows: 6199 6200 'max-inline-insns-single' 6201 is set to N/2. 6202 'max-inline-insns-auto' 6203 is set to N/2. 6204 6205 See below for a documentation of the individual parameters 6206 controlling inlining and for the defaults of these parameters. 6207 6208 _Note:_ there may be no value to '-finline-limit' that results in 6209 default behavior. 6210 6211 _Note:_ pseudo instruction represents, in this particular context, 6212 an abstract measurement of function's size. In no way does it 6213 represent a count of assembly instructions and as such its exact 6214 meaning might change from one release to an another. 6215 6216 '-fno-keep-inline-dllexport' 6217 This is a more fine-grained version of '-fkeep-inline-functions', 6218 which applies only to functions that are declared using the 6219 'dllexport' attribute or declspec (*Note Declaring Attributes of 6220 Functions: Function Attributes.) 6221 6222 '-fkeep-inline-functions' 6223 In C, emit 'static' functions that are declared 'inline' into the 6224 object file, even if the function has been inlined into all of its 6225 callers. This switch does not affect functions using the 'extern 6226 inline' extension in GNU C90. In C++, emit any and all inline 6227 functions into the object file. 6228 6229 '-fkeep-static-consts' 6230 Emit variables declared 'static const' when optimization isn't 6231 turned on, even if the variables aren't referenced. 6232 6233 GCC enables this option by default. If you want to force the 6234 compiler to check if a variable is referenced, regardless of 6235 whether or not optimization is turned on, use the 6236 '-fno-keep-static-consts' option. 6237 6238 '-fmerge-constants' 6239 Attempt to merge identical constants (string constants and 6240 floating-point constants) across compilation units. 6241 6242 This option is the default for optimized compilation if the 6243 assembler and linker support it. Use '-fno-merge-constants' to 6244 inhibit this behavior. 6245 6246 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6247 6248 '-fmerge-all-constants' 6249 Attempt to merge identical constants and identical variables. 6250 6251 This option implies '-fmerge-constants'. In addition to 6252 '-fmerge-constants' this considers e.g. even constant initialized 6253 arrays or initialized constant variables with integral or 6254 floating-point types. Languages like C or C++ require each 6255 variable, including multiple instances of the same variable in 6256 recursive calls, to have distinct locations, so using this option 6257 results in non-conforming behavior. 6258 6259 '-fmodulo-sched' 6260 Perform swing modulo scheduling immediately before the first 6261 scheduling pass. This pass looks at innermost loops and reorders 6262 their instructions by overlapping different iterations. 6263 6264 '-fmodulo-sched-allow-regmoves' 6265 Perform more aggressive SMS-based modulo scheduling with register 6266 moves allowed. By setting this flag certain anti-dependences edges 6267 are deleted, which triggers the generation of reg-moves based on 6268 the life-range analysis. This option is effective only with 6269 '-fmodulo-sched' enabled. 6270 6271 '-fno-branch-count-reg' 6272 Do not use "decrement and branch" instructions on a count register, 6273 but instead generate a sequence of instructions that decrement a 6274 register, compare it against zero, then branch based upon the 6275 result. This option is only meaningful on architectures that 6276 support such instructions, which include x86, PowerPC, IA-64 and 6277 S/390. 6278 6279 The default is '-fbranch-count-reg'. 6280 6281 '-fno-function-cse' 6282 Do not put function addresses in registers; make each instruction 6283 that calls a constant function contain the function's address 6284 explicitly. 6285 6286 This option results in less efficient code, but some strange hacks 6287 that alter the assembler output may be confused by the 6288 optimizations performed when this option is not used. 6289 6290 The default is '-ffunction-cse' 6291 6292 '-fno-zero-initialized-in-bss' 6293 If the target supports a BSS section, GCC by default puts variables 6294 that are initialized to zero into BSS. This can save space in the 6295 resulting code. 6296 6297 This option turns off this behavior because some programs 6298 explicitly rely on variables going to the data section--e.g., so 6299 that the resulting executable can find the beginning of that 6300 section and/or make assumptions based on that. 6301 6302 The default is '-fzero-initialized-in-bss'. 6303 6304 '-fmudflap -fmudflapth -fmudflapir' 6305 For front-ends that support it (C and C++), instrument all risky 6306 pointer/array dereferencing operations, some standard library 6307 string/heap functions, and some other associated constructs with 6308 range/validity tests. Modules so instrumented should be immune to 6309 buffer overflows, invalid heap use, and some other classes of C/C++ 6310 programming errors. The instrumentation relies on a separate 6311 runtime library ('libmudflap'), which is linked into a program if 6312 '-fmudflap' is given at link time. Run-time behavior of the 6313 instrumented program is controlled by the 'MUDFLAP_OPTIONS' 6314 environment variable. See 'env MUDFLAP_OPTIONS=-help a.out' for 6315 its options. 6316 6317 Use '-fmudflapth' instead of '-fmudflap' to compile and to link if 6318 your program is multi-threaded. Use '-fmudflapir', in addition to 6319 '-fmudflap' or '-fmudflapth', if instrumentation should ignore 6320 pointer reads. This produces less instrumentation (and therefore 6321 faster execution) and still provides some protection against 6322 outright memory corrupting writes, but allows erroneously read data 6323 to propagate within a program. 6324 6325 '-fthread-jumps' 6326 Perform optimizations that check to see if a jump branches to a 6327 location where another comparison subsumed by the first is found. 6328 If so, the first branch is redirected to either the destination of 6329 the second branch or a point immediately following it, depending on 6330 whether the condition is known to be true or false. 6331 6332 Enabled at levels '-O2', '-O3', '-Os'. 6333 6334 '-fsplit-wide-types' 6335 When using a type that occupies multiple registers, such as 'long 6336 long' on a 32-bit system, split the registers apart and allocate 6337 them independently. This normally generates better code for those 6338 types, but may make debugging more difficult. 6339 6340 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6341 6342 '-fcse-follow-jumps' 6343 In common subexpression elimination (CSE), scan through jump 6344 instructions when the target of the jump is not reached by any 6345 other path. For example, when CSE encounters an 'if' statement 6346 with an 'else' clause, CSE follows the jump when the condition 6347 tested is false. 6348 6349 Enabled at levels '-O2', '-O3', '-Os'. 6350 6351 '-fcse-skip-blocks' 6352 This is similar to '-fcse-follow-jumps', but causes CSE to follow 6353 jumps that conditionally skip over blocks. When CSE encounters a 6354 simple 'if' statement with no else clause, '-fcse-skip-blocks' 6355 causes CSE to follow the jump around the body of the 'if'. 6356 6357 Enabled at levels '-O2', '-O3', '-Os'. 6358 6359 '-frerun-cse-after-loop' 6360 Re-run common subexpression elimination after loop optimizations 6361 are performed. 6362 6363 Enabled at levels '-O2', '-O3', '-Os'. 6364 6365 '-fgcse' 6366 Perform a global common subexpression elimination pass. This pass 6367 also performs global constant and copy propagation. 6368 6369 _Note:_ When compiling a program using computed gotos, a GCC 6370 extension, you may get better run-time performance if you disable 6371 the global common subexpression elimination pass by adding 6372 '-fno-gcse' to the command line. 6373 6374 Enabled at levels '-O2', '-O3', '-Os'. 6375 6376 '-fgcse-lm' 6377 When '-fgcse-lm' is enabled, global common subexpression 6378 elimination attempts to move loads that are only killed by stores 6379 into themselves. This allows a loop containing a load/store 6380 sequence to be changed to a load outside the loop, and a copy/store 6381 within the loop. 6382 6383 Enabled by default when '-fgcse' is enabled. 6384 6385 '-fgcse-sm' 6386 When '-fgcse-sm' is enabled, a store motion pass is run after 6387 global common subexpression elimination. This pass attempts to 6388 move stores out of loops. When used in conjunction with 6389 '-fgcse-lm', loops containing a load/store sequence can be changed 6390 to a load before the loop and a store after the loop. 6391 6392 Not enabled at any optimization level. 6393 6394 '-fgcse-las' 6395 When '-fgcse-las' is enabled, the global common subexpression 6396 elimination pass eliminates redundant loads that come after stores 6397 to the same memory location (both partial and full redundancies). 6398 6399 Not enabled at any optimization level. 6400 6401 '-fgcse-after-reload' 6402 When '-fgcse-after-reload' is enabled, a redundant load elimination 6403 pass is performed after reload. The purpose of this pass is to 6404 clean up redundant spilling. 6405 6406 '-faggressive-loop-optimizations' 6407 This option tells the loop optimizer to use language constraints to 6408 derive bounds for the number of iterations of a loop. This assumes 6409 that loop code does not invoke undefined behavior by for example 6410 causing signed integer overflows or out-of-bound array accesses. 6411 The bounds for the number of iterations of a loop are used to guide 6412 loop unrolling and peeling and loop exit test optimizations. This 6413 option is enabled by default. 6414 6415 '-funsafe-loop-optimizations' 6416 This option tells the loop optimizer to assume that loop indices do 6417 not overflow, and that loops with nontrivial exit condition are not 6418 infinite. This enables a wider range of loop optimizations even if 6419 the loop optimizer itself cannot prove that these assumptions are 6420 valid. If you use '-Wunsafe-loop-optimizations', the compiler 6421 warns you if it finds this kind of loop. 6422 6423 '-fcrossjumping' 6424 Perform cross-jumping transformation. This transformation unifies 6425 equivalent code and saves code size. The resulting code may or may 6426 not perform better than without cross-jumping. 6427 6428 Enabled at levels '-O2', '-O3', '-Os'. 6429 6430 '-fauto-inc-dec' 6431 Combine increments or decrements of addresses with memory accesses. 6432 This pass is always skipped on architectures that do not have 6433 instructions to support this. Enabled by default at '-O' and 6434 higher on architectures that support this. 6435 6436 '-fdce' 6437 Perform dead code elimination (DCE) on RTL. Enabled by default at 6438 '-O' and higher. 6439 6440 '-fdse' 6441 Perform dead store elimination (DSE) on RTL. Enabled by default at 6442 '-O' and higher. 6443 6444 '-fif-conversion' 6445 Attempt to transform conditional jumps into branch-less 6446 equivalents. This includes use of conditional moves, min, max, set 6447 flags and abs instructions, and some tricks doable by standard 6448 arithmetics. The use of conditional execution on chips where it is 6449 available is controlled by 'if-conversion2'. 6450 6451 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6452 6453 '-fif-conversion2' 6454 Use conditional execution (where available) to transform 6455 conditional jumps into branch-less equivalents. 6456 6457 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6458 6459 '-fdelete-null-pointer-checks' 6460 Assume that programs cannot safely dereference null pointers, and 6461 that no code or data element resides there. This enables simple 6462 constant folding optimizations at all optimization levels. In 6463 addition, other optimization passes in GCC use this flag to control 6464 global dataflow analyses that eliminate useless checks for null 6465 pointers; these assume that if a pointer is checked after it has 6466 already been dereferenced, it cannot be null. 6467 6468 Note however that in some environments this assumption is not true. 6469 Use '-fno-delete-null-pointer-checks' to disable this optimization 6470 for programs that depend on that behavior. 6471 6472 Some targets, especially embedded ones, disable this option at all 6473 levels. Otherwise it is enabled at all levels: '-O0', '-O1', 6474 '-O2', '-O3', '-Os'. Passes that use the information are enabled 6475 independently at different optimization levels. 6476 6477 '-fdevirtualize' 6478 Attempt to convert calls to virtual functions to direct calls. 6479 This is done both within a procedure and interprocedurally as part 6480 of indirect inlining ('-findirect-inlining') and interprocedural 6481 constant propagation ('-fipa-cp'). Enabled at levels '-O2', '-O3', 6482 '-Os'. 6483 6484 '-fexpensive-optimizations' 6485 Perform a number of minor optimizations that are relatively 6486 expensive. 6487 6488 Enabled at levels '-O2', '-O3', '-Os'. 6489 6490 '-free' 6491 Attempt to remove redundant extension instructions. This is 6492 especially helpful for the x86-64 architecture, which implicitly 6493 zero-extends in 64-bit registers after writing to their lower 6494 32-bit half. 6495 6496 Enabled for x86 at levels '-O2', '-O3'. 6497 6498 '-foptimize-register-move' 6499 '-fregmove' 6500 Attempt to reassign register numbers in move instructions and as 6501 operands of other simple instructions in order to maximize the 6502 amount of register tying. This is especially helpful on machines 6503 with two-operand instructions. 6504 6505 Note '-fregmove' and '-foptimize-register-move' are the same 6506 optimization. 6507 6508 Enabled at levels '-O2', '-O3', '-Os'. 6509 6510 '-fira-algorithm=ALGORITHM' 6511 Use the specified coloring algorithm for the integrated register 6512 allocator. The ALGORITHM argument can be 'priority', which 6513 specifies Chow's priority coloring, or 'CB', which specifies 6514 Chaitin-Briggs coloring. Chaitin-Briggs coloring is not 6515 implemented for all architectures, but for those targets that do 6516 support it, it is the default because it generates better code. 6517 6518 '-fira-region=REGION' 6519 Use specified regions for the integrated register allocator. The 6520 REGION argument should be one of the following: 6521 6522 'all' 6523 Use all loops as register allocation regions. This can give 6524 the best results for machines with a small and/or irregular 6525 register set. 6526 6527 'mixed' 6528 Use all loops except for loops with small register pressure as 6529 the regions. This value usually gives the best results in 6530 most cases and for most architectures, and is enabled by 6531 default when compiling with optimization for speed ('-O', 6532 '-O2', ...). 6533 6534 'one' 6535 Use all functions as a single region. This typically results 6536 in the smallest code size, and is enabled by default for '-Os' 6537 or '-O0'. 6538 6539 '-fira-hoist-pressure' 6540 Use IRA to evaluate register pressure in the code hoisting pass for 6541 decisions to hoist expressions. This option usually results in 6542 smaller code, but it can slow the compiler down. 6543 6544 This option is enabled at level '-Os' for all targets. 6545 6546 '-fira-loop-pressure' 6547 Use IRA to evaluate register pressure in loops for decisions to 6548 move loop invariants. This option usually results in generation of 6549 faster and smaller code on machines with large register files (>= 6550 32 registers), but it can slow the compiler down. 6551 6552 This option is enabled at level '-O3' for some targets. 6553 6554 '-fno-ira-share-save-slots' 6555 Disable sharing of stack slots used for saving call-used hard 6556 registers living through a call. Each hard register gets a 6557 separate stack slot, and as a result function stack frames are 6558 larger. 6559 6560 '-fno-ira-share-spill-slots' 6561 Disable sharing of stack slots allocated for pseudo-registers. 6562 Each pseudo-register that does not get a hard register gets a 6563 separate stack slot, and as a result function stack frames are 6564 larger. 6565 6566 '-fira-verbose=N' 6567 Control the verbosity of the dump file for the integrated register 6568 allocator. The default value is 5. If the value N is greater or 6569 equal to 10, the dump output is sent to stderr using the same 6570 format as N minus 10. 6571 6572 '-fdelayed-branch' 6573 If supported for the target machine, attempt to reorder 6574 instructions to exploit instruction slots available after delayed 6575 branch instructions. 6576 6577 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6578 6579 '-fschedule-insns' 6580 If supported for the target machine, attempt to reorder 6581 instructions to eliminate execution stalls due to required data 6582 being unavailable. This helps machines that have slow floating 6583 point or memory load instructions by allowing other instructions to 6584 be issued until the result of the load or floating-point 6585 instruction is required. 6586 6587 Enabled at levels '-O2', '-O3'. 6588 6589 '-fschedule-insns2' 6590 Similar to '-fschedule-insns', but requests an additional pass of 6591 instruction scheduling after register allocation has been done. 6592 This is especially useful on machines with a relatively small 6593 number of registers and where memory load instructions take more 6594 than one cycle. 6595 6596 Enabled at levels '-O2', '-O3', '-Os'. 6597 6598 '-fno-sched-interblock' 6599 Don't schedule instructions across basic blocks. This is normally 6600 enabled by default when scheduling before register allocation, i.e. 6601 with '-fschedule-insns' or at '-O2' or higher. 6602 6603 '-fno-sched-spec' 6604 Don't allow speculative motion of non-load instructions. This is 6605 normally enabled by default when scheduling before register 6606 allocation, i.e. with '-fschedule-insns' or at '-O2' or higher. 6607 6608 '-fsched-pressure' 6609 Enable register pressure sensitive insn scheduling before register 6610 allocation. This only makes sense when scheduling before register 6611 allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or 6612 higher. Usage of this option can improve the generated code and 6613 decrease its size by preventing register pressure increase above 6614 the number of available hard registers and subsequent spills in 6615 register allocation. 6616 6617 '-fsched-spec-load' 6618 Allow speculative motion of some load instructions. This only 6619 makes sense when scheduling before register allocation, i.e. with 6620 '-fschedule-insns' or at '-O2' or higher. 6621 6622 '-fsched-spec-load-dangerous' 6623 Allow speculative motion of more load instructions. This only 6624 makes sense when scheduling before register allocation, i.e. with 6625 '-fschedule-insns' or at '-O2' or higher. 6626 6627 '-fsched-stalled-insns' 6628 '-fsched-stalled-insns=N' 6629 Define how many insns (if any) can be moved prematurely from the 6630 queue of stalled insns into the ready list during the second 6631 scheduling pass. '-fno-sched-stalled-insns' means that no insns 6632 are moved prematurely, '-fsched-stalled-insns=0' means there is no 6633 limit on how many queued insns can be moved prematurely. 6634 '-fsched-stalled-insns' without a value is equivalent to 6635 '-fsched-stalled-insns=1'. 6636 6637 '-fsched-stalled-insns-dep' 6638 '-fsched-stalled-insns-dep=N' 6639 Define how many insn groups (cycles) are examined for a dependency 6640 on a stalled insn that is a candidate for premature removal from 6641 the queue of stalled insns. This has an effect only during the 6642 second scheduling pass, and only if '-fsched-stalled-insns' is 6643 used. '-fno-sched-stalled-insns-dep' is equivalent to 6644 '-fsched-stalled-insns-dep=0'. '-fsched-stalled-insns-dep' without 6645 a value is equivalent to '-fsched-stalled-insns-dep=1'. 6646 6647 '-fsched2-use-superblocks' 6648 When scheduling after register allocation, use superblock 6649 scheduling. This allows motion across basic block boundaries, 6650 resulting in faster schedules. This option is experimental, as not 6651 all machine descriptions used by GCC model the CPU closely enough 6652 to avoid unreliable results from the algorithm. 6653 6654 This only makes sense when scheduling after register allocation, 6655 i.e. with '-fschedule-insns2' or at '-O2' or higher. 6656 6657 '-fsched-group-heuristic' 6658 Enable the group heuristic in the scheduler. This heuristic favors 6659 the instruction that belongs to a schedule group. This is enabled 6660 by default when scheduling is enabled, i.e. with '-fschedule-insns' 6661 or '-fschedule-insns2' or at '-O2' or higher. 6662 6663 '-fsched-critical-path-heuristic' 6664 Enable the critical-path heuristic in the scheduler. This 6665 heuristic favors instructions on the critical path. This is 6666 enabled by default when scheduling is enabled, i.e. with 6667 '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher. 6668 6669 '-fsched-spec-insn-heuristic' 6670 Enable the speculative instruction heuristic in the scheduler. 6671 This heuristic favors speculative instructions with greater 6672 dependency weakness. This is enabled by default when scheduling is 6673 enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at 6674 '-O2' or higher. 6675 6676 '-fsched-rank-heuristic' 6677 Enable the rank heuristic in the scheduler. This heuristic favors 6678 the instruction belonging to a basic block with greater size or 6679 frequency. This is enabled by default when scheduling is enabled, 6680 i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or 6681 higher. 6682 6683 '-fsched-last-insn-heuristic' 6684 Enable the last-instruction heuristic in the scheduler. This 6685 heuristic favors the instruction that is less dependent on the last 6686 instruction scheduled. This is enabled by default when scheduling 6687 is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or 6688 at '-O2' or higher. 6689 6690 '-fsched-dep-count-heuristic' 6691 Enable the dependent-count heuristic in the scheduler. This 6692 heuristic favors the instruction that has more instructions 6693 depending on it. This is enabled by default when scheduling is 6694 enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at 6695 '-O2' or higher. 6696 6697 '-freschedule-modulo-scheduled-loops' 6698 Modulo scheduling is performed before traditional scheduling. If a 6699 loop is modulo scheduled, later scheduling passes may change its 6700 schedule. Use this option to control that behavior. 6701 6702 '-fselective-scheduling' 6703 Schedule instructions using selective scheduling algorithm. 6704 Selective scheduling runs instead of the first scheduler pass. 6705 6706 '-fselective-scheduling2' 6707 Schedule instructions using selective scheduling algorithm. 6708 Selective scheduling runs instead of the second scheduler pass. 6709 6710 '-fsel-sched-pipelining' 6711 Enable software pipelining of innermost loops during selective 6712 scheduling. This option has no effect unless one of 6713 '-fselective-scheduling' or '-fselective-scheduling2' is turned on. 6714 6715 '-fsel-sched-pipelining-outer-loops' 6716 When pipelining loops during selective scheduling, also pipeline 6717 outer loops. This option has no effect unless 6718 '-fsel-sched-pipelining' is turned on. 6719 6720 '-fshrink-wrap' 6721 Emit function prologues only before parts of the function that need 6722 it, rather than at the top of the function. This flag is enabled 6723 by default at '-O' and higher. 6724 6725 '-fcaller-saves' 6726 Enable allocation of values to registers that are clobbered by 6727 function calls, by emitting extra instructions to save and restore 6728 the registers around such calls. Such allocation is done only when 6729 it seems to result in better code. 6730 6731 This option is always enabled by default on certain machines, 6732 usually those which have no call-preserved registers to use 6733 instead. 6734 6735 Enabled at levels '-O2', '-O3', '-Os'. 6736 6737 '-fcombine-stack-adjustments' 6738 Tracks stack adjustments (pushes and pops) and stack memory 6739 references and then tries to find ways to combine them. 6740 6741 Enabled by default at '-O1' and higher. 6742 6743 '-fconserve-stack' 6744 Attempt to minimize stack usage. The compiler attempts to use less 6745 stack space, even if that makes the program slower. This option 6746 implies setting the 'large-stack-frame' parameter to 100 and the 6747 'large-stack-frame-growth' parameter to 400. 6748 6749 '-ftree-reassoc' 6750 Perform reassociation on trees. This flag is enabled by default at 6751 '-O' and higher. 6752 6753 '-ftree-pre' 6754 Perform partial redundancy elimination (PRE) on trees. This flag 6755 is enabled by default at '-O2' and '-O3'. 6756 6757 '-ftree-partial-pre' 6758 Make partial redundancy elimination (PRE) more aggressive. This 6759 flag is enabled by default at '-O3'. 6760 6761 '-ftree-forwprop' 6762 Perform forward propagation on trees. This flag is enabled by 6763 default at '-O' and higher. 6764 6765 '-ftree-fre' 6766 Perform full redundancy elimination (FRE) on trees. The difference 6767 between FRE and PRE is that FRE only considers expressions that are 6768 computed on all paths leading to the redundant computation. This 6769 analysis is faster than PRE, though it exposes fewer redundancies. 6770 This flag is enabled by default at '-O' and higher. 6771 6772 '-ftree-phiprop' 6773 Perform hoisting of loads from conditional pointers on trees. This 6774 pass is enabled by default at '-O' and higher. 6775 6776 '-fhoist-adjacent-loads' 6777 Speculatively hoist loads from both branches of an if-then-else if 6778 the loads are from adjacent locations in the same structure and the 6779 target architecture has a conditional move instruction. This flag 6780 is enabled by default at '-O2' and higher. 6781 6782 '-ftree-copy-prop' 6783 Perform copy propagation on trees. This pass eliminates 6784 unnecessary copy operations. This flag is enabled by default at 6785 '-O' and higher. 6786 6787 '-fipa-pure-const' 6788 Discover which functions are pure or constant. Enabled by default 6789 at '-O' and higher. 6790 6791 '-fipa-reference' 6792 Discover which static variables do not escape the compilation unit. 6793 Enabled by default at '-O' and higher. 6794 6795 '-fipa-pta' 6796 Perform interprocedural pointer analysis and interprocedural 6797 modification and reference analysis. This option can cause 6798 excessive memory and compile-time usage on large compilation units. 6799 It is not enabled by default at any optimization level. 6800 6801 '-fipa-profile' 6802 Perform interprocedural profile propagation. The functions called 6803 only from cold functions are marked as cold. Also functions 6804 executed once (such as 'cold', 'noreturn', static constructors or 6805 destructors) are identified. Cold functions and loop less parts of 6806 functions executed once are then optimized for size. Enabled by 6807 default at '-O' and higher. 6808 6809 '-fipa-cp' 6810 Perform interprocedural constant propagation. This optimization 6811 analyzes the program to determine when values passed to functions 6812 are constants and then optimizes accordingly. This optimization 6813 can substantially increase performance if the application has 6814 constants passed to functions. This flag is enabled by default at 6815 '-O2', '-Os' and '-O3'. 6816 6817 '-fipa-cp-clone' 6818 Perform function cloning to make interprocedural constant 6819 propagation stronger. When enabled, interprocedural constant 6820 propagation performs function cloning when externally visible 6821 function can be called with constant arguments. Because this 6822 optimization can create multiple copies of functions, it may 6823 significantly increase code size (see '--param 6824 ipcp-unit-growth=VALUE'). This flag is enabled by default at 6825 '-O3'. 6826 6827 '-ftree-sink' 6828 Perform forward store motion on trees. This flag is enabled by 6829 default at '-O' and higher. 6830 6831 '-ftree-bit-ccp' 6832 Perform sparse conditional bit constant propagation on trees and 6833 propagate pointer alignment information. This pass only operates 6834 on local scalar variables and is enabled by default at '-O' and 6835 higher. It requires that '-ftree-ccp' is enabled. 6836 6837 '-ftree-ccp' 6838 Perform sparse conditional constant propagation (CCP) on trees. 6839 This pass only operates on local scalar variables and is enabled by 6840 default at '-O' and higher. 6841 6842 '-ftree-switch-conversion' 6843 Perform conversion of simple initializations in a switch to 6844 initializations from a scalar array. This flag is enabled by 6845 default at '-O2' and higher. 6846 6847 '-ftree-tail-merge' 6848 Look for identical code sequences. When found, replace one with a 6849 jump to the other. This optimization is known as tail merging or 6850 cross jumping. This flag is enabled by default at '-O2' and 6851 higher. The compilation time in this pass can be limited using 6852 'max-tail-merge-comparisons' parameter and 6853 'max-tail-merge-iterations' parameter. 6854 6855 '-ftree-dce' 6856 Perform dead code elimination (DCE) on trees. This flag is enabled 6857 by default at '-O' and higher. 6858 6859 '-ftree-builtin-call-dce' 6860 Perform conditional dead code elimination (DCE) for calls to 6861 built-in functions that may set 'errno' but are otherwise 6862 side-effect free. This flag is enabled by default at '-O2' and 6863 higher if '-Os' is not also specified. 6864 6865 '-ftree-dominator-opts' 6866 Perform a variety of simple scalar cleanups (constant/copy 6867 propagation, redundancy elimination, range propagation and 6868 expression simplification) based on a dominator tree traversal. 6869 This also performs jump threading (to reduce jumps to jumps). This 6870 flag is enabled by default at '-O' and higher. 6871 6872 '-ftree-dse' 6873 Perform dead store elimination (DSE) on trees. A dead store is a 6874 store into a memory location that is later overwritten by another 6875 store without any intervening loads. In this case the earlier 6876 store can be deleted. This flag is enabled by default at '-O' and 6877 higher. 6878 6879 '-ftree-ch' 6880 Perform loop header copying on trees. This is beneficial since it 6881 increases effectiveness of code motion optimizations. It also 6882 saves one jump. This flag is enabled by default at '-O' and 6883 higher. It is not enabled for '-Os', since it usually increases 6884 code size. 6885 6886 '-ftree-loop-optimize' 6887 Perform loop optimizations on trees. This flag is enabled by 6888 default at '-O' and higher. 6889 6890 '-ftree-loop-linear' 6891 Perform loop interchange transformations on tree. Same as 6892 '-floop-interchange'. To use this code transformation, GCC has to 6893 be configured with '--with-ppl' and '--with-cloog' to enable the 6894 Graphite loop transformation infrastructure. 6895 6896 '-floop-interchange' 6897 Perform loop interchange transformations on loops. Interchanging 6898 two nested loops switches the inner and outer loops. For example, 6899 given a loop like: 6900 DO J = 1, M 6901 DO I = 1, N 6902 A(J, I) = A(J, I) * C 6903 ENDDO 6904 ENDDO 6905 loop interchange transforms the loop as if it were written: 6906 DO I = 1, N 6907 DO J = 1, M 6908 A(J, I) = A(J, I) * C 6909 ENDDO 6910 ENDDO 6911 which can be beneficial when 'N' is larger than the caches, because 6912 in Fortran, the elements of an array are stored in memory 6913 contiguously by column, and the original loop iterates over rows, 6914 potentially creating at each access a cache miss. This 6915 optimization applies to all the languages supported by GCC and is 6916 not limited to Fortran. To use this code transformation, GCC has 6917 to be configured with '--with-ppl' and '--with-cloog' to enable the 6918 Graphite loop transformation infrastructure. 6919 6920 '-floop-strip-mine' 6921 Perform loop strip mining transformations on loops. Strip mining 6922 splits a loop into two nested loops. The outer loop has strides 6923 equal to the strip size and the inner loop has strides of the 6924 original loop within a strip. The strip length can be changed 6925 using the 'loop-block-tile-size' parameter. For example, given a 6926 loop like: 6927 DO I = 1, N 6928 A(I) = A(I) + C 6929 ENDDO 6930 loop strip mining transforms the loop as if it were written: 6931 DO II = 1, N, 51 6932 DO I = II, min (II + 50, N) 6933 A(I) = A(I) + C 6934 ENDDO 6935 ENDDO 6936 This optimization applies to all the languages supported by GCC and 6937 is not limited to Fortran. To use this code transformation, GCC 6938 has to be configured with '--with-ppl' and '--with-cloog' to enable 6939 the Graphite loop transformation infrastructure. 6940 6941 '-floop-block' 6942 Perform loop blocking transformations on loops. Blocking strip 6943 mines each loop in the loop nest such that the memory accesses of 6944 the element loops fit inside caches. The strip length can be 6945 changed using the 'loop-block-tile-size' parameter. For example, 6946 given a loop like: 6947 DO I = 1, N 6948 DO J = 1, M 6949 A(J, I) = B(I) + C(J) 6950 ENDDO 6951 ENDDO 6952 loop blocking transforms the loop as if it were written: 6953 DO II = 1, N, 51 6954 DO JJ = 1, M, 51 6955 DO I = II, min (II + 50, N) 6956 DO J = JJ, min (JJ + 50, M) 6957 A(J, I) = B(I) + C(J) 6958 ENDDO 6959 ENDDO 6960 ENDDO 6961 ENDDO 6962 which can be beneficial when 'M' is larger than the caches, because 6963 the innermost loop iterates over a smaller amount of data which can 6964 be kept in the caches. This optimization applies to all the 6965 languages supported by GCC and is not limited to Fortran. To use 6966 this code transformation, GCC has to be configured with 6967 '--with-ppl' and '--with-cloog' to enable the Graphite loop 6968 transformation infrastructure. 6969 6970 '-fgraphite-identity' 6971 Enable the identity transformation for graphite. For every SCoP we 6972 generate the polyhedral representation and transform it back to 6973 gimple. Using '-fgraphite-identity' we can check the costs or 6974 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 6975 minimal optimizations are also performed by the code generator 6976 CLooG, like index splitting and dead code elimination in loops. 6977 6978 '-floop-nest-optimize' 6979 Enable the ISL based loop nest optimizer. This is a generic loop 6980 nest optimizer based on the Pluto optimization algorithms. It 6981 calculates a loop structure optimized for data-locality and 6982 parallelism. This option is experimental. 6983 6984 '-floop-parallelize-all' 6985 Use the Graphite data dependence analysis to identify loops that 6986 can be parallelized. Parallelize all the loops that can be 6987 analyzed to not contain loop carried dependences without checking 6988 that it is profitable to parallelize the loops. 6989 6990 '-fcheck-data-deps' 6991 Compare the results of several data dependence analyzers. This 6992 option is used for debugging the data dependence analyzers. 6993 6994 '-ftree-loop-if-convert' 6995 Attempt to transform conditional jumps in the innermost loops to 6996 branch-less equivalents. The intent is to remove control-flow from 6997 the innermost loops in order to improve the ability of the 6998 vectorization pass to handle these loops. This is enabled by 6999 default if vectorization is enabled. 7000 7001 '-ftree-loop-if-convert-stores' 7002 Attempt to also if-convert conditional jumps containing memory 7003 writes. This transformation can be unsafe for multi-threaded 7004 programs as it transforms conditional memory writes into 7005 unconditional memory writes. For example, 7006 for (i = 0; i < N; i++) 7007 if (cond) 7008 A[i] = expr; 7009 is transformed to 7010 for (i = 0; i < N; i++) 7011 A[i] = cond ? expr : A[i]; 7012 potentially producing data races. 7013 7014 '-ftree-loop-distribution' 7015 Perform loop distribution. This flag can improve cache performance 7016 on big loop bodies and allow further loop optimizations, like 7017 parallelization or vectorization, to take place. For example, the 7018 loop 7019 DO I = 1, N 7020 A(I) = B(I) + C 7021 D(I) = E(I) * F 7022 ENDDO 7023 is transformed to 7024 DO I = 1, N 7025 A(I) = B(I) + C 7026 ENDDO 7027 DO I = 1, N 7028 D(I) = E(I) * F 7029 ENDDO 7030 7031 '-ftree-loop-distribute-patterns' 7032 Perform loop distribution of patterns that can be code generated 7033 with calls to a library. This flag is enabled by default at '-O3'. 7034 7035 This pass distributes the initialization loops and generates a call 7036 to memset zero. For example, the loop 7037 DO I = 1, N 7038 A(I) = 0 7039 B(I) = A(I) + I 7040 ENDDO 7041 is transformed to 7042 DO I = 1, N 7043 A(I) = 0 7044 ENDDO 7045 DO I = 1, N 7046 B(I) = A(I) + I 7047 ENDDO 7048 and the initialization loop is transformed into a call to memset 7049 zero. 7050 7051 '-ftree-loop-im' 7052 Perform loop invariant motion on trees. This pass moves only 7053 invariants that are hard to handle at RTL level (function calls, 7054 operations that expand to nontrivial sequences of insns). With 7055 '-funswitch-loops' it also moves operands of conditions that are 7056 invariant out of the loop, so that we can use just trivial 7057 invariantness analysis in loop unswitching. The pass also includes 7058 store motion. 7059 7060 '-ftree-loop-ivcanon' 7061 Create a canonical counter for number of iterations in loops for 7062 which determining number of iterations requires complicated 7063 analysis. Later optimizations then may determine the number 7064 easily. Useful especially in connection with unrolling. 7065 7066 '-fivopts' 7067 Perform induction variable optimizations (strength reduction, 7068 induction variable merging and induction variable elimination) on 7069 trees. 7070 7071 '-ftree-parallelize-loops=n' 7072 Parallelize loops, i.e., split their iteration space to run in n 7073 threads. This is only possible for loops whose iterations are 7074 independent and can be arbitrarily reordered. The optimization is 7075 only profitable on multiprocessor machines, for loops that are 7076 CPU-intensive, rather than constrained e.g. by memory bandwidth. 7077 This option implies '-pthread', and thus is only supported on 7078 targets that have support for '-pthread'. 7079 7080 '-ftree-pta' 7081 Perform function-local points-to analysis on trees. This flag is 7082 enabled by default at '-O' and higher. 7083 7084 '-ftree-sra' 7085 Perform scalar replacement of aggregates. This pass replaces 7086 structure references with scalars to prevent committing structures 7087 to memory too early. This flag is enabled by default at '-O' and 7088 higher. 7089 7090 '-ftree-copyrename' 7091 Perform copy renaming on trees. This pass attempts to rename 7092 compiler temporaries to other variables at copy locations, usually 7093 resulting in variable names which more closely resemble the 7094 original variables. This flag is enabled by default at '-O' and 7095 higher. 7096 7097 '-ftree-coalesce-inlined-vars' 7098 Tell the copyrename pass (see '-ftree-copyrename') to attempt to 7099 combine small user-defined variables too, but only if they were 7100 inlined from other functions. It is a more limited form of 7101 '-ftree-coalesce-vars'. This may harm debug information of such 7102 inlined variables, but it will keep variables of the inlined-into 7103 function apart from each other, such that they are more likely to 7104 contain the expected values in a debugging session. This was the 7105 default in GCC versions older than 4.7. 7106 7107 '-ftree-coalesce-vars' 7108 Tell the copyrename pass (see '-ftree-copyrename') to attempt to 7109 combine small user-defined variables too, instead of just compiler 7110 temporaries. This may severely limit the ability to debug an 7111 optimized program compiled with '-fno-var-tracking-assignments'. 7112 In the negated form, this flag prevents SSA coalescing of user 7113 variables, including inlined ones. This option is enabled by 7114 default. 7115 7116 '-ftree-ter' 7117 Perform temporary expression replacement during the SSA->normal 7118 phase. Single use/single def temporaries are replaced at their use 7119 location with their defining expression. This results in 7120 non-GIMPLE code, but gives the expanders much more complex trees to 7121 work on resulting in better RTL generation. This is enabled by 7122 default at '-O' and higher. 7123 7124 '-ftree-slsr' 7125 Perform straight-line strength reduction on trees. This recognizes 7126 related expressions involving multiplications and replaces them by 7127 less expensive calculations when possible. This is enabled by 7128 default at '-O' and higher. 7129 7130 '-ftree-vectorize' 7131 Perform loop vectorization on trees. This flag is enabled by 7132 default at '-O3'. 7133 7134 '-ftree-slp-vectorize' 7135 Perform basic block vectorization on trees. This flag is enabled 7136 by default at '-O3' and when '-ftree-vectorize' is enabled. 7137 7138 '-ftree-vect-loop-version' 7139 Perform loop versioning when doing loop vectorization on trees. 7140 When a loop appears to be vectorizable except that data alignment 7141 or data dependence cannot be determined at compile time, then 7142 vectorized and non-vectorized versions of the loop are generated 7143 along with run-time checks for alignment or dependence to control 7144 which version is executed. This option is enabled by default 7145 except at level '-Os' where it is disabled. 7146 7147 '-fvect-cost-model' 7148 Enable cost model for vectorization. This option is enabled by 7149 default at '-O3'. 7150 7151 '-ftree-vrp' 7152 Perform Value Range Propagation on trees. This is similar to the 7153 constant propagation pass, but instead of values, ranges of values 7154 are propagated. This allows the optimizers to remove unnecessary 7155 range checks like array bound checks and null pointer checks. This 7156 is enabled by default at '-O2' and higher. Null pointer check 7157 elimination is only done if '-fdelete-null-pointer-checks' is 7158 enabled. 7159 7160 '-ftracer' 7161 Perform tail duplication to enlarge superblock size. This 7162 transformation simplifies the control flow of the function allowing 7163 other optimizations to do a better job. 7164 7165 '-funroll-loops' 7166 Unroll loops whose number of iterations can be determined at 7167 compile time or upon entry to the loop. '-funroll-loops' implies 7168 '-frerun-cse-after-loop'. This option makes code larger, and may 7169 or may not make it run faster. 7170 7171 '-funroll-all-loops' 7172 Unroll all loops, even if their number of iterations is uncertain 7173 when the loop is entered. This usually makes programs run more 7174 slowly. '-funroll-all-loops' implies the same options as 7175 '-funroll-loops', 7176 7177 '-fsplit-ivs-in-unroller' 7178 Enables expression of values of induction variables in later 7179 iterations of the unrolled loop using the value in the first 7180 iteration. This breaks long dependency chains, thus improving 7181 efficiency of the scheduling passes. 7182 7183 A combination of '-fweb' and CSE is often sufficient to obtain the 7184 same effect. However, that is not reliable in cases where the loop 7185 body is more complicated than a single basic block. It also does 7186 not work at all on some architectures due to restrictions in the 7187 CSE pass. 7188 7189 This optimization is enabled by default. 7190 7191 '-fvariable-expansion-in-unroller' 7192 With this option, the compiler creates multiple copies of some 7193 local variables when unrolling a loop, which can result in superior 7194 code. 7195 7196 '-fpartial-inlining' 7197 Inline parts of functions. This option has any effect only when 7198 inlining itself is turned on by the '-finline-functions' or 7199 '-finline-small-functions' options. 7200 7201 Enabled at level '-O2'. 7202 7203 '-fpredictive-commoning' 7204 Perform predictive commoning optimization, i.e., reusing 7205 computations (especially memory loads and stores) performed in 7206 previous iterations of loops. 7207 7208 This option is enabled at level '-O3'. 7209 7210 '-fprefetch-loop-arrays' 7211 If supported by the target machine, generate instructions to 7212 prefetch memory to improve the performance of loops that access 7213 large arrays. 7214 7215 This option may generate better or worse code; results are highly 7216 dependent on the structure of loops within the source code. 7217 7218 Disabled at level '-Os'. 7219 7220 '-fno-peephole' 7221 '-fno-peephole2' 7222 Disable any machine-specific peephole optimizations. The 7223 difference between '-fno-peephole' and '-fno-peephole2' is in how 7224 they are implemented in the compiler; some targets use one, some 7225 use the other, a few use both. 7226 7227 '-fpeephole' is enabled by default. '-fpeephole2' enabled at 7228 levels '-O2', '-O3', '-Os'. 7229 7230 '-fno-guess-branch-probability' 7231 Do not guess branch probabilities using heuristics. 7232 7233 GCC uses heuristics to guess branch probabilities if they are not 7234 provided by profiling feedback ('-fprofile-arcs'). These 7235 heuristics are based on the control flow graph. If some branch 7236 probabilities are specified by '__builtin_expect', then the 7237 heuristics are used to guess branch probabilities for the rest of 7238 the control flow graph, taking the '__builtin_expect' info into 7239 account. The interactions between the heuristics and 7240 '__builtin_expect' can be complex, and in some cases, it may be 7241 useful to disable the heuristics so that the effects of 7242 '__builtin_expect' are easier to understand. 7243 7244 The default is '-fguess-branch-probability' at levels '-O', '-O2', 7245 '-O3', '-Os'. 7246 7247 '-freorder-blocks' 7248 Reorder basic blocks in the compiled function in order to reduce 7249 number of taken branches and improve code locality. 7250 7251 Enabled at levels '-O2', '-O3'. 7252 7253 '-freorder-blocks-and-partition' 7254 In addition to reordering basic blocks in the compiled function, in 7255 order to reduce number of taken branches, partitions hot and cold 7256 basic blocks into separate sections of the assembly and .o files, 7257 to improve paging and cache locality performance. 7258 7259 This optimization is automatically turned off in the presence of 7260 exception handling, for linkonce sections, for functions with a 7261 user-defined section attribute and on any architecture that does 7262 not support named sections. 7263 7264 '-freorder-functions' 7265 Reorder functions in the object file in order to improve code 7266 locality. This is implemented by using special subsections 7267 '.text.hot' for most frequently executed functions and 7268 '.text.unlikely' for unlikely executed functions. Reordering is 7269 done by the linker so object file format must support named 7270 sections and linker must place them in a reasonable way. 7271 7272 Also profile feedback must be available to make this option 7273 effective. See '-fprofile-arcs' for details. 7274 7275 Enabled at levels '-O2', '-O3', '-Os'. 7276 7277 '-fstrict-aliasing' 7278 Allow the compiler to assume the strictest aliasing rules 7279 applicable to the language being compiled. For C (and C++), this 7280 activates optimizations based on the type of expressions. In 7281 particular, an object of one type is assumed never to reside at the 7282 same address as an object of a different type, unless the types are 7283 almost the same. For example, an 'unsigned int' can alias an 7284 'int', but not a 'void*' or a 'double'. A character type may alias 7285 any other type. 7286 7287 Pay special attention to code like this: 7288 union a_union { 7289 int i; 7290 double d; 7291 }; 7292 7293 int f() { 7294 union a_union t; 7295 t.d = 3.0; 7296 return t.i; 7297 } 7298 The practice of reading from a different union member than the one 7299 most recently written to (called "type-punning") is common. Even 7300 with '-fstrict-aliasing', type-punning is allowed, provided the 7301 memory is accessed through the union type. So, the code above 7302 works as expected. *Note Structures unions enumerations and 7303 bit-fields implementation::. However, this code might not: 7304 int f() { 7305 union a_union t; 7306 int* ip; 7307 t.d = 3.0; 7308 ip = &t.i; 7309 return *ip; 7310 } 7311 7312 Similarly, access by taking the address, casting the resulting 7313 pointer and dereferencing the result has undefined behavior, even 7314 if the cast uses a union type, e.g.: 7315 int f() { 7316 double d = 3.0; 7317 return ((union a_union *) &d)->i; 7318 } 7319 7320 The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3', 7321 '-Os'. 7322 7323 '-fstrict-overflow' 7324 Allow the compiler to assume strict signed overflow rules, 7325 depending on the language being compiled. For C (and C++) this 7326 means that overflow when doing arithmetic with signed numbers is 7327 undefined, which means that the compiler may assume that it does 7328 not happen. This permits various optimizations. For example, the 7329 compiler assumes that an expression like 'i + 10 > i' is always 7330 true for signed 'i'. This assumption is only valid if signed 7331 overflow is undefined, as the expression is false if 'i + 10' 7332 overflows when using twos complement arithmetic. When this option 7333 is in effect any attempt to determine whether an operation on 7334 signed numbers overflows must be written carefully to not actually 7335 involve overflow. 7336 7337 This option also allows the compiler to assume strict pointer 7338 semantics: given a pointer to an object, if adding an offset to 7339 that pointer does not produce a pointer to the same object, the 7340 addition is undefined. This permits the compiler to conclude that 7341 'p + u > p' is always true for a pointer 'p' and unsigned integer 7342 'u'. This assumption is only valid because pointer wraparound is 7343 undefined, as the expression is false if 'p + u' overflows using 7344 twos complement arithmetic. 7345 7346 See also the '-fwrapv' option. Using '-fwrapv' means that integer 7347 signed overflow is fully defined: it wraps. When '-fwrapv' is 7348 used, there is no difference between '-fstrict-overflow' and 7349 '-fno-strict-overflow' for integers. With '-fwrapv' certain types 7350 of overflow are permitted. For example, if the compiler gets an 7351 overflow when doing arithmetic on constants, the overflowed value 7352 can still be used with '-fwrapv', but not otherwise. 7353 7354 The '-fstrict-overflow' option is enabled at levels '-O2', '-O3', 7355 '-Os'. 7356 7357 '-falign-functions' 7358 '-falign-functions=N' 7359 Align the start of functions to the next power-of-two greater than 7360 N, skipping up to N bytes. For instance, '-falign-functions=32' 7361 aligns functions to the next 32-byte boundary, but 7362 '-falign-functions=24' aligns to the next 32-byte boundary only if 7363 this can be done by skipping 23 bytes or less. 7364 7365 '-fno-align-functions' and '-falign-functions=1' are equivalent and 7366 mean that functions are not aligned. 7367 7368 Some assemblers only support this flag when N is a power of two; in 7369 that case, it is rounded up. 7370 7371 If N is not specified or is zero, use a machine-dependent default. 7372 7373 Enabled at levels '-O2', '-O3'. 7374 7375 '-falign-labels' 7376 '-falign-labels=N' 7377 Align all branch targets to a power-of-two boundary, skipping up to 7378 N bytes like '-falign-functions'. This option can easily make code 7379 slower, because it must insert dummy operations for when the branch 7380 target is reached in the usual flow of the code. 7381 7382 '-fno-align-labels' and '-falign-labels=1' are equivalent and mean 7383 that labels are not aligned. 7384 7385 If '-falign-loops' or '-falign-jumps' are applicable and are 7386 greater than this value, then their values are used instead. 7387 7388 If N is not specified or is zero, use a machine-dependent default 7389 which is very likely to be '1', meaning no alignment. 7390 7391 Enabled at levels '-O2', '-O3'. 7392 7393 '-falign-loops' 7394 '-falign-loops=N' 7395 Align loops to a power-of-two boundary, skipping up to N bytes like 7396 '-falign-functions'. If the loops are executed many times, this 7397 makes up for any execution of the dummy operations. 7398 7399 '-fno-align-loops' and '-falign-loops=1' are equivalent and mean 7400 that loops are not aligned. 7401 7402 If N is not specified or is zero, use a machine-dependent default. 7403 7404 Enabled at levels '-O2', '-O3'. 7405 7406 '-falign-jumps' 7407 '-falign-jumps=N' 7408 Align branch targets to a power-of-two boundary, for branch targets 7409 where the targets can only be reached by jumping, skipping up to N 7410 bytes like '-falign-functions'. In this case, no dummy operations 7411 need be executed. 7412 7413 '-fno-align-jumps' and '-falign-jumps=1' are equivalent and mean 7414 that loops are not aligned. 7415 7416 If N is not specified or is zero, use a machine-dependent default. 7417 7418 Enabled at levels '-O2', '-O3'. 7419 7420 '-funit-at-a-time' 7421 This option is left for compatibility reasons. '-funit-at-a-time' 7422 has no effect, while '-fno-unit-at-a-time' implies 7423 '-fno-toplevel-reorder' and '-fno-section-anchors'. 7424 7425 Enabled by default. 7426 7427 '-fno-toplevel-reorder' 7428 Do not reorder top-level functions, variables, and 'asm' 7429 statements. Output them in the same order that they appear in the 7430 input file. When this option is used, unreferenced static 7431 variables are not removed. This option is intended to support 7432 existing code that relies on a particular ordering. For new code, 7433 it is better to use attributes. 7434 7435 Enabled at level '-O0'. When disabled explicitly, it also implies 7436 '-fno-section-anchors', which is otherwise enabled at '-O0' on some 7437 targets. 7438 7439 '-fweb' 7440 Constructs webs as commonly used for register allocation purposes 7441 and assign each web individual pseudo register. This allows the 7442 register allocation pass to operate on pseudos directly, but also 7443 strengthens several other optimization passes, such as CSE, loop 7444 optimizer and trivial dead code remover. It can, however, make 7445 debugging impossible, since variables no longer stay in a "home 7446 register". 7447 7448 Enabled by default with '-funroll-loops'. 7449 7450 '-fwhole-program' 7451 Assume that the current compilation unit represents the whole 7452 program being compiled. All public functions and variables with 7453 the exception of 'main' and those merged by attribute 7454 'externally_visible' become static functions and in effect are 7455 optimized more aggressively by interprocedural optimizers. 7456 7457 This option should not be used in combination with '-flto'. 7458 Instead relying on a linker plugin should provide safer and more 7459 precise information. 7460 7461 '-flto[=N]' 7462 This option runs the standard link-time optimizer. When invoked 7463 with source code, it generates GIMPLE (one of GCC's internal 7464 representations) and writes it to special ELF sections in the 7465 object file. When the object files are linked together, all the 7466 function bodies are read from these ELF sections and instantiated 7467 as if they had been part of the same translation unit. 7468 7469 To use the link-time optimizer, '-flto' needs to be specified at 7470 compile time and during the final link. For example: 7471 7472 gcc -c -O2 -flto foo.c 7473 gcc -c -O2 -flto bar.c 7474 gcc -o myprog -flto -O2 foo.o bar.o 7475 7476 The first two invocations to GCC save a bytecode representation of 7477 GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'. The 7478 final invocation reads the GIMPLE bytecode from 'foo.o' and 7479 'bar.o', merges the two files into a single internal image, and 7480 compiles the result as usual. Since both 'foo.o' and 'bar.o' are 7481 merged into a single image, this causes all the interprocedural 7482 analyses and optimizations in GCC to work across the two files as 7483 if they were a single one. This means, for example, that the 7484 inliner is able to inline functions in 'bar.o' into functions in 7485 'foo.o' and vice-versa. 7486 7487 Another (simpler) way to enable link-time optimization is: 7488 7489 gcc -o myprog -flto -O2 foo.c bar.c 7490 7491 The above generates bytecode for 'foo.c' and 'bar.c', merges them 7492 together into a single GIMPLE representation and optimizes them as 7493 usual to produce 'myprog'. 7494 7495 The only important thing to keep in mind is that to enable 7496 link-time optimizations the '-flto' flag needs to be passed to both 7497 the compile and the link commands. 7498 7499 To make whole program optimization effective, it is necessary to 7500 make certain whole program assumptions. The compiler needs to know 7501 what functions and variables can be accessed by libraries and 7502 runtime outside of the link-time optimized unit. When supported by 7503 the linker, the linker plugin (see '-fuse-linker-plugin') passes 7504 information to the compiler about used and externally visible 7505 symbols. When the linker plugin is not available, 7506 '-fwhole-program' should be used to allow the compiler to make 7507 these assumptions, which leads to more aggressive optimization 7508 decisions. 7509 7510 Note that when a file is compiled with '-flto', the generated 7511 object file is larger than a regular object file because it 7512 contains GIMPLE bytecodes and the usual final code. This means 7513 that object files with LTO information can be linked as normal 7514 object files; if '-flto' is not passed to the linker, no 7515 interprocedural optimizations are applied. 7516 7517 Additionally, the optimization flags used to compile individual 7518 files are not necessarily related to those used at link time. For 7519 instance, 7520 7521 gcc -c -O0 -flto foo.c 7522 gcc -c -O0 -flto bar.c 7523 gcc -o myprog -flto -O3 foo.o bar.o 7524 7525 This produces individual object files with unoptimized assembler 7526 code, but the resulting binary 'myprog' is optimized at '-O3'. If, 7527 instead, the final binary is generated without '-flto', then 7528 'myprog' is not optimized. 7529 7530 When producing the final binary with '-flto', GCC only applies 7531 link-time optimizations to those files that contain bytecode. 7532 Therefore, you can mix and match object files and libraries with 7533 GIMPLE bytecodes and final object code. GCC automatically selects 7534 which files to optimize in LTO mode and which files to link without 7535 further processing. 7536 7537 There are some code generation flags preserved by GCC when 7538 generating bytecodes, as they need to be used during the final link 7539 stage. Currently, the following options are saved into the GIMPLE 7540 bytecode files: '-fPIC', '-fcommon' and all the '-m' target flags. 7541 7542 At link time, these options are read in and reapplied. Note that 7543 the current implementation makes no attempt to recognize 7544 conflicting values for these options. If different files have 7545 conflicting option values (e.g., one file is compiled with '-fPIC' 7546 and another isn't), the compiler simply uses the last value read 7547 from the bytecode files. It is recommended, then, that you compile 7548 all the files participating in the same link with the same options. 7549 7550 If LTO encounters objects with C linkage declared with incompatible 7551 types in separate translation units to be linked together 7552 (undefined behavior according to ISO C99 6.2.7), a non-fatal 7553 diagnostic may be issued. The behavior is still undefined at run 7554 time. 7555 7556 Another feature of LTO is that it is possible to apply 7557 interprocedural optimizations on files written in different 7558 languages. This requires support in the language front end. 7559 Currently, the C, C++ and Fortran front ends are capable of 7560 emitting GIMPLE bytecodes, so something like this should work: 7561 7562 gcc -c -flto foo.c 7563 g++ -c -flto bar.cc 7564 gfortran -c -flto baz.f90 7565 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 7566 7567 Notice that the final link is done with 'g++' to get the C++ 7568 runtime libraries and '-lgfortran' is added to get the Fortran 7569 runtime libraries. In general, when mixing languages in LTO mode, 7570 you should use the same link command options as when mixing 7571 languages in a regular (non-LTO) compilation; all you need to add 7572 is '-flto' to all the compile and link commands. 7573 7574 If object files containing GIMPLE bytecode are stored in a library 7575 archive, say 'libfoo.a', it is possible to extract and use them in 7576 an LTO link if you are using a linker with plugin support. To 7577 enable this feature, use the flag '-fuse-linker-plugin' at link 7578 time: 7579 7580 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 7581 7582 With the linker plugin enabled, the linker extracts the needed 7583 GIMPLE files from 'libfoo.a' and passes them on to the running GCC 7584 to make them part of the aggregated GIMPLE image to be optimized. 7585 7586 If you are not using a linker with plugin support and/or do not 7587 enable the linker plugin, then the objects inside 'libfoo.a' are 7588 extracted and linked as usual, but they do not participate in the 7589 LTO optimization process. 7590 7591 Link-time optimizations do not require the presence of the whole 7592 program to operate. If the program does not require any symbols to 7593 be exported, it is possible to combine '-flto' and 7594 '-fwhole-program' to allow the interprocedural optimizers to use 7595 more aggressive assumptions which may lead to improved optimization 7596 opportunities. Use of '-fwhole-program' is not needed when linker 7597 plugin is active (see '-fuse-linker-plugin'). 7598 7599 The current implementation of LTO makes no attempt to generate 7600 bytecode that is portable between different types of hosts. The 7601 bytecode files are versioned and there is a strict version check, 7602 so bytecode files generated in one version of GCC will not work 7603 with an older/newer version of GCC. 7604 7605 Link-time optimization does not work well with generation of 7606 debugging information. Combining '-flto' with '-g' is currently 7607 experimental and expected to produce wrong results. 7608 7609 If you specify the optional N, the optimization and code generation 7610 done at link time is executed in parallel using N parallel jobs by 7611 utilizing an installed 'make' program. The environment variable 7612 'MAKE' may be used to override the program used. The default value 7613 for N is 1. 7614 7615 You can also specify '-flto=jobserver' to use GNU make's job server 7616 mode to determine the number of parallel jobs. This is useful when 7617 the Makefile calling GCC is already executing in parallel. You 7618 must prepend a '+' to the command recipe in the parent Makefile for 7619 this to work. This option likely only works if 'MAKE' is GNU make. 7620 7621 This option is disabled by default. 7622 7623 '-flto-partition=ALG' 7624 Specify the partitioning algorithm used by the link-time optimizer. 7625 The value is either '1to1' to specify a partitioning mirroring the 7626 original source files or 'balanced' to specify partitioning into 7627 equally sized chunks (whenever possible) or 'max' to create new 7628 partition for every symbol where possible. Specifying 'none' as an 7629 algorithm disables partitioning and streaming completely. The 7630 default value is 'balanced'. While '1to1' can be used as an 7631 workaround for various code ordering issues, the 'max' partitioning 7632 is intended for internal testing only. 7633 7634 '-flto-compression-level=N' 7635 This option specifies the level of compression used for 7636 intermediate language written to LTO object files, and is only 7637 meaningful in conjunction with LTO mode ('-flto'). Valid values 7638 are 0 (no compression) to 9 (maximum compression). Values outside 7639 this range are clamped to either 0 or 9. If the option is not 7640 given, a default balanced compression setting is used. 7641 7642 '-flto-report' 7643 Prints a report with internal details on the workings of the 7644 link-time optimizer. The contents of this report vary from version 7645 to version. It is meant to be useful to GCC developers when 7646 processing object files in LTO mode (via '-flto'). 7647 7648 Disabled by default. 7649 7650 '-fuse-linker-plugin' 7651 Enables the use of a linker plugin during link-time optimization. 7652 This option relies on plugin support in the linker, which is 7653 available in gold or in GNU ld 2.21 or newer. 7654 7655 This option enables the extraction of object files with GIMPLE 7656 bytecode out of library archives. This improves the quality of 7657 optimization by exposing more code to the link-time optimizer. 7658 This information specifies what symbols can be accessed externally 7659 (by non-LTO object or during dynamic linking). Resulting code 7660 quality improvements on binaries (and shared libraries that use 7661 hidden visibility) are similar to '-fwhole-program'. See '-flto' 7662 for a description of the effect of this flag and how to use it. 7663 7664 This option is enabled by default when LTO support in GCC is 7665 enabled and GCC was configured for use with a linker supporting 7666 plugins (GNU ld 2.21 or newer or gold). 7667 7668 '-ffat-lto-objects' 7669 Fat LTO objects are object files that contain both the intermediate 7670 language and the object code. This makes them usable for both LTO 7671 linking and normal linking. This option is effective only when 7672 compiling with '-flto' and is ignored at link time. 7673 7674 '-fno-fat-lto-objects' improves compilation time over plain LTO, 7675 but requires the complete toolchain to be aware of LTO. It requires 7676 a linker with linker plugin support for basic functionality. 7677 Additionally, 'nm', 'ar' and 'ranlib' need to support linker 7678 plugins to allow a full-featured build environment (capable of 7679 building static libraries etc). GCC provides the 'gcc-ar', 7680 'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these 7681 tools. With non fat LTO makefiles need to be modified to use them. 7682 7683 The default is '-ffat-lto-objects' but this default is intended to 7684 change in future releases when linker plugin enabled environments 7685 become more common. 7686 7687 '-fcompare-elim' 7688 After register allocation and post-register allocation instruction 7689 splitting, identify arithmetic instructions that compute processor 7690 flags similar to a comparison operation based on that arithmetic. 7691 If possible, eliminate the explicit comparison operation. 7692 7693 This pass only applies to certain targets that cannot explicitly 7694 represent the comparison operation before register allocation is 7695 complete. 7696 7697 Enabled at levels '-O', '-O2', '-O3', '-Os'. 7698 7699 '-fuse-ld=bfd' 7700 Use the 'bfd' linker instead of the default linker. 7701 7702 '-fuse-ld=gold' 7703 Use the 'gold' linker instead of the default linker. 7704 7705 '-fcprop-registers' 7706 After register allocation and post-register allocation instruction 7707 splitting, perform a copy-propagation pass to try to reduce 7708 scheduling dependencies and occasionally eliminate the copy. 7709 7710 Enabled at levels '-O', '-O2', '-O3', '-Os'. 7711 7712 '-fprofile-correction' 7713 Profiles collected using an instrumented binary for multi-threaded 7714 programs may be inconsistent due to missed counter updates. When 7715 this option is specified, GCC uses heuristics to correct or smooth 7716 out such inconsistencies. By default, GCC emits an error message 7717 when an inconsistent profile is detected. 7718 7719 '-fprofile-dir=PATH' 7720 7721 Set the directory to search for the profile data files in to PATH. 7722 This option affects only the profile data generated by 7723 '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used 7724 by '-fprofile-use' and '-fbranch-probabilities' and its related 7725 options. Both absolute and relative paths can be used. By 7726 default, GCC uses the current directory as PATH, thus the profile 7727 data file appears in the same directory as the object file. 7728 7729 '-fprofile-generate' 7730 '-fprofile-generate=PATH' 7731 7732 Enable options usually used for instrumenting application to 7733 produce profile useful for later recompilation with profile 7734 feedback based optimization. You must use '-fprofile-generate' 7735 both when compiling and when linking your program. 7736 7737 The following options are enabled: '-fprofile-arcs', 7738 '-fprofile-values', '-fvpt'. 7739 7740 If PATH is specified, GCC looks at the PATH to find the profile 7741 feedback data files. See '-fprofile-dir'. 7742 7743 '-fprofile-use' 7744 '-fprofile-use=PATH' 7745 Enable profile feedback directed optimizations, and optimizations 7746 generally profitable only with profile feedback available. 7747 7748 The following options are enabled: '-fbranch-probabilities', 7749 '-fvpt', '-funroll-loops', '-fpeel-loops', '-ftracer', 7750 '-ftree-vectorize', 'ftree-loop-distribute-patterns' 7751 7752 By default, GCC emits an error message if the feedback profiles do 7753 not match the source code. This error can be turned into a warning 7754 by using '-Wcoverage-mismatch'. Note this may result in poorly 7755 optimized code. 7756 7757 If PATH is specified, GCC looks at the PATH to find the profile 7758 feedback data files. See '-fprofile-dir'. 7759 7760 The following options control compiler behavior regarding 7761 floating-point arithmetic. These options trade off between speed and 7762 correctness. All must be specifically enabled. 7763 7764 '-ffloat-store' 7765 Do not store floating-point variables in registers, and inhibit 7766 other options that might change whether a floating-point value is 7767 taken from a register or memory. 7768 7769 This option prevents undesirable excess precision on machines such 7770 as the 68000 where the floating registers (of the 68881) keep more 7771 precision than a 'double' is supposed to have. Similarly for the 7772 x86 architecture. For most programs, the excess precision does 7773 only good, but a few programs rely on the precise definition of 7774 IEEE floating point. Use '-ffloat-store' for such programs, after 7775 modifying them to store all pertinent intermediate computations 7776 into variables. 7777 7778 '-fexcess-precision=STYLE' 7779 This option allows further control over excess precision on 7780 machines where floating-point registers have more precision than 7781 the IEEE 'float' and 'double' types and the processor does not 7782 support operations rounding to those types. By default, 7783 '-fexcess-precision=fast' is in effect; this means that operations 7784 are carried out in the precision of the registers and that it is 7785 unpredictable when rounding to the types specified in the source 7786 code takes place. When compiling C, if 7787 '-fexcess-precision=standard' is specified then excess precision 7788 follows the rules specified in ISO C99; in particular, both casts 7789 and assignments cause values to be rounded to their semantic types 7790 (whereas '-ffloat-store' only affects assignments). This option is 7791 enabled by default for C if a strict conformance option such as 7792 '-std=c99' is used. 7793 7794 '-fexcess-precision=standard' is not implemented for languages 7795 other than C, and has no effect if '-funsafe-math-optimizations' or 7796 '-ffast-math' is specified. On the x86, it also has no effect if 7797 '-mfpmath=sse' or '-mfpmath=sse+387' is specified; in the former 7798 case, IEEE semantics apply without excess precision, and in the 7799 latter, rounding is unpredictable. 7800 7801 '-ffast-math' 7802 Sets '-fno-math-errno', '-funsafe-math-optimizations', 7803 '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans' 7804 and '-fcx-limited-range'. 7805 7806 This option causes the preprocessor macro '__FAST_MATH__' to be 7807 defined. 7808 7809 This option is not turned on by any '-O' option besides '-Ofast' 7810 since it can result in incorrect output for programs that depend on 7811 an exact implementation of IEEE or ISO rules/specifications for 7812 math functions. It may, however, yield faster code for programs 7813 that do not require the guarantees of these specifications. 7814 7815 '-fno-math-errno' 7816 Do not set 'errno' after calling math functions that are executed 7817 with a single instruction, e.g., 'sqrt'. A program that relies on 7818 IEEE exceptions for math error handling may want to use this flag 7819 for speed while maintaining IEEE arithmetic compatibility. 7820 7821 This option is not turned on by any '-O' option since it can result 7822 in incorrect output for programs that depend on an exact 7823 implementation of IEEE or ISO rules/specifications for math 7824 functions. It may, however, yield faster code for programs that do 7825 not require the guarantees of these specifications. 7826 7827 The default is '-fmath-errno'. 7828 7829 On Darwin systems, the math library never sets 'errno'. There is 7830 therefore no reason for the compiler to consider the possibility 7831 that it might, and '-fno-math-errno' is the default. 7832 7833 '-funsafe-math-optimizations' 7834 7835 Allow optimizations for floating-point arithmetic that (a) assume 7836 that arguments and results are valid and (b) may violate IEEE or 7837 ANSI standards. When used at link-time, it may include libraries 7838 or startup files that change the default FPU control word or other 7839 similar optimizations. 7840 7841 This option is not turned on by any '-O' option since it can result 7842 in incorrect output for programs that depend on an exact 7843 implementation of IEEE or ISO rules/specifications for math 7844 functions. It may, however, yield faster code for programs that do 7845 not require the guarantees of these specifications. Enables 7846 '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and 7847 '-freciprocal-math'. 7848 7849 The default is '-fno-unsafe-math-optimizations'. 7850 7851 '-fassociative-math' 7852 7853 Allow re-association of operands in series of floating-point 7854 operations. This violates the ISO C and C++ language standard by 7855 possibly changing computation result. NOTE: re-ordering may change 7856 the sign of zero as well as ignore NaNs and inhibit or create 7857 underflow or overflow (and thus cannot be used on code that relies 7858 on rounding behavior like '(x + 2**52) - 2**52'. May also reorder 7859 floating-point comparisons and thus may not be used when ordered 7860 comparisons are required. This option requires that both 7861 '-fno-signed-zeros' and '-fno-trapping-math' be in effect. 7862 Moreover, it doesn't make much sense with '-frounding-math'. For 7863 Fortran the option is automatically enabled when both 7864 '-fno-signed-zeros' and '-fno-trapping-math' are in effect. 7865 7866 The default is '-fno-associative-math'. 7867 7868 '-freciprocal-math' 7869 7870 Allow the reciprocal of a value to be used instead of dividing by 7871 the value if this enables optimizations. For example 'x / y' can 7872 be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject 7873 to common subexpression elimination. Note that this loses 7874 precision and increases the number of flops operating on the value. 7875 7876 The default is '-fno-reciprocal-math'. 7877 7878 '-ffinite-math-only' 7879 Allow optimizations for floating-point arithmetic that assume that 7880 arguments and results are not NaNs or +-Infs. 7881 7882 This option is not turned on by any '-O' option since it can result 7883 in incorrect output for programs that depend on an exact 7884 implementation of IEEE or ISO rules/specifications for math 7885 functions. It may, however, yield faster code for programs that do 7886 not require the guarantees of these specifications. 7887 7888 The default is '-fno-finite-math-only'. 7889 7890 '-fno-signed-zeros' 7891 Allow optimizations for floating-point arithmetic that ignore the 7892 signedness of zero. IEEE arithmetic specifies the behavior of 7893 distinct +0.0 and -0.0 values, which then prohibits simplification 7894 of expressions such as x+0.0 or 0.0*x (even with 7895 '-ffinite-math-only'). This option implies that the sign of a zero 7896 result isn't significant. 7897 7898 The default is '-fsigned-zeros'. 7899 7900 '-fno-trapping-math' 7901 Compile code assuming that floating-point operations cannot 7902 generate user-visible traps. These traps include division by zero, 7903 overflow, underflow, inexact result and invalid operation. This 7904 option requires that '-fno-signaling-nans' be in effect. Setting 7905 this option may allow faster code if one relies on "non-stop" IEEE 7906 arithmetic, for example. 7907 7908 This option should never be turned on by any '-O' option since it 7909 can result in incorrect output for programs that depend on an exact 7910 implementation of IEEE or ISO rules/specifications for math 7911 functions. 7912 7913 The default is '-ftrapping-math'. 7914 7915 '-frounding-math' 7916 Disable transformations and optimizations that assume default 7917 floating-point rounding behavior. This is round-to-zero for all 7918 floating point to integer conversions, and round-to-nearest for all 7919 other arithmetic truncations. This option should be specified for 7920 programs that change the FP rounding mode dynamically, or that may 7921 be executed with a non-default rounding mode. This option disables 7922 constant folding of floating-point expressions at compile time 7923 (which may be affected by rounding mode) and arithmetic 7924 transformations that are unsafe in the presence of sign-dependent 7925 rounding modes. 7926 7927 The default is '-fno-rounding-math'. 7928 7929 This option is experimental and does not currently guarantee to 7930 disable all GCC optimizations that are affected by rounding mode. 7931 Future versions of GCC may provide finer control of this setting 7932 using C99's 'FENV_ACCESS' pragma. This command-line option will be 7933 used to specify the default state for 'FENV_ACCESS'. 7934 7935 '-fsignaling-nans' 7936 Compile code assuming that IEEE signaling NaNs may generate 7937 user-visible traps during floating-point operations. Setting this 7938 option disables optimizations that may change the number of 7939 exceptions visible with signaling NaNs. This option implies 7940 '-ftrapping-math'. 7941 7942 This option causes the preprocessor macro '__SUPPORT_SNAN__' to be 7943 defined. 7944 7945 The default is '-fno-signaling-nans'. 7946 7947 This option is experimental and does not currently guarantee to 7948 disable all GCC optimizations that affect signaling NaN behavior. 7949 7950 '-fsingle-precision-constant' 7951 Treat floating-point constants as single precision instead of 7952 implicitly converting them to double-precision constants. 7953 7954 '-fcx-limited-range' 7955 When enabled, this option states that a range reduction step is not 7956 needed when performing complex division. Also, there is no 7957 checking whether the result of a complex multiplication or division 7958 is 'NaN + I*NaN', with an attempt to rescue the situation in that 7959 case. The default is '-fno-cx-limited-range', but is enabled by 7960 '-ffast-math'. 7961 7962 This option controls the default setting of the ISO C99 7963 'CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to all 7964 languages. 7965 7966 '-fcx-fortran-rules' 7967 Complex multiplication and division follow Fortran rules. Range 7968 reduction is done as part of complex division, but there is no 7969 checking whether the result of a complex multiplication or division 7970 is 'NaN + I*NaN', with an attempt to rescue the situation in that 7971 case. 7972 7973 The default is '-fno-cx-fortran-rules'. 7974 7975 The following options control optimizations that may improve 7976 performance, but are not enabled by any '-O' options. This section 7977 includes experimental options that may produce broken code. 7978 7979 '-fbranch-probabilities' 7980 After running a program compiled with '-fprofile-arcs' (*note 7981 Options for Debugging Your Program or 'gcc': Debugging Options.), 7982 you can compile it a second time using '-fbranch-probabilities', to 7983 improve optimizations based on the number of times each branch was 7984 taken. When a program compiled with '-fprofile-arcs' exits, it 7985 saves arc execution counts to a file called 'SOURCENAME.gcda' for 7986 each source file. The information in this data file is very 7987 dependent on the structure of the generated code, so you must use 7988 the same source code and the same optimization options for both 7989 compilations. 7990 7991 With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on 7992 each 'JUMP_INSN' and 'CALL_INSN'. These can be used to improve 7993 optimization. Currently, they are only used in one place: in 7994 'reorg.c', instead of guessing which path a branch is most likely 7995 to take, the 'REG_BR_PROB' values are used to exactly determine 7996 which path is taken more often. 7997 7998 '-fprofile-values' 7999 If combined with '-fprofile-arcs', it adds code so that some data 8000 about values of expressions in the program is gathered. 8001 8002 With '-fbranch-probabilities', it reads back the data gathered from 8003 profiling values of expressions for usage in optimizations. 8004 8005 Enabled with '-fprofile-generate' and '-fprofile-use'. 8006 8007 '-fvpt' 8008 If combined with '-fprofile-arcs', this option instructs the 8009 compiler to add code to gather information about values of 8010 expressions. 8011 8012 With '-fbranch-probabilities', it reads back the data gathered and 8013 actually performs the optimizations based on them. Currently the 8014 optimizations include specialization of division operations using 8015 the knowledge about the value of the denominator. 8016 8017 '-frename-registers' 8018 Attempt to avoid false dependencies in scheduled code by making use 8019 of registers left over after register allocation. This 8020 optimization most benefits processors with lots of registers. 8021 Depending on the debug information format adopted by the target, 8022 however, it can make debugging impossible, since variables no 8023 longer stay in a "home register". 8024 8025 Enabled by default with '-funroll-loops' and '-fpeel-loops'. 8026 8027 '-ftracer' 8028 Perform tail duplication to enlarge superblock size. This 8029 transformation simplifies the control flow of the function allowing 8030 other optimizations to do a better job. 8031 8032 Enabled with '-fprofile-use'. 8033 8034 '-funroll-loops' 8035 Unroll loops whose number of iterations can be determined at 8036 compile time or upon entry to the loop. '-funroll-loops' implies 8037 '-frerun-cse-after-loop', '-fweb' and '-frename-registers'. It 8038 also turns on complete loop peeling (i.e. complete removal of loops 8039 with a small constant number of iterations). This option makes 8040 code larger, and may or may not make it run faster. 8041 8042 Enabled with '-fprofile-use'. 8043 8044 '-funroll-all-loops' 8045 Unroll all loops, even if their number of iterations is uncertain 8046 when the loop is entered. This usually makes programs run more 8047 slowly. '-funroll-all-loops' implies the same options as 8048 '-funroll-loops'. 8049 8050 '-fpeel-loops' 8051 Peels loops for which there is enough information that they do not 8052 roll much (from profile feedback). It also turns on complete loop 8053 peeling (i.e. complete removal of loops with small constant number 8054 of iterations). 8055 8056 Enabled with '-fprofile-use'. 8057 8058 '-fmove-loop-invariants' 8059 Enables the loop invariant motion pass in the RTL loop optimizer. 8060 Enabled at level '-O1' 8061 8062 '-funswitch-loops' 8063 Move branches with loop invariant conditions out of the loop, with 8064 duplicates of the loop on both branches (modified according to 8065 result of the condition). 8066 8067 '-ffunction-sections' 8068 '-fdata-sections' 8069 Place each function or data item into its own section in the output 8070 file if the target supports arbitrary sections. The name of the 8071 function or the name of the data item determines the section's name 8072 in the output file. 8073 8074 Use these options on systems where the linker can perform 8075 optimizations to improve locality of reference in the instruction 8076 space. Most systems using the ELF object format and SPARC 8077 processors running Solaris 2 have linkers with such optimizations. 8078 AIX may have these optimizations in the future. 8079 8080 Only use these options when there are significant benefits from 8081 doing so. When you specify these options, the assembler and linker 8082 create larger object and executable files and are also slower. You 8083 cannot use 'gprof' on all systems if you specify this option, and 8084 you may have problems with debugging if you specify both this 8085 option and '-g'. 8086 8087 '-fbranch-target-load-optimize' 8088 Perform branch target register load optimization before prologue / 8089 epilogue threading. The use of target registers can typically be 8090 exposed only during reload, thus hoisting loads out of loops and 8091 doing inter-block scheduling needs a separate optimization pass. 8092 8093 '-fbranch-target-load-optimize2' 8094 Perform branch target register load optimization after prologue / 8095 epilogue threading. 8096 8097 '-fbtr-bb-exclusive' 8098 When performing branch target register load optimization, don't 8099 reuse branch target registers within any basic block. 8100 8101 '-fstack-protector' 8102 Emit extra code to check for buffer overflows, such as stack 8103 smashing attacks. This is done by adding a guard variable to 8104 functions with vulnerable objects. This includes functions that 8105 call 'alloca', and functions with buffers larger than 8 bytes. The 8106 guards are initialized when a function is entered and then checked 8107 when the function exits. If a guard check fails, an error message 8108 is printed and the program exits. 8109 8110 '-fstack-protector-all' 8111 Like '-fstack-protector' except that all functions are protected. 8112 8113 '-fsection-anchors' 8114 Try to reduce the number of symbolic address calculations by using 8115 shared "anchor" symbols to address nearby objects. This 8116 transformation can help to reduce the number of GOT entries and GOT 8117 accesses on some targets. 8118 8119 For example, the implementation of the following function 'foo': 8120 8121 static int a, b, c; 8122 int foo (void) { return a + b + c; } 8123 8124 usually calculates the addresses of all three variables, but if you 8125 compile it with '-fsection-anchors', it accesses the variables from 8126 a common anchor point instead. The effect is similar to the 8127 following pseudocode (which isn't valid C): 8128 8129 int foo (void) 8130 { 8131 register int *xr = &x; 8132 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 8133 } 8134 8135 Not all targets support this option. 8136 8137 '--param NAME=VALUE' 8138 In some places, GCC uses various constants to control the amount of 8139 optimization that is done. For example, GCC does not inline 8140 functions that contain more than a certain number of instructions. 8141 You can control some of these constants on the command line using 8142 the '--param' option. 8143 8144 The names of specific parameters, and the meaning of the values, 8145 are tied to the internals of the compiler, and are subject to 8146 change without notice in future releases. 8147 8148 In each case, the VALUE is an integer. The allowable choices for 8149 NAME are: 8150 8151 'predictable-branch-outcome' 8152 When branch is predicted to be taken with probability lower 8153 than this threshold (in percent), then it is considered well 8154 predictable. The default is 10. 8155 8156 'max-crossjump-edges' 8157 The maximum number of incoming edges to consider for 8158 cross-jumping. The algorithm used by '-fcrossjumping' is 8159 O(N^2) in the number of edges incoming to each block. 8160 Increasing values mean more aggressive optimization, making 8161 the compilation time increase with probably small improvement 8162 in executable size. 8163 8164 'min-crossjump-insns' 8165 The minimum number of instructions that must be matched at the 8166 end of two blocks before cross-jumping is performed on them. 8167 This value is ignored in the case where all instructions in 8168 the block being cross-jumped from are matched. The default 8169 value is 5. 8170 8171 'max-grow-copy-bb-insns' 8172 The maximum code size expansion factor when copying basic 8173 blocks instead of jumping. The expansion is relative to a 8174 jump instruction. The default value is 8. 8175 8176 'max-goto-duplication-insns' 8177 The maximum number of instructions to duplicate to a block 8178 that jumps to a computed goto. To avoid O(N^2) behavior in a 8179 number of passes, GCC factors computed gotos early in the 8180 compilation process, and unfactors them as late as possible. 8181 Only computed jumps at the end of a basic blocks with no more 8182 than max-goto-duplication-insns are unfactored. The default 8183 value is 8. 8184 8185 'max-delay-slot-insn-search' 8186 The maximum number of instructions to consider when looking 8187 for an instruction to fill a delay slot. If more than this 8188 arbitrary number of instructions are searched, the time 8189 savings from filling the delay slot are minimal, so stop 8190 searching. Increasing values mean more aggressive 8191 optimization, making the compilation time increase with 8192 probably small improvement in execution time. 8193 8194 'max-delay-slot-live-search' 8195 When trying to fill delay slots, the maximum number of 8196 instructions to consider when searching for a block with valid 8197 live register information. Increasing this arbitrarily chosen 8198 value means more aggressive optimization, increasing the 8199 compilation time. This parameter should be removed when the 8200 delay slot code is rewritten to maintain the control-flow 8201 graph. 8202 8203 'max-gcse-memory' 8204 The approximate maximum amount of memory that can be allocated 8205 in order to perform the global common subexpression 8206 elimination optimization. If more memory than specified is 8207 required, the optimization is not done. 8208 8209 'max-gcse-insertion-ratio' 8210 If the ratio of expression insertions to deletions is larger 8211 than this value for any expression, then RTL PRE inserts or 8212 removes the expression and thus leaves partially redundant 8213 computations in the instruction stream. The default value is 8214 20. 8215 8216 'max-pending-list-length' 8217 The maximum number of pending dependencies scheduling allows 8218 before flushing the current state and starting over. Large 8219 functions with few branches or calls can create excessively 8220 large lists which needlessly consume memory and resources. 8221 8222 'max-modulo-backtrack-attempts' 8223 The maximum number of backtrack attempts the scheduler should 8224 make when modulo scheduling a loop. Larger values can 8225 exponentially increase compilation time. 8226 8227 'max-inline-insns-single' 8228 Several parameters control the tree inliner used in GCC. This 8229 number sets the maximum number of instructions (counted in 8230 GCC's internal representation) in a single function that the 8231 tree inliner considers for inlining. This only affects 8232 functions declared inline and methods implemented in a class 8233 declaration (C++). The default value is 400. 8234 8235 'max-inline-insns-auto' 8236 When you use '-finline-functions' (included in '-O3'), a lot 8237 of functions that would otherwise not be considered for 8238 inlining by the compiler are investigated. To those 8239 functions, a different (more restrictive) limit compared to 8240 functions declared inline can be applied. The default value 8241 is 40. 8242 8243 'inline-min-speedup' 8244 When estimated performance improvement of caller + callee 8245 runtime exceeds this threshold (in precent), the function can 8246 be inlined regardless the limit on '--param 8247 max-inline-insns-single' and '--param max-inline-insns-auto'. 8248 8249 'large-function-insns' 8250 The limit specifying really large functions. For functions 8251 larger than this limit after inlining, inlining is constrained 8252 by '--param large-function-growth'. This parameter is useful 8253 primarily to avoid extreme compilation time caused by 8254 non-linear algorithms used by the back end. The default value 8255 is 2700. 8256 8257 'large-function-growth' 8258 Specifies maximal growth of large function caused by inlining 8259 in percents. The default value is 100 which limits large 8260 function growth to 2.0 times the original size. 8261 8262 'large-unit-insns' 8263 The limit specifying large translation unit. Growth caused by 8264 inlining of units larger than this limit is limited by 8265 '--param inline-unit-growth'. For small units this might be 8266 too tight. For example, consider a unit consisting of 8267 function A that is inline and B that just calls A three times. 8268 If B is small relative to A, the growth of unit is 300\% and 8269 yet such inlining is very sane. For very large units 8270 consisting of small inlineable functions, however, the overall 8271 unit growth limit is needed to avoid exponential explosion of 8272 code size. Thus for smaller units, the size is increased to 8273 '--param large-unit-insns' before applying '--param 8274 inline-unit-growth'. The default is 10000. 8275 8276 'inline-unit-growth' 8277 Specifies maximal overall growth of the compilation unit 8278 caused by inlining. The default value is 30 which limits unit 8279 growth to 1.3 times the original size. 8280 8281 'ipcp-unit-growth' 8282 Specifies maximal overall growth of the compilation unit 8283 caused by interprocedural constant propagation. The default 8284 value is 10 which limits unit growth to 1.1 times the original 8285 size. 8286 8287 'large-stack-frame' 8288 The limit specifying large stack frames. While inlining the 8289 algorithm is trying to not grow past this limit too much. The 8290 default value is 256 bytes. 8291 8292 'large-stack-frame-growth' 8293 Specifies maximal growth of large stack frames caused by 8294 inlining in percents. The default value is 1000 which limits 8295 large stack frame growth to 11 times the original size. 8296 8297 'max-inline-insns-recursive' 8298 'max-inline-insns-recursive-auto' 8299 Specifies the maximum number of instructions an out-of-line 8300 copy of a self-recursive inline function can grow into by 8301 performing recursive inlining. 8302 8303 For functions declared inline, '--param 8304 max-inline-insns-recursive' is taken into account. For 8305 functions not declared inline, recursive inlining happens only 8306 when '-finline-functions' (included in '-O3') is enabled and 8307 '--param max-inline-insns-recursive-auto' is used. The 8308 default value is 450. 8309 8310 'max-inline-recursive-depth' 8311 'max-inline-recursive-depth-auto' 8312 Specifies the maximum recursion depth used for recursive 8313 inlining. 8314 8315 For functions declared inline, '--param 8316 max-inline-recursive-depth' is taken into account. For 8317 functions not declared inline, recursive inlining happens only 8318 when '-finline-functions' (included in '-O3') is enabled and 8319 '--param max-inline-recursive-depth-auto' is used. The 8320 default value is 8. 8321 8322 'min-inline-recursive-probability' 8323 Recursive inlining is profitable only for function having deep 8324 recursion in average and can hurt for function having little 8325 recursion depth by increasing the prologue size or complexity 8326 of function body to other optimizers. 8327 8328 When profile feedback is available (see '-fprofile-generate') 8329 the actual recursion depth can be guessed from probability 8330 that function recurses via a given call expression. This 8331 parameter limits inlining only to call expressions whose 8332 probability exceeds the given threshold (in percents). The 8333 default value is 10. 8334 8335 'early-inlining-insns' 8336 Specify growth that the early inliner can make. In effect it 8337 increases the amount of inlining for code having a large 8338 abstraction penalty. The default value is 10. 8339 8340 'max-early-inliner-iterations' 8341 'max-early-inliner-iterations' 8342 Limit of iterations of the early inliner. This basically 8343 bounds the number of nested indirect calls the early inliner 8344 can resolve. Deeper chains are still handled by late 8345 inlining. 8346 8347 'comdat-sharing-probability' 8348 'comdat-sharing-probability' 8349 Probability (in percent) that C++ inline function with comdat 8350 visibility are shared across multiple compilation units. The 8351 default value is 20. 8352 8353 'min-vect-loop-bound' 8354 The minimum number of iterations under which loops are not 8355 vectorized when '-ftree-vectorize' is used. The number of 8356 iterations after vectorization needs to be greater than the 8357 value specified by this option to allow vectorization. The 8358 default value is 0. 8359 8360 'gcse-cost-distance-ratio' 8361 Scaling factor in calculation of maximum distance an 8362 expression can be moved by GCSE optimizations. This is 8363 currently supported only in the code hoisting pass. The 8364 bigger the ratio, the more aggressive code hoisting is with 8365 simple expressions, i.e., the expressions that have cost less 8366 than 'gcse-unrestricted-cost'. Specifying 0 disables hoisting 8367 of simple expressions. The default value is 10. 8368 8369 'gcse-unrestricted-cost' 8370 Cost, roughly measured as the cost of a single typical machine 8371 instruction, at which GCSE optimizations do not constrain the 8372 distance an expression can travel. This is currently 8373 supported only in the code hoisting pass. The lesser the 8374 cost, the more aggressive code hoisting is. Specifying 0 8375 allows all expressions to travel unrestricted distances. The 8376 default value is 3. 8377 8378 'max-hoist-depth' 8379 The depth of search in the dominator tree for expressions to 8380 hoist. This is used to avoid quadratic behavior in hoisting 8381 algorithm. The value of 0 does not limit on the search, but 8382 may slow down compilation of huge functions. The default 8383 value is 30. 8384 8385 'max-tail-merge-comparisons' 8386 The maximum amount of similar bbs to compare a bb with. This 8387 is used to avoid quadratic behavior in tree tail merging. The 8388 default value is 10. 8389 8390 'max-tail-merge-iterations' 8391 The maximum amount of iterations of the pass over the 8392 function. This is used to limit compilation time in tree tail 8393 merging. The default value is 2. 8394 8395 'max-unrolled-insns' 8396 The maximum number of instructions that a loop may have to be 8397 unrolled. If a loop is unrolled, this parameter also 8398 determines how many times the loop code is unrolled. 8399 8400 'max-average-unrolled-insns' 8401 The maximum number of instructions biased by probabilities of 8402 their execution that a loop may have to be unrolled. If a 8403 loop is unrolled, this parameter also determines how many 8404 times the loop code is unrolled. 8405 8406 'max-unroll-times' 8407 The maximum number of unrollings of a single loop. 8408 8409 'max-peeled-insns' 8410 The maximum number of instructions that a loop may have to be 8411 peeled. If a loop is peeled, this parameter also determines 8412 how many times the loop code is peeled. 8413 8414 'max-peel-times' 8415 The maximum number of peelings of a single loop. 8416 8417 'max-peel-branches' 8418 The maximum number of branches on the hot path through the 8419 peeled sequence. 8420 8421 'max-completely-peeled-insns' 8422 The maximum number of insns of a completely peeled loop. 8423 8424 'max-completely-peel-times' 8425 The maximum number of iterations of a loop to be suitable for 8426 complete peeling. 8427 8428 'max-completely-peel-loop-nest-depth' 8429 The maximum depth of a loop nest suitable for complete 8430 peeling. 8431 8432 'max-unswitch-insns' 8433 The maximum number of insns of an unswitched loop. 8434 8435 'max-unswitch-level' 8436 The maximum number of branches unswitched in a single loop. 8437 8438 'lim-expensive' 8439 The minimum cost of an expensive expression in the loop 8440 invariant motion. 8441 8442 'iv-consider-all-candidates-bound' 8443 Bound on number of candidates for induction variables, below 8444 which all candidates are considered for each use in induction 8445 variable optimizations. If there are more candidates than 8446 this, only the most relevant ones are considered to avoid 8447 quadratic time complexity. 8448 8449 'iv-max-considered-uses' 8450 The induction variable optimizations give up on loops that 8451 contain more induction variable uses. 8452 8453 'iv-always-prune-cand-set-bound' 8454 If the number of candidates in the set is smaller than this 8455 value, always try to remove unnecessary ivs from the set when 8456 adding a new one. 8457 8458 'scev-max-expr-size' 8459 Bound on size of expressions used in the scalar evolutions 8460 analyzer. Large expressions slow the analyzer. 8461 8462 'scev-max-expr-complexity' 8463 Bound on the complexity of the expressions in the scalar 8464 evolutions analyzer. Complex expressions slow the analyzer. 8465 8466 'omega-max-vars' 8467 The maximum number of variables in an Omega constraint system. 8468 The default value is 128. 8469 8470 'omega-max-geqs' 8471 The maximum number of inequalities in an Omega constraint 8472 system. The default value is 256. 8473 8474 'omega-max-eqs' 8475 The maximum number of equalities in an Omega constraint 8476 system. The default value is 128. 8477 8478 'omega-max-wild-cards' 8479 The maximum number of wildcard variables that the Omega solver 8480 is able to insert. The default value is 18. 8481 8482 'omega-hash-table-size' 8483 The size of the hash table in the Omega solver. The default 8484 value is 550. 8485 8486 'omega-max-keys' 8487 The maximal number of keys used by the Omega solver. The 8488 default value is 500. 8489 8490 'omega-eliminate-redundant-constraints' 8491 When set to 1, use expensive methods to eliminate all 8492 redundant constraints. The default value is 0. 8493 8494 'vect-max-version-for-alignment-checks' 8495 The maximum number of run-time checks that can be performed 8496 when doing loop versioning for alignment in the vectorizer. 8497 See option '-ftree-vect-loop-version' for more information. 8498 8499 'vect-max-version-for-alias-checks' 8500 The maximum number of run-time checks that can be performed 8501 when doing loop versioning for alias in the vectorizer. See 8502 option '-ftree-vect-loop-version' for more information. 8503 8504 'max-iterations-to-track' 8505 The maximum number of iterations of a loop the brute-force 8506 algorithm for analysis of the number of iterations of the loop 8507 tries to evaluate. 8508 8509 'hot-bb-count-ws-permille' 8510 A basic block profile count is considered hot if it 8511 contributes to the given permillage (i.e. 0...1000) of the 8512 entire profiled execution. 8513 8514 'hot-bb-frequency-fraction' 8515 Select fraction of the entry block frequency of executions of 8516 basic block in function given basic block needs to have to be 8517 considered hot. 8518 8519 'max-predicted-iterations' 8520 The maximum number of loop iterations we predict statically. 8521 This is useful in cases where a function contains a single 8522 loop with known bound and another loop with unknown bound. 8523 The known number of iterations is predicted correctly, while 8524 the unknown number of iterations average to roughly 10. This 8525 means that the loop without bounds appears artificially cold 8526 relative to the other one. 8527 8528 'align-threshold' 8529 8530 Select fraction of the maximal frequency of executions of a 8531 basic block in a function to align the basic block. 8532 8533 'align-loop-iterations' 8534 8535 A loop expected to iterate at least the selected number of 8536 iterations is aligned. 8537 8538 'tracer-dynamic-coverage' 8539 'tracer-dynamic-coverage-feedback' 8540 8541 This value is used to limit superblock formation once the 8542 given percentage of executed instructions is covered. This 8543 limits unnecessary code size expansion. 8544 8545 The 'tracer-dynamic-coverage-feedback' is used only when 8546 profile feedback is available. The real profiles (as opposed 8547 to statically estimated ones) are much less balanced allowing 8548 the threshold to be larger value. 8549 8550 'tracer-max-code-growth' 8551 Stop tail duplication once code growth has reached given 8552 percentage. This is a rather artificial limit, as most of the 8553 duplicates are eliminated later in cross jumping, so it may be 8554 set to much higher values than is the desired code growth. 8555 8556 'tracer-min-branch-ratio' 8557 8558 Stop reverse growth when the reverse probability of best edge 8559 is less than this threshold (in percent). 8560 8561 'tracer-min-branch-ratio' 8562 'tracer-min-branch-ratio-feedback' 8563 8564 Stop forward growth if the best edge has probability lower 8565 than this threshold. 8566 8567 Similarly to 'tracer-dynamic-coverage' two values are present, 8568 one for compilation for profile feedback and one for 8569 compilation without. The value for compilation with profile 8570 feedback needs to be more conservative (higher) in order to 8571 make tracer effective. 8572 8573 'max-cse-path-length' 8574 8575 The maximum number of basic blocks on path that CSE considers. 8576 The default is 10. 8577 8578 'max-cse-insns' 8579 The maximum number of instructions CSE processes before 8580 flushing. The default is 1000. 8581 8582 'ggc-min-expand' 8583 8584 GCC uses a garbage collector to manage its own memory 8585 allocation. This parameter specifies the minimum percentage 8586 by which the garbage collector's heap should be allowed to 8587 expand between collections. Tuning this may improve 8588 compilation speed; it has no effect on code generation. 8589 8590 The default is 30% + 70% * (RAM/1GB) with an upper bound of 8591 100% when RAM >= 1GB. If 'getrlimit' is available, the notion 8592 of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or 8593 'RLIMIT_AS'. If GCC is not able to calculate RAM on a 8594 particular platform, the lower bound of 30% is used. Setting 8595 this parameter and 'ggc-min-heapsize' to zero causes a full 8596 collection to occur at every opportunity. This is extremely 8597 slow, but can be useful for debugging. 8598 8599 'ggc-min-heapsize' 8600 8601 Minimum size of the garbage collector's heap before it begins 8602 bothering to collect garbage. The first collection occurs 8603 after the heap expands by 'ggc-min-expand'% beyond 8604 'ggc-min-heapsize'. Again, tuning this may improve 8605 compilation speed, and has no effect on code generation. 8606 8607 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 8608 that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 8609 exceeded, but with a lower bound of 4096 (four megabytes) and 8610 an upper bound of 131072 (128 megabytes). If GCC is not able 8611 to calculate RAM on a particular platform, the lower bound is 8612 used. Setting this parameter very large effectively disables 8613 garbage collection. Setting this parameter and 8614 'ggc-min-expand' to zero causes a full collection to occur at 8615 every opportunity. 8616 8617 'max-reload-search-insns' 8618 The maximum number of instruction reload should look backward 8619 for equivalent register. Increasing values mean more 8620 aggressive optimization, making the compilation time increase 8621 with probably slightly better performance. The default value 8622 is 100. 8623 8624 'max-cselib-memory-locations' 8625 The maximum number of memory locations cselib should take into 8626 account. Increasing values mean more aggressive optimization, 8627 making the compilation time increase with probably slightly 8628 better performance. The default value is 500. 8629 8630 'reorder-blocks-duplicate' 8631 'reorder-blocks-duplicate-feedback' 8632 8633 Used by the basic block reordering pass to decide whether to 8634 use unconditional branch or duplicate the code on its 8635 destination. Code is duplicated when its estimated size is 8636 smaller than this value multiplied by the estimated size of 8637 unconditional jump in the hot spots of the program. 8638 8639 The 'reorder-block-duplicate-feedback' is used only when 8640 profile feedback is available. It may be set to higher values 8641 than 'reorder-block-duplicate' since information about the hot 8642 spots is more accurate. 8643 8644 'max-sched-ready-insns' 8645 The maximum number of instructions ready to be issued the 8646 scheduler should consider at any given time during the first 8647 scheduling pass. Increasing values mean more thorough 8648 searches, making the compilation time increase with probably 8649 little benefit. The default value is 100. 8650 8651 'max-sched-region-blocks' 8652 The maximum number of blocks in a region to be considered for 8653 interblock scheduling. The default value is 10. 8654 8655 'max-pipeline-region-blocks' 8656 The maximum number of blocks in a region to be considered for 8657 pipelining in the selective scheduler. The default value is 8658 15. 8659 8660 'max-sched-region-insns' 8661 The maximum number of insns in a region to be considered for 8662 interblock scheduling. The default value is 100. 8663 8664 'max-pipeline-region-insns' 8665 The maximum number of insns in a region to be considered for 8666 pipelining in the selective scheduler. The default value is 8667 200. 8668 8669 'min-spec-prob' 8670 The minimum probability (in percents) of reaching a source 8671 block for interblock speculative scheduling. The default 8672 value is 40. 8673 8674 'max-sched-extend-regions-iters' 8675 The maximum number of iterations through CFG to extend 8676 regions. A value of 0 (the default) disables region 8677 extensions. 8678 8679 'max-sched-insn-conflict-delay' 8680 The maximum conflict delay for an insn to be considered for 8681 speculative motion. The default value is 3. 8682 8683 'sched-spec-prob-cutoff' 8684 The minimal probability of speculation success (in percents), 8685 so that speculative insns are scheduled. The default value is 8686 40. 8687 8688 'sched-spec-state-edge-prob-cutoff' 8689 The minimum probability an edge must have for the scheduler to 8690 save its state across it. The default value is 10. 8691 8692 'sched-mem-true-dep-cost' 8693 Minimal distance (in CPU cycles) between store and load 8694 targeting same memory locations. The default value is 1. 8695 8696 'selsched-max-lookahead' 8697 The maximum size of the lookahead window of selective 8698 scheduling. It is a depth of search for available 8699 instructions. The default value is 50. 8700 8701 'selsched-max-sched-times' 8702 The maximum number of times that an instruction is scheduled 8703 during selective scheduling. This is the limit on the number 8704 of iterations through which the instruction may be pipelined. 8705 The default value is 2. 8706 8707 'selsched-max-insns-to-rename' 8708 The maximum number of best instructions in the ready list that 8709 are considered for renaming in the selective scheduler. The 8710 default value is 2. 8711 8712 'sms-min-sc' 8713 The minimum value of stage count that swing modulo scheduler 8714 generates. The default value is 2. 8715 8716 'max-last-value-rtl' 8717 The maximum size measured as number of RTLs that can be 8718 recorded in an expression in combiner for a pseudo register as 8719 last known value of that register. The default is 10000. 8720 8721 'integer-share-limit' 8722 Small integer constants can use a shared data structure, 8723 reducing the compiler's memory usage and increasing its speed. 8724 This sets the maximum value of a shared integer constant. The 8725 default value is 256. 8726 8727 'ssp-buffer-size' 8728 The minimum size of buffers (i.e. arrays) that receive stack 8729 smashing protection when '-fstack-protection' is used. 8730 8731 'max-jump-thread-duplication-stmts' 8732 Maximum number of statements allowed in a block that needs to 8733 be duplicated when threading jumps. 8734 8735 'max-fields-for-field-sensitive' 8736 Maximum number of fields in a structure treated in a field 8737 sensitive manner during pointer analysis. The default is zero 8738 for '-O0' and '-O1', and 100 for '-Os', '-O2', and '-O3'. 8739 8740 'prefetch-latency' 8741 Estimate on average number of instructions that are executed 8742 before prefetch finishes. The distance prefetched ahead is 8743 proportional to this constant. Increasing this number may 8744 also lead to less streams being prefetched (see 8745 'simultaneous-prefetches'). 8746 8747 'simultaneous-prefetches' 8748 Maximum number of prefetches that can run at the same time. 8749 8750 'l1-cache-line-size' 8751 The size of cache line in L1 cache, in bytes. 8752 8753 'l1-cache-size' 8754 The size of L1 cache, in kilobytes. 8755 8756 'l2-cache-size' 8757 The size of L2 cache, in kilobytes. 8758 8759 'min-insn-to-prefetch-ratio' 8760 The minimum ratio between the number of instructions and the 8761 number of prefetches to enable prefetching in a loop. 8762 8763 'prefetch-min-insn-to-mem-ratio' 8764 The minimum ratio between the number of instructions and the 8765 number of memory references to enable prefetching in a loop. 8766 8767 'use-canonical-types' 8768 Whether the compiler should use the "canonical" type system. 8769 By default, this should always be 1, which uses a more 8770 efficient internal mechanism for comparing types in C++ and 8771 Objective-C++. However, if bugs in the canonical type system 8772 are causing compilation failures, set this value to 0 to 8773 disable canonical types. 8774 8775 'switch-conversion-max-branch-ratio' 8776 Switch initialization conversion refuses to create arrays that 8777 are bigger than 'switch-conversion-max-branch-ratio' times the 8778 number of branches in the switch. 8779 8780 'max-partial-antic-length' 8781 Maximum length of the partial antic set computed during the 8782 tree partial redundancy elimination optimization 8783 ('-ftree-pre') when optimizing at '-O3' and above. For some 8784 sorts of source code the enhanced partial redundancy 8785 elimination optimization can run away, consuming all of the 8786 memory available on the host machine. This parameter sets a 8787 limit on the length of the sets that are computed, which 8788 prevents the runaway behavior. Setting a value of 0 for this 8789 parameter allows an unlimited set length. 8790 8791 'sccvn-max-scc-size' 8792 Maximum size of a strongly connected component (SCC) during 8793 SCCVN processing. If this limit is hit, SCCVN processing for 8794 the whole function is not done and optimizations depending on 8795 it are disabled. The default maximum SCC size is 10000. 8796 8797 'sccvn-max-alias-queries-per-access' 8798 Maximum number of alias-oracle queries we perform when looking 8799 for redundancies for loads and stores. If this limit is hit 8800 the search is aborted and the load or store is not considered 8801 redundant. The number of queries is algorithmically limited 8802 to the number of stores on all paths from the load to the 8803 function entry. The default maxmimum number of queries is 8804 1000. 8805 8806 'ira-max-loops-num' 8807 IRA uses regional register allocation by default. If a 8808 function contains more loops than the number given by this 8809 parameter, only at most the given number of the most 8810 frequently-executed loops form regions for regional register 8811 allocation. The default value of the parameter is 100. 8812 8813 'ira-max-conflict-table-size' 8814 Although IRA uses a sophisticated algorithm to compress the 8815 conflict table, the table can still require excessive amounts 8816 of memory for huge functions. If the conflict table for a 8817 function could be more than the size in MB given by this 8818 parameter, the register allocator instead uses a faster, 8819 simpler, and lower-quality algorithm that does not require 8820 building a pseudo-register conflict table. The default value 8821 of the parameter is 2000. 8822 8823 'ira-loop-reserved-regs' 8824 IRA can be used to evaluate more accurate register pressure in 8825 loops for decisions to move loop invariants (see '-O3'). The 8826 number of available registers reserved for some other purposes 8827 is given by this parameter. The default value of the 8828 parameter is 2, which is the minimal number of registers 8829 needed by typical instructions. This value is the best found 8830 from numerous experiments. 8831 8832 'loop-invariant-max-bbs-in-loop' 8833 Loop invariant motion can be very expensive, both in 8834 compilation time and in amount of needed compile-time memory, 8835 with very large loops. Loops with more basic blocks than this 8836 parameter won't have loop invariant motion optimization 8837 performed on them. The default value of the parameter is 1000 8838 for '-O1' and 10000 for '-O2' and above. 8839 8840 'loop-max-datarefs-for-datadeps' 8841 Building data dapendencies is expensive for very large loops. 8842 This parameter limits the number of data references in loops 8843 that are considered for data dependence analysis. These large 8844 loops are no handled by the optimizations using loop data 8845 dependencies. The default value is 1000. 8846 8847 'max-vartrack-size' 8848 Sets a maximum number of hash table slots to use during 8849 variable tracking dataflow analysis of any function. If this 8850 limit is exceeded with variable tracking at assignments 8851 enabled, analysis for that function is retried without it, 8852 after removing all debug insns from the function. If the 8853 limit is exceeded even without debug insns, var tracking 8854 analysis is completely disabled for the function. Setting the 8855 parameter to zero makes it unlimited. 8856 8857 'max-vartrack-expr-depth' 8858 Sets a maximum number of recursion levels when attempting to 8859 map variable names or debug temporaries to value expressions. 8860 This trades compilation time for more complete debug 8861 information. If this is set too low, value expressions that 8862 are available and could be represented in debug information 8863 may end up not being used; setting this higher may enable the 8864 compiler to find more complex debug expressions, but compile 8865 time and memory use may grow. The default is 12. 8866 8867 'min-nondebug-insn-uid' 8868 Use uids starting at this parameter for nondebug insns. The 8869 range below the parameter is reserved exclusively for debug 8870 insns created by '-fvar-tracking-assignments', but debug insns 8871 may get (non-overlapping) uids above it if the reserved range 8872 is exhausted. 8873 8874 'ipa-sra-ptr-growth-factor' 8875 IPA-SRA replaces a pointer to an aggregate with one or more 8876 new parameters only when their cumulative size is less or 8877 equal to 'ipa-sra-ptr-growth-factor' times the size of the 8878 original pointer parameter. 8879 8880 'tm-max-aggregate-size' 8881 When making copies of thread-local variables in a transaction, 8882 this parameter specifies the size in bytes after which 8883 variables are saved with the logging functions as opposed to 8884 save/restore code sequence pairs. This option only applies 8885 when using '-fgnu-tm'. 8886 8887 'graphite-max-nb-scop-params' 8888 To avoid exponential effects in the Graphite loop transforms, 8889 the number of parameters in a Static Control Part (SCoP) is 8890 bounded. The default value is 10 parameters. A variable 8891 whose value is unknown at compilation time and defined outside 8892 a SCoP is a parameter of the SCoP. 8893 8894 'graphite-max-bbs-per-function' 8895 To avoid exponential effects in the detection of SCoPs, the 8896 size of the functions analyzed by Graphite is bounded. The 8897 default value is 100 basic blocks. 8898 8899 'loop-block-tile-size' 8900 Loop blocking or strip mining transforms, enabled with 8901 '-floop-block' or '-floop-strip-mine', strip mine each loop in 8902 the loop nest by a given number of iterations. The strip 8903 length can be changed using the 'loop-block-tile-size' 8904 parameter. The default value is 51 iterations. 8905 8906 'ipa-cp-value-list-size' 8907 IPA-CP attempts to track all possible values and types passed 8908 to a function's parameter in order to propagate them and 8909 perform devirtualization. 'ipa-cp-value-list-size' is the 8910 maximum number of values and types it stores per one formal 8911 parameter of a function. 8912 8913 'lto-partitions' 8914 Specify desired number of partitions produced during WHOPR 8915 compilation. The number of partitions should exceed the 8916 number of CPUs used for compilation. The default value is 32. 8917 8918 'lto-minpartition' 8919 Size of minimal partition for WHOPR (in estimated 8920 instructions). This prevents expenses of splitting very small 8921 programs into too many partitions. 8922 8923 'cxx-max-namespaces-for-diagnostic-help' 8924 The maximum number of namespaces to consult for suggestions 8925 when C++ name lookup fails for an identifier. The default is 8926 1000. 8927 8928 'sink-frequency-threshold' 8929 The maximum relative execution frequency (in percents) of the 8930 target block relative to a statement's original block to allow 8931 statement sinking of a statement. Larger numbers result in 8932 more aggressive statement sinking. The default value is 75. 8933 A small positive adjustment is applied for statements with 8934 memory operands as those are even more profitable so sink. 8935 8936 'max-stores-to-sink' 8937 The maximum number of conditional stores paires that can be 8938 sunk. Set to 0 if either vectorization ('-ftree-vectorize') 8939 or if-conversion ('-ftree-loop-if-convert') is disabled. The 8940 default is 2. 8941 8942 'allow-load-data-races' 8943 Allow optimizers to introduce new data races on loads. Set to 8944 1 to allow, otherwise to 0. This option is enabled by default 8945 unless implicitly set by the '-fmemory-model=' option. 8946 8947 'allow-store-data-races' 8948 Allow optimizers to introduce new data races on stores. Set 8949 to 1 to allow, otherwise to 0. This option is enabled by 8950 default unless implicitly set by the '-fmemory-model=' option. 8951 8952 'allow-packed-load-data-races' 8953 Allow optimizers to introduce new data races on packed data 8954 loads. Set to 1 to allow, otherwise to 0. This option is 8955 enabled by default unless implicitly set by the 8956 '-fmemory-model=' option. 8957 8958 'allow-packed-store-data-races' 8959 Allow optimizers to introduce new data races on packed data 8960 stores. Set to 1 to allow, otherwise to 0. This option is 8961 enabled by default unless implicitly set by the 8962 '-fmemory-model=' option. 8963 8964 'case-values-threshold' 8965 The smallest number of different values for which it is best 8966 to use a jump-table instead of a tree of conditional branches. 8967 If the value is 0, use the default for the machine. The 8968 default is 0. 8969 8970 'tree-reassoc-width' 8971 Set the maximum number of instructions executed in parallel in 8972 reassociated tree. This parameter overrides target dependent 8973 heuristics used by default if has non zero value. 8974 8975 'sched-pressure-algorithm' 8976 Choose between the two available implementations of 8977 '-fsched-pressure'. Algorithm 1 is the original 8978 implementation and is the more likely to prevent instructions 8979 from being reordered. Algorithm 2 was designed to be a 8980 compromise between the relatively conservative approach taken 8981 by algorithm 1 and the rather aggressive approach taken by the 8982 default scheduler. It relies more heavily on having a regular 8983 register file and accurate register pressure classes. See 8984 'haifa-sched.c' in the GCC sources for more details. 8985 8986 The default choice depends on the target. 8987 8988 'max-slsr-cand-scan' 8989 Set the maximum number of existing candidates that will be 8990 considered when seeking a basis for a new straight-line 8991 strength reduction candidate. 8992 8993 8994 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 8995 8996 3.11 Options Controlling the Preprocessor 8997 ========================================= 8998 8999 These options control the C preprocessor, which is run on each C source 9000 file before actual compilation. 9001 9002 If you use the '-E' option, nothing is done except preprocessing. Some 9003 of these options make sense only together with '-E' because they cause 9004 the preprocessor output to be unsuitable for actual compilation. 9005 9006 '-Wp,OPTION' 9007 You can use '-Wp,OPTION' to bypass the compiler driver and pass 9008 OPTION directly through to the preprocessor. If OPTION contains 9009 commas, it is split into multiple options at the commas. However, 9010 many options are modified, translated or interpreted by the 9011 compiler driver before being passed to the preprocessor, and '-Wp' 9012 forcibly bypasses this phase. The preprocessor's direct interface 9013 is undocumented and subject to change, so whenever possible you 9014 should avoid using '-Wp' and let the driver handle the options 9015 instead. 9016 9017 '-Xpreprocessor OPTION' 9018 Pass OPTION as an option to the preprocessor. You can use this to 9019 supply system-specific preprocessor options that GCC does not 9020 recognize. 9021 9022 If you want to pass an option that takes an argument, you must use 9023 '-Xpreprocessor' twice, once for the option and once for the 9024 argument. 9025 9026 '-no-integrated-cpp' 9027 Perform preprocessing as a separate pass before compilation. By 9028 default, GCC performs preprocessing as an integrated part of input 9029 tokenization and parsing. If this option is provided, the 9030 appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for 9031 C, C++, and Objective-C, respectively) is instead invoked twice, 9032 once for preprocessing only and once for actual compilation of the 9033 preprocessed input. This option may be useful in conjunction with 9034 the '-B' or '-wrapper' options to specify an alternate preprocessor 9035 or perform additional processing of the program source between 9036 normal preprocessing and compilation. 9037 9038 '-D NAME' 9039 Predefine NAME as a macro, with definition '1'. 9040 9041 '-D NAME=DEFINITION' 9042 The contents of DEFINITION are tokenized and processed as if they 9043 appeared during translation phase three in a '#define' directive. 9044 In particular, the definition will be truncated by embedded newline 9045 characters. 9046 9047 If you are invoking the preprocessor from a shell or shell-like 9048 program you may need to use the shell's quoting syntax to protect 9049 characters such as spaces that have a meaning in the shell syntax. 9050 9051 If you wish to define a function-like macro on the command line, 9052 write its argument list with surrounding parentheses before the 9053 equals sign (if any). Parentheses are meaningful to most shells, 9054 so you will need to quote the option. With 'sh' and 'csh', 9055 '-D'NAME(ARGS...)=DEFINITION'' works. 9056 9057 '-D' and '-U' options are processed in the order they are given on 9058 the command line. All '-imacros FILE' and '-include FILE' options 9059 are processed after all '-D' and '-U' options. 9060 9061 '-U NAME' 9062 Cancel any previous definition of NAME, either built in or provided 9063 with a '-D' option. 9064 9065 '-undef' 9066 Do not predefine any system-specific or GCC-specific macros. The 9067 standard predefined macros remain defined. 9068 9069 '-I DIR' 9070 Add the directory DIR to the list of directories to be searched for 9071 header files. Directories named by '-I' are searched before the 9072 standard system include directories. If the directory DIR is a 9073 standard system include directory, the option is ignored to ensure 9074 that the default search order for system directories and the 9075 special treatment of system headers are not defeated . If DIR 9076 begins with '=', then the '=' will be replaced by the sysroot 9077 prefix; see '--sysroot' and '-isysroot'. 9078 9079 '-o FILE' 9080 Write output to FILE. This is the same as specifying FILE as the 9081 second non-option argument to 'cpp'. 'gcc' has a different 9082 interpretation of a second non-option argument, so you must use 9083 '-o' to specify the output file. 9084 9085 '-Wall' 9086 Turns on all optional warnings which are desirable for normal code. 9087 At present this is '-Wcomment', '-Wtrigraphs', '-Wmultichar' and a 9088 warning about integer promotion causing a change of sign in '#if' 9089 expressions. Note that many of the preprocessor's warnings are on 9090 by default and have no options to control them. 9091 9092 '-Wcomment' 9093 '-Wcomments' 9094 Warn whenever a comment-start sequence '/*' appears in a '/*' 9095 comment, or whenever a backslash-newline appears in a '//' comment. 9096 (Both forms have the same effect.) 9097 9098 '-Wtrigraphs' 9099 Most trigraphs in comments cannot affect the meaning of the 9100 program. However, a trigraph that would form an escaped newline 9101 ('??/' at the end of a line) can, by changing where the comment 9102 begins or ends. Therefore, only trigraphs that would form escaped 9103 newlines produce warnings inside a comment. 9104 9105 This option is implied by '-Wall'. If '-Wall' is not given, this 9106 option is still enabled unless trigraphs are enabled. To get 9107 trigraph conversion without warnings, but get the other '-Wall' 9108 warnings, use '-trigraphs -Wall -Wno-trigraphs'. 9109 9110 '-Wtraditional' 9111 Warn about certain constructs that behave differently in 9112 traditional and ISO C. Also warn about ISO C constructs that have 9113 no traditional C equivalent, and problematic constructs which 9114 should be avoided. 9115 9116 '-Wundef' 9117 Warn whenever an identifier which is not a macro is encountered in 9118 an '#if' directive, outside of 'defined'. Such identifiers are 9119 replaced with zero. 9120 9121 '-Wunused-macros' 9122 Warn about macros defined in the main file that are unused. A 9123 macro is "used" if it is expanded or tested for existence at least 9124 once. The preprocessor will also warn if the macro has not been 9125 used at the time it is redefined or undefined. 9126 9127 Built-in macros, macros defined on the command line, and macros 9128 defined in include files are not warned about. 9129 9130 _Note:_ If a macro is actually used, but only used in skipped 9131 conditional blocks, then CPP will report it as unused. To avoid 9132 the warning in such a case, you might improve the scope of the 9133 macro's definition by, for example, moving it into the first 9134 skipped block. Alternatively, you could provide a dummy use with 9135 something like: 9136 9137 #if defined the_macro_causing_the_warning 9138 #endif 9139 9140 '-Wendif-labels' 9141 Warn whenever an '#else' or an '#endif' are followed by text. This 9142 usually happens in code of the form 9143 9144 #if FOO 9145 ... 9146 #else FOO 9147 ... 9148 #endif FOO 9149 9150 The second and third 'FOO' should be in comments, but often are not 9151 in older programs. This warning is on by default. 9152 9153 '-Werror' 9154 Make all warnings into hard errors. Source code which triggers 9155 warnings will be rejected. 9156 9157 '-Wsystem-headers' 9158 Issue warnings for code in system headers. These are normally 9159 unhelpful in finding bugs in your own code, therefore suppressed. 9160 If you are responsible for the system library, you may want to see 9161 them. 9162 9163 '-w' 9164 Suppress all warnings, including those which GNU CPP issues by 9165 default. 9166 9167 '-pedantic' 9168 Issue all the mandatory diagnostics listed in the C standard. Some 9169 of them are left out by default, since they trigger frequently on 9170 harmless code. 9171 9172 '-pedantic-errors' 9173 Issue all the mandatory diagnostics, and make all mandatory 9174 diagnostics into errors. This includes mandatory diagnostics that 9175 GCC issues without '-pedantic' but treats as warnings. 9176 9177 '-M' 9178 Instead of outputting the result of preprocessing, output a rule 9179 suitable for 'make' describing the dependencies of the main source 9180 file. The preprocessor outputs one 'make' rule containing the 9181 object file name for that source file, a colon, and the names of 9182 all the included files, including those coming from '-include' or 9183 '-imacros' command line options. 9184 9185 Unless specified explicitly (with '-MT' or '-MQ'), the object file 9186 name consists of the name of the source file with any suffix 9187 replaced with object file suffix and with any leading directory 9188 parts removed. If there are many included files then the rule is 9189 split into several lines using '\'-newline. The rule has no 9190 commands. 9191 9192 This option does not suppress the preprocessor's debug output, such 9193 as '-dM'. To avoid mixing such debug output with the dependency 9194 rules you should explicitly specify the dependency output file with 9195 '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT' 9196 (*note Environment Variables::). Debug output will still be sent 9197 to the regular output stream as normal. 9198 9199 Passing '-M' to the driver implies '-E', and suppresses warnings 9200 with an implicit '-w'. 9201 9202 '-MM' 9203 Like '-M' but do not mention header files that are found in system 9204 header directories, nor header files that are included, directly or 9205 indirectly, from such a header. 9206 9207 This implies that the choice of angle brackets or double quotes in 9208 an '#include' directive does not in itself determine whether that 9209 header will appear in '-MM' dependency output. This is a slight 9210 change in semantics from GCC versions 3.0 and earlier. 9211 9212 '-MF FILE' 9213 When used with '-M' or '-MM', specifies a file to write the 9214 dependencies to. If no '-MF' switch is given the preprocessor 9215 sends the rules to the same place it would have sent preprocessed 9216 output. 9217 9218 When used with the driver options '-MD' or '-MMD', '-MF' overrides 9219 the default dependency output file. 9220 9221 '-MG' 9222 In conjunction with an option such as '-M' requesting dependency 9223 generation, '-MG' assumes missing header files are generated files 9224 and adds them to the dependency list without raising an error. The 9225 dependency filename is taken directly from the '#include' directive 9226 without prepending any path. '-MG' also suppresses preprocessed 9227 output, as a missing header file renders this useless. 9228 9229 This feature is used in automatic updating of makefiles. 9230 9231 '-MP' 9232 This option instructs CPP to add a phony target for each dependency 9233 other than the main file, causing each to depend on nothing. These 9234 dummy rules work around errors 'make' gives if you remove header 9235 files without updating the 'Makefile' to match. 9236 9237 This is typical output: 9238 9239 test.o: test.c test.h 9240 9241 test.h: 9242 9243 '-MT TARGET' 9244 9245 Change the target of the rule emitted by dependency generation. By 9246 default CPP takes the name of the main input file, deletes any 9247 directory components and any file suffix such as '.c', and appends 9248 the platform's usual object suffix. The result is the target. 9249 9250 An '-MT' option will set the target to be exactly the string you 9251 specify. If you want multiple targets, you can specify them as a 9252 single argument to '-MT', or use multiple '-MT' options. 9253 9254 For example, '-MT '$(objpfx)foo.o'' might give 9255 9256 $(objpfx)foo.o: foo.c 9257 9258 '-MQ TARGET' 9259 9260 Same as '-MT', but it quotes any characters which are special to 9261 Make. '-MQ '$(objpfx)foo.o'' gives 9262 9263 $$(objpfx)foo.o: foo.c 9264 9265 The default target is automatically quoted, as if it were given 9266 with '-MQ'. 9267 9268 '-MD' 9269 '-MD' is equivalent to '-M -MF FILE', except that '-E' is not 9270 implied. The driver determines FILE based on whether an '-o' 9271 option is given. If it is, the driver uses its argument but with a 9272 suffix of '.d', otherwise it takes the name of the input file, 9273 removes any directory components and suffix, and applies a '.d' 9274 suffix. 9275 9276 If '-MD' is used in conjunction with '-E', any '-o' switch is 9277 understood to specify the dependency output file (*note -MF: 9278 dashMF.), but if used without '-E', each '-o' is understood to 9279 specify a target object file. 9280 9281 Since '-E' is not implied, '-MD' can be used to generate a 9282 dependency output file as a side-effect of the compilation process. 9283 9284 '-MMD' 9285 Like '-MD' except mention only user header files, not system header 9286 files. 9287 9288 '-fpch-deps' 9289 When using precompiled headers (*note Precompiled Headers::), this 9290 flag will cause the dependency-output flags to also list the files 9291 from the precompiled header's dependencies. If not specified only 9292 the precompiled header would be listed and not the files that were 9293 used to create it because those files are not consulted when a 9294 precompiled header is used. 9295 9296 '-fpch-preprocess' 9297 This option allows use of a precompiled header (*note Precompiled 9298 Headers::) together with '-E'. It inserts a special '#pragma', 9299 '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the 9300 place where the precompiled header was found, and its FILENAME. 9301 When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and 9302 loads the PCH. 9303 9304 This option is off by default, because the resulting preprocessed 9305 output is only really suitable as input to GCC. It is switched on 9306 by '-save-temps'. 9307 9308 You should not write this '#pragma' in your own code, but it is 9309 safe to edit the filename if the PCH file is available in a 9310 different location. The filename may be absolute or it may be 9311 relative to GCC's current directory. 9312 9313 '-x c' 9314 '-x c++' 9315 '-x objective-c' 9316 '-x assembler-with-cpp' 9317 Specify the source language: C, C++, Objective-C, or assembly. 9318 This has nothing to do with standards conformance or extensions; it 9319 merely selects which base syntax to expect. If you give none of 9320 these options, cpp will deduce the language from the extension of 9321 the source file: '.c', '.cc', '.m', or '.S'. Some other common 9322 extensions for C++ and assembly are also recognized. If cpp does 9323 not recognize the extension, it will treat the file as C; this is 9324 the most generic mode. 9325 9326 _Note:_ Previous versions of cpp accepted a '-lang' option which 9327 selected both the language and the standards conformance level. 9328 This option has been removed, because it conflicts with the '-l' 9329 option. 9330 9331 '-std=STANDARD' 9332 '-ansi' 9333 Specify the standard to which the code should conform. Currently 9334 CPP knows about C and C++ standards; others may be added in the 9335 future. 9336 9337 STANDARD may be one of: 9338 'c90' 9339 'c89' 9340 'iso9899:1990' 9341 The ISO C standard from 1990. 'c90' is the customary 9342 shorthand for this version of the standard. 9343 9344 The '-ansi' option is equivalent to '-std=c90'. 9345 9346 'iso9899:199409' 9347 The 1990 C standard, as amended in 1994. 9348 9349 'iso9899:1999' 9350 'c99' 9351 'iso9899:199x' 9352 'c9x' 9353 The revised ISO C standard, published in December 1999. 9354 Before publication, this was known as C9X. 9355 9356 'iso9899:2011' 9357 'c11' 9358 'c1x' 9359 The revised ISO C standard, published in December 2011. 9360 Before publication, this was known as C1X. 9361 9362 'gnu90' 9363 'gnu89' 9364 The 1990 C standard plus GNU extensions. This is the default. 9365 9366 'gnu99' 9367 'gnu9x' 9368 The 1999 C standard plus GNU extensions. 9369 9370 'gnu11' 9371 'gnu1x' 9372 The 2011 C standard plus GNU extensions. 9373 9374 'c++98' 9375 The 1998 ISO C++ standard plus amendments. 9376 9377 'gnu++98' 9378 The same as '-std=c++98' plus GNU extensions. This is the 9379 default for C++ code. 9380 9381 '-I-' 9382 Split the include path. Any directories specified with '-I' 9383 options before '-I-' are searched only for headers requested with 9384 '#include "FILE"'; they are not searched for '#include <FILE>'. If 9385 additional directories are specified with '-I' options after the 9386 '-I-', those directories are searched for all '#include' 9387 directives. 9388 9389 In addition, '-I-' inhibits the use of the directory of the current 9390 file directory as the first search directory for '#include "FILE"'. 9391 This option has been deprecated. 9392 9393 '-nostdinc' 9394 Do not search the standard system directories for header files. 9395 Only the directories you have specified with '-I' options (and the 9396 directory of the current file, if appropriate) are searched. 9397 9398 '-nostdinc++' 9399 Do not search for header files in the C++-specific standard 9400 directories, but do still search the other standard directories. 9401 (This option is used when building the C++ library.) 9402 9403 '-include FILE' 9404 Process FILE as if '#include "file"' appeared as the first line of 9405 the primary source file. However, the first directory searched for 9406 FILE is the preprocessor's working directory _instead of_ the 9407 directory containing the main source file. If not found there, it 9408 is searched for in the remainder of the '#include "..."' search 9409 chain as normal. 9410 9411 If multiple '-include' options are given, the files are included in 9412 the order they appear on the command line. 9413 9414 '-imacros FILE' 9415 Exactly like '-include', except that any output produced by 9416 scanning FILE is thrown away. Macros it defines remain defined. 9417 This allows you to acquire all the macros from a header without 9418 also processing its declarations. 9419 9420 All files specified by '-imacros' are processed before all files 9421 specified by '-include'. 9422 9423 '-idirafter DIR' 9424 Search DIR for header files, but do it _after_ all directories 9425 specified with '-I' and the standard system directories have been 9426 exhausted. DIR is treated as a system include directory. If DIR 9427 begins with '=', then the '=' will be replaced by the sysroot 9428 prefix; see '--sysroot' and '-isysroot'. 9429 9430 '-iprefix PREFIX' 9431 Specify PREFIX as the prefix for subsequent '-iwithprefix' options. 9432 If the prefix represents a directory, you should include the final 9433 '/'. 9434 9435 '-iwithprefix DIR' 9436 '-iwithprefixbefore DIR' 9437 Append DIR to the prefix specified previously with '-iprefix', and 9438 add the resulting directory to the include search path. 9439 '-iwithprefixbefore' puts it in the same place '-I' would; 9440 '-iwithprefix' puts it where '-idirafter' would. 9441 9442 '-isysroot DIR' 9443 This option is like the '--sysroot' option, but applies only to 9444 header files (except for Darwin targets, where it applies to both 9445 header files and libraries). See the '--sysroot' option for more 9446 information. 9447 9448 '-imultilib DIR' 9449 Use DIR as a subdirectory of the directory containing 9450 target-specific C++ headers. 9451 9452 '-isystem DIR' 9453 Search DIR for header files, after all directories specified by 9454 '-I' but before the standard system directories. Mark it as a 9455 system directory, so that it gets the same special treatment as is 9456 applied to the standard system directories. If DIR begins with 9457 '=', then the '=' will be replaced by the sysroot prefix; see 9458 '--sysroot' and '-isysroot'. 9459 9460 '-iquote DIR' 9461 Search DIR only for header files requested with '#include "FILE"'; 9462 they are not searched for '#include <FILE>', before all directories 9463 specified by '-I' and before the standard system directories. If 9464 DIR begins with '=', then the '=' will be replaced by the sysroot 9465 prefix; see '--sysroot' and '-isysroot'. 9466 9467 '-fdirectives-only' 9468 When preprocessing, handle directives, but do not expand macros. 9469 9470 The option's behavior depends on the '-E' and '-fpreprocessed' 9471 options. 9472 9473 With '-E', preprocessing is limited to the handling of directives 9474 such as '#define', '#ifdef', and '#error'. Other preprocessor 9475 operations, such as macro expansion and trigraph conversion are not 9476 performed. In addition, the '-dD' option is implicitly enabled. 9477 9478 With '-fpreprocessed', predefinition of command line and most 9479 builtin macros is disabled. Macros such as '__LINE__', which are 9480 contextually dependent, are handled normally. This enables 9481 compilation of files previously preprocessed with '-E 9482 -fdirectives-only'. 9483 9484 With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed' 9485 take precedence. This enables full preprocessing of files 9486 previously preprocessed with '-E -fdirectives-only'. 9487 9488 '-fdollars-in-identifiers' 9489 Accept '$' in identifiers. 9490 9491 '-fextended-identifiers' 9492 Accept universal character names in identifiers. This option is 9493 experimental; in a future version of GCC, it will be enabled by 9494 default for C99 and C++. 9495 9496 '-fno-canonical-system-headers' 9497 When preprocessing, do not shorten system header paths with 9498 canonicalization. 9499 9500 '-fpreprocessed' 9501 Indicate to the preprocessor that the input file has already been 9502 preprocessed. This suppresses things like macro expansion, 9503 trigraph conversion, escaped newline splicing, and processing of 9504 most directives. The preprocessor still recognizes and removes 9505 comments, so that you can pass a file preprocessed with '-C' to the 9506 compiler without problems. In this mode the integrated 9507 preprocessor is little more than a tokenizer for the front ends. 9508 9509 '-fpreprocessed' is implicit if the input file has one of the 9510 extensions '.i', '.ii' or '.mi'. These are the extensions that GCC 9511 uses for preprocessed files created by '-save-temps'. 9512 9513 '-ftabstop=WIDTH' 9514 Set the distance between tab stops. This helps the preprocessor 9515 report correct column numbers in warnings or errors, even if tabs 9516 appear on the line. If the value is less than 1 or greater than 9517 100, the option is ignored. The default is 8. 9518 9519 '-fdebug-cpp' 9520 This option is only useful for debugging GCC. When used with '-E', 9521 dumps debugging information about location maps. Every token in 9522 the output is preceded by the dump of the map its location belongs 9523 to. The dump of the map holding the location of a token would be: 9524 {'P':/file/path;'F':/includer/path;'L':LINE_NUM;'C':COL_NUM;'S':SYSTEM_HEADER_P;'M':MAP_ADDRESS;'E':MACRO_EXPANSION_P,'loc':LOCATION} 9525 9526 When used without '-E', this option has no effect. 9527 9528 '-ftrack-macro-expansion[=LEVEL]' 9529 Track locations of tokens across macro expansions. This allows the 9530 compiler to emit diagnostic about the current macro expansion stack 9531 when a compilation error occurs in a macro expansion. Using this 9532 option makes the preprocessor and the compiler consume more memory. 9533 The LEVEL parameter can be used to choose the level of precision of 9534 token location tracking thus decreasing the memory consumption if 9535 necessary. Value '0' of LEVEL de-activates this option just as if 9536 no '-ftrack-macro-expansion' was present on the command line. 9537 Value '1' tracks tokens locations in a degraded mode for the sake 9538 of minimal memory overhead. In this mode all tokens resulting from 9539 the expansion of an argument of a function-like macro have the same 9540 location. Value '2' tracks tokens locations completely. This 9541 value is the most memory hungry. When this option is given no 9542 argument, the default parameter value is '2'. 9543 9544 Note that -ftrack-macro-expansion=2 is activated by default. 9545 9546 '-fexec-charset=CHARSET' 9547 Set the execution character set, used for string and character 9548 constants. The default is UTF-8. CHARSET can be any encoding 9549 supported by the system's 'iconv' library routine. 9550 9551 '-fwide-exec-charset=CHARSET' 9552 Set the wide execution character set, used for wide string and 9553 character constants. The default is UTF-32 or UTF-16, whichever 9554 corresponds to the width of 'wchar_t'. As with '-fexec-charset', 9555 CHARSET can be any encoding supported by the system's 'iconv' 9556 library routine; however, you will have problems with encodings 9557 that do not fit exactly in 'wchar_t'. 9558 9559 '-finput-charset=CHARSET' 9560 Set the input character set, used for translation from the 9561 character set of the input file to the source character set used by 9562 GCC. If the locale does not specify, or GCC cannot get this 9563 information from the locale, the default is UTF-8. This can be 9564 overridden by either the locale or this command line option. 9565 Currently the command line option takes precedence if there's a 9566 conflict. CHARSET can be any encoding supported by the system's 9567 'iconv' library routine. 9568 9569 '-fworking-directory' 9570 Enable generation of linemarkers in the preprocessor output that 9571 will let the compiler know the current working directory at the 9572 time of preprocessing. When this option is enabled, the 9573 preprocessor will emit, after the initial linemarker, a second 9574 linemarker with the current working directory followed by two 9575 slashes. GCC will use this directory, when it's present in the 9576 preprocessed input, as the directory emitted as the current working 9577 directory in some debugging information formats. This option is 9578 implicitly enabled if debugging information is enabled, but this 9579 can be inhibited with the negated form '-fno-working-directory'. 9580 If the '-P' flag is present in the command line, this option has no 9581 effect, since no '#line' directives are emitted whatsoever. 9582 9583 '-fno-show-column' 9584 Do not print column numbers in diagnostics. This may be necessary 9585 if diagnostics are being scanned by a program that does not 9586 understand the column numbers, such as 'dejagnu'. 9587 9588 '-A PREDICATE=ANSWER' 9589 Make an assertion with the predicate PREDICATE and answer ANSWER. 9590 This form is preferred to the older form '-A PREDICATE(ANSWER)', 9591 which is still supported, because it does not use shell special 9592 characters. 9593 9594 '-A -PREDICATE=ANSWER' 9595 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 9596 9597 '-dCHARS' 9598 CHARS is a sequence of one or more of the following characters, and 9599 must not be preceded by a space. Other characters are interpreted 9600 by the compiler proper, or reserved for future versions of GCC, and 9601 so are silently ignored. If you specify characters whose behavior 9602 conflicts, the result is undefined. 9603 9604 'M' 9605 Instead of the normal output, generate a list of '#define' 9606 directives for all the macros defined during the execution of 9607 the preprocessor, including predefined macros. This gives you 9608 a way of finding out what is predefined in your version of the 9609 preprocessor. Assuming you have no file 'foo.h', the command 9610 9611 touch foo.h; cpp -dM foo.h 9612 9613 will show all the predefined macros. 9614 9615 If you use '-dM' without the '-E' option, '-dM' is interpreted 9616 as a synonym for '-fdump-rtl-mach'. *Note (gcc)Debugging 9617 Options::. 9618 9619 'D' 9620 Like 'M' except in two respects: it does _not_ include the 9621 predefined macros, and it outputs _both_ the '#define' 9622 directives and the result of preprocessing. Both kinds of 9623 output go to the standard output file. 9624 9625 'N' 9626 Like 'D', but emit only the macro names, not their expansions. 9627 9628 'I' 9629 Output '#include' directives in addition to the result of 9630 preprocessing. 9631 9632 'U' 9633 Like 'D' except that only macros that are expanded, or whose 9634 definedness is tested in preprocessor directives, are output; 9635 the output is delayed until the use or test of the macro; and 9636 '#undef' directives are also output for macros tested but 9637 undefined at the time. 9638 9639 '-P' 9640 Inhibit generation of linemarkers in the output from the 9641 preprocessor. This might be useful when running the preprocessor 9642 on something that is not C code, and will be sent to a program 9643 which might be confused by the linemarkers. 9644 9645 '-C' 9646 Do not discard comments. All comments are passed through to the 9647 output file, except for comments in processed directives, which are 9648 deleted along with the directive. 9649 9650 You should be prepared for side effects when using '-C'; it causes 9651 the preprocessor to treat comments as tokens in their own right. 9652 For example, comments appearing at the start of what would be a 9653 directive line have the effect of turning that line into an 9654 ordinary source line, since the first token on the line is no 9655 longer a '#'. 9656 9657 '-CC' 9658 Do not discard comments, including during macro expansion. This is 9659 like '-C', except that comments contained within macros are also 9660 passed through to the output file where the macro is expanded. 9661 9662 In addition to the side-effects of the '-C' option, the '-CC' 9663 option causes all C++-style comments inside a macro to be converted 9664 to C-style comments. This is to prevent later use of that macro 9665 from inadvertently commenting out the remainder of the source line. 9666 9667 The '-CC' option is generally used to support lint comments. 9668 9669 '-traditional-cpp' 9670 Try to imitate the behavior of old-fashioned C preprocessors, as 9671 opposed to ISO C preprocessors. 9672 9673 '-trigraphs' 9674 Process trigraph sequences. These are three-character sequences, 9675 all starting with '??', that are defined by ISO C to stand for 9676 single characters. For example, '??/' stands for '\', so ''??/n'' 9677 is a character constant for a newline. By default, GCC ignores 9678 trigraphs, but in standard-conforming modes it converts them. See 9679 the '-std' and '-ansi' options. 9680 9681 The nine trigraphs and their replacements are 9682 9683 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 9684 Replacement: [ ] { } # \ ^ | ~ 9685 9686 '-remap' 9687 Enable special code to work around file systems which only permit 9688 very short file names, such as MS-DOS. 9689 9690 '--help' 9691 '--target-help' 9692 Print text describing all the command line options instead of 9693 preprocessing anything. 9694 9695 '-v' 9696 Verbose mode. Print out GNU CPP's version number at the beginning 9697 of execution, and report the final form of the include path. 9698 9699 '-H' 9700 Print the name of each header file used, in addition to other 9701 normal activities. Each name is indented to show how deep in the 9702 '#include' stack it is. Precompiled header files are also printed, 9703 even if they are found to be invalid; an invalid precompiled header 9704 file is printed with '...x' and a valid one with '...!' . 9705 9706 '-version' 9707 '--version' 9708 Print out GNU CPP's version number. With one dash, proceed to 9709 preprocess as normal. With two dashes, exit immediately. 9710 9711 9712 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 9713 9714 3.12 Passing Options to the Assembler 9715 ===================================== 9716 9717 You can pass options to the assembler. 9718 9719 '-Wa,OPTION' 9720 Pass OPTION as an option to the assembler. If OPTION contains 9721 commas, it is split into multiple options at the commas. 9722 9723 '-Xassembler OPTION' 9724 Pass OPTION as an option to the assembler. You can use this to 9725 supply system-specific assembler options that GCC does not 9726 recognize. 9727 9728 If you want to pass an option that takes an argument, you must use 9729 '-Xassembler' twice, once for the option and once for the argument. 9730 9731 9732 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 9733 9734 3.13 Options for Linking 9735 ======================== 9736 9737 These options come into play when the compiler links object files into 9738 an executable output file. They are meaningless if the compiler is not 9739 doing a link step. 9740 9741 'OBJECT-FILE-NAME' 9742 A file name that does not end in a special recognized suffix is 9743 considered to name an object file or library. (Object files are 9744 distinguished from libraries by the linker according to the file 9745 contents.) If linking is done, these object files are used as 9746 input to the linker. 9747 9748 '-c' 9749 '-S' 9750 '-E' 9751 If any of these options is used, then the linker is not run, and 9752 object file names should not be used as arguments. *Note Overall 9753 Options::. 9754 9755 '-lLIBRARY' 9756 '-l LIBRARY' 9757 Search the library named LIBRARY when linking. (The second 9758 alternative with the library as a separate argument is only for 9759 POSIX compliance and is not recommended.) 9760 9761 It makes a difference where in the command you write this option; 9762 the linker searches and processes libraries and object files in the 9763 order they are specified. Thus, 'foo.o -lz bar.o' searches library 9764 'z' after file 'foo.o' but before 'bar.o'. If 'bar.o' refers to 9765 functions in 'z', those functions may not be loaded. 9766 9767 The linker searches a standard list of directories for the library, 9768 which is actually a file named 'libLIBRARY.a'. The linker then 9769 uses this file as if it had been specified precisely by name. 9770 9771 The directories searched include several standard system 9772 directories plus any that you specify with '-L'. 9773 9774 Normally the files found this way are library files--archive files 9775 whose members are object files. The linker handles an archive file 9776 by scanning through it for members which define symbols that have 9777 so far been referenced but not defined. But if the file that is 9778 found is an ordinary object file, it is linked in the usual 9779 fashion. The only difference between using an '-l' option and 9780 specifying a file name is that '-l' surrounds LIBRARY with 'lib' 9781 and '.a' and searches several directories. 9782 9783 '-lobjc' 9784 You need this special case of the '-l' option in order to link an 9785 Objective-C or Objective-C++ program. 9786 9787 '-nostartfiles' 9788 Do not use the standard system startup files when linking. The 9789 standard system libraries are used normally, unless '-nostdlib' or 9790 '-nodefaultlibs' is used. 9791 9792 '-nodefaultlibs' 9793 Do not use the standard system libraries when linking. Only the 9794 libraries you specify are passed to the linker, and options 9795 specifying linkage of the system libraries, such as 9796 '-static-libgcc' or '-shared-libgcc', are ignored. The standard 9797 startup files are used normally, unless '-nostartfiles' is used. 9798 9799 The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and 9800 'memmove'. These entries are usually resolved by entries in libc. 9801 These entry points should be supplied through some other mechanism 9802 when this option is specified. 9803 9804 '-nostdlib' 9805 Do not use the standard system startup files or libraries when 9806 linking. No startup files and only the libraries you specify are 9807 passed to the linker, and options specifying linkage of the system 9808 libraries, such as '-static-libgcc' or '-shared-libgcc', are 9809 ignored. 9810 9811 The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and 9812 'memmove'. These entries are usually resolved by entries in libc. 9813 These entry points should be supplied through some other mechanism 9814 when this option is specified. 9815 9816 One of the standard libraries bypassed by '-nostdlib' and 9817 '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines 9818 which GCC uses to overcome shortcomings of particular machines, or 9819 special needs for some languages. (*Note Interfacing to GCC 9820 Output: (gccint)Interface, for more discussion of 'libgcc.a'.) In 9821 most cases, you need 'libgcc.a' even when you want to avoid other 9822 standard libraries. In other words, when you specify '-nostdlib' 9823 or '-nodefaultlibs' you should usually specify '-lgcc' as well. 9824 This ensures that you have no unresolved references to internal GCC 9825 library subroutines. (An example of such an internal subroutine is 9826 '__main', used to ensure C++ constructors are called; *note 9827 'collect2': (gccint)Collect2.) 9828 9829 '-pie' 9830 Produce a position independent executable on targets that support 9831 it. For predictable results, you must also specify the same set of 9832 options used for compilation ('-fpie', '-fPIE', or model 9833 suboptions) when you specify this linker option. 9834 9835 '-rdynamic' 9836 Pass the flag '-export-dynamic' to the ELF linker, on targets that 9837 support it. This instructs the linker to add all symbols, not only 9838 used ones, to the dynamic symbol table. This option is needed for 9839 some uses of 'dlopen' or to allow obtaining backtraces from within 9840 a program. 9841 9842 '-s' 9843 Remove all symbol table and relocation information from the 9844 executable. 9845 9846 '-static' 9847 On systems that support dynamic linking, this prevents linking with 9848 the shared libraries. On other systems, this option has no effect. 9849 9850 '-shared' 9851 Produce a shared object which can then be linked with other objects 9852 to form an executable. Not all systems support this option. For 9853 predictable results, you must also specify the same set of options 9854 used for compilation ('-fpic', '-fPIC', or model suboptions) when 9855 you specify this linker option.(1) 9856 9857 '-shared-libgcc' 9858 '-static-libgcc' 9859 On systems that provide 'libgcc' as a shared library, these options 9860 force the use of either the shared or static version, respectively. 9861 If no shared version of 'libgcc' was built when the compiler was 9862 configured, these options have no effect. 9863 9864 There are several situations in which an application should use the 9865 shared 'libgcc' instead of the static version. The most common of 9866 these is when the application wishes to throw and catch exceptions 9867 across different shared libraries. In that case, each of the 9868 libraries as well as the application itself should use the shared 9869 'libgcc'. 9870 9871 Therefore, the G++ and GCJ drivers automatically add 9872 '-shared-libgcc' whenever you build a shared library or a main 9873 executable, because C++ and Java programs typically use exceptions, 9874 so this is the right thing to do. 9875 9876 If, instead, you use the GCC driver to create shared libraries, you 9877 may find that they are not always linked with the shared 'libgcc'. 9878 If GCC finds, at its configuration time, that you have a non-GNU 9879 linker or a GNU linker that does not support option 9880 '--eh-frame-hdr', it links the shared version of 'libgcc' into 9881 shared libraries by default. Otherwise, it takes advantage of the 9882 linker and optimizes away the linking with the shared version of 9883 'libgcc', linking with the static version of libgcc by default. 9884 This allows exceptions to propagate through such shared libraries, 9885 without incurring relocation costs at library load time. 9886 9887 However, if a library or main executable is supposed to throw or 9888 catch exceptions, you must link it using the G++ or GCJ driver, as 9889 appropriate for the languages used in the program, or using the 9890 option '-shared-libgcc', such that it is linked with the shared 9891 'libgcc'. 9892 9893 '-static-libasan' 9894 When the '-fsanitize=address' option is used to link a program, the 9895 GCC driver automatically links against 'libasan'. If 'libasan' is 9896 available as a shared library, and the '-static' option is not 9897 used, then this links against the shared version of 'libasan'. The 9898 '-static-libasan' option directs the GCC driver to link 'libasan' 9899 statically, without necessarily linking other libraries statically. 9900 9901 '-static-libtsan' 9902 When the '-fsanitize=thread' option is used to link a program, the 9903 GCC driver automatically links against 'libtsan'. If 'libtsan' is 9904 available as a shared library, and the '-static' option is not 9905 used, then this links against the shared version of 'libtsan'. The 9906 '-static-libtsan' option directs the GCC driver to link 'libtsan' 9907 statically, without necessarily linking other libraries statically. 9908 9909 '-static-libstdc++' 9910 When the 'g++' program is used to link a C++ program, it normally 9911 automatically links against 'libstdc++'. If 'libstdc++' is 9912 available as a shared library, and the '-static' option is not 9913 used, then this links against the shared version of 'libstdc++'. 9914 That is normally fine. However, it is sometimes useful to freeze 9915 the version of 'libstdc++' used by the program without going all 9916 the way to a fully static link. The '-static-libstdc++' option 9917 directs the 'g++' driver to link 'libstdc++' statically, without 9918 necessarily linking other libraries statically. 9919 9920 '-symbolic' 9921 Bind references to global symbols when building a shared object. 9922 Warn about any unresolved references (unless overridden by the link 9923 editor option '-Xlinker -z -Xlinker defs'). Only a few systems 9924 support this option. 9925 9926 '-T SCRIPT' 9927 Use SCRIPT as the linker script. This option is supported by most 9928 systems using the GNU linker. On some targets, such as bare-board 9929 targets without an operating system, the '-T' option may be 9930 required when linking to avoid references to undefined symbols. 9931 9932 '-Xlinker OPTION' 9933 Pass OPTION as an option to the linker. You can use this to supply 9934 system-specific linker options that GCC does not recognize. 9935 9936 If you want to pass an option that takes a separate argument, you 9937 must use '-Xlinker' twice, once for the option and once for the 9938 argument. For example, to pass '-assert definitions', you must 9939 write '-Xlinker -assert -Xlinker definitions'. It does not work to 9940 write '-Xlinker "-assert definitions"', because this passes the 9941 entire string as a single argument, which is not what the linker 9942 expects. 9943 9944 When using the GNU linker, it is usually more convenient to pass 9945 arguments to linker options using the 'OPTION=VALUE' syntax than as 9946 separate arguments. For example, you can specify '-Xlinker 9947 -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'. 9948 Other linkers may not support this syntax for command-line options. 9949 9950 '-Wl,OPTION' 9951 Pass OPTION as an option to the linker. If OPTION contains commas, 9952 it is split into multiple options at the commas. You can use this 9953 syntax to pass an argument to the option. For example, 9954 '-Wl,-Map,output.map' passes '-Map output.map' to the linker. When 9955 using the GNU linker, you can also get the same effect with 9956 '-Wl,-Map=output.map'. 9957 9958 '-u SYMBOL' 9959 Pretend the symbol SYMBOL is undefined, to force linking of library 9960 modules to define it. You can use '-u' multiple times with 9961 different symbols to force loading of additional library modules. 9962 9963 ---------- Footnotes ---------- 9964 9965 (1) On some systems, 'gcc -shared' needs to build supplementary stub 9966 code for constructors to work. On multi-libbed systems, 'gcc -shared' 9967 must select the correct support libraries to link against. Failing to 9968 supply the correct flags may lead to subtle defects. Supplying them in 9969 cases where they are not necessary is innocuous. 9970 9971 9972 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 9973 9974 3.14 Options for Directory Search 9975 ================================= 9976 9977 These options specify directories to search for header files, for 9978 libraries and for parts of the compiler: 9979 9980 '-IDIR' 9981 Add the directory DIR to the head of the list of directories to be 9982 searched for header files. This can be used to override a system 9983 header file, substituting your own version, since these directories 9984 are searched before the system header file directories. However, 9985 you should not use this option to add directories that contain 9986 vendor-supplied system header files (use '-isystem' for that). If 9987 you use more than one '-I' option, the directories are scanned in 9988 left-to-right order; the standard system directories come after. 9989 9990 If a standard system include directory, or a directory specified 9991 with '-isystem', is also specified with '-I', the '-I' option is 9992 ignored. The directory is still searched but as a system directory 9993 at its normal position in the system include chain. This is to 9994 ensure that GCC's procedure to fix buggy system headers and the 9995 ordering for the 'include_next' directive are not inadvertently 9996 changed. If you really need to change the search order for system 9997 directories, use the '-nostdinc' and/or '-isystem' options. 9998 9999 '-iplugindir=DIR' 10000 Set the directory to search for plugins that are passed by 10001 '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'. This option is 10002 not meant to be used by the user, but only passed by the driver. 10003 10004 '-iquoteDIR' 10005 Add the directory DIR to the head of the list of directories to be 10006 searched for header files only for the case of '#include "FILE"'; 10007 they are not searched for '#include <FILE>', otherwise just like 10008 '-I'. 10009 10010 '-LDIR' 10011 Add directory DIR to the list of directories to be searched for 10012 '-l'. 10013 10014 '-BPREFIX' 10015 This option specifies where to find the executables, libraries, 10016 include files, and data files of the compiler itself. 10017 10018 The compiler driver program runs one or more of the subprograms 10019 'cpp', 'cc1', 'as' and 'ld'. It tries PREFIX as a prefix for each 10020 program it tries to run, both with and without 'MACHINE/VERSION/' 10021 (*note Target Options::). 10022 10023 For each subprogram to be run, the compiler driver first tries the 10024 '-B' prefix, if any. If that name is not found, or if '-B' is not 10025 specified, the driver tries two standard prefixes, '/usr/lib/gcc/' 10026 and '/usr/local/lib/gcc/'. If neither of those results in a file 10027 name that is found, the unmodified program name is searched for 10028 using the directories specified in your 'PATH' environment 10029 variable. 10030 10031 The compiler checks to see if the path provided by the '-B' refers 10032 to a directory, and if necessary it adds a directory separator 10033 character at the end of the path. 10034 10035 '-B' prefixes that effectively specify directory names also apply 10036 to libraries in the linker, because the compiler translates these 10037 options into '-L' options for the linker. They also apply to 10038 includes files in the preprocessor, because the compiler translates 10039 these options into '-isystem' options for the preprocessor. In 10040 this case, the compiler appends 'include' to the prefix. 10041 10042 The runtime support file 'libgcc.a' can also be searched for using 10043 the '-B' prefix, if needed. If it is not found there, the two 10044 standard prefixes above are tried, and that is all. The file is 10045 left out of the link if it is not found by those means. 10046 10047 Another way to specify a prefix much like the '-B' prefix is to use 10048 the environment variable 'GCC_EXEC_PREFIX'. *Note Environment 10049 Variables::. 10050 10051 As a special kludge, if the path provided by '-B' is 10052 '[dir/]stageN/', where N is a number in the range 0 to 9, then it 10053 is replaced by '[dir/]include'. This is to help with 10054 boot-strapping the compiler. 10055 10056 '-specs=FILE' 10057 Process FILE after the compiler reads in the standard 'specs' file, 10058 in order to override the defaults which the 'gcc' driver program 10059 uses when determining what switches to pass to 'cc1', 'cc1plus', 10060 'as', 'ld', etc. More than one '-specs=FILE' can be specified on 10061 the command line, and they are processed in order, from left to 10062 right. 10063 10064 '--sysroot=DIR' 10065 Use DIR as the logical root directory for headers and libraries. 10066 For example, if the compiler normally searches for headers in 10067 '/usr/include' and libraries in '/usr/lib', it instead searches 10068 'DIR/usr/include' and 'DIR/usr/lib'. 10069 10070 If you use both this option and the '-isysroot' option, then the 10071 '--sysroot' option applies to libraries, but the '-isysroot' option 10072 applies to header files. 10073 10074 The GNU linker (beginning with version 2.16) has the necessary 10075 support for this option. If your linker does not support this 10076 option, the header file aspect of '--sysroot' still works, but the 10077 library aspect does not. 10078 10079 '--no-sysroot-suffix' 10080 For some targets, a suffix is added to the root directory specified 10081 with '--sysroot', depending on the other options used, so that 10082 headers may for example be found in 'DIR/SUFFIX/usr/include' 10083 instead of 'DIR/usr/include'. This option disables the addition of 10084 such a suffix. 10085 10086 '-I-' 10087 This option has been deprecated. Please use '-iquote' instead for 10088 '-I' directories before the '-I-' and remove the '-I-'. Any 10089 directories you specify with '-I' options before the '-I-' option 10090 are searched only for the case of '#include "FILE"'; they are not 10091 searched for '#include <FILE>'. 10092 10093 If additional directories are specified with '-I' options after the 10094 '-I-', these directories are searched for all '#include' 10095 directives. (Ordinarily _all_ '-I' directories are used this way.) 10096 10097 In addition, the '-I-' option inhibits the use of the current 10098 directory (where the current input file came from) as the first 10099 search directory for '#include "FILE"'. There is no way to 10100 override this effect of '-I-'. With '-I.' you can specify 10101 searching the directory that is current when the compiler is 10102 invoked. That is not exactly the same as what the preprocessor 10103 does by default, but it is often satisfactory. 10104 10105 '-I-' does not inhibit the use of the standard system directories 10106 for header files. Thus, '-I-' and '-nostdinc' are independent. 10107 10108 10109 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 10110 10111 3.15 Specifying subprocesses and the switches to pass to them 10112 ============================================================= 10113 10114 'gcc' is a driver program. It performs its job by invoking a sequence 10115 of other programs to do the work of compiling, assembling and linking. 10116 GCC interprets its command-line parameters and uses these to deduce 10117 which programs it should invoke, and which command-line options it ought 10118 to place on their command lines. This behavior is controlled by "spec 10119 strings". In most cases there is one spec string for each program that 10120 GCC can invoke, but a few programs have multiple spec strings to control 10121 their behavior. The spec strings built into GCC can be overridden by 10122 using the '-specs=' command-line switch to specify a spec file. 10123 10124 "Spec files" are plaintext files that are used to construct spec 10125 strings. They consist of a sequence of directives separated by blank 10126 lines. The type of directive is determined by the first non-whitespace 10127 character on the line, which can be one of the following: 10128 10129 '%COMMAND' 10130 Issues a COMMAND to the spec file processor. The commands that can 10131 appear here are: 10132 10133 '%include <FILE>' 10134 Search for FILE and insert its text at the current point in 10135 the specs file. 10136 10137 '%include_noerr <FILE>' 10138 Just like '%include', but do not generate an error message if 10139 the include file cannot be found. 10140 10141 '%rename OLD_NAME NEW_NAME' 10142 Rename the spec string OLD_NAME to NEW_NAME. 10143 10144 '*[SPEC_NAME]:' 10145 This tells the compiler to create, override or delete the named 10146 spec string. All lines after this directive up to the next 10147 directive or blank line are considered to be the text for the spec 10148 string. If this results in an empty string then the spec is 10149 deleted. (Or, if the spec did not exist, then nothing happens.) 10150 Otherwise, if the spec does not currently exist a new spec is 10151 created. If the spec does exist then its contents are overridden 10152 by the text of this directive, unless the first character of that 10153 text is the '+' character, in which case the text is appended to 10154 the spec. 10155 10156 '[SUFFIX]:' 10157 Creates a new '[SUFFIX] spec' pair. All lines after this directive 10158 and up to the next directive or blank line are considered to make 10159 up the spec string for the indicated suffix. When the compiler 10160 encounters an input file with the named suffix, it processes the 10161 spec string in order to work out how to compile that file. For 10162 example: 10163 10164 .ZZ: 10165 z-compile -input %i 10166 10167 This says that any input file whose name ends in '.ZZ' should be 10168 passed to the program 'z-compile', which should be invoked with the 10169 command-line switch '-input' and with the result of performing the 10170 '%i' substitution. (See below.) 10171 10172 As an alternative to providing a spec string, the text following a 10173 suffix directive can be one of the following: 10174 10175 '@LANGUAGE' 10176 This says that the suffix is an alias for a known LANGUAGE. 10177 This is similar to using the '-x' command-line switch to GCC 10178 to specify a language explicitly. For example: 10179 10180 .ZZ: 10181 @c++ 10182 10183 Says that .ZZ files are, in fact, C++ source files. 10184 10185 '#NAME' 10186 This causes an error messages saying: 10187 10188 NAME compiler not installed on this system. 10189 10190 GCC already has an extensive list of suffixes built into it. This 10191 directive adds an entry to the end of the list of suffixes, but 10192 since the list is searched from the end backwards, it is 10193 effectively possible to override earlier entries using this 10194 technique. 10195 10196 GCC has the following spec strings built into it. Spec files can 10197 override these strings or create their own. Note that individual 10198 targets can also add their own spec strings to this list. 10199 10200 asm Options to pass to the assembler 10201 asm_final Options to pass to the assembler post-processor 10202 cpp Options to pass to the C preprocessor 10203 cc1 Options to pass to the C compiler 10204 cc1plus Options to pass to the C++ compiler 10205 endfile Object files to include at the end of the link 10206 link Options to pass to the linker 10207 lib Libraries to include on the command line to the linker 10208 libgcc Decides which GCC support library to pass to the linker 10209 linker Sets the name of the linker 10210 predefines Defines to be passed to the C preprocessor 10211 signed_char Defines to pass to CPP to say whether char is signed 10212 by default 10213 startfile Object files to include at the start of the link 10214 10215 Here is a small example of a spec file: 10216 10217 %rename lib old_lib 10218 10219 *lib: 10220 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 10221 10222 This example renames the spec called 'lib' to 'old_lib' and then 10223 overrides the previous definition of 'lib' with a new one. The new 10224 definition adds in some extra command-line options before including the 10225 text of the old definition. 10226 10227 "Spec strings" are a list of command-line options to be passed to their 10228 corresponding program. In addition, the spec strings can contain 10229 '%'-prefixed sequences to substitute variable text or to conditionally 10230 insert text into the command line. Using these constructs it is 10231 possible to generate quite complex command lines. 10232 10233 Here is a table of all defined '%'-sequences for spec strings. Note 10234 that spaces are not generated automatically around the results of 10235 expanding these sequences. Therefore you can concatenate them together 10236 or combine them with constant text in a single argument. 10237 10238 '%%' 10239 Substitute one '%' into the program name or argument. 10240 10241 '%i' 10242 Substitute the name of the input file being processed. 10243 10244 '%b' 10245 Substitute the basename of the input file being processed. This is 10246 the substring up to (and not including) the last period and not 10247 including the directory. 10248 10249 '%B' 10250 This is the same as '%b', but include the file suffix (text after 10251 the last period). 10252 10253 '%d' 10254 Marks the argument containing or following the '%d' as a temporary 10255 file name, so that that file is deleted if GCC exits successfully. 10256 Unlike '%g', this contributes no text to the argument. 10257 10258 '%gSUFFIX' 10259 Substitute a file name that has suffix SUFFIX and is chosen once 10260 per compilation, and mark the argument in the same way as '%d'. To 10261 reduce exposure to denial-of-service attacks, the file name is now 10262 chosen in a way that is hard to predict even when previously chosen 10263 file names are known. For example, '%g.s ... %g.o ... %g.s' might 10264 turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX matches the 10265 regexp '[.A-Za-z]*' or the special string '%O', which is treated 10266 exactly as if '%O' had been preprocessed. Previously, '%g' was 10267 simply substituted with a file name chosen once per compilation, 10268 without regard to any appended suffix (which was therefore treated 10269 just like ordinary text), making such attacks more likely to 10270 succeed. 10271 10272 '%uSUFFIX' 10273 Like '%g', but generates a new temporary file name each time it 10274 appears instead of once per compilation. 10275 10276 '%USUFFIX' 10277 Substitutes the last file name generated with '%uSUFFIX', 10278 generating a new one if there is no such last file name. In the 10279 absence of any '%uSUFFIX', this is just like '%gSUFFIX', except 10280 they don't share the same suffix _space_, so '%g.s ... %U.s ... 10281 %g.s ... %U.s' involves the generation of two distinct file names, 10282 one for each '%g.s' and another for each '%U.s'. Previously, '%U' 10283 was simply substituted with a file name chosen for the previous 10284 '%u', without regard to any appended suffix. 10285 10286 '%jSUFFIX' 10287 Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is 10288 writable, and if '-save-temps' is not used; otherwise, substitute 10289 the name of a temporary file, just like '%u'. This temporary file 10290 is not meant for communication between processes, but rather as a 10291 junk disposal mechanism. 10292 10293 '%|SUFFIX' 10294 '%mSUFFIX' 10295 Like '%g', except if '-pipe' is in effect. In that case '%|' 10296 substitutes a single dash and '%m' substitutes nothing at all. 10297 These are the two most common ways to instruct a program that it 10298 should read from standard input or write to standard output. If 10299 you need something more elaborate you can use an '%{pipe:'X'}' 10300 construct: see for example 'f/lang-specs.h'. 10301 10302 '%.SUFFIX' 10303 Substitutes .SUFFIX for the suffixes of a matched switch's args 10304 when it is subsequently output with '%*'. SUFFIX is terminated by 10305 the next space or %. 10306 10307 '%w' 10308 Marks the argument containing or following the '%w' as the 10309 designated output file of this compilation. This puts the argument 10310 into the sequence of arguments that '%o' substitutes. 10311 10312 '%o' 10313 Substitutes the names of all the output files, with spaces 10314 automatically placed around them. You should write spaces around 10315 the '%o' as well or the results are undefined. '%o' is for use in 10316 the specs for running the linker. Input files whose names have no 10317 recognized suffix are not compiled at all, but they are included 10318 among the output files, so they are linked. 10319 10320 '%O' 10321 Substitutes the suffix for object files. Note that this is handled 10322 specially when it immediately follows '%g, %u, or %U', because of 10323 the need for those to form complete file names. The handling is 10324 such that '%O' is treated exactly as if it had already been 10325 substituted, except that '%g, %u, and %U' do not currently support 10326 additional SUFFIX characters following '%O' as they do following, 10327 for example, '.o'. 10328 10329 '%p' 10330 Substitutes the standard macro predefinitions for the current 10331 target machine. Use this when running 'cpp'. 10332 10333 '%P' 10334 Like '%p', but puts '__' before and after the name of each 10335 predefined macro, except for macros that start with '__' or with 10336 '_L', where L is an uppercase letter. This is for ISO C. 10337 10338 '%I' 10339 Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'), 10340 '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from 10341 'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary. 10342 10343 '%s' 10344 Current argument is the name of a library or startup file of some 10345 sort. Search for that file in a standard list of directories and 10346 substitute the full name found. The current working directory is 10347 included in the list of directories scanned. 10348 10349 '%T' 10350 Current argument is the name of a linker script. Search for that 10351 file in the current list of directories to scan for libraries. If 10352 the file is located insert a '--script' option into the command 10353 line followed by the full path name found. If the file is not 10354 found then generate an error message. Note: the current working 10355 directory is not searched. 10356 10357 '%eSTR' 10358 Print STR as an error message. STR is terminated by a newline. 10359 Use this when inconsistent options are detected. 10360 10361 '%(NAME)' 10362 Substitute the contents of spec string NAME at this point. 10363 10364 '%x{OPTION}' 10365 Accumulate an option for '%X'. 10366 10367 '%X' 10368 Output the accumulated linker options specified by '-Wl' or a '%x' 10369 spec string. 10370 10371 '%Y' 10372 Output the accumulated assembler options specified by '-Wa'. 10373 10374 '%Z' 10375 Output the accumulated preprocessor options specified by '-Wp'. 10376 10377 '%a' 10378 Process the 'asm' spec. This is used to compute the switches to be 10379 passed to the assembler. 10380 10381 '%A' 10382 Process the 'asm_final' spec. This is a spec string for passing 10383 switches to an assembler post-processor, if such a program is 10384 needed. 10385 10386 '%l' 10387 Process the 'link' spec. This is the spec for computing the 10388 command line passed to the linker. Typically it makes use of the 10389 '%L %G %S %D and %E' sequences. 10390 10391 '%D' 10392 Dump out a '-L' option for each directory that GCC believes might 10393 contain startup files. If the target supports multilibs then the 10394 current multilib directory is prepended to each of these paths. 10395 10396 '%L' 10397 Process the 'lib' spec. This is a spec string for deciding which 10398 libraries are included on the command line to the linker. 10399 10400 '%G' 10401 Process the 'libgcc' spec. This is a spec string for deciding 10402 which GCC support library is included on the command line to the 10403 linker. 10404 10405 '%S' 10406 Process the 'startfile' spec. This is a spec for deciding which 10407 object files are the first ones passed to the linker. Typically 10408 this might be a file named 'crt0.o'. 10409 10410 '%E' 10411 Process the 'endfile' spec. This is a spec string that specifies 10412 the last object files that are passed to the linker. 10413 10414 '%C' 10415 Process the 'cpp' spec. This is used to construct the arguments to 10416 be passed to the C preprocessor. 10417 10418 '%1' 10419 Process the 'cc1' spec. This is used to construct the options to 10420 be passed to the actual C compiler ('cc1'). 10421 10422 '%2' 10423 Process the 'cc1plus' spec. This is used to construct the options 10424 to be passed to the actual C++ compiler ('cc1plus'). 10425 10426 '%*' 10427 Substitute the variable part of a matched option. See below. Note 10428 that each comma in the substituted string is replaced by a single 10429 space. 10430 10431 '%<S' 10432 Remove all occurrences of '-S' from the command line. Note--this 10433 command is position dependent. '%' commands in the spec string 10434 before this one see '-S', '%' commands in the spec string after 10435 this one do not. 10436 10437 '%:FUNCTION(ARGS)' 10438 Call the named function FUNCTION, passing it ARGS. ARGS is first 10439 processed as a nested spec string, then split into an argument 10440 vector in the usual fashion. The function returns a string which 10441 is processed as if it had appeared literally as part of the current 10442 spec. 10443 10444 The following built-in spec functions are provided: 10445 10446 'getenv' 10447 The 'getenv' spec function takes two arguments: an environment 10448 variable name and a string. If the environment variable is 10449 not defined, a fatal error is issued. Otherwise, the return 10450 value is the value of the environment variable concatenated 10451 with the string. For example, if 'TOPDIR' is defined as 10452 '/path/to/top', then: 10453 10454 %:getenv(TOPDIR /include) 10455 10456 expands to '/path/to/top/include'. 10457 10458 'if-exists' 10459 The 'if-exists' spec function takes one argument, an absolute 10460 pathname to a file. If the file exists, 'if-exists' returns 10461 the pathname. Here is a small example of its usage: 10462 10463 *startfile: 10464 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 10465 10466 'if-exists-else' 10467 The 'if-exists-else' spec function is similar to the 10468 'if-exists' spec function, except that it takes two arguments. 10469 The first argument is an absolute pathname to a file. If the 10470 file exists, 'if-exists-else' returns the pathname. If it 10471 does not exist, it returns the second argument. This way, 10472 'if-exists-else' can be used to select one file or another, 10473 based on the existence of the first. Here is a small example 10474 of its usage: 10475 10476 *startfile: 10477 crt0%O%s %:if-exists(crti%O%s) \ 10478 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 10479 10480 'replace-outfile' 10481 The 'replace-outfile' spec function takes two arguments. It 10482 looks for the first argument in the outfiles array and 10483 replaces it with the second argument. Here is a small example 10484 of its usage: 10485 10486 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 10487 10488 'remove-outfile' 10489 The 'remove-outfile' spec function takes one argument. It 10490 looks for the first argument in the outfiles array and removes 10491 it. Here is a small example its usage: 10492 10493 %:remove-outfile(-lm) 10494 10495 'pass-through-libs' 10496 The 'pass-through-libs' spec function takes any number of 10497 arguments. It finds any '-l' options and any non-options 10498 ending in '.a' (which it assumes are the names of linker input 10499 library archive files) and returns a result containing all the 10500 found arguments each prepended by '-plugin-opt=-pass-through=' 10501 and joined by spaces. This list is intended to be passed to 10502 the LTO linker plugin. 10503 10504 %:pass-through-libs(%G %L %G) 10505 10506 'print-asm-header' 10507 The 'print-asm-header' function takes no arguments and simply 10508 prints a banner like: 10509 10510 Assembler options 10511 ================= 10512 10513 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 10514 10515 It is used to separate compiler options from assembler options 10516 in the '--target-help' output. 10517 10518 '%{S}' 10519 Substitutes the '-S' switch, if that switch is given to GCC. If 10520 that switch is not specified, this substitutes nothing. Note that 10521 the leading dash is omitted when specifying this option, and it is 10522 automatically inserted if the substitution is performed. Thus the 10523 spec string '%{foo}' matches the command-line option '-foo' and 10524 outputs the command-line option '-foo'. 10525 10526 '%W{S}' 10527 Like %{'S'} but mark last argument supplied within as a file to be 10528 deleted on failure. 10529 10530 '%{S*}' 10531 Substitutes all the switches specified to GCC whose names start 10532 with '-S', but which also take an argument. This is used for 10533 switches like '-o', '-D', '-I', etc. GCC considers '-o foo' as 10534 being one switch whose name starts with 'o'. %{o*} substitutes 10535 this text, including the space. Thus two arguments are generated. 10536 10537 '%{S*&T*}' 10538 Like %{'S'*}, but preserve order of 'S' and 'T' options (the order 10539 of 'S' and 'T' in the spec is not significant). There can be any 10540 number of ampersand-separated variables; for each the wild card is 10541 optional. Useful for CPP as '%{D*&U*&A*}'. 10542 10543 '%{S:X}' 10544 Substitutes 'X', if the '-S' switch is given to GCC. 10545 10546 '%{!S:X}' 10547 Substitutes 'X', if the '-S' switch is _not_ given to GCC. 10548 10549 '%{S*:X}' 10550 Substitutes 'X' if one or more switches whose names start with '-S' 10551 are specified to GCC. Normally 'X' is substituted only once, no 10552 matter how many such switches appeared. However, if '%*' appears 10553 somewhere in 'X', then 'X' is substituted once for each matching 10554 switch, with the '%*' replaced by the part of that switch matching 10555 the '*'. 10556 10557 '%{.S:X}' 10558 Substitutes 'X', if processing a file with suffix 'S'. 10559 10560 '%{!.S:X}' 10561 Substitutes 'X', if _not_ processing a file with suffix 'S'. 10562 10563 '%{,S:X}' 10564 Substitutes 'X', if processing a file for language 'S'. 10565 10566 '%{!,S:X}' 10567 Substitutes 'X', if not processing a file for language 'S'. 10568 10569 '%{S|P:X}' 10570 Substitutes 'X' if either '-S' or '-P' is given to GCC. This may 10571 be combined with '!', '.', ',', and '*' sequences as well, although 10572 they have a stronger binding than the '|'. If '%*' appears in 'X', 10573 all of the alternatives must be starred, and only the first 10574 matching alternative is substituted. 10575 10576 For example, a spec string like this: 10577 10578 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 10579 10580 outputs the following command-line options from the following input 10581 command-line options: 10582 10583 fred.c -foo -baz 10584 jim.d -bar -boggle 10585 -d fred.c -foo -baz -boggle 10586 -d jim.d -bar -baz -boggle 10587 10588 '%{S:X; T:Y; :D}' 10589 10590 If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to 10591 GCC, substitutes 'Y'; else substitutes 'D'. There can be as many 10592 clauses as you need. This may be combined with '.', ',', '!', '|', 10593 and '*' as needed. 10594 10595 The conditional text 'X' in a %{'S':'X'} or similar construct may 10596 contain other nested '%' constructs or spaces, or even newlines. They 10597 are processed as usual, as described above. Trailing white space in 'X' 10598 is ignored. White space may also appear anywhere on the left side of 10599 the colon in these constructs, except between '.' or '*' and the 10600 corresponding word. 10601 10602 The '-O', '-f', '-m', and '-W' switches are handled specifically in 10603 these constructs. If another value of '-O' or the negated form of a 10604 '-f', '-m', or '-W' switch is found later in the command line, the 10605 earlier switch value is ignored, except with {'S'*} where 'S' is just 10606 one letter, which passes all matching options. 10607 10608 The character '|' at the beginning of the predicate text is used to 10609 indicate that a command should be piped to the following command, but 10610 only if '-pipe' is specified. 10611 10612 It is built into GCC which switches take arguments and which do not. 10613 (You might think it would be useful to generalize this to allow each 10614 compiler's spec to say which switches take arguments. But this cannot 10615 be done in a consistent fashion. GCC cannot even decide which input 10616 files have been specified without knowing which switches take arguments, 10617 and it must know which input files to compile in order to tell which 10618 compilers to run). 10619 10620 GCC also knows implicitly that arguments starting in '-l' are to be 10621 treated as compiler output files, and passed to the linker in their 10622 proper position among the other output files. 10623 10624 10625 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 10626 10627 3.16 Specifying Target Machine and Compiler Version 10628 =================================================== 10629 10630 The usual way to run GCC is to run the executable called 'gcc', or 10631 'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a 10632 version other than the one that was installed last. 10633 10634 10635 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 10636 10637 3.17 Hardware Models and Configurations 10638 ======================================= 10639 10640 Each target machine types can have its own special options, starting 10641 with '-m', to choose among various hardware models or 10642 configurations--for example, 68010 vs 68020, floating coprocessor or 10643 none. A single installed version of the compiler can compile for any 10644 model or configuration, according to the options specified. 10645 10646 Some configurations of the compiler also support additional special 10647 options, usually for compatibility with other compilers on the same 10648 platform. 10649 10650 * Menu: 10651 10652 * AArch64 Options:: 10653 * Adapteva Epiphany Options:: 10654 * ARM Options:: 10655 * AVR Options:: 10656 * Blackfin Options:: 10657 * C6X Options:: 10658 * CRIS Options:: 10659 * CR16 Options:: 10660 * Darwin Options:: 10661 * DEC Alpha Options:: 10662 * FR30 Options:: 10663 * FRV Options:: 10664 * GNU/Linux Options:: 10665 * H8/300 Options:: 10666 * HPPA Options:: 10667 * i386 and x86-64 Options:: 10668 * i386 and x86-64 Windows Options:: 10669 * IA-64 Options:: 10670 * LM32 Options:: 10671 * M32C Options:: 10672 * M32R/D Options:: 10673 * M680x0 Options:: 10674 * MCore Options:: 10675 * MeP Options:: 10676 * MicroBlaze Options:: 10677 * MIPS Options:: 10678 * MMIX Options:: 10679 * MN10300 Options:: 10680 * Moxie Options:: 10681 * PDP-11 Options:: 10682 * picoChip Options:: 10683 * PowerPC Options:: 10684 * RL78 Options:: 10685 * RS/6000 and PowerPC Options:: 10686 * RX Options:: 10687 * S/390 and zSeries Options:: 10688 * Score Options:: 10689 * SH Options:: 10690 * Solaris 2 Options:: 10691 * SPARC Options:: 10692 * SPU Options:: 10693 * System V Options:: 10694 * TILE-Gx Options:: 10695 * TILEPro Options:: 10696 * V850 Options:: 10697 * VAX Options:: 10698 * VMS Options:: 10699 * VxWorks Options:: 10700 * x86-64 Options:: 10701 * Xstormy16 Options:: 10702 * Xtensa Options:: 10703 * zSeries Options:: 10704 10705 10706 File: gcc.info, Node: AArch64 Options, Next: Adapteva Epiphany Options, Up: Submodel Options 10707 10708 3.17.1 AArch64 Options 10709 ---------------------- 10710 10711 These options are defined for AArch64 implementations: 10712 10713 '-mbig-endian' 10714 Generate big-endian code. This is the default when GCC is 10715 configured for an 'aarch64_be-*-*' target. 10716 10717 '-mgeneral-regs-only' 10718 Generate code which uses only the general registers. 10719 10720 '-mlittle-endian' 10721 Generate little-endian code. This is the default when GCC is 10722 configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target. 10723 10724 '-mcmodel=tiny' 10725 Generate code for the tiny code model. The program and its 10726 statically defined symbols must be within 1GB of each other. 10727 Pointers are 64 bits. Programs can be statically or dynamically 10728 linked. This model is not fully implemented and mostly treated as 10729 'small'. 10730 10731 '-mcmodel=small' 10732 Generate code for the small code model. The program and its 10733 statically defined symbols must be within 4GB of each other. 10734 Pointers are 64 bits. Programs can be statically or dynamically 10735 linked. This is the default code model. 10736 10737 '-mcmodel=large' 10738 Generate code for the large code model. This makes no assumptions 10739 about addresses and sizes of sections. Pointers are 64 bits. 10740 Programs can be statically linked only. 10741 10742 '-mstrict-align' 10743 Do not assume that unaligned memory references will be handled by 10744 the system. 10745 10746 '-momit-leaf-frame-pointer' 10747 '-mno-omit-leaf-frame-pointer' 10748 Omit or keep the frame pointer in leaf functions. The former 10749 behaviour is the default. 10750 10751 '-mtls-dialect=desc' 10752 Use TLS descriptors as the thread-local storage mechanism for 10753 dynamic accesses of TLS variables. This is the default. 10754 10755 '-mtls-dialect=traditional' 10756 Use traditional TLS as the thread-local storage mechanism for 10757 dynamic accesses of TLS variables. 10758 10759 '-march=NAME' 10760 Specify the name of the target architecture, optionally suffixed by 10761 one or more feature modifiers. This option has the form 10762 '-march=ARCH{+[no]FEATURE}*', where the only value for ARCH is 10763 'armv8-a'. The possible values for FEATURE are documented in the 10764 sub-section below. 10765 10766 Where conflicting feature modifiers are specified, the right-most 10767 feature is used. 10768 10769 GCC uses this name to determine what kind of instructions it can 10770 emit when generating assembly code. This option can be used in 10771 conjunction with or instead of the '-mcpu=' option. 10772 10773 '-mcpu=NAME' 10774 Specify the name of the target processor, optionally suffixed by 10775 one or more feature modifiers. This option has the form 10776 '-mcpu=CPU{+[no]FEATURE}*', where the possible values for CPU are 10777 'generic', 'large'. The possible values for FEATURE are documented 10778 in the sub-section below. 10779 10780 Where conflicting feature modifiers are specified, the right-most 10781 feature is used. 10782 10783 GCC uses this name to determine what kind of instructions it can 10784 emit when generating assembly code. 10785 10786 '-mtune=NAME' 10787 Specify the name of the processor to tune the performance for. The 10788 code will be tuned as if the target processor were of the type 10789 specified in this option, but still using instructions compatible 10790 with the target processor specified by a '-mcpu=' option. This 10791 option cannot be suffixed by feature modifiers. 10792 10793 3.17.1.1 '-march' and '-mcpu' feature modifiers 10794 ............................................... 10795 10796 Feature modifiers used with '-march' and '-mcpu' can be one the 10797 following: 10798 10799 'crypto' 10800 Enable Crypto extension. This implies Advanced SIMD is enabled. 10801 'fp' 10802 Enable floating-point instructions. 10803 'simd' 10804 Enable Advanced SIMD instructions. This implies floating-point 10805 instructions are enabled. This is the default for all current 10806 possible values for options '-march' and '-mcpu='. 10807 10808 10809 File: gcc.info, Node: Adapteva Epiphany Options, Next: ARM Options, Prev: AArch64 Options, Up: Submodel Options 10810 10811 3.17.2 Adapteva Epiphany Options 10812 -------------------------------- 10813 10814 These '-m' options are defined for Adapteva Epiphany: 10815 10816 '-mhalf-reg-file' 10817 Don't allocate any register in the range 'r32'...'r63'. That 10818 allows code to run on hardware variants that lack these registers. 10819 10820 '-mprefer-short-insn-regs' 10821 Preferrentially allocate registers that allow short instruction 10822 generation. This can result in increased instruction count, so 10823 this may either reduce or increase overall code size. 10824 10825 '-mbranch-cost=NUM' 10826 Set the cost of branches to roughly NUM "simple" instructions. 10827 This cost is only a heuristic and is not guaranteed to produce 10828 consistent results across releases. 10829 10830 '-mcmove' 10831 Enable the generation of conditional moves. 10832 10833 '-mnops=NUM' 10834 Emit NUM NOPs before every other generated instruction. 10835 10836 '-mno-soft-cmpsf' 10837 For single-precision floating-point comparisons, emit an 'fsub' 10838 instruction and test the flags. This is faster than a software 10839 comparison, but can get incorrect results in the presence of NaNs, 10840 or when two different small numbers are compared such that their 10841 difference is calculated as zero. The default is '-msoft-cmpsf', 10842 which uses slower, but IEEE-compliant, software comparisons. 10843 10844 '-mstack-offset=NUM' 10845 Set the offset between the top of the stack and the stack pointer. 10846 E.g., a value of 8 means that the eight bytes in the range 10847 'sp+0...sp+7' can be used by leaf functions without stack 10848 allocation. Values other than '8' or '16' are untested and 10849 unlikely to work. Note also that this option changes the ABI; 10850 compiling a program with a different stack offset than the 10851 libraries have been compiled with generally does not work. This 10852 option can be useful if you want to evaluate if a different stack 10853 offset would give you better code, but to actually use a different 10854 stack offset to build working programs, it is recommended to 10855 configure the toolchain with the appropriate 10856 '--with-stack-offset=NUM' option. 10857 10858 '-mno-round-nearest' 10859 Make the scheduler assume that the rounding mode has been set to 10860 truncating. The default is '-mround-nearest'. 10861 10862 '-mlong-calls' 10863 If not otherwise specified by an attribute, assume all calls might 10864 be beyond the offset range of the 'b' / 'bl' instructions, and 10865 therefore load the function address into a register before 10866 performing a (otherwise direct) call. This is the default. 10867 10868 '-mshort-calls' 10869 If not otherwise specified by an attribute, assume all direct calls 10870 are in the range of the 'b' / 'bl' instructions, so use these 10871 instructions for direct calls. The default is '-mlong-calls'. 10872 10873 '-msmall16' 10874 Assume addresses can be loaded as 16-bit unsigned values. This 10875 does not apply to function addresses for which '-mlong-calls' 10876 semantics are in effect. 10877 10878 '-mfp-mode=MODE' 10879 Set the prevailing mode of the floating-point unit. This 10880 determines the floating-point mode that is provided and expected at 10881 function call and return time. Making this mode match the mode you 10882 predominantly need at function start can make your programs smaller 10883 and faster by avoiding unnecessary mode switches. 10884 10885 MODE can be set to one the following values: 10886 10887 'caller' 10888 Any mode at function entry is valid, and retained or restored 10889 when the function returns, and when it calls other functions. 10890 This mode is useful for compiling libraries or other 10891 compilation units you might want to incorporate into different 10892 programs with different prevailing FPU modes, and the 10893 convenience of being able to use a single object file 10894 outweighs the size and speed overhead for any extra mode 10895 switching that might be needed, compared with what would be 10896 needed with a more specific choice of prevailing FPU mode. 10897 10898 'truncate' 10899 This is the mode used for floating-point calculations with 10900 truncating (i.e. round towards zero) rounding mode. That 10901 includes conversion from floating point to integer. 10902 10903 'round-nearest' 10904 This is the mode used for floating-point calculations with 10905 round-to-nearest-or-even rounding mode. 10906 10907 'int' 10908 This is the mode used to perform integer calculations in the 10909 FPU, e.g. integer multiply, or integer 10910 multiply-and-accumulate. 10911 10912 The default is '-mfp-mode=caller' 10913 10914 '-mnosplit-lohi' 10915 '-mno-postinc' 10916 '-mno-postmodify' 10917 Code generation tweaks that disable, respectively, splitting of 10918 32-bit loads, generation of post-increment addresses, and 10919 generation of post-modify addresses. The defaults are 10920 'msplit-lohi', '-mpost-inc', and '-mpost-modify'. 10921 10922 '-mnovect-double' 10923 Change the preferred SIMD mode to SImode. The default is 10924 '-mvect-double', which uses DImode as preferred SIMD mode. 10925 10926 '-max-vect-align=NUM' 10927 The maximum alignment for SIMD vector mode types. NUM may be 4 or 10928 8. The default is 8. Note that this is an ABI change, even though 10929 many library function interfaces are unaffected if they don't use 10930 SIMD vector modes in places that affect size and/or alignment of 10931 relevant types. 10932 10933 '-msplit-vecmove-early' 10934 Split vector moves into single word moves before reload. In theory 10935 this can give better register allocation, but so far the reverse 10936 seems to be generally the case. 10937 10938 '-m1reg-REG' 10939 Specify a register to hold the constant -1, which makes loading 10940 small negative constants and certain bitmasks faster. Allowable 10941 values for REG are 'r43' and 'r63', which specify use of that 10942 register as a fixed register, and 'none', which means that no 10943 register is used for this purpose. The default is '-m1reg-none'. 10944 10945 10946 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: Adapteva Epiphany Options, Up: Submodel Options 10947 10948 3.17.3 ARM Options 10949 ------------------ 10950 10951 These '-m' options are defined for Advanced RISC Machines (ARM) 10952 architectures: 10953 10954 '-mabi=NAME' 10955 Generate code for the specified ABI. Permissible values are: 10956 'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'. 10957 10958 '-mapcs-frame' 10959 Generate a stack frame that is compliant with the ARM Procedure 10960 Call Standard for all functions, even if this is not strictly 10961 necessary for correct execution of the code. Specifying 10962 '-fomit-frame-pointer' with this option causes the stack frames not 10963 to be generated for leaf functions. The default is 10964 '-mno-apcs-frame'. 10965 10966 '-mapcs' 10967 This is a synonym for '-mapcs-frame'. 10968 10969 '-mthumb-interwork' 10970 Generate code that supports calling between the ARM and Thumb 10971 instruction sets. Without this option, on pre-v5 architectures, 10972 the two instruction sets cannot be reliably used inside one 10973 program. The default is '-mno-thumb-interwork', since slightly 10974 larger code is generated when '-mthumb-interwork' is specified. In 10975 AAPCS configurations this option is meaningless. 10976 10977 '-mno-sched-prolog' 10978 Prevent the reordering of instructions in the function prologue, or 10979 the merging of those instruction with the instructions in the 10980 function's body. This means that all functions start with a 10981 recognizable set of instructions (or in fact one of a choice from a 10982 small set of different function prologues), and this information 10983 can be used to locate the start of functions inside an executable 10984 piece of code. The default is '-msched-prolog'. 10985 10986 '-mfloat-abi=NAME' 10987 Specifies which floating-point ABI to use. Permissible values are: 10988 'soft', 'softfp' and 'hard'. 10989 10990 Specifying 'soft' causes GCC to generate output containing library 10991 calls for floating-point operations. 'softfp' allows the 10992 generation of code using hardware floating-point instructions, but 10993 still uses the soft-float calling conventions. 'hard' allows 10994 generation of floating-point instructions and uses FPU-specific 10995 calling conventions. 10996 10997 The default depends on the specific target configuration. Note 10998 that the hard-float and soft-float ABIs are not link-compatible; 10999 you must compile your entire program with the same ABI, and link 11000 with a compatible set of libraries. 11001 11002 '-mlittle-endian' 11003 Generate code for a processor running in little-endian mode. This 11004 is the default for all standard configurations. 11005 11006 '-mbig-endian' 11007 Generate code for a processor running in big-endian mode; the 11008 default is to compile code for a little-endian processor. 11009 11010 '-mwords-little-endian' 11011 This option only applies when generating code for big-endian 11012 processors. Generate code for a little-endian word order but a 11013 big-endian byte order. That is, a byte order of the form 11014 '32107654'. Note: this option should only be used if you require 11015 compatibility with code for big-endian ARM processors generated by 11016 versions of the compiler prior to 2.8. This option is now 11017 deprecated. 11018 11019 '-march=NAME' 11020 This specifies the name of the target ARM architecture. GCC uses 11021 this name to determine what kind of instructions it can emit when 11022 generating assembly code. This option can be used in conjunction 11023 with or instead of the '-mcpu=' option. Permissible names are: 11024 'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv4t', 'armv5', 11025 'armv5t', 'armv5e', 'armv5te', 'armv6', 'armv6j', 'armv6t2', 11026 'armv6z', 'armv6zk', 'armv6-m', 'armv7', 'armv7-a', 'armv7-r', 11027 'armv7-m', 'armv7e-m' 'armv8-a', 'iwmmxt', 'iwmmxt2', 'ep9312'. 11028 11029 '-march=native' causes the compiler to auto-detect the architecture 11030 of the build computer. At present, this feature is only supported 11031 on Linux, and not all architectures are recognized. If the 11032 auto-detect is unsuccessful the option has no effect. 11033 11034 '-mtune=NAME' 11035 This option specifies the name of the target ARM processor for 11036 which GCC should tune the performance of the code. For some ARM 11037 implementations better performance can be obtained by using this 11038 option. Permissible names are: 'arm2', 'arm250', 'arm3', 'arm6', 11039 'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 'arm7m', 'arm7d', 11040 'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 'arm700i', 11041 'arm710', 'arm710c', 'arm7100', 'arm720', 'arm7500', 'arm7500fe', 11042 'arm7tdmi', 'arm7tdmi-s', 'arm710t', 'arm720t', 'arm740t', 11043 'strongarm', 'strongarm110', 'strongarm1100', 'strongarm1110', 11044 'arm8', 'arm810', 'arm9', 'arm9e', 'arm920', 'arm920t', 'arm922t', 11045 'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm926ej-s', 'arm940t', 11046 'arm9tdmi', 'arm10tdmi', 'arm1020t', 'arm1026ej-s', 'arm10e', 11047 'arm1020e', 'arm1022e', 'arm1136j-s', 'arm1136jf-s', 'mpcore', 11048 'mpcorenovfp', 'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s', 11049 'arm1176jzf-s', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9', 11050 'cortex-a15', 'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-m4', 11051 'cortex-m3', 'cortex-m1', 'cortex-m0', 'cortex-m0plus', 11052 'marvell-pj4', 'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526', 11053 'fa626', 'fa606te', 'fa626te', 'fmp626', 'fa726te'. 11054 11055 '-mtune=generic-ARCH' specifies that GCC should tune the 11056 performance for a blend of processors within architecture ARCH. 11057 The aim is to generate code that run well on the current most 11058 popular processors, balancing between optimizations that benefit 11059 some CPUs in the range, and avoiding performance pitfalls of other 11060 CPUs. The effects of this option may change in future GCC versions 11061 as CPU models come and go. 11062 11063 '-mtune=native' causes the compiler to auto-detect the CPU of the 11064 build computer. At present, this feature is only supported on 11065 Linux, and not all architectures are recognized. If the 11066 auto-detect is unsuccessful the option has no effect. 11067 11068 '-mcpu=NAME' 11069 This specifies the name of the target ARM processor. GCC uses this 11070 name to derive the name of the target ARM architecture (as if 11071 specified by '-march') and the ARM processor type for which to tune 11072 for performance (as if specified by '-mtune'). Where this option 11073 is used in conjunction with '-march' or '-mtune', those options 11074 take precedence over the appropriate part of this option. 11075 11076 Permissible names for this option are the same as those for 11077 '-mtune'. 11078 11079 '-mcpu=generic-ARCH' is also permissible, and is equivalent to 11080 '-march=ARCH -mtune=generic-ARCH'. See '-mtune' for more 11081 information. 11082 11083 '-mcpu=native' causes the compiler to auto-detect the CPU of the 11084 build computer. At present, this feature is only supported on 11085 Linux, and not all architectures are recognized. If the 11086 auto-detect is unsuccessful the option has no effect. 11087 11088 '-mfpu=NAME' 11089 This specifies what floating-point hardware (or hardware emulation) 11090 is available on the target. Permissible names are: 'vfp', 'vfpv3', 11091 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16', 'vfpv3xd', 11092 'vfpv3xd-fp16', 'neon', 'neon-fp16', 'vfpv4', 'vfpv4-d16', 11093 'fpv4-sp-d16', 'neon-vfpv4', 'fp-armv8', 'neon-fp-armv8', and 11094 'crypto-neon-fp-armv8'. 11095 11096 If '-msoft-float' is specified this specifies the format of 11097 floating-point values. 11098 11099 If the selected floating-point hardware includes the NEON extension 11100 (e.g. '-mfpu'='neon'), note that floating-point operations are not 11101 generated by GCC's auto-vectorization pass unless 11102 '-funsafe-math-optimizations' is also specified. This is because 11103 NEON hardware does not fully implement the IEEE 754 standard for 11104 floating-point arithmetic (in particular denormal values are 11105 treated as zero), so the use of NEON instructions may lead to a 11106 loss of precision. 11107 11108 '-mfp16-format=NAME' 11109 Specify the format of the '__fp16' half-precision floating-point 11110 type. Permissible names are 'none', 'ieee', and 'alternative'; the 11111 default is 'none', in which case the '__fp16' type is not defined. 11112 *Note Half-Precision::, for more information. 11113 11114 '-mstructure-size-boundary=N' 11115 The sizes of all structures and unions are rounded up to a multiple 11116 of the number of bits set by this option. Permissible values are 11117 8, 32 and 64. The default value varies for different toolchains. 11118 For the COFF targeted toolchain the default value is 8. A value of 11119 64 is only allowed if the underlying ABI supports it. 11120 11121 Specifying a larger number can produce faster, more efficient code, 11122 but can also increase the size of the program. Different values 11123 are potentially incompatible. Code compiled with one value cannot 11124 necessarily expect to work with code or libraries compiled with 11125 another value, if they exchange information using structures or 11126 unions. 11127 11128 '-mabort-on-noreturn' 11129 Generate a call to the function 'abort' at the end of a 'noreturn' 11130 function. It is executed if the function tries to return. 11131 11132 '-mlong-calls' 11133 '-mno-long-calls' 11134 Tells the compiler to perform function calls by first loading the 11135 address of the function into a register and then performing a 11136 subroutine call on this register. This switch is needed if the 11137 target function lies outside of the 64-megabyte addressing range of 11138 the offset-based version of subroutine call instruction. 11139 11140 Even if this switch is enabled, not all function calls are turned 11141 into long calls. The heuristic is that static functions, functions 11142 that have the 'short-call' attribute, functions that are inside the 11143 scope of a '#pragma no_long_calls' directive, and functions whose 11144 definitions have already been compiled within the current 11145 compilation unit are not turned into long calls. The exceptions to 11146 this rule are that weak function definitions, functions with the 11147 'long-call' attribute or the 'section' attribute, and functions 11148 that are within the scope of a '#pragma long_calls' directive are 11149 always turned into long calls. 11150 11151 This feature is not enabled by default. Specifying 11152 '-mno-long-calls' restores the default behavior, as does placing 11153 the function calls within the scope of a '#pragma long_calls_off' 11154 directive. Note these switches have no effect on how the compiler 11155 generates code to handle function calls via function pointers. 11156 11157 '-msingle-pic-base' 11158 Treat the register used for PIC addressing as read-only, rather 11159 than loading it in the prologue for each function. The runtime 11160 system is responsible for initializing this register with an 11161 appropriate value before execution begins. 11162 11163 '-mpic-register=REG' 11164 Specify the register to be used for PIC addressing. For standard 11165 PIC base case, the default will be any suitable register determined 11166 by compiler. For single PIC base case, the default is 'R9' if 11167 target is EABI based or stack-checking is enabled, otherwise the 11168 default is 'R10'. 11169 11170 '-mpoke-function-name' 11171 Write the name of each function into the text section, directly 11172 preceding the function prologue. The generated code is similar to 11173 this: 11174 11175 t0 11176 .ascii "arm_poke_function_name", 0 11177 .align 11178 t1 11179 .word 0xff000000 + (t1 - t0) 11180 arm_poke_function_name 11181 mov ip, sp 11182 stmfd sp!, {fp, ip, lr, pc} 11183 sub fp, ip, #4 11184 11185 When performing a stack backtrace, code can inspect the value of 11186 'pc' stored at 'fp + 0'. If the trace function then looks at 11187 location 'pc - 12' and the top 8 bits are set, then we know that 11188 there is a function name embedded immediately preceding this 11189 location and has length '((pc[-3]) & 0xff000000)'. 11190 11191 '-mthumb' 11192 '-marm' 11193 11194 Select between generating code that executes in ARM and Thumb 11195 states. The default for most configurations is to generate code 11196 that executes in ARM state, but the default can be changed by 11197 configuring GCC with the '--with-mode='STATE configure option. 11198 11199 '-mtpcs-frame' 11200 Generate a stack frame that is compliant with the Thumb Procedure 11201 Call Standard for all non-leaf functions. (A leaf function is one 11202 that does not call any other functions.) The default is 11203 '-mno-tpcs-frame'. 11204 11205 '-mtpcs-leaf-frame' 11206 Generate a stack frame that is compliant with the Thumb Procedure 11207 Call Standard for all leaf functions. (A leaf function is one that 11208 does not call any other functions.) The default is 11209 '-mno-apcs-leaf-frame'. 11210 11211 '-mcallee-super-interworking' 11212 Gives all externally visible functions in the file being compiled 11213 an ARM instruction set header which switches to Thumb mode before 11214 executing the rest of the function. This allows these functions to 11215 be called from non-interworking code. This option is not valid in 11216 AAPCS configurations because interworking is enabled by default. 11217 11218 '-mcaller-super-interworking' 11219 Allows calls via function pointers (including virtual functions) to 11220 execute correctly regardless of whether the target code has been 11221 compiled for interworking or not. There is a small overhead in the 11222 cost of executing a function pointer if this option is enabled. 11223 This option is not valid in AAPCS configurations because 11224 interworking is enabled by default. 11225 11226 '-mtp=NAME' 11227 Specify the access model for the thread local storage pointer. The 11228 valid models are 'soft', which generates calls to 11229 '__aeabi_read_tp', 'cp15', which fetches the thread pointer from 11230 'cp15' directly (supported in the arm6k architecture), and 'auto', 11231 which uses the best available method for the selected processor. 11232 The default setting is 'auto'. 11233 11234 '-mtls-dialect=DIALECT' 11235 Specify the dialect to use for accessing thread local storage. Two 11236 DIALECTs are supported--'gnu' and 'gnu2'. The 'gnu' dialect 11237 selects the original GNU scheme for supporting local and global 11238 dynamic TLS models. The 'gnu2' dialect selects the GNU descriptor 11239 scheme, which provides better performance for shared libraries. 11240 The GNU descriptor scheme is compatible with the original scheme, 11241 but does require new assembler, linker and library support. 11242 Initial and local exec TLS models are unaffected by this option and 11243 always use the original scheme. 11244 11245 '-mword-relocations' 11246 Only generate absolute relocations on word-sized values (i.e. 11247 R_ARM_ABS32). This is enabled by default on targets (uClinux, 11248 SymbianOS) where the runtime loader imposes this restriction, and 11249 when '-fpic' or '-fPIC' is specified. 11250 11251 '-mfix-cortex-m3-ldrd' 11252 Some Cortex-M3 cores can cause data corruption when 'ldrd' 11253 instructions with overlapping destination and base registers are 11254 used. This option avoids generating these instructions. This 11255 option is enabled by default when '-mcpu=cortex-m3' is specified. 11256 11257 '-munaligned-access' 11258 '-mno-unaligned-access' 11259 Enables (or disables) reading and writing of 16- and 32- bit values 11260 from addresses that are not 16- or 32- bit aligned. By default 11261 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M 11262 architectures, and enabled for all other architectures. If 11263 unaligned access is not enabled then words in packed data 11264 structures will be accessed a byte at a time. 11265 11266 The ARM attribute 'Tag_CPU_unaligned_access' will be set in the 11267 generated object file to either true or false, depending upon the 11268 setting of this option. If unaligned access is enabled then the 11269 preprocessor symbol '__ARM_FEATURE_UNALIGNED' will also be defined. 11270 11271 11272 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 11273 11274 3.17.4 AVR Options 11275 ------------------ 11276 11277 These options are defined for AVR implementations: 11278 11279 '-mmcu=MCU' 11280 Specify Atmel AVR instruction set architectures (ISA) or MCU type. 11281 11282 The default for this option is 'avr2'. 11283 11284 GCC supports the following AVR devices and ISAs: 11285 11286 'avr2' 11287 "Classic" devices with up to 8 KiB of program memory. 11288 MCU = 'attiny22', 'attiny26', 'at90c8534', 'at90s2313', 11289 'at90s2323', 'at90s2333', 'at90s2343', 'at90s4414', 11290 'at90s4433', 'at90s4434', 'at90s8515', 'at90s8535'. 11291 11292 'avr25' 11293 "Classic" devices with up to 8 KiB of program memory and with 11294 the 'MOVW' instruction. 11295 MCU = 'ata5272', 'ata6289', 'attiny13', 'attiny13a', 11296 'attiny2313', 'attiny2313a', 'attiny24', 'attiny24a', 11297 'attiny25', 'attiny261', 'attiny261a', 'attiny43u', 11298 'attiny4313', 'attiny44', 'attiny44a', 'attiny45', 11299 'attiny461', 'attiny461a', 'attiny48', 'attiny84', 11300 'attiny84a', 'attiny85', 'attiny861', 'attiny861a', 11301 'attiny87', 'attiny88', 'at86rf401'. 11302 11303 'avr3' 11304 "Classic" devices with 16 KiB up to 64 KiB of program memory. 11305 MCU = 'at43usb355', 'at76c711'. 11306 11307 'avr31' 11308 "Classic" devices with 128 KiB of program memory. 11309 MCU = 'atmega103', 'at43usb320'. 11310 11311 'avr35' 11312 "Classic" devices with 16 KiB up to 64 KiB of program memory 11313 and with the 'MOVW' instruction. 11314 MCU = 'ata5505', 'atmega16u2', 'atmega32u2', 'atmega8u2', 11315 'attiny1634', 'attiny167', 'at90usb162', 'at90usb82'. 11316 11317 'avr4' 11318 "Enhanced" devices with up to 8 KiB of program memory. 11319 MCU = 'ata6285', 'ata6286', 'atmega48', 'atmega48a', 11320 'atmega48p', 'atmega48pa', 'atmega8', 'atmega8a', 11321 'atmega8hva', 'atmega8515', 'atmega8535', 'atmega88', 11322 'atmega88a', 'atmega88p', 'atmega88pa', 'at90pwm1', 11323 'at90pwm2', 'at90pwm2b', 'at90pwm3', 'at90pwm3b', 'at90pwm81'. 11324 11325 'avr5' 11326 "Enhanced" devices with 16 KiB up to 64 KiB of program memory. 11327 11328 MCU = 'ata5790', 'ata5790n', 'ata5795', 'atmega16', 11329 'atmega16a', 'atmega16hva', 'atmega16hva2', 'atmega16hvb', 11330 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4', 'atmega161', 11331 'atmega162', 'atmega163', 'atmega164a', 'atmega164p', 11332 'atmega164pa', 'atmega165', 'atmega165a', 'atmega165p', 11333 'atmega165pa', 'atmega168', 'atmega168a', 'atmega168p', 11334 'atmega168pa', 'atmega169', 'atmega169a', 'atmega169p', 11335 'atmega169pa', 'atmega26hvg', 'atmega32', 'atmega32a', 11336 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb', 'atmega32m1', 11337 'atmega32u4', 'atmega32u6', 'atmega323', 'atmega324a', 11338 'atmega324p', 'atmega324pa', 'atmega325', 'atmega325a', 11339 'atmega325p', 'atmega3250', 'atmega3250a', 'atmega3250p', 11340 'atmega3250pa', 'atmega328', 'atmega328p', 'atmega329', 11341 'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3290', 11342 'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406', 11343 'atmega48hvf', 'atmega64', 'atmega64a', 'atmega64c1', 11344 'atmega64hve', 'atmega64m1', 'atmega64rfa2', 'atmega64rfr2', 11345 'atmega640', 'atmega644', 'atmega644a', 'atmega644p', 11346 'atmega644pa', 'atmega645', 'atmega645a', 'atmega645p', 11347 'atmega6450', 'atmega6450a', 'atmega6450p', 'atmega649', 11348 'atmega649a', 'atmega649p', 'atmega6490', 'atmega6490a', 11349 'atmega6490p', 'at90can32', 'at90can64', 'at90pwm161', 11350 'at90pwm216', 'at90pwm316', 'at90scr100', 'at90usb646', 11351 'at90usb647', 'at94k', 'm3000'. 11352 11353 'avr51' 11354 "Enhanced" devices with 128 KiB of program memory. 11355 MCU = 'atmega128', 'atmega128a', 'atmega128rfa1', 11356 'atmega1280', 'atmega1281', 'atmega1284', 'atmega1284p', 11357 'at90can128', 'at90usb1286', 'at90usb1287'. 11358 11359 'avr6' 11360 "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB 11361 of program memory. 11362 MCU = 'atmega2560', 'atmega2561'. 11363 11364 'avrxmega2' 11365 "XMEGA" devices with more than 8 KiB and up to 64 KiB of 11366 program memory. 11367 MCU = 'atmxt112sl', 'atmxt224', 'atmxt224e', 'atmxt336s', 11368 'atxmega16a4', 'atxmega16a4u', 'atxmega16c4', 'atxmega16d4', 11369 'atxmega16x1', 'atxmega32a4', 'atxmega32a4u', 'atxmega32c4', 11370 'atxmega32d4', 'atxmega32e5', 'atxmega32x1'. 11371 11372 'avrxmega4' 11373 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 11374 program memory. 11375 MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u', 11376 'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3', 11377 'atxmega64d4'. 11378 11379 'avrxmega5' 11380 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 11381 program memory and more than 64 KiB of RAM. 11382 MCU = 'atxmega64a1', 'atxmega64a1u'. 11383 11384 'avrxmega6' 11385 "XMEGA" devices with more than 128 KiB of program memory. 11386 MCU = 'atmxt540s', 'atmxt540sreva', 'atxmega128a3', 11387 'atxmega128a3u', 'atxmega128b1', 'atxmega128b3', 11388 'atxmega128c3', 'atxmega128d3', 'atxmega128d4', 11389 'atxmega192a3', 'atxmega192a3u', 'atxmega192c3', 11390 'atxmega192d3', 'atxmega256a3', 'atxmega256a3b', 11391 'atxmega256a3bu', 'atxmega256a3u', 'atxmega256c3', 11392 'atxmega256d3', 'atxmega384c3', 'atxmega384d3'. 11393 11394 'avrxmega7' 11395 "XMEGA" devices with more than 128 KiB of program memory and 11396 more than 64 KiB of RAM. 11397 MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'. 11398 11399 'avr1' 11400 This ISA is implemented by the minimal AVR core and supported 11401 for assembler only. 11402 MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28', 11403 'at90s1200'. 11404 11405 '-maccumulate-args' 11406 Accumulate outgoing function arguments and acquire/release the 11407 needed stack space for outgoing function arguments once in function 11408 prologue/epilogue. Without this option, outgoing arguments are 11409 pushed before calling a function and popped afterwards. 11410 11411 Popping the arguments after the function call can be expensive on 11412 AVR so that accumulating the stack space might lead to smaller 11413 executables because arguments need not to be removed from the stack 11414 after such a function call. 11415 11416 This option can lead to reduced code size for functions that 11417 perform several calls to functions that get their arguments on the 11418 stack like calls to printf-like functions. 11419 11420 '-mbranch-cost=COST' 11421 Set the branch costs for conditional branch instructions to COST. 11422 Reasonable values for COST are small, non-negative integers. The 11423 default branch cost is 0. 11424 11425 '-mcall-prologues' 11426 Functions prologues/epilogues are expanded as calls to appropriate 11427 subroutines. Code size is smaller. 11428 11429 '-mint8' 11430 Assume 'int' to be 8-bit integer. This affects the sizes of all 11431 types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes, 11432 and 'long long' is 4 bytes. Please note that this option does not 11433 conform to the C standards, but it results in smaller code size. 11434 11435 '-mno-interrupts' 11436 Generated code is not compatible with hardware interrupts. Code 11437 size is smaller. 11438 11439 '-mrelax' 11440 Try to replace 'CALL' resp. 'JMP' instruction by the shorter 11441 'RCALL' resp. 'RJMP' instruction if applicable. Setting '-mrelax' 11442 just adds the '--relax' option to the linker command line when the 11443 linker is called. 11444 11445 Jump relaxing is performed by the linker because jump offsets are 11446 not known before code is located. Therefore, the assembler code 11447 generated by the compiler is the same, but the instructions in the 11448 executable may differ from instructions in the assembler code. 11449 11450 Relaxing must be turned on if linker stubs are needed, see the 11451 section on 'EIND' and linker stubs below. 11452 11453 '-msp8' 11454 Treat the stack pointer register as an 8-bit register, i.e. assume 11455 the high byte of the stack pointer is zero. In general, you don't 11456 need to set this option by hand. 11457 11458 This option is used internally by the compiler to select and build 11459 multilibs for architectures 'avr2' and 'avr25'. These 11460 architectures mix devices with and without 'SPH'. For any setting 11461 other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver will 11462 add or remove this option from the compiler proper's command line, 11463 because the compiler then knows if the device or architecture has 11464 an 8-bit stack pointer and thus no 'SPH' register or not. 11465 11466 '-mstrict-X' 11467 Use address register 'X' in a way proposed by the hardware. This 11468 means that 'X' is only used in indirect, post-increment or 11469 pre-decrement addressing. 11470 11471 Without this option, the 'X' register may be used in the same way 11472 as 'Y' or 'Z' which then is emulated by additional instructions. 11473 For example, loading a value with 'X+const' addressing with a small 11474 non-negative 'const < 64' to a register RN is performed as 11475 11476 adiw r26, const ; X += const 11477 ld RN, X ; RN = *X 11478 sbiw r26, const ; X -= const 11479 11480 '-mtiny-stack' 11481 Only change the lower 8 bits of the stack pointer. 11482 11483 '-Waddr-space-convert' 11484 Warn about conversions between address spaces in the case where the 11485 resulting address space is not contained in the incoming address 11486 space. 11487 11488 3.17.4.1 'EIND' and Devices with more than 128 Ki Bytes of Flash 11489 ................................................................ 11490 11491 Pointers in the implementation are 16 bits wide. The address of a 11492 function or label is represented as word address so that indirect jumps 11493 and calls can target any code address in the range of 64 Ki words. 11494 11495 In order to facilitate indirect jump on devices with more than 128 Ki 11496 bytes of program memory space, there is a special function register 11497 called 'EIND' that serves as most significant part of the target address 11498 when 'EICALL' or 'EIJMP' instructions are used. 11499 11500 Indirect jumps and calls on these devices are handled as follows by the 11501 compiler and are subject to some limitations: 11502 11503 * The compiler never sets 'EIND'. 11504 11505 * The compiler uses 'EIND' implicitely in 'EICALL'/'EIJMP' 11506 instructions or might read 'EIND' directly in order to emulate an 11507 indirect call/jump by means of a 'RET' instruction. 11508 11509 * The compiler assumes that 'EIND' never changes during the startup 11510 code or during the application. In particular, 'EIND' is not 11511 saved/restored in function or interrupt service routine 11512 prologue/epilogue. 11513 11514 * For indirect calls to functions and computed goto, the linker 11515 generates _stubs_. Stubs are jump pads sometimes also called 11516 _trampolines_. Thus, the indirect call/jump jumps to such a stub. 11517 The stub contains a direct jump to the desired address. 11518 11519 * Linker relaxation must be turned on so that the linker will 11520 generate the stubs correctly an all situaltion. See the compiler 11521 option '-mrelax' and the linler option '--relax'. There are corner 11522 cases where the linker is supposed to generate stubs but aborts 11523 without relaxation and without a helpful error message. 11524 11525 * The default linker script is arranged for code with 'EIND = 0'. If 11526 code is supposed to work for a setup with 'EIND != 0', a custom 11527 linker script has to be used in order to place the sections whose 11528 name start with '.trampolines' into the segment where 'EIND' points 11529 to. 11530 11531 * The startup code from libgcc never sets 'EIND'. Notice that 11532 startup code is a blend of code from libgcc and AVR-LibC. For the 11533 impact of AVR-LibC on 'EIND', see the 11534 AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/). 11535 11536 * It is legitimate for user-specific startup code to set up 'EIND' 11537 early, for example by means of initialization code located in 11538 section '.init3'. Such code runs prior to general startup code 11539 that initializes RAM and calls constructors, but after the bit of 11540 startup code from AVR-LibC that sets 'EIND' to the segment where 11541 the vector table is located. 11542 #include <avr/io.h> 11543 11544 static void 11545 __attribute__((section(".init3"),naked,used,no_instrument_function)) 11546 init3_set_eind (void) 11547 { 11548 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" 11549 "out %i0,r24" :: "n" (&EIND) : "r24","memory"); 11550 } 11551 11552 The '__trampolines_start' symbol is defined in the linker script. 11553 11554 * Stubs are generated automatically by the linker if the following 11555 two conditions are met: 11556 11557 - The address of a label is taken by means of the 'gs' modifier 11558 (short for _generate stubs_) like so: 11559 LDI r24, lo8(gs(FUNC)) 11560 LDI r25, hi8(gs(FUNC)) 11561 - The final location of that label is in a code segment 11562 _outside_ the segment where the stubs are located. 11563 11564 * The compiler emits such 'gs' modifiers for code labels in the 11565 following situations: 11566 - Taking address of a function or code label. 11567 - Computed goto. 11568 - If prologue-save function is used, see '-mcall-prologues' 11569 command-line option. 11570 - Switch/case dispatch tables. If you do not want such dispatch 11571 tables you can specify the '-fno-jump-tables' command-line 11572 option. 11573 - C and C++ constructors/destructors called during 11574 startup/shutdown. 11575 - If the tools hit a 'gs()' modifier explained above. 11576 11577 * Jumping to non-symbolic addresses like so is _not_ supported: 11578 11579 int main (void) 11580 { 11581 /* Call function at word address 0x2 */ 11582 return ((int(*)(void)) 0x2)(); 11583 } 11584 11585 Instead, a stub has to be set up, i.e. the function has to be 11586 called through a symbol ('func_4' in the example): 11587 11588 int main (void) 11589 { 11590 extern int func_4 (void); 11591 11592 /* Call function at byte address 0x4 */ 11593 return func_4(); 11594 } 11595 11596 and the application be linked with '-Wl,--defsym,func_4=0x4'. 11597 Alternatively, 'func_4' can be defined in the linker script. 11598 11599 3.17.4.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers 11600 ......................................................................................... 11601 11602 Some AVR devices support memories larger than the 64 KiB range that can 11603 be accessed with 16-bit pointers. To access memory locations outside 11604 this 64 KiB range, the contentent of a 'RAMP' register is used as high 11605 part of the address: The 'X', 'Y', 'Z' address register is concatenated 11606 with the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, 11607 respectively, to get a wide address. Similarly, 'RAMPD' is used 11608 together with direct addressing. 11609 11610 * The startup code initializes the 'RAMP' special function registers 11611 with zero. 11612 11613 * If a *note named address space: AVR Named Address Spaces. other 11614 than generic or '__flash' is used, then 'RAMPZ' is set as needed 11615 before the operation. 11616 11617 * If the device supports RAM larger than 64 and the compiler needs 11618 to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is reset to 11619 zero after the operation. 11620 11621 * If the device comes with a specific 'RAMP' register, the ISR 11622 prologue/epilogue saves/restores that SFR and initializes it with 11623 zero in case the ISR code might (implicitly) use it. 11624 11625 * RAM larger than 64 is not supported by GCC for AVR targets. If 11626 you use inline assembler to read from locations outside the 16-bit 11627 address range and change one of the 'RAMP' registers, you must 11628 reset it to zero after the access. 11629 11630 3.17.4.3 AVR Built-in Macros 11631 ............................ 11632 11633 GCC defines several built-in macros so that the user code can test for 11634 the presence or absence of features. Almost any of the following 11635 built-in macros are deduced from device capabilities and thus triggered 11636 by the '-mmcu=' command-line option. 11637 11638 For even more AVR-specific built-in macros see *note AVR Named Address 11639 Spaces:: and *note AVR Built-in Functions::. 11640 11641 '__AVR_ARCH__' 11642 Build-in macro that resolves to a decimal number that identifies 11643 the architecture and depends on the '-mmcu=MCU' option. Possible 11644 values are: 11645 11646 '2', '25', '3', '31', '35', '4', '5', '51', '6', '102', '104', 11647 '105', '106', '107' 11648 11649 for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5', 11650 'avr51', 'avr6', 'avrxmega2', 'avrxmega4', 'avrxmega5', 11651 'avrxmega6', 'avrxmega7', respectively. If MCU specifies a device, 11652 this built-in macro is set accordingly. For example, with 11653 '-mmcu=atmega8' the macro will be defined to '4'. 11654 11655 '__AVR_DEVICE__' 11656 Setting '-mmcu=DEVICE' defines this built-in macro which reflects 11657 the device's name. For example, '-mmcu=atmega8' defines the 11658 built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines 11659 '__AVR_ATtiny261A__', etc. 11660 11661 The built-in macros' names follow the scheme '__AVR_DEVICE__' where 11662 DEVICE is the device name as from the AVR user manual. The 11663 difference between DEVICE in the built-in macro and DEVICE in 11664 '-mmcu=DEVICE' is that the latter is always lowercase. 11665 11666 If DEVICE is not a device but only a core architecture like 11667 'avr51', this macro will not be defined. 11668 11669 '__AVR_XMEGA__' 11670 The device / architecture belongs to the XMEGA family of devices. 11671 11672 '__AVR_HAVE_ELPM__' 11673 The device has the the 'ELPM' instruction. 11674 11675 '__AVR_HAVE_ELPMX__' 11676 The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions. 11677 11678 '__AVR_HAVE_MOVW__' 11679 The device has the 'MOVW' instruction to perform 16-bit 11680 register-register moves. 11681 11682 '__AVR_HAVE_LPMX__' 11683 The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions. 11684 11685 '__AVR_HAVE_MUL__' 11686 The device has a hardware multiplier. 11687 11688 '__AVR_HAVE_JMP_CALL__' 11689 The device has the 'JMP' and 'CALL' instructions. This is the case 11690 for devices with at least 16 KiB of program memory. 11691 11692 '__AVR_HAVE_EIJMP_EICALL__' 11693 '__AVR_3_BYTE_PC__' 11694 The device has the 'EIJMP' and 'EICALL' instructions. This is the 11695 case for devices with more than 128 KiB of program memory. This 11696 also means that the program counter (PC) is 3 bytes wide. 11697 11698 '__AVR_2_BYTE_PC__' 11699 The program counter (PC) is 2 bytes wide. This is the case for 11700 devices with up to 128 KiB of program memory. 11701 11702 '__AVR_HAVE_8BIT_SP__' 11703 '__AVR_HAVE_16BIT_SP__' 11704 The stack pointer (SP) register is treated as 8-bit respectively 11705 16-bit register by the compiler. The definition of these macros is 11706 affected by '-mtiny-stack'. 11707 11708 '__AVR_HAVE_SPH__' 11709 '__AVR_SP8__' 11710 The device has the SPH (high part of stack pointer) special 11711 function register or has an 8-bit stack pointer, respectively. The 11712 definition of these macros is affected by '-mmcu=' and in the cases 11713 of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'. 11714 11715 '__AVR_HAVE_RAMPD__' 11716 '__AVR_HAVE_RAMPX__' 11717 '__AVR_HAVE_RAMPY__' 11718 '__AVR_HAVE_RAMPZ__' 11719 The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special 11720 function register, respectively. 11721 11722 '__NO_INTERRUPTS__' 11723 This macro reflects the '-mno-interrupts' command line option. 11724 11725 '__AVR_ERRATA_SKIP__' 11726 '__AVR_ERRATA_SKIP_JMP_CALL__' 11727 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit 11728 instructions because of a hardware erratum. Skip instructions are 11729 'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'. The second macro is 11730 only defined if '__AVR_HAVE_JMP_CALL__' is also set. 11731 11732 '__AVR_SFR_OFFSET__=OFFSET' 11733 Instructions that can address I/O special function registers 11734 directly like 'IN', 'OUT', 'SBI', etc. may use a different address 11735 as if addressed by an instruction to access RAM like 'LD' or 'STS'. 11736 This offset depends on the device architecture and has to be 11737 subtracted from the RAM address in order to get the respective 11738 I/O address. 11739 11740 '__WITH_AVRLIBC__' 11741 The compiler is configured to be used together with AVR-Libc. See 11742 the '--with-avrlibc' configure option. 11743 11744 11745 File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options, Up: Submodel Options 11746 11747 3.17.5 Blackfin Options 11748 ----------------------- 11749 11750 '-mcpu=CPU[-SIREVISION]' 11751 Specifies the name of the target Blackfin processor. Currently, 11752 CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522', 11753 'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532', 11754 'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542', 11755 'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m', 11756 'bf548m', 'bf549m', 'bf561', 'bf592'. 11757 11758 The optional SIREVISION specifies the silicon revision of the 11759 target Blackfin processor. Any workarounds available for the 11760 targeted silicon revision are enabled. If SIREVISION is 'none', no 11761 workarounds are enabled. If SIREVISION is 'any', all workarounds 11762 for the targeted processor are enabled. The '__SILICON_REVISION__' 11763 macro is defined to two hexadecimal digits representing the major 11764 and minor numbers in the silicon revision. If SIREVISION is 11765 'none', the '__SILICON_REVISION__' is not defined. If SIREVISION 11766 is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'. If 11767 this optional SIREVISION is not used, GCC assumes the latest known 11768 silicon revision of the targeted Blackfin processor. 11769 11770 GCC defines a preprocessor macro for the specified CPU. For the 11771 'bfin-elf' toolchain, this option causes the hardware BSP provided 11772 by libgloss to be linked in if '-msim' is not given. 11773 11774 Without this option, 'bf532' is used as the processor by default. 11775 11776 Note that support for 'bf561' is incomplete. For 'bf561', only the 11777 preprocessor macro is defined. 11778 11779 '-msim' 11780 Specifies that the program will be run on the simulator. This 11781 causes the simulator BSP provided by libgloss to be linked in. 11782 This option has effect only for 'bfin-elf' toolchain. Certain 11783 other options, such as '-mid-shared-library' and '-mfdpic', imply 11784 '-msim'. 11785 11786 '-momit-leaf-frame-pointer' 11787 Don't keep the frame pointer in a register for leaf functions. 11788 This avoids the instructions to save, set up and restore frame 11789 pointers and makes an extra register available in leaf functions. 11790 The option '-fomit-frame-pointer' removes the frame pointer for all 11791 functions, which might make debugging harder. 11792 11793 '-mspecld-anomaly' 11794 When enabled, the compiler ensures that the generated code does not 11795 contain speculative loads after jump instructions. If this option 11796 is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined. 11797 11798 '-mno-specld-anomaly' 11799 Don't generate extra code to prevent speculative loads from 11800 occurring. 11801 11802 '-mcsync-anomaly' 11803 When enabled, the compiler ensures that the generated code does not 11804 contain CSYNC or SSYNC instructions too soon after conditional 11805 branches. If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS' 11806 is defined. 11807 11808 '-mno-csync-anomaly' 11809 Don't generate extra code to prevent CSYNC or SSYNC instructions 11810 from occurring too soon after a conditional branch. 11811 11812 '-mlow-64k' 11813 When enabled, the compiler is free to take advantage of the 11814 knowledge that the entire program fits into the low 64k of memory. 11815 11816 '-mno-low-64k' 11817 Assume that the program is arbitrarily large. This is the default. 11818 11819 '-mstack-check-l1' 11820 Do stack checking using information placed into L1 scratchpad 11821 memory by the uClinux kernel. 11822 11823 '-mid-shared-library' 11824 Generate code that supports shared libraries via the library ID 11825 method. This allows for execute in place and shared libraries in 11826 an environment without virtual memory management. This option 11827 implies '-fPIC'. With a 'bfin-elf' target, this option implies 11828 '-msim'. 11829 11830 '-mno-id-shared-library' 11831 Generate code that doesn't assume ID-based shared libraries are 11832 being used. This is the default. 11833 11834 '-mleaf-id-shared-library' 11835 Generate code that supports shared libraries via the library ID 11836 method, but assumes that this library or executable won't link 11837 against any other ID shared libraries. That allows the compiler to 11838 use faster code for jumps and calls. 11839 11840 '-mno-leaf-id-shared-library' 11841 Do not assume that the code being compiled won't link against any 11842 ID shared libraries. Slower code is generated for jump and call 11843 insns. 11844 11845 '-mshared-library-id=n' 11846 Specifies the identification number of the ID-based shared library 11847 being compiled. Specifying a value of 0 generates more compact 11848 code; specifying other values forces the allocation of that number 11849 to the current library but is no more space- or time-efficient than 11850 omitting this option. 11851 11852 '-msep-data' 11853 Generate code that allows the data segment to be located in a 11854 different area of memory from the text segment. This allows for 11855 execute in place in an environment without virtual memory 11856 management by eliminating relocations against the text section. 11857 11858 '-mno-sep-data' 11859 Generate code that assumes that the data segment follows the text 11860 segment. This is the default. 11861 11862 '-mlong-calls' 11863 '-mno-long-calls' 11864 Tells the compiler to perform function calls by first loading the 11865 address of the function into a register and then performing a 11866 subroutine call on this register. This switch is needed if the 11867 target function lies outside of the 24-bit addressing range of the 11868 offset-based version of subroutine call instruction. 11869 11870 This feature is not enabled by default. Specifying 11871 '-mno-long-calls' restores the default behavior. Note these 11872 switches have no effect on how the compiler generates code to 11873 handle function calls via function pointers. 11874 11875 '-mfast-fp' 11876 Link with the fast floating-point library. This library relaxes 11877 some of the IEEE floating-point standard's rules for checking 11878 inputs against Not-a-Number (NAN), in the interest of performance. 11879 11880 '-minline-plt' 11881 Enable inlining of PLT entries in function calls to functions that 11882 are not known to bind locally. It has no effect without '-mfdpic'. 11883 11884 '-mmulticore' 11885 Build a standalone application for multicore Blackfin processors. 11886 This option causes proper start files and link scripts supporting 11887 multicore to be used, and defines the macro '__BFIN_MULTICORE'. It 11888 can only be used with '-mcpu=bf561[-SIREVISION]'. 11889 11890 This option can be used with '-mcorea' or '-mcoreb', which selects 11891 the one-application-per-core programming model. Without '-mcorea' 11892 or '-mcoreb', the single-application/dual-core programming model is 11893 used. In this model, the main function of Core B should be named 11894 as 'coreb_main'. 11895 11896 If this option is not used, the single-core application programming 11897 model is used. 11898 11899 '-mcorea' 11900 Build a standalone application for Core A of BF561 when using the 11901 one-application-per-core programming model. Proper start files and 11902 link scripts are used to support Core A, and the macro 11903 '__BFIN_COREA' is defined. This option can only be used in 11904 conjunction with '-mmulticore'. 11905 11906 '-mcoreb' 11907 Build a standalone application for Core B of BF561 when using the 11908 one-application-per-core programming model. Proper start files and 11909 link scripts are used to support Core B, and the macro 11910 '__BFIN_COREB' is defined. When this option is used, 'coreb_main' 11911 should be used instead of 'main'. This option can only be used in 11912 conjunction with '-mmulticore'. 11913 11914 '-msdram' 11915 Build a standalone application for SDRAM. Proper start files and 11916 link scripts are used to put the application into SDRAM, and the 11917 macro '__BFIN_SDRAM' is defined. The loader should initialize 11918 SDRAM before loading the application. 11919 11920 '-micplb' 11921 Assume that ICPLBs are enabled at run time. This has an effect on 11922 certain anomaly workarounds. For Linux targets, the default is to 11923 assume ICPLBs are enabled; for standalone applications the default 11924 is off. 11925 11926 11927 File: gcc.info, Node: C6X Options, Next: CRIS Options, Prev: Blackfin Options, Up: Submodel Options 11928 11929 3.17.6 C6X Options 11930 ------------------ 11931 11932 '-march=NAME' 11933 This specifies the name of the target architecture. GCC uses this 11934 name to determine what kind of instructions it can emit when 11935 generating assembly code. Permissible names are: 'c62x', 'c64x', 11936 'c64x+', 'c67x', 'c67x+', 'c674x'. 11937 11938 '-mbig-endian' 11939 Generate code for a big-endian target. 11940 11941 '-mlittle-endian' 11942 Generate code for a little-endian target. This is the default. 11943 11944 '-msim' 11945 Choose startup files and linker script suitable for the simulator. 11946 11947 '-msdata=default' 11948 Put small global and static data in the '.neardata' section, which 11949 is pointed to by register 'B14'. Put small uninitialized global 11950 and static data in the '.bss' section, which is adjacent to the 11951 '.neardata' section. Put small read-only data into the '.rodata' 11952 section. The corresponding sections used for large pieces of data 11953 are '.fardata', '.far' and '.const'. 11954 11955 '-msdata=all' 11956 Put all data, not just small objects, into the sections reserved 11957 for small data, and use addressing relative to the 'B14' register 11958 to access them. 11959 11960 '-msdata=none' 11961 Make no use of the sections reserved for small data, and use 11962 absolute addresses to access all data. Put all initialized global 11963 and static data in the '.fardata' section, and all uninitialized 11964 data in the '.far' section. Put all constant data into the 11965 '.const' section. 11966 11967 11968 File: gcc.info, Node: CRIS Options, Next: CR16 Options, Prev: C6X Options, Up: Submodel Options 11969 11970 3.17.7 CRIS Options 11971 ------------------- 11972 11973 These options are defined specifically for the CRIS ports. 11974 11975 '-march=ARCHITECTURE-TYPE' 11976 '-mcpu=ARCHITECTURE-TYPE' 11977 Generate code for the specified architecture. The choices for 11978 ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively 11979 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is 'v0' except for 11980 cris-axis-linux-gnu, where the default is 'v10'. 11981 11982 '-mtune=ARCHITECTURE-TYPE' 11983 Tune to ARCHITECTURE-TYPE everything applicable about the generated 11984 code, except for the ABI and the set of available instructions. 11985 The choices for ARCHITECTURE-TYPE are the same as for 11986 '-march=ARCHITECTURE-TYPE'. 11987 11988 '-mmax-stack-frame=N' 11989 Warn when the stack frame of a function exceeds N bytes. 11990 11991 '-metrax4' 11992 '-metrax100' 11993 The options '-metrax4' and '-metrax100' are synonyms for 11994 '-march=v3' and '-march=v8' respectively. 11995 11996 '-mmul-bug-workaround' 11997 '-mno-mul-bug-workaround' 11998 Work around a bug in the 'muls' and 'mulu' instructions for CPU 11999 models where it applies. This option is active by default. 12000 12001 '-mpdebug' 12002 Enable CRIS-specific verbose debug-related information in the 12003 assembly code. This option also has the effect of turning off the 12004 '#NO_APP' formatted-code indicator to the assembler at the 12005 beginning of the assembly file. 12006 12007 '-mcc-init' 12008 Do not use condition-code results from previous instruction; always 12009 emit compare and test instructions before use of condition codes. 12010 12011 '-mno-side-effects' 12012 Do not emit instructions with side effects in addressing modes 12013 other than post-increment. 12014 12015 '-mstack-align' 12016 '-mno-stack-align' 12017 '-mdata-align' 12018 '-mno-data-align' 12019 '-mconst-align' 12020 '-mno-const-align' 12021 These options ('no-' options) arrange (eliminate arrangements) for 12022 the stack frame, individual data and constants to be aligned for 12023 the maximum single data access size for the chosen CPU model. The 12024 default is to arrange for 32-bit alignment. ABI details such as 12025 structure layout are not affected by these options. 12026 12027 '-m32-bit' 12028 '-m16-bit' 12029 '-m8-bit' 12030 Similar to the stack- data- and const-align options above, these 12031 options arrange for stack frame, writable data and constants to all 12032 be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 12033 alignment. 12034 12035 '-mno-prologue-epilogue' 12036 '-mprologue-epilogue' 12037 With '-mno-prologue-epilogue', the normal function prologue and 12038 epilogue which set up the stack frame are omitted and no return 12039 instructions or return sequences are generated in the code. Use 12040 this option only together with visual inspection of the compiled 12041 code: no warnings or errors are generated when call-saved registers 12042 must be saved, or storage for local variables needs to be 12043 allocated. 12044 12045 '-mno-gotplt' 12046 '-mgotplt' 12047 With '-fpic' and '-fPIC', don't generate (do generate) instruction 12048 sequences that load addresses for functions from the PLT part of 12049 the GOT rather than (traditional on other architectures) calls to 12050 the PLT. The default is '-mgotplt'. 12051 12052 '-melf' 12053 Legacy no-op option only recognized with the cris-axis-elf and 12054 cris-axis-linux-gnu targets. 12055 12056 '-mlinux' 12057 Legacy no-op option only recognized with the cris-axis-linux-gnu 12058 target. 12059 12060 '-sim' 12061 This option, recognized for the cris-axis-elf, arranges to link 12062 with input-output functions from a simulator library. Code, 12063 initialized data and zero-initialized data are allocated 12064 consecutively. 12065 12066 '-sim2' 12067 Like '-sim', but pass linker options to locate initialized data at 12068 0x40000000 and zero-initialized data at 0x80000000. 12069 12070 12071 File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 12072 12073 3.17.8 CR16 Options 12074 ------------------- 12075 12076 These options are defined specifically for the CR16 ports. 12077 12078 '-mmac' 12079 Enable the use of multiply-accumulate instructions. Disabled by 12080 default. 12081 12082 '-mcr16cplus' 12083 '-mcr16c' 12084 Generate code for CR16C or CR16C+ architecture. CR16C+ 12085 architecture is default. 12086 12087 '-msim' 12088 Links the library libsim.a which is in compatible with simulator. 12089 Applicable to ELF compiler only. 12090 12091 '-mint32' 12092 Choose integer type as 32-bit wide. 12093 12094 '-mbit-ops' 12095 Generates 'sbit'/'cbit' instructions for bit manipulations. 12096 12097 '-mdata-model=MODEL' 12098 Choose a data model. The choices for MODEL are 'near', 'far' or 12099 'medium'. 'medium' is default. However, 'far' is not valid with 12100 '-mcr16c', as the CR16C architecture does not support the far data 12101 model. 12102 12103 12104 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CR16 Options, Up: Submodel Options 12105 12106 3.17.9 Darwin Options 12107 --------------------- 12108 12109 These options are defined for all architectures running the Darwin 12110 operating system. 12111 12112 FSF GCC on Darwin does not create "fat" object files; it creates an 12113 object file for the single architecture that GCC was built to target. 12114 Apple's GCC on Darwin does create "fat" files if multiple '-arch' 12115 options are used; it does so by running the compiler or linker multiple 12116 times and joining the results together with 'lipo'. 12117 12118 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686') 12119 is determined by the flags that specify the ISA that GCC is targeting, 12120 like '-mcpu' or '-march'. The '-force_cpusubtype_ALL' option can be 12121 used to override this. 12122 12123 The Darwin tools vary in their behavior when presented with an ISA 12124 mismatch. The assembler, 'as', only permits instructions to be used 12125 that are valid for the subtype of the file it is generating, so you 12126 cannot put 64-bit instructions in a 'ppc750' object file. The linker 12127 for shared libraries, '/usr/bin/libtool', fails and prints an error if 12128 asked to create a shared library with a less restrictive subtype than 12129 its input files (for instance, trying to put a 'ppc970' object file in a 12130 'ppc7400' library). The linker for executables, 'ld', quietly gives the 12131 executable the most restrictive subtype of any of its input files. 12132 12133 '-FDIR' 12134 Add the framework directory DIR to the head of the list of 12135 directories to be searched for header files. These directories are 12136 interleaved with those specified by '-I' options and are scanned in 12137 a left-to-right order. 12138 12139 A framework directory is a directory with frameworks in it. A 12140 framework is a directory with a 'Headers' and/or 'PrivateHeaders' 12141 directory contained directly in it that ends in '.framework'. The 12142 name of a framework is the name of this directory excluding the 12143 '.framework'. Headers associated with the framework are found in 12144 one of those two directories, with 'Headers' being searched first. 12145 A subframework is a framework directory that is in a framework's 12146 'Frameworks' directory. Includes of subframework headers can only 12147 appear in a header of a framework that contains the subframework, 12148 or in a sibling subframework header. Two subframeworks are 12149 siblings if they occur in the same framework. A subframework 12150 should not have the same name as a framework; a warning is issued 12151 if this is violated. Currently a subframework cannot have 12152 subframeworks; in the future, the mechanism may be extended to 12153 support this. The standard frameworks can be found in 12154 '/System/Library/Frameworks' and '/Library/Frameworks'. An example 12155 include looks like '#include <Framework/header.h>', where 12156 'Framework' denotes the name of the framework and 'header.h' is 12157 found in the 'PrivateHeaders' or 'Headers' directory. 12158 12159 '-iframeworkDIR' 12160 Like '-F' except the directory is a treated as a system directory. 12161 The main difference between this '-iframework' and '-F' is that 12162 with '-iframework' the compiler does not warn about constructs 12163 contained within header files found via DIR. This option is valid 12164 only for the C family of languages. 12165 12166 '-gused' 12167 Emit debugging information for symbols that are used. For stabs 12168 debugging format, this enables '-feliminate-unused-debug-symbols'. 12169 This is by default ON. 12170 12171 '-gfull' 12172 Emit debugging information for all symbols and types. 12173 12174 '-mmacosx-version-min=VERSION' 12175 The earliest version of MacOS X that this executable will run on is 12176 VERSION. Typical values of VERSION include '10.1', '10.2', and 12177 '10.3.9'. 12178 12179 If the compiler was built to use the system's headers by default, 12180 then the default for this option is the system version on which the 12181 compiler is running, otherwise the default is to make choices that 12182 are compatible with as many systems and code bases as possible. 12183 12184 '-mkernel' 12185 Enable kernel development mode. The '-mkernel' option sets 12186 '-static', '-fno-common', '-fno-cxa-atexit', '-fno-exceptions', 12187 '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and 12188 '-fno-rtti' where applicable. This mode also sets '-mno-altivec', 12189 '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC 12190 targets. 12191 12192 '-mone-byte-bool' 12193 Override the defaults for 'bool' so that 'sizeof(bool)==1'. By 12194 default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and 12195 '1' when compiling for Darwin/x86, so this option has no effect on 12196 x86. 12197 12198 *Warning:* The '-mone-byte-bool' switch causes GCC to generate code 12199 that is not binary compatible with code generated without that 12200 switch. Using this switch may require recompiling all other 12201 modules in a program, including system libraries. Use this switch 12202 to conform to a non-default data model. 12203 12204 '-mfix-and-continue' 12205 '-ffix-and-continue' 12206 '-findirect-data' 12207 Generate code suitable for fast turnaround development, such as to 12208 allow GDB to dynamically load '.o' files into already-running 12209 programs. '-findirect-data' and '-ffix-and-continue' are provided 12210 for backwards compatibility. 12211 12212 '-all_load' 12213 Loads all members of static archive libraries. See man ld(1) for 12214 more information. 12215 12216 '-arch_errors_fatal' 12217 Cause the errors having to do with files that have the wrong 12218 architecture to be fatal. 12219 12220 '-bind_at_load' 12221 Causes the output file to be marked such that the dynamic linker 12222 will bind all undefined references when the file is loaded or 12223 launched. 12224 12225 '-bundle' 12226 Produce a Mach-o bundle format file. See man ld(1) for more 12227 information. 12228 12229 '-bundle_loader EXECUTABLE' 12230 This option specifies the EXECUTABLE that will load the build 12231 output file being linked. See man ld(1) for more information. 12232 12233 '-dynamiclib' 12234 When passed this option, GCC produces a dynamic library instead of 12235 an executable when linking, using the Darwin 'libtool' command. 12236 12237 '-force_cpusubtype_ALL' 12238 This causes GCC's output file to have the ALL subtype, instead of 12239 one controlled by the '-mcpu' or '-march' option. 12240 12241 '-allowable_client CLIENT_NAME' 12242 '-client_name' 12243 '-compatibility_version' 12244 '-current_version' 12245 '-dead_strip' 12246 '-dependency-file' 12247 '-dylib_file' 12248 '-dylinker_install_name' 12249 '-dynamic' 12250 '-exported_symbols_list' 12251 '-filelist' 12252 '-flat_namespace' 12253 '-force_flat_namespace' 12254 '-headerpad_max_install_names' 12255 '-image_base' 12256 '-init' 12257 '-install_name' 12258 '-keep_private_externs' 12259 '-multi_module' 12260 '-multiply_defined' 12261 '-multiply_defined_unused' 12262 '-noall_load' 12263 '-no_dead_strip_inits_and_terms' 12264 '-nofixprebinding' 12265 '-nomultidefs' 12266 '-noprebind' 12267 '-noseglinkedit' 12268 '-pagezero_size' 12269 '-prebind' 12270 '-prebind_all_twolevel_modules' 12271 '-private_bundle' 12272 '-read_only_relocs' 12273 '-sectalign' 12274 '-sectobjectsymbols' 12275 '-whyload' 12276 '-seg1addr' 12277 '-sectcreate' 12278 '-sectobjectsymbols' 12279 '-sectorder' 12280 '-segaddr' 12281 '-segs_read_only_addr' 12282 '-segs_read_write_addr' 12283 '-seg_addr_table' 12284 '-seg_addr_table_filename' 12285 '-seglinkedit' 12286 '-segprot' 12287 '-segs_read_only_addr' 12288 '-segs_read_write_addr' 12289 '-single_module' 12290 '-static' 12291 '-sub_library' 12292 '-sub_umbrella' 12293 '-twolevel_namespace' 12294 '-umbrella' 12295 '-undefined' 12296 '-unexported_symbols_list' 12297 '-weak_reference_mismatches' 12298 '-whatsloaded' 12299 These options are passed to the Darwin linker. The Darwin linker 12300 man page describes them in detail. 12301 12302 12303 File: gcc.info, Node: DEC Alpha Options, Next: FR30 Options, Prev: Darwin Options, Up: Submodel Options 12304 12305 3.17.10 DEC Alpha Options 12306 ------------------------- 12307 12308 These '-m' options are defined for the DEC Alpha implementations: 12309 12310 '-mno-soft-float' 12311 '-msoft-float' 12312 Use (do not use) the hardware floating-point instructions for 12313 floating-point operations. When '-msoft-float' is specified, 12314 functions in 'libgcc.a' are used to perform floating-point 12315 operations. Unless they are replaced by routines that emulate the 12316 floating-point operations, or compiled in such a way as to call 12317 such emulations routines, these routines issue floating-point 12318 operations. If you are compiling for an Alpha without 12319 floating-point operations, you must ensure that the library is 12320 built so as not to call them. 12321 12322 Note that Alpha implementations without floating-point operations 12323 are required to have floating-point registers. 12324 12325 '-mfp-reg' 12326 '-mno-fp-regs' 12327 Generate code that uses (does not use) the floating-point register 12328 set. '-mno-fp-regs' implies '-msoft-float'. If the floating-point 12329 register set is not used, floating-point operands are passed in 12330 integer registers as if they were integers and floating-point 12331 results are passed in '$0' instead of '$f0'. This is a 12332 non-standard calling sequence, so any function with a 12333 floating-point argument or return value called by code compiled 12334 with '-mno-fp-regs' must also be compiled with that option. 12335 12336 A typical use of this option is building a kernel that does not 12337 use, and hence need not save and restore, any floating-point 12338 registers. 12339 12340 '-mieee' 12341 The Alpha architecture implements floating-point hardware optimized 12342 for maximum performance. It is mostly compliant with the IEEE 12343 floating-point standard. However, for full compliance, software 12344 assistance is required. This option generates code fully 12345 IEEE-compliant code _except_ that the INEXACT-FLAG is not 12346 maintained (see below). If this option is turned on, the 12347 preprocessor macro '_IEEE_FP' is defined during compilation. The 12348 resulting code is less efficient but is able to correctly support 12349 denormalized numbers and exceptional IEEE values such as 12350 not-a-number and plus/minus infinity. Other Alpha compilers call 12351 this option '-ieee_with_no_inexact'. 12352 12353 '-mieee-with-inexact' 12354 This is like '-mieee' except the generated code also maintains the 12355 IEEE INEXACT-FLAG. Turning on this option causes the generated 12356 code to implement fully-compliant IEEE math. In addition to 12357 '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro. 12358 On some Alpha implementations the resulting code may execute 12359 significantly slower than the code generated by default. Since 12360 there is very little code that depends on the INEXACT-FLAG, you 12361 should normally not specify this option. Other Alpha compilers 12362 call this option '-ieee_with_inexact'. 12363 12364 '-mfp-trap-mode=TRAP-MODE' 12365 This option controls what floating-point related traps are enabled. 12366 Other Alpha compilers call this option '-fptm TRAP-MODE'. The trap 12367 mode can be set to one of four values: 12368 12369 'n' 12370 This is the default (normal) setting. The only traps that are 12371 enabled are the ones that cannot be disabled in software 12372 (e.g., division by zero trap). 12373 12374 'u' 12375 In addition to the traps enabled by 'n', underflow traps are 12376 enabled as well. 12377 12378 'su' 12379 Like 'u', but the instructions are marked to be safe for 12380 software completion (see Alpha architecture manual for 12381 details). 12382 12383 'sui' 12384 Like 'su', but inexact traps are enabled as well. 12385 12386 '-mfp-rounding-mode=ROUNDING-MODE' 12387 Selects the IEEE rounding mode. Other Alpha compilers call this 12388 option '-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 12389 12390 'n' 12391 Normal IEEE rounding mode. Floating-point numbers are rounded 12392 towards the nearest machine number or towards the even machine 12393 number in case of a tie. 12394 12395 'm' 12396 Round towards minus infinity. 12397 12398 'c' 12399 Chopped rounding mode. Floating-point numbers are rounded 12400 towards zero. 12401 12402 'd' 12403 Dynamic rounding mode. A field in the floating-point control 12404 register (FPCR, see Alpha architecture reference manual) 12405 controls the rounding mode in effect. The C library 12406 initializes this register for rounding towards plus infinity. 12407 Thus, unless your program modifies the FPCR, 'd' corresponds 12408 to round towards plus infinity. 12409 12410 '-mtrap-precision=TRAP-PRECISION' 12411 In the Alpha architecture, floating-point traps are imprecise. 12412 This means without software assistance it is impossible to recover 12413 from a floating trap and program execution normally needs to be 12414 terminated. GCC can generate code that can assist operating system 12415 trap handlers in determining the exact location that caused a 12416 floating-point trap. Depending on the requirements of an 12417 application, different levels of precisions can be selected: 12418 12419 'p' 12420 Program precision. This option is the default and means a 12421 trap handler can only identify which program caused a 12422 floating-point exception. 12423 12424 'f' 12425 Function precision. The trap handler can determine the 12426 function that caused a floating-point exception. 12427 12428 'i' 12429 Instruction precision. The trap handler can determine the 12430 exact instruction that caused a floating-point exception. 12431 12432 Other Alpha compilers provide the equivalent options called 12433 '-scope_safe' and '-resumption_safe'. 12434 12435 '-mieee-conformant' 12436 This option marks the generated code as IEEE conformant. You must 12437 not use this option unless you also specify '-mtrap-precision=i' 12438 and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'. Its only 12439 effect is to emit the line '.eflag 48' in the function prologue of 12440 the generated assembly file. 12441 12442 '-mbuild-constants' 12443 Normally GCC examines a 32- or 64-bit integer constant to see if it 12444 can construct it from smaller constants in two or three 12445 instructions. If it cannot, it outputs the constant as a literal 12446 and generates code to load it from the data segment at run time. 12447 12448 Use this option to require GCC to construct _all_ integer constants 12449 using code, even if it takes more instructions (the maximum is 12450 six). 12451 12452 You typically use this option to build a shared library dynamic 12453 loader. Itself a shared library, it must relocate itself in memory 12454 before it can find the variables and constants in its own data 12455 segment. 12456 12457 '-mbwx' 12458 '-mno-bwx' 12459 '-mcix' 12460 '-mno-cix' 12461 '-mfix' 12462 '-mno-fix' 12463 '-mmax' 12464 '-mno-max' 12465 Indicate whether GCC should generate code to use the optional BWX, 12466 CIX, FIX and MAX instruction sets. The default is to use the 12467 instruction sets supported by the CPU type specified via '-mcpu=' 12468 option or that of the CPU on which GCC was built if none is 12469 specified. 12470 12471 '-mfloat-vax' 12472 '-mfloat-ieee' 12473 Generate code that uses (does not use) VAX F and G floating-point 12474 arithmetic instead of IEEE single and double precision. 12475 12476 '-mexplicit-relocs' 12477 '-mno-explicit-relocs' 12478 Older Alpha assemblers provided no way to generate symbol 12479 relocations except via assembler macros. Use of these macros does 12480 not allow optimal instruction scheduling. GNU binutils as of 12481 version 2.12 supports a new syntax that allows the compiler to 12482 explicitly mark which relocations should apply to which 12483 instructions. This option is mostly useful for debugging, as GCC 12484 detects the capabilities of the assembler when it is built and sets 12485 the default accordingly. 12486 12487 '-msmall-data' 12488 '-mlarge-data' 12489 When '-mexplicit-relocs' is in effect, static data is accessed via 12490 "gp-relative" relocations. When '-msmall-data' is used, objects 8 12491 bytes long or smaller are placed in a "small data area" (the 12492 '.sdata' and '.sbss' sections) and are accessed via 16-bit 12493 relocations off of the '$gp' register. This limits the size of the 12494 small data area to 64KB, but allows the variables to be directly 12495 accessed via a single instruction. 12496 12497 The default is '-mlarge-data'. With this option the data area is 12498 limited to just below 2GB. Programs that require more than 2GB of 12499 data must use 'malloc' or 'mmap' to allocate the data in the heap 12500 instead of in the program's data segment. 12501 12502 When generating code for shared libraries, '-fpic' implies 12503 '-msmall-data' and '-fPIC' implies '-mlarge-data'. 12504 12505 '-msmall-text' 12506 '-mlarge-text' 12507 When '-msmall-text' is used, the compiler assumes that the code of 12508 the entire program (or shared library) fits in 4MB, and is thus 12509 reachable with a branch instruction. When '-msmall-data' is used, 12510 the compiler can assume that all local symbols share the same '$gp' 12511 value, and thus reduce the number of instructions required for a 12512 function call from 4 to 1. 12513 12514 The default is '-mlarge-text'. 12515 12516 '-mcpu=CPU_TYPE' 12517 Set the instruction set and instruction scheduling parameters for 12518 machine type CPU_TYPE. You can specify either the 'EV' style name 12519 or the corresponding chip number. GCC supports scheduling 12520 parameters for the EV4, EV5 and EV6 family of processors and 12521 chooses the default values for the instruction set from the 12522 processor you specify. If you do not specify a processor type, GCC 12523 defaults to the processor on which the compiler was built. 12524 12525 Supported values for CPU_TYPE are 12526 12527 'ev4' 12528 'ev45' 12529 '21064' 12530 Schedules as an EV4 and has no instruction set extensions. 12531 12532 'ev5' 12533 '21164' 12534 Schedules as an EV5 and has no instruction set extensions. 12535 12536 'ev56' 12537 '21164a' 12538 Schedules as an EV5 and supports the BWX extension. 12539 12540 'pca56' 12541 '21164pc' 12542 '21164PC' 12543 Schedules as an EV5 and supports the BWX and MAX extensions. 12544 12545 'ev6' 12546 '21264' 12547 Schedules as an EV6 and supports the BWX, FIX, and MAX 12548 extensions. 12549 12550 'ev67' 12551 '21264a' 12552 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 12553 extensions. 12554 12555 Native toolchains also support the value 'native', which selects 12556 the best architecture option for the host processor. 12557 '-mcpu=native' has no effect if GCC does not recognize the 12558 processor. 12559 12560 '-mtune=CPU_TYPE' 12561 Set only the instruction scheduling parameters for machine type 12562 CPU_TYPE. The instruction set is not changed. 12563 12564 Native toolchains also support the value 'native', which selects 12565 the best architecture option for the host processor. 12566 '-mtune=native' has no effect if GCC does not recognize the 12567 processor. 12568 12569 '-mmemory-latency=TIME' 12570 Sets the latency the scheduler should assume for typical memory 12571 references as seen by the application. This number is highly 12572 dependent on the memory access patterns used by the application and 12573 the size of the external cache on the machine. 12574 12575 Valid options for TIME are 12576 12577 'NUMBER' 12578 A decimal number representing clock cycles. 12579 12580 'L1' 12581 'L2' 12582 'L3' 12583 'main' 12584 The compiler contains estimates of the number of clock cycles 12585 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 12586 (also called Dcache, Scache, and Bcache), as well as to main 12587 memory. Note that L3 is only valid for EV5. 12588 12589 12590 File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 12591 12592 3.17.11 FR30 Options 12593 -------------------- 12594 12595 These options are defined specifically for the FR30 port. 12596 12597 '-msmall-model' 12598 Use the small address space model. This can produce smaller code, 12599 but it does assume that all symbolic values and addresses fit into 12600 a 20-bit range. 12601 12602 '-mno-lsim' 12603 Assume that runtime support has been provided and so there is no 12604 need to include the simulator library ('libsim.a') on the linker 12605 command line. 12606 12607 12608 File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 12609 12610 3.17.12 FRV Options 12611 ------------------- 12612 12613 '-mgpr-32' 12614 12615 Only use the first 32 general-purpose registers. 12616 12617 '-mgpr-64' 12618 12619 Use all 64 general-purpose registers. 12620 12621 '-mfpr-32' 12622 12623 Use only the first 32 floating-point registers. 12624 12625 '-mfpr-64' 12626 12627 Use all 64 floating-point registers. 12628 12629 '-mhard-float' 12630 12631 Use hardware instructions for floating-point operations. 12632 12633 '-msoft-float' 12634 12635 Use library routines for floating-point operations. 12636 12637 '-malloc-cc' 12638 12639 Dynamically allocate condition code registers. 12640 12641 '-mfixed-cc' 12642 12643 Do not try to dynamically allocate condition code registers, only 12644 use 'icc0' and 'fcc0'. 12645 12646 '-mdword' 12647 12648 Change ABI to use double word insns. 12649 12650 '-mno-dword' 12651 12652 Do not use double word instructions. 12653 12654 '-mdouble' 12655 12656 Use floating-point double instructions. 12657 12658 '-mno-double' 12659 12660 Do not use floating-point double instructions. 12661 12662 '-mmedia' 12663 12664 Use media instructions. 12665 12666 '-mno-media' 12667 12668 Do not use media instructions. 12669 12670 '-mmuladd' 12671 12672 Use multiply and add/subtract instructions. 12673 12674 '-mno-muladd' 12675 12676 Do not use multiply and add/subtract instructions. 12677 12678 '-mfdpic' 12679 12680 Select the FDPIC ABI, which uses function descriptors to represent 12681 pointers to functions. Without any PIC/PIE-related options, it 12682 implies '-fPIE'. With '-fpic' or '-fpie', it assumes GOT entries 12683 and small data are within a 12-bit range from the GOT base address; 12684 with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits. 12685 With a 'bfin-elf' target, this option implies '-msim'. 12686 12687 '-minline-plt' 12688 12689 Enable inlining of PLT entries in function calls to functions that 12690 are not known to bind locally. It has no effect without '-mfdpic'. 12691 It's enabled by default if optimizing for speed and compiling for 12692 shared libraries (i.e., '-fPIC' or '-fpic'), or when an 12693 optimization option such as '-O3' or above is present in the 12694 command line. 12695 12696 '-mTLS' 12697 12698 Assume a large TLS segment when generating thread-local code. 12699 12700 '-mtls' 12701 12702 Do not assume a large TLS segment when generating thread-local 12703 code. 12704 12705 '-mgprel-ro' 12706 12707 Enable the use of 'GPREL' relocations in the FDPIC ABI for data 12708 that is known to be in read-only sections. It's enabled by 12709 default, except for '-fpic' or '-fpie': even though it may help 12710 make the global offset table smaller, it trades 1 instruction for 12711 4. With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of 12712 which may be shared by multiple symbols, and it avoids the need for 12713 a GOT entry for the referenced symbol, so it's more likely to be a 12714 win. If it is not, '-mno-gprel-ro' can be used to disable it. 12715 12716 '-multilib-library-pic' 12717 12718 Link with the (library, not FD) pic libraries. It's implied by 12719 '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without 12720 '-mfdpic'. You should never have to use it explicitly. 12721 12722 '-mlinked-fp' 12723 12724 Follow the EABI requirement of always creating a frame pointer 12725 whenever a stack frame is allocated. This option is enabled by 12726 default and can be disabled with '-mno-linked-fp'. 12727 12728 '-mlong-calls' 12729 12730 Use indirect addressing to call functions outside the current 12731 compilation unit. This allows the functions to be placed anywhere 12732 within the 32-bit address space. 12733 12734 '-malign-labels' 12735 12736 Try to align labels to an 8-byte boundary by inserting NOPs into 12737 the previous packet. This option only has an effect when VLIW 12738 packing is enabled. It doesn't create new packets; it merely adds 12739 NOPs to existing ones. 12740 12741 '-mlibrary-pic' 12742 12743 Generate position-independent EABI code. 12744 12745 '-macc-4' 12746 12747 Use only the first four media accumulator registers. 12748 12749 '-macc-8' 12750 12751 Use all eight media accumulator registers. 12752 12753 '-mpack' 12754 12755 Pack VLIW instructions. 12756 12757 '-mno-pack' 12758 12759 Do not pack VLIW instructions. 12760 12761 '-mno-eflags' 12762 12763 Do not mark ABI switches in e_flags. 12764 12765 '-mcond-move' 12766 12767 Enable the use of conditional-move instructions (default). 12768 12769 This switch is mainly for debugging the compiler and will likely be 12770 removed in a future version. 12771 12772 '-mno-cond-move' 12773 12774 Disable the use of conditional-move instructions. 12775 12776 This switch is mainly for debugging the compiler and will likely be 12777 removed in a future version. 12778 12779 '-mscc' 12780 12781 Enable the use of conditional set instructions (default). 12782 12783 This switch is mainly for debugging the compiler and will likely be 12784 removed in a future version. 12785 12786 '-mno-scc' 12787 12788 Disable the use of conditional set instructions. 12789 12790 This switch is mainly for debugging the compiler and will likely be 12791 removed in a future version. 12792 12793 '-mcond-exec' 12794 12795 Enable the use of conditional execution (default). 12796 12797 This switch is mainly for debugging the compiler and will likely be 12798 removed in a future version. 12799 12800 '-mno-cond-exec' 12801 12802 Disable the use of conditional execution. 12803 12804 This switch is mainly for debugging the compiler and will likely be 12805 removed in a future version. 12806 12807 '-mvliw-branch' 12808 12809 Run a pass to pack branches into VLIW instructions (default). 12810 12811 This switch is mainly for debugging the compiler and will likely be 12812 removed in a future version. 12813 12814 '-mno-vliw-branch' 12815 12816 Do not run a pass to pack branches into VLIW instructions. 12817 12818 This switch is mainly for debugging the compiler and will likely be 12819 removed in a future version. 12820 12821 '-mmulti-cond-exec' 12822 12823 Enable optimization of '&&' and '||' in conditional execution 12824 (default). 12825 12826 This switch is mainly for debugging the compiler and will likely be 12827 removed in a future version. 12828 12829 '-mno-multi-cond-exec' 12830 12831 Disable optimization of '&&' and '||' in conditional execution. 12832 12833 This switch is mainly for debugging the compiler and will likely be 12834 removed in a future version. 12835 12836 '-mnested-cond-exec' 12837 12838 Enable nested conditional execution optimizations (default). 12839 12840 This switch is mainly for debugging the compiler and will likely be 12841 removed in a future version. 12842 12843 '-mno-nested-cond-exec' 12844 12845 Disable nested conditional execution optimizations. 12846 12847 This switch is mainly for debugging the compiler and will likely be 12848 removed in a future version. 12849 12850 '-moptimize-membar' 12851 12852 This switch removes redundant 'membar' instructions from the 12853 compiler-generated code. It is enabled by default. 12854 12855 '-mno-optimize-membar' 12856 12857 This switch disables the automatic removal of redundant 'membar' 12858 instructions from the generated code. 12859 12860 '-mtomcat-stats' 12861 12862 Cause gas to print out tomcat statistics. 12863 12864 '-mcpu=CPU' 12865 12866 Select the processor type for which to generate code. Possible 12867 values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405', 12868 'fr400', 'fr300' and 'simple'. 12869 12870 12871 File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 12872 12873 3.17.13 GNU/Linux Options 12874 ------------------------- 12875 12876 These '-m' options are defined for GNU/Linux targets: 12877 12878 '-mglibc' 12879 Use the GNU C library. This is the default except on 12880 '*-*-linux-*uclibc*' and '*-*-linux-*android*' targets. 12881 12882 '-muclibc' 12883 Use uClibc C library. This is the default on '*-*-linux-*uclibc*' 12884 targets. 12885 12886 '-mbionic' 12887 Use Bionic C library. This is the default on '*-*-linux-*android*' 12888 targets. 12889 12890 '-mandroid' 12891 Compile code compatible with Android platform. This is the default 12892 on '*-*-linux-*android*' targets. 12893 12894 When compiling, this option enables '-mbionic', '-fPIC', 12895 '-fno-exceptions' and '-fno-rtti' by default. When linking, this 12896 option makes the GCC driver pass Android-specific options to the 12897 linker. Finally, this option causes the preprocessor macro 12898 '__ANDROID__' to be defined. 12899 12900 '-tno-android-cc' 12901 Disable compilation effects of '-mandroid', i.e., do not enable 12902 '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default. 12903 12904 '-tno-android-ld' 12905 Disable linking effects of '-mandroid', i.e., pass standard Linux 12906 linking options to the linker. 12907 12908 12909 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 12910 12911 3.17.14 H8/300 Options 12912 ---------------------- 12913 12914 These '-m' options are defined for the H8/300 implementations: 12915 12916 '-mrelax' 12917 Shorten some address references at link time, when possible; uses 12918 the linker option '-relax'. *Note 'ld' and the H8/300: (ld)H8/300, 12919 for a fuller description. 12920 12921 '-mh' 12922 Generate code for the H8/300H. 12923 12924 '-ms' 12925 Generate code for the H8S. 12926 12927 '-mn' 12928 Generate code for the H8S and H8/300H in the normal mode. This 12929 switch must be used either with '-mh' or '-ms'. 12930 12931 '-ms2600' 12932 Generate code for the H8S/2600. This switch must be used with 12933 '-ms'. 12934 12935 '-mexr' 12936 Extended registers are stored on stack before execution of function 12937 with monitor attribute. Default option is '-mexr'. This option is 12938 valid only for H8S targets. 12939 12940 '-mno-exr' 12941 Extended registers are not stored on stack before execution of 12942 function with monitor attribute. Default option is '-mno-exr'. 12943 This option is valid only for H8S targets. 12944 12945 '-mint32' 12946 Make 'int' data 32 bits by default. 12947 12948 '-malign-300' 12949 On the H8/300H and H8S, use the same alignment rules as for the 12950 H8/300. The default for the H8/300H and H8S is to align longs and 12951 floats on 4-byte boundaries. '-malign-300' causes them to be 12952 aligned on 2-byte boundaries. This option has no effect on the 12953 H8/300. 12954 12955 12956 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 12957 12958 3.17.15 HPPA Options 12959 -------------------- 12960 12961 These '-m' options are defined for the HPPA family of computers: 12962 12963 '-march=ARCHITECTURE-TYPE' 12964 Generate code for the specified architecture. The choices for 12965 ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0' 12966 for PA 2.0 processors. Refer to '/usr/lib/sched.models' on an 12967 HP-UX system to determine the proper architecture option for your 12968 machine. Code compiled for lower numbered architectures runs on 12969 higher numbered architectures, but not the other way around. 12970 12971 '-mpa-risc-1-0' 12972 '-mpa-risc-1-1' 12973 '-mpa-risc-2-0' 12974 Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0' 12975 respectively. 12976 12977 '-mbig-switch' 12978 Generate code suitable for big switch tables. Use this option only 12979 if the assembler/linker complain about out-of-range branches within 12980 a switch table. 12981 12982 '-mjump-in-delay' 12983 Fill delay slots of function calls with unconditional jump 12984 instructions by modifying the return pointer for the function call 12985 to be the target of the conditional jump. 12986 12987 '-mdisable-fpregs' 12988 Prevent floating-point registers from being used in any manner. 12989 This is necessary for compiling kernels that perform lazy context 12990 switching of floating-point registers. If you use this option and 12991 attempt to perform floating-point operations, the compiler aborts. 12992 12993 '-mdisable-indexing' 12994 Prevent the compiler from using indexing address modes. This 12995 avoids some rather obscure problems when compiling MIG generated 12996 code under MACH. 12997 12998 '-mno-space-regs' 12999 Generate code that assumes the target has no space registers. This 13000 allows GCC to generate faster indirect calls and use unscaled index 13001 address modes. 13002 13003 Such code is suitable for level 0 PA systems and kernels. 13004 13005 '-mfast-indirect-calls' 13006 Generate code that assumes calls never cross space boundaries. 13007 This allows GCC to emit code that performs faster indirect calls. 13008 13009 This option does not work in the presence of shared libraries or 13010 nested functions. 13011 13012 '-mfixed-range=REGISTER-RANGE' 13013 Generate code treating the given register range as fixed registers. 13014 A fixed register is one that the register allocator cannot use. 13015 This is useful when compiling kernel code. A register range is 13016 specified as two registers separated by a dash. Multiple register 13017 ranges can be specified separated by a comma. 13018 13019 '-mlong-load-store' 13020 Generate 3-instruction load and store sequences as sometimes 13021 required by the HP-UX 10 linker. This is equivalent to the '+k' 13022 option to the HP compilers. 13023 13024 '-mportable-runtime' 13025 Use the portable calling conventions proposed by HP for ELF 13026 systems. 13027 13028 '-mgas' 13029 Enable the use of assembler directives only GAS understands. 13030 13031 '-mschedule=CPU-TYPE' 13032 Schedule code according to the constraints for the machine type 13033 CPU-TYPE. The choices for CPU-TYPE are '700' '7100', '7100LC', 13034 '7200', '7300' and '8000'. Refer to '/usr/lib/sched.models' on an 13035 HP-UX system to determine the proper scheduling option for your 13036 machine. The default scheduling is '8000'. 13037 13038 '-mlinker-opt' 13039 Enable the optimization pass in the HP-UX linker. Note this makes 13040 symbolic debugging impossible. It also triggers a bug in the HP-UX 13041 8 and HP-UX 9 linkers in which they give bogus error messages when 13042 linking some programs. 13043 13044 '-msoft-float' 13045 Generate output containing library calls for floating point. 13046 *Warning:* the requisite libraries are not available for all HPPA 13047 targets. Normally the facilities of the machine's usual C compiler 13048 are used, but this cannot be done directly in cross-compilation. 13049 You must make your own arrangements to provide suitable library 13050 functions for cross-compilation. 13051 13052 '-msoft-float' changes the calling convention in the output file; 13053 therefore, it is only useful if you compile _all_ of a program with 13054 this option. In particular, you need to compile 'libgcc.a', the 13055 library that comes with GCC, with '-msoft-float' in order for this 13056 to work. 13057 13058 '-msio' 13059 Generate the predefine, '_SIO', for server IO. The default is 13060 '-mwsio'. This generates the predefines, '__hp9000s700', 13061 '__hp9000s700__' and '_WSIO', for workstation IO. These options 13062 are available under HP-UX and HI-UX. 13063 13064 '-mgnu-ld' 13065 Use options specific to GNU 'ld'. This passes '-shared' to 'ld' 13066 when building a shared library. It is the default when GCC is 13067 configured, explicitly or implicitly, with the GNU linker. This 13068 option does not affect which 'ld' is called; it only changes what 13069 parameters are passed to that 'ld'. The 'ld' that is called is 13070 determined by the '--with-ld' configure option, GCC's program 13071 search path, and finally by the user's 'PATH'. The linker used by 13072 GCC can be printed using 'which `gcc -print-prog-name=ld`'. This 13073 option is only available on the 64-bit HP-UX GCC, i.e. configured 13074 with 'hppa*64*-*-hpux*'. 13075 13076 '-mhp-ld' 13077 Use options specific to HP 'ld'. This passes '-b' to 'ld' when 13078 building a shared library and passes '+Accept TypeMismatch' to 'ld' 13079 on all links. It is the default when GCC is configured, explicitly 13080 or implicitly, with the HP linker. This option does not affect 13081 which 'ld' is called; it only changes what parameters are passed to 13082 that 'ld'. The 'ld' that is called is determined by the 13083 '--with-ld' configure option, GCC's program search path, and 13084 finally by the user's 'PATH'. The linker used by GCC can be 13085 printed using 'which `gcc -print-prog-name=ld`'. This option is 13086 only available on the 64-bit HP-UX GCC, i.e. configured with 13087 'hppa*64*-*-hpux*'. 13088 13089 '-mlong-calls' 13090 Generate code that uses long call sequences. This ensures that a 13091 call is always able to reach linker generated stubs. The default 13092 is to generate long calls only when the distance from the call site 13093 to the beginning of the function or translation unit, as the case 13094 may be, exceeds a predefined limit set by the branch type being 13095 used. The limits for normal calls are 7,600,000 and 240,000 bytes, 13096 respectively for the PA 2.0 and PA 1.X architectures. Sibcalls are 13097 always limited at 240,000 bytes. 13098 13099 Distances are measured from the beginning of functions when using 13100 the '-ffunction-sections' option, or when using the '-mgas' and 13101 '-mno-portable-runtime' options together under HP-UX with the SOM 13102 linker. 13103 13104 It is normally not desirable to use this option as it degrades 13105 performance. However, it may be useful in large applications, 13106 particularly when partial linking is used to build the application. 13107 13108 The types of long calls used depends on the capabilities of the 13109 assembler and linker, and the type of code being generated. The 13110 impact on systems that support long absolute calls, and long pic 13111 symbol-difference or pc-relative calls should be relatively small. 13112 However, an indirect call is used on 32-bit ELF systems in pic code 13113 and it is quite long. 13114 13115 '-munix=UNIX-STD' 13116 Generate compiler predefines and select a startfile for the 13117 specified UNIX standard. The choices for UNIX-STD are '93', '95' 13118 and '98'. '93' is supported on all HP-UX versions. '95' is 13119 available on HP-UX 10.10 and later. '98' is available on HP-UX 13120 11.11 and later. The default values are '93' for HP-UX 10.00, '95' 13121 for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and 13122 later. 13123 13124 '-munix=93' provides the same predefines as GCC 3.3 and 3.4. 13125 '-munix=95' provides additional predefines for 'XOPEN_UNIX' and 13126 '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'. 13127 '-munix=98' provides additional predefines for '_XOPEN_UNIX', 13128 '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and 13129 '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'. 13130 13131 It is _important_ to note that this option changes the interfaces 13132 for various library routines. It also affects the operational 13133 behavior of the C library. Thus, _extreme_ care is needed in using 13134 this option. 13135 13136 Library code that is intended to operate with more than one UNIX 13137 standard must test, set and restore the variable 13138 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 13139 provide this capability. 13140 13141 '-nolibdld' 13142 Suppress the generation of link options to search libdld.sl when 13143 the '-static' option is specified on HP-UX 10 and later. 13144 13145 '-static' 13146 The HP-UX implementation of setlocale in libc has a dependency on 13147 libdld.sl. There isn't an archive version of libdld.sl. Thus, 13148 when the '-static' option is specified, special link options are 13149 needed to resolve this dependency. 13150 13151 On HP-UX 10 and later, the GCC driver adds the necessary options to 13152 link with libdld.sl when the '-static' option is specified. This 13153 causes the resulting binary to be dynamic. On the 64-bit port, the 13154 linkers generate dynamic binaries by default in any case. The 13155 '-nolibdld' option can be used to prevent the GCC driver from 13156 adding these link options. 13157 13158 '-threads' 13159 Add support for multithreading with the "dce thread" library under 13160 HP-UX. This option sets flags for both the preprocessor and 13161 linker. 13162 13163 13164 File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 13165 13166 3.17.16 Intel 386 and AMD x86-64 Options 13167 ---------------------------------------- 13168 13169 These '-m' options are defined for the i386 and x86-64 family of 13170 computers: 13171 13172 '-march=CPU-TYPE' 13173 Generate instructions for the machine type CPU-TYPE. In contrast 13174 to '-mtune=CPU-TYPE', which merely tunes the generated code for the 13175 specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code 13176 that may not run at all on processors other than the one indicated. 13177 Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'. 13178 13179 The choices for CPU-TYPE are: 13180 13181 'native' 13182 This selects the CPU to generate code for at compilation time 13183 by determining the processor type of the compiling machine. 13184 Using '-march=native' enables all instruction subsets 13185 supported by the local machine (hence the result might not run 13186 on different machines). Using '-mtune=native' produces code 13187 optimized for the local machine under the constraints of the 13188 selected instruction set. 13189 13190 'i386' 13191 Original Intel i386 CPU. 13192 13193 'i486' 13194 Intel i486 CPU. (No scheduling is implemented for this chip.) 13195 13196 'i586' 13197 'pentium' 13198 Intel Pentium CPU with no MMX support. 13199 13200 'pentium-mmx' 13201 Intel Pentium MMX CPU, based on Pentium core with MMX 13202 instruction set support. 13203 13204 'pentiumpro' 13205 Intel Pentium Pro CPU. 13206 13207 'i686' 13208 When used with '-march', the Pentium Pro instruction set is 13209 used, so the code runs on all i686 family chips. When used 13210 with '-mtune', it has the same meaning as 'generic'. 13211 13212 'pentium2' 13213 Intel Pentium II CPU, based on Pentium Pro core with MMX 13214 instruction set support. 13215 13216 'pentium3' 13217 'pentium3m' 13218 Intel Pentium III CPU, based on Pentium Pro core with MMX and 13219 SSE instruction set support. 13220 13221 'pentium-m' 13222 Intel Pentium M; low-power version of Intel Pentium III CPU 13223 with MMX, SSE and SSE2 instruction set support. Used by 13224 Centrino notebooks. 13225 13226 'pentium4' 13227 'pentium4m' 13228 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set 13229 support. 13230 13231 'prescott' 13232 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 13233 and SSE3 instruction set support. 13234 13235 'nocona' 13236 Improved version of Intel Pentium 4 CPU with 64-bit 13237 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 13238 13239 'core2' 13240 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 13241 and SSSE3 instruction set support. 13242 13243 'corei7' 13244 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 13245 SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support. 13246 13247 'corei7-avx' 13248 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, 13249 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction 13250 set support. 13251 13252 'core-avx-i' 13253 Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, 13254 SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and 13255 F16C instruction set support. 13256 13257 'core-avx2' 13258 Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, 13259 SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE, 13260 RDRND, FMA, BMI, BMI2 and F16C instruction set support. 13261 13262 'atom' 13263 Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, 13264 SSE3 and SSSE3 instruction set support. 13265 13266 'k6' 13267 AMD K6 CPU with MMX instruction set support. 13268 13269 'k6-2' 13270 'k6-3' 13271 Improved versions of AMD K6 CPU with MMX and 3DNow! 13272 instruction set support. 13273 13274 'athlon' 13275 'athlon-tbird' 13276 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 13277 prefetch instructions support. 13278 13279 'athlon-4' 13280 'athlon-xp' 13281 'athlon-mp' 13282 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 13283 full SSE instruction set support. 13284 13285 'k8' 13286 'opteron' 13287 'athlon64' 13288 'athlon-fx' 13289 Processors based on the AMD K8 core with x86-64 instruction 13290 set support, including the AMD Opteron, Athlon 64, and Athlon 13291 64 FX processors. (This supersets MMX, SSE, SSE2, 3DNow!, 13292 enhanced 3DNow! and 64-bit instruction set extensions.) 13293 13294 'k8-sse3' 13295 'opteron-sse3' 13296 'athlon64-sse3' 13297 Improved versions of AMD K8 cores with SSE3 instruction set 13298 support. 13299 13300 'amdfam10' 13301 'barcelona' 13302 CPUs based on AMD Family 10h cores with x86-64 instruction set 13303 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, 13304 enhanced 3DNow!, ABM and 64-bit instruction set extensions.) 13305 13306 'bdver1' 13307 CPUs based on AMD Family 15h cores with x86-64 instruction set 13308 support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, 13309 CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM 13310 and 64-bit instruction set extensions.) 13311 'bdver2' 13312 AMD Family 15h core based CPUs with x86-64 instruction set 13313 support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, 13314 AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, 13315 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.) 13316 'bdver3' 13317 AMD Family 15h core based CPUs with x86-64 instruction set 13318 support. (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, 13319 AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, 13320 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions. 13321 13322 'btver1' 13323 CPUs based on AMD Family 14h cores with x86-64 instruction set 13324 support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, 13325 CX16, ABM and 64-bit instruction set extensions.) 13326 13327 'btver2' 13328 CPUs based on AMD Family 16h cores with x86-64 instruction set 13329 support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, 13330 SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX 13331 and 64-bit instruction set extensions. 13332 13333 'winchip-c6' 13334 IDT WinChip C6 CPU, dealt in same way as i486 with additional 13335 MMX instruction set support. 13336 13337 'winchip2' 13338 IDT WinChip 2 CPU, dealt in same way as i486 with additional 13339 MMX and 3DNow! instruction set support. 13340 13341 'c3' 13342 VIA C3 CPU with MMX and 3DNow! instruction set support. (No 13343 scheduling is implemented for this chip.) 13344 13345 'c3-2' 13346 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set 13347 support. (No scheduling is implemented for this chip.) 13348 13349 'geode' 13350 AMD Geode embedded processor with MMX and 3DNow! instruction 13351 set support. 13352 13353 '-mtune=CPU-TYPE' 13354 Tune to CPU-TYPE everything applicable about the generated code, 13355 except for the ABI and the set of available instructions. While 13356 picking a specific CPU-TYPE schedules things appropriately for that 13357 particular chip, the compiler does not generate any code that 13358 cannot run on the default machine type unless you use a 13359 '-march=CPU-TYPE' option. For example, if GCC is configured for 13360 i686-pc-linux-gnu then '-mtune=pentium4' generates code that is 13361 tuned for Pentium 4 but still runs on i686 machines. 13362 13363 The choices for CPU-TYPE are the same as for '-march'. In 13364 addition, '-mtune' supports an extra choice for CPU-TYPE: 13365 13366 'generic' 13367 Produce code optimized for the most common IA32/AMD64/EM64T 13368 processors. If you know the CPU on which your code will run, 13369 then you should use the corresponding '-mtune' or '-march' 13370 option instead of '-mtune=generic'. But, if you do not know 13371 exactly what CPU users of your application will have, then you 13372 should use this option. 13373 13374 As new processors are deployed in the marketplace, the 13375 behavior of this option will change. Therefore, if you 13376 upgrade to a newer version of GCC, code generation controlled 13377 by this option will change to reflect the processors that are 13378 most common at the time that version of GCC is released. 13379 13380 There is no '-march=generic' option because '-march' indicates 13381 the instruction set the compiler can use, and there is no 13382 generic instruction set applicable to all processors. In 13383 contrast, '-mtune' indicates the processor (or, in this case, 13384 collection of processors) for which the code is optimized. 13385 13386 '-mcpu=CPU-TYPE' 13387 A deprecated synonym for '-mtune'. 13388 13389 '-mfpmath=UNIT' 13390 Generate floating-point arithmetic for selected unit UNIT. The 13391 choices for UNIT are: 13392 13393 '387' 13394 Use the standard 387 floating-point coprocessor present on the 13395 majority of chips and emulated otherwise. Code compiled with 13396 this option runs almost everywhere. The temporary results are 13397 computed in 80-bit precision instead of the precision 13398 specified by the type, resulting in slightly different results 13399 compared to most of other chips. See '-ffloat-store' for more 13400 detailed description. 13401 13402 This is the default choice for i386 compiler. 13403 13404 'sse' 13405 Use scalar floating-point instructions present in the SSE 13406 instruction set. This instruction set is supported by Pentium 13407 III and newer chips, and in the AMD line by Athlon-4, Athlon 13408 XP and Athlon MP chips. The earlier version of the SSE 13409 instruction set supports only single-precision arithmetic, 13410 thus the double and extended-precision arithmetic are still 13411 done using 387. A later version, present only in Pentium 4 13412 and AMD x86-64 chips, supports double-precision arithmetic 13413 too. 13414 13415 For the i386 compiler, you must use '-march=CPU-TYPE', '-msse' 13416 or '-msse2' switches to enable SSE extensions and make this 13417 option effective. For the x86-64 compiler, these extensions 13418 are enabled by default. 13419 13420 The resulting code should be considerably faster in the 13421 majority of cases and avoid the numerical instability problems 13422 of 387 code, but may break some existing code that expects 13423 temporaries to be 80 bits. 13424 13425 This is the default choice for the x86-64 compiler. 13426 13427 'sse,387' 13428 'sse+387' 13429 'both' 13430 Attempt to utilize both instruction sets at once. This 13431 effectively doubles the amount of available registers, and on 13432 chips with separate execution units for 387 and SSE the 13433 execution resources too. Use this option with care, as it is 13434 still experimental, because the GCC register allocator does 13435 not model separate functional units well, resulting in 13436 unstable performance. 13437 13438 '-masm=DIALECT' 13439 Output assembly instructions using selected DIALECT. Supported 13440 choices are 'intel' or 'att' (the default). Darwin does not 13441 support 'intel'. 13442 13443 '-mieee-fp' 13444 '-mno-ieee-fp' 13445 Control whether or not the compiler uses IEEE floating-point 13446 comparisons. These correctly handle the case where the result of a 13447 comparison is unordered. 13448 13449 '-msoft-float' 13450 Generate output containing library calls for floating point. 13451 13452 *Warning:* the requisite libraries are not part of GCC. Normally 13453 the facilities of the machine's usual C compiler are used, but this 13454 can't be done directly in cross-compilation. You must make your 13455 own arrangements to provide suitable library functions for 13456 cross-compilation. 13457 13458 On machines where a function returns floating-point results in the 13459 80387 register stack, some floating-point opcodes may be emitted 13460 even if '-msoft-float' is used. 13461 13462 '-mno-fp-ret-in-387' 13463 Do not use the FPU registers for return values of functions. 13464 13465 The usual calling convention has functions return values of types 13466 'float' and 'double' in an FPU register, even if there is no FPU. 13467 The idea is that the operating system should emulate an FPU. 13468 13469 The option '-mno-fp-ret-in-387' causes such values to be returned 13470 in ordinary CPU registers instead. 13471 13472 '-mno-fancy-math-387' 13473 Some 387 emulators do not support the 'sin', 'cos' and 'sqrt' 13474 instructions for the 387. Specify this option to avoid generating 13475 those instructions. This option is the default on FreeBSD, OpenBSD 13476 and NetBSD. This option is overridden when '-march' indicates that 13477 the target CPU always has an FPU and so the instruction does not 13478 need emulation. These instructions are not generated unless you 13479 also use the '-funsafe-math-optimizations' switch. 13480 13481 '-malign-double' 13482 '-mno-align-double' 13483 Control whether GCC aligns 'double', 'long double', and 'long long' 13484 variables on a two-word boundary or a one-word boundary. Aligning 13485 'double' variables on a two-word boundary produces code that runs 13486 somewhat faster on a Pentium at the expense of more memory. 13487 13488 On x86-64, '-malign-double' is enabled by default. 13489 13490 *Warning:* if you use the '-malign-double' switch, structures 13491 containing the above types are aligned differently than the 13492 published application binary interface specifications for the 386 13493 and are not binary compatible with structures in code compiled 13494 without that switch. 13495 13496 '-m96bit-long-double' 13497 '-m128bit-long-double' 13498 These switches control the size of 'long double' type. The i386 13499 application binary interface specifies the size to be 96 bits, so 13500 '-m96bit-long-double' is the default in 32-bit mode. 13501 13502 Modern architectures (Pentium and newer) prefer 'long double' to be 13503 aligned to an 8- or 16-byte boundary. In arrays or structures 13504 conforming to the ABI, this is not possible. So specifying 13505 '-m128bit-long-double' aligns 'long double' to a 16-byte boundary 13506 by padding the 'long double' with an additional 32-bit zero. 13507 13508 In the x86-64 compiler, '-m128bit-long-double' is the default 13509 choice as its ABI specifies that 'long double' is aligned on 13510 16-byte boundary. 13511 13512 Notice that neither of these options enable any extra precision 13513 over the x87 standard of 80 bits for a 'long double'. 13514 13515 *Warning:* if you override the default value for your target ABI, 13516 this changes the size of structures and arrays containing 'long 13517 double' variables, as well as modifying the function calling 13518 convention for functions taking 'long double'. Hence they are not 13519 binary-compatible with code compiled without that switch. 13520 13521 '-mlong-double-64' 13522 '-mlong-double-80' 13523 These switches control the size of 'long double' type. A size of 13524 64 bits makes the 'long double' type equivalent to the 'double' 13525 type. This is the default for Bionic C library. 13526 13527 *Warning:* if you override the default value for your target ABI, 13528 this changes the size of structures and arrays containing 'long 13529 double' variables, as well as modifying the function calling 13530 convention for functions taking 'long double'. Hence they are not 13531 binary-compatible with code compiled without that switch. 13532 13533 '-mlarge-data-threshold=THRESHOLD' 13534 When '-mcmodel=medium' is specified, data objects larger than 13535 THRESHOLD are placed in the large data section. This value must be 13536 the same across all objects linked into the binary, and defaults to 13537 65535. 13538 13539 '-mrtd' 13540 Use a different function-calling convention, in which functions 13541 that take a fixed number of arguments return with the 'ret NUM' 13542 instruction, which pops their arguments while returning. This 13543 saves one instruction in the caller since there is no need to pop 13544 the arguments there. 13545 13546 You can specify that an individual function is called with this 13547 calling sequence with the function attribute 'stdcall'. You can 13548 also override the '-mrtd' option by using the function attribute 13549 'cdecl'. *Note Function Attributes::. 13550 13551 *Warning:* this calling convention is incompatible with the one 13552 normally used on Unix, so you cannot use it if you need to call 13553 libraries compiled with the Unix compiler. 13554 13555 Also, you must provide function prototypes for all functions that 13556 take variable numbers of arguments (including 'printf'); otherwise 13557 incorrect code is generated for calls to those functions. 13558 13559 In addition, seriously incorrect code results if you call a 13560 function with too many arguments. (Normally, extra arguments are 13561 harmlessly ignored.) 13562 13563 '-mregparm=NUM' 13564 Control how many registers are used to pass integer arguments. By 13565 default, no registers are used to pass arguments, and at most 3 13566 registers can be used. You can control this behavior for a 13567 specific function by using the function attribute 'regparm'. *Note 13568 Function Attributes::. 13569 13570 *Warning:* if you use this switch, and NUM is nonzero, then you 13571 must build all modules with the same value, including any 13572 libraries. This includes the system libraries and startup modules. 13573 13574 '-msseregparm' 13575 Use SSE register passing conventions for float and double arguments 13576 and return values. You can control this behavior for a specific 13577 function by using the function attribute 'sseregparm'. *Note 13578 Function Attributes::. 13579 13580 *Warning:* if you use this switch then you must build all modules 13581 with the same value, including any libraries. This includes the 13582 system libraries and startup modules. 13583 13584 '-mvect8-ret-in-mem' 13585 Return 8-byte vectors in memory instead of MMX registers. This is 13586 the default on Solaris 8 and 9 and VxWorks to match the ABI of the 13587 Sun Studio compilers until version 12. Later compiler versions 13588 (starting with Studio 12 Update 1) follow the ABI used by other x86 13589 targets, which is the default on Solaris 10 and later. _Only_ use 13590 this option if you need to remain compatible with existing code 13591 produced by those previous compiler versions or older versions of 13592 GCC. 13593 13594 '-mpc32' 13595 '-mpc64' 13596 '-mpc80' 13597 13598 Set 80387 floating-point precision to 32, 64 or 80 bits. When 13599 '-mpc32' is specified, the significands of results of 13600 floating-point operations are rounded to 24 bits (single 13601 precision); '-mpc64' rounds the significands of results of 13602 floating-point operations to 53 bits (double precision) and 13603 '-mpc80' rounds the significands of results of floating-point 13604 operations to 64 bits (extended double precision), which is the 13605 default. When this option is used, floating-point operations in 13606 higher precisions are not available to the programmer without 13607 setting the FPU control word explicitly. 13608 13609 Setting the rounding of floating-point operations to less than the 13610 default 80 bits can speed some programs by 2% or more. Note that 13611 some mathematical libraries assume that extended-precision (80-bit) 13612 floating-point operations are enabled by default; routines in such 13613 libraries could suffer significant loss of accuracy, typically 13614 through so-called "catastrophic cancellation", when this option is 13615 used to set the precision to less than extended precision. 13616 13617 '-mstackrealign' 13618 Realign the stack at entry. On the Intel x86, the '-mstackrealign' 13619 option generates an alternate prologue and epilogue that realigns 13620 the run-time stack if necessary. This supports mixing legacy codes 13621 that keep 4-byte stack alignment with modern codes that keep 13622 16-byte stack alignment for SSE compatibility. See also the 13623 attribute 'force_align_arg_pointer', applicable to individual 13624 functions. 13625 13626 '-mpreferred-stack-boundary=NUM' 13627 Attempt to keep the stack boundary aligned to a 2 raised to NUM 13628 byte boundary. If '-mpreferred-stack-boundary' is not specified, 13629 the default is 4 (16 bytes or 128 bits). 13630 13631 *Warning:* When generating code for the x86-64 architecture with 13632 SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used 13633 to keep the stack boundary aligned to 8 byte boundary. Since 13634 x86-64 ABI require 16 byte stack alignment, this is ABI 13635 incompatible and intended to be used in controlled environment 13636 where stack space is important limitation. This option will lead 13637 to wrong code when functions compiled with 16 byte stack alignment 13638 (such as functions from a standard library) are called with 13639 misaligned stack. In this case, SSE instructions may lead to 13640 misaligned memory access traps. In addition, variable arguments 13641 will be handled incorrectly for 16 byte aligned objects (including 13642 x87 long double and __int128), leading to wrong results. You must 13643 build all modules with '-mpreferred-stack-boundary=3', including 13644 any libraries. This includes the system libraries and startup 13645 modules. 13646 13647 '-mincoming-stack-boundary=NUM' 13648 Assume the incoming stack is aligned to a 2 raised to NUM byte 13649 boundary. If '-mincoming-stack-boundary' is not specified, the one 13650 specified by '-mpreferred-stack-boundary' is used. 13651 13652 On Pentium and Pentium Pro, 'double' and 'long double' values 13653 should be aligned to an 8-byte boundary (see '-malign-double') or 13654 suffer significant run time performance penalties. On Pentium III, 13655 the Streaming SIMD Extension (SSE) data type '__m128' may not work 13656 properly if it is not 16-byte aligned. 13657 13658 To ensure proper alignment of this values on the stack, the stack 13659 boundary must be as aligned as that required by any value stored on 13660 the stack. Further, every function must be generated such that it 13661 keeps the stack aligned. Thus calling a function compiled with a 13662 higher preferred stack boundary from a function compiled with a 13663 lower preferred stack boundary most likely misaligns the stack. It 13664 is recommended that libraries that use callbacks always use the 13665 default setting. 13666 13667 This extra alignment does consume extra stack space, and generally 13668 increases code size. Code that is sensitive to stack space usage, 13669 such as embedded systems and operating system kernels, may want to 13670 reduce the preferred alignment to '-mpreferred-stack-boundary=2'. 13671 13672 '-mmmx' 13673 '-mno-mmx' 13674 '-msse' 13675 '-mno-sse' 13676 '-msse2' 13677 '-mno-sse2' 13678 '-msse3' 13679 '-mno-sse3' 13680 '-mssse3' 13681 '-mno-ssse3' 13682 '-msse4.1' 13683 '-mno-sse4.1' 13684 '-msse4.2' 13685 '-mno-sse4.2' 13686 '-msse4' 13687 '-mno-sse4' 13688 '-mavx' 13689 '-mno-avx' 13690 '-mavx2' 13691 '-mno-avx2' 13692 '-maes' 13693 '-mno-aes' 13694 '-mpclmul' 13695 '-mno-pclmul' 13696 '-mfsgsbase' 13697 '-mno-fsgsbase' 13698 '-mrdrnd' 13699 '-mno-rdrnd' 13700 '-mf16c' 13701 '-mno-f16c' 13702 '-mfma' 13703 '-mno-fma' 13704 '-msse4a' 13705 '-mno-sse4a' 13706 '-mfma4' 13707 '-mno-fma4' 13708 '-mxop' 13709 '-mno-xop' 13710 '-mlwp' 13711 '-mno-lwp' 13712 '-m3dnow' 13713 '-mno-3dnow' 13714 '-mpopcnt' 13715 '-mno-popcnt' 13716 '-mabm' 13717 '-mno-abm' 13718 '-mbmi' 13719 '-mbmi2' 13720 '-mno-bmi' 13721 '-mno-bmi2' 13722 '-mlzcnt' 13723 '-mno-lzcnt' 13724 '-mrtm' 13725 '-mtbm' 13726 '-mno-tbm' 13727 These switches enable or disable the use of instructions in the 13728 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, 13729 FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, 13730 LZCNT, RTM or 3DNow! extended instruction sets. These extensions 13731 are also available as built-in functions: see *note X86 Built-in 13732 Functions::, for details of the functions enabled and disabled by 13733 these switches. 13734 13735 To generate SSE/SSE2 instructions automatically from floating-point 13736 code (as opposed to 387 instructions), see '-mfpmath=sse'. 13737 13738 GCC depresses SSEx instructions when '-mavx' is used. Instead, it 13739 generates new AVX instructions or AVX equivalence for all SSEx 13740 instructions when needed. 13741 13742 These options enable GCC to use these extended instructions in 13743 generated code, even without '-mfpmath=sse'. Applications that 13744 perform run-time CPU detection must compile separate files for each 13745 supported architecture, using the appropriate flags. In 13746 particular, the file containing the CPU detection code should be 13747 compiled without these options. 13748 13749 '-mcld' 13750 This option instructs GCC to emit a 'cld' instruction in the 13751 prologue of functions that use string instructions. String 13752 instructions depend on the DF flag to select between autoincrement 13753 or autodecrement mode. While the ABI specifies the DF flag to be 13754 cleared on function entry, some operating systems violate this 13755 specification by not clearing the DF flag in their exception 13756 dispatchers. The exception handler can be invoked with the DF flag 13757 set, which leads to wrong direction mode when string instructions 13758 are used. This option can be enabled by default on 32-bit x86 13759 targets by configuring GCC with the '--enable-cld' configure 13760 option. Generation of 'cld' instructions can be suppressed with 13761 the '-mno-cld' compiler option in this case. 13762 13763 '-mvzeroupper' 13764 This option instructs GCC to emit a 'vzeroupper' instruction before 13765 a transfer of control flow out of the function to minimize the AVX 13766 to SSE transition penalty as well as remove unnecessary 'zeroupper' 13767 intrinsics. 13768 13769 '-mprefer-avx128' 13770 This option instructs GCC to use 128-bit AVX instructions instead 13771 of 256-bit AVX instructions in the auto-vectorizer. 13772 13773 '-mcx16' 13774 This option enables GCC to generate 'CMPXCHG16B' instructions. 13775 'CMPXCHG16B' allows for atomic operations on 128-bit double 13776 quadword (or oword) data types. This is useful for high-resolution 13777 counters that can be updated by multiple processors (or cores). 13778 This instruction is generated as part of atomic built-in functions: 13779 see *note __sync Builtins:: or *note __atomic Builtins:: for 13780 details. 13781 13782 '-msahf' 13783 This option enables generation of 'SAHF' instructions in 64-bit 13784 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to 13785 the introduction of Pentium 4 G1 step in December 2005, lacked the 13786 'LAHF' and 'SAHF' instructions which were supported by AMD64. 13787 These are load and store instructions, respectively, for certain 13788 status flags. In 64-bit mode, the 'SAHF' instruction is used to 13789 optimize 'fmod', 'drem', and 'remainder' built-in functions; see 13790 *note Other Builtins:: for details. 13791 13792 '-mmovbe' 13793 This option enables use of the 'movbe' instruction to implement 13794 '__builtin_bswap32' and '__builtin_bswap64'. 13795 13796 '-mcrc32' 13797 This option enables built-in functions '__builtin_ia32_crc32qi', 13798 '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and 13799 '__builtin_ia32_crc32di' to generate the 'crc32' machine 13800 instruction. 13801 13802 '-mrecip' 13803 This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and 13804 their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional 13805 Newton-Raphson step to increase precision instead of 'DIVSS' and 13806 'SQRTSS' (and their vectorized variants) for single-precision 13807 floating-point arguments. These instructions are generated only 13808 when '-funsafe-math-optimizations' is enabled together with 13809 '-finite-math-only' and '-fno-trapping-math'. Note that while the 13810 throughput of the sequence is higher than the throughput of the 13811 non-reciprocal instruction, the precision of the sequence can be 13812 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 13813 0.99999994). 13814 13815 Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or 13816 'RSQRTPS') already with '-ffast-math' (or the above option 13817 combination), and doesn't need '-mrecip'. 13818 13819 Also note that GCC emits the above sequence with additional 13820 Newton-Raphson step for vectorized single-float division and 13821 vectorized 'sqrtf(X)' already with '-ffast-math' (or the above 13822 option combination), and doesn't need '-mrecip'. 13823 13824 '-mrecip=OPT' 13825 This option controls which reciprocal estimate instructions may be 13826 used. OPT is a comma-separated list of options, which may be 13827 preceded by a '!' to invert the option: 13828 13829 'all' 13830 Enable all estimate instructions. 13831 13832 'default' 13833 Enable the default instructions, equivalent to '-mrecip'. 13834 13835 'none' 13836 Disable all estimate instructions, equivalent to '-mno-recip'. 13837 13838 'div' 13839 Enable the approximation for scalar division. 13840 13841 'vec-div' 13842 Enable the approximation for vectorized division. 13843 13844 'sqrt' 13845 Enable the approximation for scalar square root. 13846 13847 'vec-sqrt' 13848 Enable the approximation for vectorized square root. 13849 13850 So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal 13851 approximations, except for square root. 13852 13853 '-mveclibabi=TYPE' 13854 Specifies the ABI type to use for vectorizing intrinsics using an 13855 external library. Supported values for TYPE are 'svml' for the 13856 Intel short vector math library and 'acml' for the AMD math core 13857 library. To use this option, both '-ftree-vectorize' and 13858 '-funsafe-math-optimizations' have to be enabled, and an SVML or 13859 ACML ABI-compatible library must be specified at link time. 13860 13861 GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102', 13862 'vmldLog102', 'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', 13863 'vmldAtanh2', 'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', 13864 'vmldAsin2', 'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', 13865 'vmlsExp4', 'vmlsLn4', 'vmlsLog104', 'vmlsLog104', 'vmlsPow4', 13866 'vmlsTanh4', 'vmlsTan4', 'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', 13867 'vmlsSinh4', 'vmlsSin4', 'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', 13868 'vmlsCos4', 'vmlsAcosh4' and 'vmlsAcos4' for corresponding function 13869 type when '-mveclibabi=svml' is used, and '__vrd2_sin', 13870 '__vrd2_cos', '__vrd2_exp', '__vrd2_log', '__vrd2_log2', 13871 '__vrd2_log10', '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', 13872 '__vrs4_logf', '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' 13873 for the corresponding function type when '-mveclibabi=acml' is 13874 used. 13875 13876 '-mabi=NAME' 13877 Generate code for the specified calling convention. Permissible 13878 values are 'sysv' for the ABI used on GNU/Linux and other systems, 13879 and 'ms' for the Microsoft ABI. The default is to use the Microsoft 13880 ABI when targeting Microsoft Windows and the SysV ABI on all other 13881 systems. You can control this behavior for a specific function by 13882 using the function attribute 'ms_abi'/'sysv_abi'. *Note Function 13883 Attributes::. 13884 13885 '-mtls-dialect=TYPE' 13886 Generate code to access thread-local storage using the 'gnu' or 13887 'gnu2' conventions. 'gnu' is the conservative default; 'gnu2' is 13888 more efficient, but it may add compile- and run-time requirements 13889 that cannot be satisfied on all systems. 13890 13891 '-mpush-args' 13892 '-mno-push-args' 13893 Use PUSH operations to store outgoing parameters. This method is 13894 shorter and usually equally fast as method using SUB/MOV operations 13895 and is enabled by default. In some cases disabling it may improve 13896 performance because of improved scheduling and reduced 13897 dependencies. 13898 13899 '-maccumulate-outgoing-args' 13900 If enabled, the maximum amount of space required for outgoing 13901 arguments is computed in the function prologue. This is faster on 13902 most modern CPUs because of reduced dependencies, improved 13903 scheduling and reduced stack usage when the preferred stack 13904 boundary is not equal to 2. The drawback is a notable increase in 13905 code size. This switch implies '-mno-push-args'. 13906 13907 '-mthreads' 13908 Support thread-safe exception handling on MinGW. Programs that rely 13909 on thread-safe exception handling must compile and link all code 13910 with the '-mthreads' option. When compiling, '-mthreads' defines 13911 '-D_MT'; when linking, it links in a special thread helper library 13912 '-lmingwthrd' which cleans up per-thread exception-handling data. 13913 13914 '-mno-align-stringops' 13915 Do not align the destination of inlined string operations. This 13916 switch reduces code size and improves performance in case the 13917 destination is already aligned, but GCC doesn't know about it. 13918 13919 '-minline-all-stringops' 13920 By default GCC inlines string operations only when the destination 13921 is known to be aligned to least a 4-byte boundary. This enables 13922 more inlining and increases code size, but may improve performance 13923 of code that depends on fast 'memcpy', 'strlen', and 'memset' for 13924 short lengths. 13925 13926 '-minline-stringops-dynamically' 13927 For string operations of unknown size, use run-time checks with 13928 inline code for small blocks and a library call for large blocks. 13929 13930 '-mstringop-strategy=ALG' 13931 Override the internal decision heuristic for the particular 13932 algorithm to use for inlining string operations. The allowed 13933 values for ALG are: 13934 13935 'rep_byte' 13936 'rep_4byte' 13937 'rep_8byte' 13938 Expand using i386 'rep' prefix of the specified size. 13939 13940 'byte_loop' 13941 'loop' 13942 'unrolled_loop' 13943 Expand into an inline loop. 13944 13945 'libcall' 13946 Always use a library call. 13947 13948 '-momit-leaf-frame-pointer' 13949 Don't keep the frame pointer in a register for leaf functions. 13950 This avoids the instructions to save, set up, and restore frame 13951 pointers and makes an extra register available in leaf functions. 13952 The option '-fomit-leaf-frame-pointer' removes the frame pointer 13953 for leaf functions, which might make debugging harder. 13954 13955 '-mtls-direct-seg-refs' 13956 '-mno-tls-direct-seg-refs' 13957 Controls whether TLS variables may be accessed with offsets from 13958 the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or 13959 whether the thread base pointer must be added. Whether or not this 13960 is valid depends on the operating system, and whether it maps the 13961 segment to cover the entire TLS area. 13962 13963 For systems that use the GNU C Library, the default is on. 13964 13965 '-msse2avx' 13966 '-mno-sse2avx' 13967 Specify that the assembler should encode SSE instructions with VEX 13968 prefix. The option '-mavx' turns this on by default. 13969 13970 '-mfentry' 13971 '-mno-fentry' 13972 If profiling is active ('-pg'), put the profiling counter call 13973 before the prologue. Note: On x86 architectures the attribute 13974 'ms_hook_prologue' isn't possible at the moment for '-mfentry' and 13975 '-pg'. 13976 13977 '-m8bit-idiv' 13978 '-mno-8bit-idiv' 13979 On some processors, like Intel Atom, 8-bit unsigned integer divide 13980 is much faster than 32-bit/64-bit integer divide. This option 13981 generates a run-time check. If both dividend and divisor are 13982 within range of 0 to 255, 8-bit unsigned integer divide is used 13983 instead of 32-bit/64-bit integer divide. 13984 13985 '-mavx256-split-unaligned-load' 13986 '-mavx256-split-unaligned-store' 13987 Split 32-byte AVX unaligned load and store. 13988 13989 These '-m' switches are supported in addition to the above on x86-64 13990 processors in 64-bit environments. 13991 13992 '-m32' 13993 '-m64' 13994 '-mx32' 13995 Generate code for a 32-bit or 64-bit environment. The '-m32' 13996 option sets 'int', 'long', and pointer types to 32 bits, and 13997 generates code that runs on any i386 system. 13998 13999 The '-m64' option sets 'int' to 32 bits and 'long' and pointer 14000 types to 64 bits, and generates code for the x86-64 architecture. 14001 For Darwin only the '-m64' option also turns off the '-fno-pic' and 14002 '-mdynamic-no-pic' options. 14003 14004 The '-mx32' option sets 'int', 'long', and pointer types to 32 14005 bits, and generates code for the x86-64 architecture. 14006 14007 '-mno-red-zone' 14008 Do not use a so-called "red zone" for x86-64 code. The red zone is 14009 mandated by the x86-64 ABI; it is a 128-byte area beyond the 14010 location of the stack pointer that is not modified by signal or 14011 interrupt handlers and therefore can be used for temporary data 14012 without adjusting the stack pointer. The flag '-mno-red-zone' 14013 disables this red zone. 14014 14015 '-mcmodel=small' 14016 Generate code for the small code model: the program and its symbols 14017 must be linked in the lower 2 GB of the address space. Pointers 14018 are 64 bits. Programs can be statically or dynamically linked. 14019 This is the default code model. 14020 14021 '-mcmodel=kernel' 14022 Generate code for the kernel code model. The kernel runs in the 14023 negative 2 GB of the address space. This model has to be used for 14024 Linux kernel code. 14025 14026 '-mcmodel=medium' 14027 Generate code for the medium model: the program is linked in the 14028 lower 2 GB of the address space. Small symbols are also placed 14029 there. Symbols with sizes larger than '-mlarge-data-threshold' are 14030 put into large data or BSS sections and can be located above 2GB. 14031 Programs can be statically or dynamically linked. 14032 14033 '-mcmodel=large' 14034 Generate code for the large model. This model makes no assumptions 14035 about addresses and sizes of sections. 14036 14037 '-maddress-mode=long' 14038 Generate code for long address mode. This is only supported for 14039 64-bit and x32 environments. It is the default address mode for 14040 64-bit environments. 14041 14042 '-maddress-mode=short' 14043 Generate code for short address mode. This is only supported for 14044 32-bit and x32 environments. It is the default address mode for 14045 32-bit and x32 environments. 14046 14047 14048 File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 14049 14050 3.17.17 i386 and x86-64 Windows Options 14051 --------------------------------------- 14052 14053 These additional options are available for Microsoft Windows targets: 14054 14055 '-mconsole' 14056 This option specifies that a console application is to be 14057 generated, by instructing the linker to set the PE header subsystem 14058 type required for console applications. This option is available 14059 for Cygwin and MinGW targets and is enabled by default on those 14060 targets. 14061 14062 '-mdll' 14063 This option is available for Cygwin and MinGW targets. It 14064 specifies that a DLL--a dynamic link library--is to be generated, 14065 enabling the selection of the required runtime startup object and 14066 entry point. 14067 14068 '-mnop-fun-dllimport' 14069 This option is available for Cygwin and MinGW targets. It 14070 specifies that the 'dllimport' attribute should be ignored. 14071 14072 '-mthread' 14073 This option is available for MinGW targets. It specifies that 14074 MinGW-specific thread support is to be used. 14075 14076 '-municode' 14077 This option is available for MinGW-w64 targets. It causes the 14078 'UNICODE' preprocessor macro to be predefined, and chooses 14079 Unicode-capable runtime startup code. 14080 14081 '-mwin32' 14082 This option is available for Cygwin and MinGW targets. It 14083 specifies that the typical Microsoft Windows predefined macros are 14084 to be set in the pre-processor, but does not influence the choice 14085 of runtime library/startup code. 14086 14087 '-mwindows' 14088 This option is available for Cygwin and MinGW targets. It 14089 specifies that a GUI application is to be generated by instructing 14090 the linker to set the PE header subsystem type appropriately. 14091 14092 '-fno-set-stack-executable' 14093 This option is available for MinGW targets. It specifies that the 14094 executable flag for the stack used by nested functions isn't set. 14095 This is necessary for binaries running in kernel mode of Microsoft 14096 Windows, as there the User32 API, which is used to set executable 14097 privileges, isn't available. 14098 14099 '-fwritable-relocated-rdata' 14100 This option is available for MinGW and Cygwin targets. It 14101 specifies that relocated-data in read-only section is put into 14102 .data section. This is a necessary for older runtimes not 14103 supporting modification of .rdata sections for pseudo-relocation. 14104 14105 '-mpe-aligned-commons' 14106 This option is available for Cygwin and MinGW targets. It 14107 specifies that the GNU extension to the PE file format that permits 14108 the correct alignment of COMMON variables should be used when 14109 generating code. It is enabled by default if GCC detects that the 14110 target assembler found during configuration supports the feature. 14111 14112 See also under *note i386 and x86-64 Options:: for standard options. 14113 14114 14115 File: gcc.info, Node: IA-64 Options, Next: LM32 Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 14116 14117 3.17.18 IA-64 Options 14118 --------------------- 14119 14120 These are the '-m' options defined for the Intel IA-64 architecture. 14121 14122 '-mbig-endian' 14123 Generate code for a big-endian target. This is the default for 14124 HP-UX. 14125 14126 '-mlittle-endian' 14127 Generate code for a little-endian target. This is the default for 14128 AIX5 and GNU/Linux. 14129 14130 '-mgnu-as' 14131 '-mno-gnu-as' 14132 Generate (or don't) code for the GNU assembler. This is the 14133 default. 14134 14135 '-mgnu-ld' 14136 '-mno-gnu-ld' 14137 Generate (or don't) code for the GNU linker. This is the default. 14138 14139 '-mno-pic' 14140 Generate code that does not use a global pointer register. The 14141 result is not position independent code, and violates the IA-64 14142 ABI. 14143 14144 '-mvolatile-asm-stop' 14145 '-mno-volatile-asm-stop' 14146 Generate (or don't) a stop bit immediately before and after 14147 volatile asm statements. 14148 14149 '-mregister-names' 14150 '-mno-register-names' 14151 Generate (or don't) 'in', 'loc', and 'out' register names for the 14152 stacked registers. This may make assembler output more readable. 14153 14154 '-mno-sdata' 14155 '-msdata' 14156 Disable (or enable) optimizations that use the small data section. 14157 This may be useful for working around optimizer bugs. 14158 14159 '-mconstant-gp' 14160 Generate code that uses a single constant global pointer value. 14161 This is useful when compiling kernel code. 14162 14163 '-mauto-pic' 14164 Generate code that is self-relocatable. This implies 14165 '-mconstant-gp'. This is useful when compiling firmware code. 14166 14167 '-minline-float-divide-min-latency' 14168 Generate code for inline divides of floating-point values using the 14169 minimum latency algorithm. 14170 14171 '-minline-float-divide-max-throughput' 14172 Generate code for inline divides of floating-point values using the 14173 maximum throughput algorithm. 14174 14175 '-mno-inline-float-divide' 14176 Do not generate inline code for divides of floating-point values. 14177 14178 '-minline-int-divide-min-latency' 14179 Generate code for inline divides of integer values using the 14180 minimum latency algorithm. 14181 14182 '-minline-int-divide-max-throughput' 14183 Generate code for inline divides of integer values using the 14184 maximum throughput algorithm. 14185 14186 '-mno-inline-int-divide' 14187 Do not generate inline code for divides of integer values. 14188 14189 '-minline-sqrt-min-latency' 14190 Generate code for inline square roots using the minimum latency 14191 algorithm. 14192 14193 '-minline-sqrt-max-throughput' 14194 Generate code for inline square roots using the maximum throughput 14195 algorithm. 14196 14197 '-mno-inline-sqrt' 14198 Do not generate inline code for 'sqrt'. 14199 14200 '-mfused-madd' 14201 '-mno-fused-madd' 14202 Do (don't) generate code that uses the fused multiply/add or 14203 multiply/subtract instructions. The default is to use these 14204 instructions. 14205 14206 '-mno-dwarf2-asm' 14207 '-mdwarf2-asm' 14208 Don't (or do) generate assembler code for the DWARF 2 line number 14209 debugging info. This may be useful when not using the GNU 14210 assembler. 14211 14212 '-mearly-stop-bits' 14213 '-mno-early-stop-bits' 14214 Allow stop bits to be placed earlier than immediately preceding the 14215 instruction that triggered the stop bit. This can improve 14216 instruction scheduling, but does not always do so. 14217 14218 '-mfixed-range=REGISTER-RANGE' 14219 Generate code treating the given register range as fixed registers. 14220 A fixed register is one that the register allocator cannot use. 14221 This is useful when compiling kernel code. A register range is 14222 specified as two registers separated by a dash. Multiple register 14223 ranges can be specified separated by a comma. 14224 14225 '-mtls-size=TLS-SIZE' 14226 Specify bit size of immediate TLS offsets. Valid values are 14, 14227 22, and 64. 14228 14229 '-mtune=CPU-TYPE' 14230 Tune the instruction scheduling for a particular CPU, Valid values 14231 are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'. 14232 14233 '-milp32' 14234 '-mlp64' 14235 Generate code for a 32-bit or 64-bit environment. The 32-bit 14236 environment sets int, long and pointer to 32 bits. The 64-bit 14237 environment sets int to 32 bits and long and pointer to 64 bits. 14238 These are HP-UX specific flags. 14239 14240 '-mno-sched-br-data-spec' 14241 '-msched-br-data-spec' 14242 (Dis/En)able data speculative scheduling before reload. This 14243 results in generation of 'ld.a' instructions and the corresponding 14244 check instructions ('ld.c' / 'chk.a'). The default is 'disable'. 14245 14246 '-msched-ar-data-spec' 14247 '-mno-sched-ar-data-spec' 14248 (En/Dis)able data speculative scheduling after reload. This 14249 results in generation of 'ld.a' instructions and the corresponding 14250 check instructions ('ld.c' / 'chk.a'). The default is 'enable'. 14251 14252 '-mno-sched-control-spec' 14253 '-msched-control-spec' 14254 (Dis/En)able control speculative scheduling. This feature is 14255 available only during region scheduling (i.e. before reload). This 14256 results in generation of the 'ld.s' instructions and the 14257 corresponding check instructions 'chk.s'. The default is 14258 'disable'. 14259 14260 '-msched-br-in-data-spec' 14261 '-mno-sched-br-in-data-spec' 14262 (En/Dis)able speculative scheduling of the instructions that are 14263 dependent on the data speculative loads before reload. This is 14264 effective only with '-msched-br-data-spec' enabled. The default is 14265 'enable'. 14266 14267 '-msched-ar-in-data-spec' 14268 '-mno-sched-ar-in-data-spec' 14269 (En/Dis)able speculative scheduling of the instructions that are 14270 dependent on the data speculative loads after reload. This is 14271 effective only with '-msched-ar-data-spec' enabled. The default is 14272 'enable'. 14273 14274 '-msched-in-control-spec' 14275 '-mno-sched-in-control-spec' 14276 (En/Dis)able speculative scheduling of the instructions that are 14277 dependent on the control speculative loads. This is effective only 14278 with '-msched-control-spec' enabled. The default is 'enable'. 14279 14280 '-mno-sched-prefer-non-data-spec-insns' 14281 '-msched-prefer-non-data-spec-insns' 14282 If enabled, data-speculative instructions are chosen for schedule 14283 only if there are no other choices at the moment. This makes the 14284 use of the data speculation much more conservative. The default is 14285 'disable'. 14286 14287 '-mno-sched-prefer-non-control-spec-insns' 14288 '-msched-prefer-non-control-spec-insns' 14289 If enabled, control-speculative instructions are chosen for 14290 schedule only if there are no other choices at the moment. This 14291 makes the use of the control speculation much more conservative. 14292 The default is 'disable'. 14293 14294 '-mno-sched-count-spec-in-critical-path' 14295 '-msched-count-spec-in-critical-path' 14296 If enabled, speculative dependencies are considered during 14297 computation of the instructions priorities. This makes the use of 14298 the speculation a bit more conservative. The default is 'disable'. 14299 14300 '-msched-spec-ldc' 14301 Use a simple data speculation check. This option is on by default. 14302 14303 '-msched-control-spec-ldc' 14304 Use a simple check for control speculation. This option is on by 14305 default. 14306 14307 '-msched-stop-bits-after-every-cycle' 14308 Place a stop bit after every cycle when scheduling. This option is 14309 on by default. 14310 14311 '-msched-fp-mem-deps-zero-cost' 14312 Assume that floating-point stores and loads are not likely to cause 14313 a conflict when placed into the same instruction group. This 14314 option is disabled by default. 14315 14316 '-msel-sched-dont-check-control-spec' 14317 Generate checks for control speculation in selective scheduling. 14318 This flag is disabled by default. 14319 14320 '-msched-max-memory-insns=MAX-INSNS' 14321 Limit on the number of memory insns per instruction group, giving 14322 lower priority to subsequent memory insns attempting to schedule in 14323 the same instruction group. Frequently useful to prevent cache 14324 bank conflicts. The default value is 1. 14325 14326 '-msched-max-memory-insns-hard-limit' 14327 Makes the limit specified by 'msched-max-memory-insns' a hard 14328 limit, disallowing more than that number in an instruction group. 14329 Otherwise, the limit is "soft", meaning that non-memory operations 14330 are preferred when the limit is reached, but memory operations may 14331 still be scheduled. 14332 14333 14334 File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64 Options, Up: Submodel Options 14335 14336 3.17.19 LM32 Options 14337 -------------------- 14338 14339 These '-m' options are defined for the LatticeMico32 architecture: 14340 14341 '-mbarrel-shift-enabled' 14342 Enable barrel-shift instructions. 14343 14344 '-mdivide-enabled' 14345 Enable divide and modulus instructions. 14346 14347 '-mmultiply-enabled' 14348 Enable multiply instructions. 14349 14350 '-msign-extend-enabled' 14351 Enable sign extend instructions. 14352 14353 '-muser-enabled' 14354 Enable user-defined instructions. 14355 14356 14357 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 14358 14359 3.17.20 M32C Options 14360 -------------------- 14361 14362 '-mcpu=NAME' 14363 Select the CPU for which code is generated. NAME may be one of 14364 'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60) 14365 series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80 14366 series. 14367 14368 '-msim' 14369 Specifies that the program will be run on the simulator. This 14370 causes an alternate runtime library to be linked in which supports, 14371 for example, file I/O. You must not use this option when 14372 generating programs that will run on real hardware; you must 14373 provide your own runtime library for whatever I/O functions are 14374 needed. 14375 14376 '-memregs=NUMBER' 14377 Specifies the number of memory-based pseudo-registers GCC uses 14378 during code generation. These pseudo-registers are used like real 14379 registers, so there is a tradeoff between GCC's ability to fit the 14380 code into available registers, and the performance penalty of using 14381 memory instead of registers. Note that all modules in a program 14382 must be compiled with the same value for this option. Because of 14383 that, you must not use this option with GCC's default runtime 14384 libraries. 14385 14386 14387 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 14388 14389 3.17.21 M32R/D Options 14390 ---------------------- 14391 14392 These '-m' options are defined for Renesas M32R/D architectures: 14393 14394 '-m32r2' 14395 Generate code for the M32R/2. 14396 14397 '-m32rx' 14398 Generate code for the M32R/X. 14399 14400 '-m32r' 14401 Generate code for the M32R. This is the default. 14402 14403 '-mmodel=small' 14404 Assume all objects live in the lower 16MB of memory (so that their 14405 addresses can be loaded with the 'ld24' instruction), and assume 14406 all subroutines are reachable with the 'bl' instruction. This is 14407 the default. 14408 14409 The addressability of a particular object can be set with the 14410 'model' attribute. 14411 14412 '-mmodel=medium' 14413 Assume objects may be anywhere in the 32-bit address space (the 14414 compiler generates 'seth/add3' instructions to load their 14415 addresses), and assume all subroutines are reachable with the 'bl' 14416 instruction. 14417 14418 '-mmodel=large' 14419 Assume objects may be anywhere in the 32-bit address space (the 14420 compiler generates 'seth/add3' instructions to load their 14421 addresses), and assume subroutines may not be reachable with the 14422 'bl' instruction (the compiler generates the much slower 14423 'seth/add3/jl' instruction sequence). 14424 14425 '-msdata=none' 14426 Disable use of the small data area. Variables are put into one of 14427 '.data', '.bss', or '.rodata' (unless the 'section' attribute has 14428 been specified). This is the default. 14429 14430 The small data area consists of sections '.sdata' and '.sbss'. 14431 Objects may be explicitly put in the small data area with the 14432 'section' attribute using one of these sections. 14433 14434 '-msdata=sdata' 14435 Put small global and static data in the small data area, but do not 14436 generate special code to reference them. 14437 14438 '-msdata=use' 14439 Put small global and static data in the small data area, and 14440 generate special instructions to reference them. 14441 14442 '-G NUM' 14443 Put global and static objects less than or equal to NUM bytes into 14444 the small data or BSS sections instead of the normal data or BSS 14445 sections. The default value of NUM is 8. The '-msdata' option 14446 must be set to one of 'sdata' or 'use' for this option to have any 14447 effect. 14448 14449 All modules should be compiled with the same '-G NUM' value. 14450 Compiling with different values of NUM may or may not work; if it 14451 doesn't the linker gives an error message--incorrect code is not 14452 generated. 14453 14454 '-mdebug' 14455 Makes the M32R-specific code in the compiler display some 14456 statistics that might help in debugging programs. 14457 14458 '-malign-loops' 14459 Align all loops to a 32-byte boundary. 14460 14461 '-mno-align-loops' 14462 Do not enforce a 32-byte alignment for loops. This is the default. 14463 14464 '-missue-rate=NUMBER' 14465 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 14466 14467 '-mbranch-cost=NUMBER' 14468 NUMBER can only be 1 or 2. If it is 1 then branches are preferred 14469 over conditional code, if it is 2, then the opposite applies. 14470 14471 '-mflush-trap=NUMBER' 14472 Specifies the trap number to use to flush the cache. The default 14473 is 12. Valid numbers are between 0 and 15 inclusive. 14474 14475 '-mno-flush-trap' 14476 Specifies that the cache cannot be flushed by using a trap. 14477 14478 '-mflush-func=NAME' 14479 Specifies the name of the operating system function to call to 14480 flush the cache. The default is __flush_cache_, but a function 14481 call is only used if a trap is not available. 14482 14483 '-mno-flush-func' 14484 Indicates that there is no OS function for flushing the cache. 14485 14486 14487 File: gcc.info, Node: M680x0 Options, Next: MCore Options, Prev: M32R/D Options, Up: Submodel Options 14488 14489 3.17.22 M680x0 Options 14490 ---------------------- 14491 14492 These are the '-m' options defined for M680x0 and ColdFire processors. 14493 The default settings depend on which architecture was selected when the 14494 compiler was configured; the defaults for the most common choices are 14495 given below. 14496 14497 '-march=ARCH' 14498 Generate code for a specific M680x0 or ColdFire instruction set 14499 architecture. Permissible values of ARCH for M680x0 architectures 14500 are: '68000', '68010', '68020', '68030', '68040', '68060' and 14501 'cpu32'. ColdFire architectures are selected according to 14502 Freescale's ISA classification and the permissible values are: 14503 'isaa', 'isaaplus', 'isab' and 'isac'. 14504 14505 GCC defines a macro '__mcfARCH__' whenever it is generating code 14506 for a ColdFire target. The ARCH in this macro is one of the 14507 '-march' arguments given above. 14508 14509 When used together, '-march' and '-mtune' select code that runs on 14510 a family of similar processors but that is optimized for a 14511 particular microarchitecture. 14512 14513 '-mcpu=CPU' 14514 Generate code for a specific M680x0 or ColdFire processor. The 14515 M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040', 14516 '68060', '68302', '68332' and 'cpu32'. The ColdFire CPUs are given 14517 by the table below, which also classifies the CPUs into families: 14518 14519 *Family* *'-mcpu' arguments* 14520 '51' '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg' 14521 '51jm' '51mm' '51qe' '51qm' 14522 '5206' '5202' '5204' '5206' 14523 '5206e' '5206e' 14524 '5208' '5207' '5208' 14525 '5211a' '5210a' '5211a' 14526 '5213' '5211' '5212' '5213' 14527 '5216' '5214' '5216' 14528 '52235' '52230' '52231' '52232' '52233' '52234' '52235' 14529 '5225' '5224' '5225' 14530 '52259' '52252' '52254' '52255' '52256' '52258' '52259' 14531 '5235' '5232' '5233' '5234' '5235' '523x' 14532 '5249' '5249' 14533 '5250' '5250' 14534 '5271' '5270' '5271' 14535 '5272' '5272' 14536 '5275' '5274' '5275' 14537 '5282' '5280' '5281' '5282' '528x' 14538 '53017' '53011' '53012' '53013' '53014' '53015' '53016' '53017' 14539 '5307' '5307' 14540 '5329' '5327' '5328' '5329' '532x' 14541 '5373' '5372' '5373' '537x' 14542 '5407' '5407' 14543 '5475' '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480' 14544 '5481' '5482' '5483' '5484' '5485' 14545 14546 '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU. 14547 Other combinations of '-mcpu' and '-march' are rejected. 14548 14549 GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is 14550 selected. It also defines '__mcf_family_FAMILY', where the value 14551 of FAMILY is given by the table above. 14552 14553 '-mtune=TUNE' 14554 Tune the code for a particular microarchitecture within the 14555 constraints set by '-march' and '-mcpu'. The M680x0 14556 microarchitectures are: '68000', '68010', '68020', '68030', 14557 '68040', '68060' and 'cpu32'. The ColdFire microarchitectures are: 14558 'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'. 14559 14560 You can also use '-mtune=68020-40' for code that needs to run 14561 relatively well on 68020, 68030 and 68040 targets. 14562 '-mtune=68020-60' is similar but includes 68060 targets as well. 14563 These two options select the same tuning decisions as '-m68020-40' 14564 and '-m68020-60' respectively. 14565 14566 GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for 14567 680x0 architecture ARCH. It also defines 'mcARCH' unless either 14568 '-ansi' or a non-GNU '-std' option is used. If GCC is tuning for a 14569 range of architectures, as selected by '-mtune=68020-40' or 14570 '-mtune=68020-60', it defines the macros for every architecture in 14571 the range. 14572 14573 GCC also defines the macro '__mUARCH__' when tuning for ColdFire 14574 microarchitecture UARCH, where UARCH is one of the arguments given 14575 above. 14576 14577 '-m68000' 14578 '-mc68000' 14579 Generate output for a 68000. This is the default when the compiler 14580 is configured for 68000-based systems. It is equivalent to 14581 '-march=68000'. 14582 14583 Use this option for microcontrollers with a 68000 or EC000 core, 14584 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 14585 14586 '-m68010' 14587 Generate output for a 68010. This is the default when the compiler 14588 is configured for 68010-based systems. It is equivalent to 14589 '-march=68010'. 14590 14591 '-m68020' 14592 '-mc68020' 14593 Generate output for a 68020. This is the default when the compiler 14594 is configured for 68020-based systems. It is equivalent to 14595 '-march=68020'. 14596 14597 '-m68030' 14598 Generate output for a 68030. This is the default when the compiler 14599 is configured for 68030-based systems. It is equivalent to 14600 '-march=68030'. 14601 14602 '-m68040' 14603 Generate output for a 68040. This is the default when the compiler 14604 is configured for 68040-based systems. It is equivalent to 14605 '-march=68040'. 14606 14607 This option inhibits the use of 68881/68882 instructions that have 14608 to be emulated by software on the 68040. Use this option if your 14609 68040 does not have code to emulate those instructions. 14610 14611 '-m68060' 14612 Generate output for a 68060. This is the default when the compiler 14613 is configured for 68060-based systems. It is equivalent to 14614 '-march=68060'. 14615 14616 This option inhibits the use of 68020 and 68881/68882 instructions 14617 that have to be emulated by software on the 68060. Use this option 14618 if your 68060 does not have code to emulate those instructions. 14619 14620 '-mcpu32' 14621 Generate output for a CPU32. This is the default when the compiler 14622 is configured for CPU32-based systems. It is equivalent to 14623 '-march=cpu32'. 14624 14625 Use this option for microcontrollers with a CPU32 or CPU32+ core, 14626 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 14627 68341, 68349 and 68360. 14628 14629 '-m5200' 14630 Generate output for a 520X ColdFire CPU. This is the default when 14631 the compiler is configured for 520X-based systems. It is 14632 equivalent to '-mcpu=5206', and is now deprecated in favor of that 14633 option. 14634 14635 Use this option for microcontroller with a 5200 core, including the 14636 MCF5202, MCF5203, MCF5204 and MCF5206. 14637 14638 '-m5206e' 14639 Generate output for a 5206e ColdFire CPU. The option is now 14640 deprecated in favor of the equivalent '-mcpu=5206e'. 14641 14642 '-m528x' 14643 Generate output for a member of the ColdFire 528X family. The 14644 option is now deprecated in favor of the equivalent '-mcpu=528x'. 14645 14646 '-m5307' 14647 Generate output for a ColdFire 5307 CPU. The option is now 14648 deprecated in favor of the equivalent '-mcpu=5307'. 14649 14650 '-m5407' 14651 Generate output for a ColdFire 5407 CPU. The option is now 14652 deprecated in favor of the equivalent '-mcpu=5407'. 14653 14654 '-mcfv4e' 14655 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 14656 This includes use of hardware floating-point instructions. The 14657 option is equivalent to '-mcpu=547x', and is now deprecated in 14658 favor of that option. 14659 14660 '-m68020-40' 14661 Generate output for a 68040, without using any of the new 14662 instructions. This results in code that can run relatively 14663 efficiently on either a 68020/68881 or a 68030 or a 68040. The 14664 generated code does use the 68881 instructions that are emulated on 14665 the 68040. 14666 14667 The option is equivalent to '-march=68020' '-mtune=68020-40'. 14668 14669 '-m68020-60' 14670 Generate output for a 68060, without using any of the new 14671 instructions. This results in code that can run relatively 14672 efficiently on either a 68020/68881 or a 68030 or a 68040. The 14673 generated code does use the 68881 instructions that are emulated on 14674 the 68060. 14675 14676 The option is equivalent to '-march=68020' '-mtune=68020-60'. 14677 14678 '-mhard-float' 14679 '-m68881' 14680 Generate floating-point instructions. This is the default for 14681 68020 and above, and for ColdFire devices that have an FPU. It 14682 defines the macro '__HAVE_68881__' on M680x0 targets and 14683 '__mcffpu__' on ColdFire targets. 14684 14685 '-msoft-float' 14686 Do not generate floating-point instructions; use library calls 14687 instead. This is the default for 68000, 68010, and 68832 targets. 14688 It is also the default for ColdFire devices that have no FPU. 14689 14690 '-mdiv' 14691 '-mno-div' 14692 Generate (do not generate) ColdFire hardware divide and remainder 14693 instructions. If '-march' is used without '-mcpu', the default is 14694 "on" for ColdFire architectures and "off" for M680x0 architectures. 14695 Otherwise, the default is taken from the target CPU (either the 14696 default CPU, or the one specified by '-mcpu'). For example, the 14697 default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'. 14698 14699 GCC defines the macro '__mcfhwdiv__' when this option is enabled. 14700 14701 '-mshort' 14702 Consider type 'int' to be 16 bits wide, like 'short int'. 14703 Additionally, parameters passed on the stack are also aligned to a 14704 16-bit boundary even on targets whose API mandates promotion to 14705 32-bit. 14706 14707 '-mno-short' 14708 Do not consider type 'int' to be 16 bits wide. This is the 14709 default. 14710 14711 '-mnobitfield' 14712 '-mno-bitfield' 14713 Do not use the bit-field instructions. The '-m68000', '-mcpu32' 14714 and '-m5200' options imply '-mnobitfield'. 14715 14716 '-mbitfield' 14717 Do use the bit-field instructions. The '-m68020' option implies 14718 '-mbitfield'. This is the default if you use a configuration 14719 designed for a 68020. 14720 14721 '-mrtd' 14722 Use a different function-calling convention, in which functions 14723 that take a fixed number of arguments return with the 'rtd' 14724 instruction, which pops their arguments while returning. This 14725 saves one instruction in the caller since there is no need to pop 14726 the arguments there. 14727 14728 This calling convention is incompatible with the one normally used 14729 on Unix, so you cannot use it if you need to call libraries 14730 compiled with the Unix compiler. 14731 14732 Also, you must provide function prototypes for all functions that 14733 take variable numbers of arguments (including 'printf'); otherwise 14734 incorrect code is generated for calls to those functions. 14735 14736 In addition, seriously incorrect code results if you call a 14737 function with too many arguments. (Normally, extra arguments are 14738 harmlessly ignored.) 14739 14740 The 'rtd' instruction is supported by the 68010, 68020, 68030, 14741 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 14742 14743 '-mno-rtd' 14744 Do not use the calling conventions selected by '-mrtd'. This is 14745 the default. 14746 14747 '-malign-int' 14748 '-mno-align-int' 14749 Control whether GCC aligns 'int', 'long', 'long long', 'float', 14750 'double', and 'long double' variables on a 32-bit boundary 14751 ('-malign-int') or a 16-bit boundary ('-mno-align-int'). Aligning 14752 variables on 32-bit boundaries produces code that runs somewhat 14753 faster on processors with 32-bit busses at the expense of more 14754 memory. 14755 14756 *Warning:* if you use the '-malign-int' switch, GCC aligns 14757 structures containing the above types differently than most 14758 published application binary interface specifications for the m68k. 14759 14760 '-mpcrel' 14761 Use the pc-relative addressing mode of the 68000 directly, instead 14762 of using a global offset table. At present, this option implies 14763 '-fpic', allowing at most a 16-bit offset for pc-relative 14764 addressing. '-fPIC' is not presently supported with '-mpcrel', 14765 though this could be supported for 68020 and higher processors. 14766 14767 '-mno-strict-align' 14768 '-mstrict-align' 14769 Do not (do) assume that unaligned memory references are handled by 14770 the system. 14771 14772 '-msep-data' 14773 Generate code that allows the data segment to be located in a 14774 different area of memory from the text segment. This allows for 14775 execute-in-place in an environment without virtual memory 14776 management. This option implies '-fPIC'. 14777 14778 '-mno-sep-data' 14779 Generate code that assumes that the data segment follows the text 14780 segment. This is the default. 14781 14782 '-mid-shared-library' 14783 Generate code that supports shared libraries via the library ID 14784 method. This allows for execute-in-place and shared libraries in 14785 an environment without virtual memory management. This option 14786 implies '-fPIC'. 14787 14788 '-mno-id-shared-library' 14789 Generate code that doesn't assume ID-based shared libraries are 14790 being used. This is the default. 14791 14792 '-mshared-library-id=n' 14793 Specifies the identification number of the ID-based shared library 14794 being compiled. Specifying a value of 0 generates more compact 14795 code; specifying other values forces the allocation of that number 14796 to the current library, but is no more space- or time-efficient 14797 than omitting this option. 14798 14799 '-mxgot' 14800 '-mno-xgot' 14801 When generating position-independent code for ColdFire, generate 14802 code that works if the GOT has more than 8192 entries. This code 14803 is larger and slower than code generated without this option. On 14804 M680x0 processors, this option is not needed; '-fPIC' suffices. 14805 14806 GCC normally uses a single instruction to load values from the GOT. 14807 While this is relatively efficient, it only works if the GOT is 14808 smaller than about 64k. Anything larger causes the linker to 14809 report an error such as: 14810 14811 relocation truncated to fit: R_68K_GOT16O foobar 14812 14813 If this happens, you should recompile your code with '-mxgot'. It 14814 should then work with very large GOTs. However, code generated 14815 with '-mxgot' is less efficient, since it takes 4 instructions to 14816 fetch the value of a global symbol. 14817 14818 Note that some linkers, including newer versions of the GNU linker, 14819 can create multiple GOTs and sort GOT entries. If you have such a 14820 linker, you should only need to use '-mxgot' when compiling a 14821 single object file that accesses more than 8192 GOT entries. Very 14822 few do. 14823 14824 These options have no effect unless GCC is generating 14825 position-independent code. 14826 14827 14828 File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M680x0 Options, Up: Submodel Options 14829 14830 3.17.23 MCore Options 14831 --------------------- 14832 14833 These are the '-m' options defined for the Motorola M*Core processors. 14834 14835 '-mhardlit' 14836 '-mno-hardlit' 14837 Inline constants into the code stream if it can be done in two 14838 instructions or less. 14839 14840 '-mdiv' 14841 '-mno-div' 14842 Use the divide instruction. (Enabled by default). 14843 14844 '-mrelax-immediate' 14845 '-mno-relax-immediate' 14846 Allow arbitrary-sized immediates in bit operations. 14847 14848 '-mwide-bitfields' 14849 '-mno-wide-bitfields' 14850 Always treat bit-fields as 'int'-sized. 14851 14852 '-m4byte-functions' 14853 '-mno-4byte-functions' 14854 Force all functions to be aligned to a 4-byte boundary. 14855 14856 '-mcallgraph-data' 14857 '-mno-callgraph-data' 14858 Emit callgraph information. 14859 14860 '-mslow-bytes' 14861 '-mno-slow-bytes' 14862 Prefer word access when reading byte quantities. 14863 14864 '-mlittle-endian' 14865 '-mbig-endian' 14866 Generate code for a little-endian target. 14867 14868 '-m210' 14869 '-m340' 14870 Generate code for the 210 processor. 14871 14872 '-mno-lsim' 14873 Assume that runtime support has been provided and so omit the 14874 simulator library ('libsim.a)' from the linker command line. 14875 14876 '-mstack-increment=SIZE' 14877 Set the maximum amount for a single stack increment operation. 14878 Large values can increase the speed of programs that contain 14879 functions that need a large amount of stack space, but they can 14880 also trigger a segmentation fault if the stack is extended too 14881 much. The default value is 0x1000. 14882 14883 14884 File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options 14885 14886 3.17.24 MeP Options 14887 ------------------- 14888 14889 '-mabsdiff' 14890 Enables the 'abs' instruction, which is the absolute difference 14891 between two registers. 14892 14893 '-mall-opts' 14894 Enables all the optional instructions--average, multiply, divide, 14895 bit operations, leading zero, absolute difference, min/max, clip, 14896 and saturation. 14897 14898 '-maverage' 14899 Enables the 'ave' instruction, which computes the average of two 14900 registers. 14901 14902 '-mbased=N' 14903 Variables of size N bytes or smaller are placed in the '.based' 14904 section by default. Based variables use the '$tp' register as a 14905 base register, and there is a 128-byte limit to the '.based' 14906 section. 14907 14908 '-mbitops' 14909 Enables the bit operation instructions--bit test ('btstm'), set 14910 ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set 14911 ('tas'). 14912 14913 '-mc=NAME' 14914 Selects which section constant data is placed in. NAME may be 14915 'tiny', 'near', or 'far'. 14916 14917 '-mclip' 14918 Enables the 'clip' instruction. Note that '-mclip' is not useful 14919 unless you also provide '-mminmax'. 14920 14921 '-mconfig=NAME' 14922 Selects one of the built-in core configurations. Each MeP chip has 14923 one or more modules in it; each module has a core CPU and a variety 14924 of coprocessors, optional instructions, and peripherals. The 14925 'MeP-Integrator' tool, not part of GCC, provides these 14926 configurations through this option; using this option is the same 14927 as using all the corresponding command-line options. The default 14928 configuration is 'default'. 14929 14930 '-mcop' 14931 Enables the coprocessor instructions. By default, this is a 32-bit 14932 coprocessor. Note that the coprocessor is normally enabled via the 14933 '-mconfig=' option. 14934 14935 '-mcop32' 14936 Enables the 32-bit coprocessor's instructions. 14937 14938 '-mcop64' 14939 Enables the 64-bit coprocessor's instructions. 14940 14941 '-mivc2' 14942 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 14943 14944 '-mdc' 14945 Causes constant variables to be placed in the '.near' section. 14946 14947 '-mdiv' 14948 Enables the 'div' and 'divu' instructions. 14949 14950 '-meb' 14951 Generate big-endian code. 14952 14953 '-mel' 14954 Generate little-endian code. 14955 14956 '-mio-volatile' 14957 Tells the compiler that any variable marked with the 'io' attribute 14958 is to be considered volatile. 14959 14960 '-ml' 14961 Causes variables to be assigned to the '.far' section by default. 14962 14963 '-mleadz' 14964 Enables the 'leadz' (leading zero) instruction. 14965 14966 '-mm' 14967 Causes variables to be assigned to the '.near' section by default. 14968 14969 '-mminmax' 14970 Enables the 'min' and 'max' instructions. 14971 14972 '-mmult' 14973 Enables the multiplication and multiply-accumulate instructions. 14974 14975 '-mno-opts' 14976 Disables all the optional instructions enabled by '-mall-opts'. 14977 14978 '-mrepeat' 14979 Enables the 'repeat' and 'erepeat' instructions, used for 14980 low-overhead looping. 14981 14982 '-ms' 14983 Causes all variables to default to the '.tiny' section. Note that 14984 there is a 65536-byte limit to this section. Accesses to these 14985 variables use the '%gp' base register. 14986 14987 '-msatur' 14988 Enables the saturation instructions. Note that the compiler does 14989 not currently generate these itself, but this option is included 14990 for compatibility with other tools, like 'as'. 14991 14992 '-msdram' 14993 Link the SDRAM-based runtime instead of the default ROM-based 14994 runtime. 14995 14996 '-msim' 14997 Link the simulator runtime libraries. 14998 14999 '-msimnovec' 15000 Link the simulator runtime libraries, excluding built-in support 15001 for reset and exception vectors and tables. 15002 15003 '-mtf' 15004 Causes all functions to default to the '.far' section. Without 15005 this option, functions default to the '.near' section. 15006 15007 '-mtiny=N' 15008 Variables that are N bytes or smaller are allocated to the '.tiny' 15009 section. These variables use the '$gp' base register. The default 15010 for this option is 4, but note that there's a 65536-byte limit to 15011 the '.tiny' section. 15012 15013 15014 File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options 15015 15016 3.17.25 MicroBlaze Options 15017 -------------------------- 15018 15019 '-msoft-float' 15020 Use software emulation for floating point (default). 15021 15022 '-mhard-float' 15023 Use hardware floating-point instructions. 15024 15025 '-mmemcpy' 15026 Do not optimize block moves, use 'memcpy'. 15027 15028 '-mno-clearbss' 15029 This option is deprecated. Use '-fno-zero-initialized-in-bss' 15030 instead. 15031 15032 '-mcpu=CPU-TYPE' 15033 Use features of, and schedule code for, the given CPU. Supported 15034 values are in the format 'vX.YY.Z', where X is a major version, YY 15035 is the minor version, and Z is compatibility code. Example values 15036 are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v5.00.b', 15037 'v6.00.a'. 15038 15039 '-mxl-soft-mul' 15040 Use software multiply emulation (default). 15041 15042 '-mxl-soft-div' 15043 Use software emulation for divides (default). 15044 15045 '-mxl-barrel-shift' 15046 Use the hardware barrel shifter. 15047 15048 '-mxl-pattern-compare' 15049 Use pattern compare instructions. 15050 15051 '-msmall-divides' 15052 Use table lookup optimization for small signed integer divisions. 15053 15054 '-mxl-stack-check' 15055 This option is deprecated. Use '-fstack-check' instead. 15056 15057 '-mxl-gp-opt' 15058 Use GP-relative '.sdata'/'.sbss' sections. 15059 15060 '-mxl-multiply-high' 15061 Use multiply high instructions for high part of 32x32 multiply. 15062 15063 '-mxl-float-convert' 15064 Use hardware floating-point conversion instructions. 15065 15066 '-mxl-float-sqrt' 15067 Use hardware floating-point square root instruction. 15068 15069 '-mbig-endian' 15070 Generate code for a big-endian target. 15071 15072 '-mlittle-endian' 15073 Generate code for a little-endian target. 15074 15075 '-mxl-reorder' 15076 Use reorder instructions (swap and byte reversed load/store). 15077 15078 '-mxl-mode-APP-MODEL' 15079 Select application model APP-MODEL. Valid models are 15080 'executable' 15081 normal executable (default), uses startup code 'crt0.o'. 15082 15083 'xmdstub' 15084 for use with Xilinx Microprocessor Debugger (XMD) based 15085 software intrusive debug agent called xmdstub. This uses 15086 startup file 'crt1.o' and sets the start address of the 15087 program to 0x800. 15088 15089 'bootstrap' 15090 for applications that are loaded using a bootloader. This 15091 model uses startup file 'crt2.o' which does not contain a 15092 processor reset vector handler. This is suitable for 15093 transferring control on a processor reset to the bootloader 15094 rather than the application. 15095 15096 'novectors' 15097 for applications that do not require any of the MicroBlaze 15098 vectors. This option may be useful for applications running 15099 within a monitoring application. This model uses 'crt3.o' as 15100 a startup file. 15101 15102 Option '-xl-mode-APP-MODEL' is a deprecated alias for 15103 '-mxl-mode-APP-MODEL'. 15104 15105 15106 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options 15107 15108 3.17.26 MIPS Options 15109 -------------------- 15110 15111 '-EB' 15112 Generate big-endian code. 15113 15114 '-EL' 15115 Generate little-endian code. This is the default for 'mips*el-*-*' 15116 configurations. 15117 15118 '-march=ARCH' 15119 Generate code that runs on ARCH, which can be the name of a generic 15120 MIPS ISA, or the name of a particular processor. The ISA names 15121 are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2', 15122 'mips64' and 'mips64r2'. The processor names are: '4kc', '4km', 15123 '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc', '5kf', 15124 '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1', 15125 '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc', 15126 '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1', 15127 '1004kf1_1', 'loongson2e', 'loongson2f', 'loongson3a', 'm4k', 15128 'octeon', 'octeon+', 'octeon2', 'orion', 'r2000', 'r3000', 'r3900', 15129 'r4000', 'r4400', 'r4600', 'r4650', 'r4700', 'r6000', 'r8000', 15130 'rm7000', 'rm9000', 'r10000', 'r12000', 'r14000', 'r16000', 'sb1', 15131 'sr71000', 'vr4100', 'vr4111', 'vr4120', 'vr4130', 'vr4300', 15132 'vr5000', 'vr5400', 'vr5500', 'xlr' and 'xlp'. The special value 15133 'from-abi' selects the most compatible architecture for the 15134 selected ABI (that is, 'mips1' for 32-bit ABIs and 'mips3' for 15135 64-bit ABIs). 15136 15137 The native Linux/GNU toolchain also supports the value 'native', 15138 which selects the best architecture option for the host processor. 15139 '-march=native' has no effect if GCC does not recognize the 15140 processor. 15141 15142 In processor names, a final '000' can be abbreviated as 'k' (for 15143 example, '-march=r2k'). Prefixes are optional, and 'vr' may be 15144 written 'r'. 15145 15146 Names of the form 'Nf2_1' refer to processors with FPUs clocked at 15147 half the rate of the core, names of the form 'Nf1_1' refer to 15148 processors with FPUs clocked at the same rate as the core, and 15149 names of the form 'Nf3_2' refer to processors with FPUs clocked a 15150 ratio of 3:2 with respect to the core. For compatibility reasons, 15151 'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are 15152 accepted as synonyms for 'Nf1_1'. 15153 15154 GCC defines two macros based on the value of this option. The 15155 first is '_MIPS_ARCH', which gives the name of target architecture, 15156 as a string. The second has the form '_MIPS_ARCH_FOO', where FOO 15157 is the capitalized value of '_MIPS_ARCH'. For example, 15158 '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro 15159 '_MIPS_ARCH_R2000'. 15160 15161 Note that the '_MIPS_ARCH' macro uses the processor names given 15162 above. In other words, it has the full prefix and does not 15163 abbreviate '000' as 'k'. In the case of 'from-abi', the macro 15164 names the resolved architecture (either '"mips1"' or '"mips3"'). 15165 It names the default architecture when no '-march' option is given. 15166 15167 '-mtune=ARCH' 15168 Optimize for ARCH. Among other things, this option controls the 15169 way instructions are scheduled, and the perceived cost of 15170 arithmetic operations. The list of ARCH values is the same as for 15171 '-march'. 15172 15173 When this option is not used, GCC optimizes for the processor 15174 specified by '-march'. By using '-march' and '-mtune' together, it 15175 is possible to generate code that runs on a family of processors, 15176 but optimize the code for one particular member of that family. 15177 15178 '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO', 15179 which work in the same way as the '-march' ones described above. 15180 15181 '-mips1' 15182 Equivalent to '-march=mips1'. 15183 15184 '-mips2' 15185 Equivalent to '-march=mips2'. 15186 15187 '-mips3' 15188 Equivalent to '-march=mips3'. 15189 15190 '-mips4' 15191 Equivalent to '-march=mips4'. 15192 15193 '-mips32' 15194 Equivalent to '-march=mips32'. 15195 15196 '-mips32r2' 15197 Equivalent to '-march=mips32r2'. 15198 15199 '-mips64' 15200 Equivalent to '-march=mips64'. 15201 15202 '-mips64r2' 15203 Equivalent to '-march=mips64r2'. 15204 15205 '-mips16' 15206 '-mno-mips16' 15207 Generate (do not generate) MIPS16 code. If GCC is targeting a 15208 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE. 15209 15210 MIPS16 code generation can also be controlled on a per-function 15211 basis by means of 'mips16' and 'nomips16' attributes. *Note 15212 Function Attributes::, for more information. 15213 15214 '-mflip-mips16' 15215 Generate MIPS16 code on alternating functions. This option is 15216 provided for regression testing of mixed MIPS16/non-MIPS16 code 15217 generation, and is not intended for ordinary use in compiling user 15218 code. 15219 15220 '-minterlink-mips16' 15221 '-mno-interlink-mips16' 15222 Require (do not require) that non-MIPS16 code be link-compatible 15223 with MIPS16 code. 15224 15225 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 15226 it must either use a call or an indirect jump. 15227 '-minterlink-mips16' therefore disables direct jumps unless GCC 15228 knows that the target of the jump is not MIPS16. 15229 15230 '-mabi=32' 15231 '-mabi=o64' 15232 '-mabi=n32' 15233 '-mabi=64' 15234 '-mabi=eabi' 15235 Generate code for the given ABI. 15236 15237 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 15238 generates 64-bit code when you select a 64-bit architecture, but 15239 you can use '-mgp32' to get 32-bit code instead. 15240 15241 For information about the O64 ABI, see 15242 <http://gcc.gnu.org/projects/mipso64-abi.html>. 15243 15244 GCC supports a variant of the o32 ABI in which floating-point 15245 registers are 64 rather than 32 bits wide. You can select this 15246 combination with '-mabi=32' '-mfp64'. This ABI relies on the 15247 'mthc1' and 'mfhc1' instructions and is therefore only supported 15248 for MIPS32R2 processors. 15249 15250 The register assignments for arguments and return values remain the 15251 same, but each scalar value is passed in a single 64-bit register 15252 rather than a pair of 32-bit registers. For example, scalar 15253 floating-point values are returned in '$f0' only, not a '$f0'/'$f1' 15254 pair. The set of call-saved registers also remains the same, but 15255 all 64 bits are saved. 15256 15257 '-mabicalls' 15258 '-mno-abicalls' 15259 Generate (do not generate) code that is suitable for SVR4-style 15260 dynamic objects. '-mabicalls' is the default for SVR4-based 15261 systems. 15262 15263 '-mshared' 15264 '-mno-shared' 15265 Generate (do not generate) code that is fully position-independent, 15266 and that can therefore be linked into shared libraries. This 15267 option only affects '-mabicalls'. 15268 15269 All '-mabicalls' code has traditionally been position-independent, 15270 regardless of options like '-fPIC' and '-fpic'. However, as an 15271 extension, the GNU toolchain allows executables to use absolute 15272 accesses for locally-binding symbols. It can also use shorter GP 15273 initialization sequences and generate direct calls to 15274 locally-defined functions. This mode is selected by '-mno-shared'. 15275 15276 '-mno-shared' depends on binutils 2.16 or higher and generates 15277 objects that can only be linked by the GNU linker. However, the 15278 option does not affect the ABI of the final executable; it only 15279 affects the ABI of relocatable objects. Using '-mno-shared' 15280 generally makes executables both smaller and quicker. 15281 15282 '-mshared' is the default. 15283 15284 '-mplt' 15285 '-mno-plt' 15286 Assume (do not assume) that the static and dynamic linkers support 15287 PLTs and copy relocations. This option only affects '-mno-shared 15288 -mabicalls'. For the n64 ABI, this option has no effect without 15289 '-msym32'. 15290 15291 You can make '-mplt' the default by configuring GCC with 15292 '--with-mips-plt'. The default is '-mno-plt' otherwise. 15293 15294 '-mxgot' 15295 '-mno-xgot' 15296 Lift (do not lift) the usual restrictions on the size of the global 15297 offset table. 15298 15299 GCC normally uses a single instruction to load values from the GOT. 15300 While this is relatively efficient, it only works if the GOT is 15301 smaller than about 64k. Anything larger causes the linker to 15302 report an error such as: 15303 15304 relocation truncated to fit: R_MIPS_GOT16 foobar 15305 15306 If this happens, you should recompile your code with '-mxgot'. 15307 This works with very large GOTs, although the code is also less 15308 efficient, since it takes three instructions to fetch the value of 15309 a global symbol. 15310 15311 Note that some linkers can create multiple GOTs. If you have such 15312 a linker, you should only need to use '-mxgot' when a single object 15313 file accesses more than 64k's worth of GOT entries. Very few do. 15314 15315 These options have no effect unless GCC is generating position 15316 independent code. 15317 15318 '-mgp32' 15319 Assume that general-purpose registers are 32 bits wide. 15320 15321 '-mgp64' 15322 Assume that general-purpose registers are 64 bits wide. 15323 15324 '-mfp32' 15325 Assume that floating-point registers are 32 bits wide. 15326 15327 '-mfp64' 15328 Assume that floating-point registers are 64 bits wide. 15329 15330 '-mhard-float' 15331 Use floating-point coprocessor instructions. 15332 15333 '-msoft-float' 15334 Do not use floating-point coprocessor instructions. Implement 15335 floating-point calculations using library calls instead. 15336 15337 '-mno-float' 15338 Equivalent to '-msoft-float', but additionally asserts that the 15339 program being compiled does not perform any floating-point 15340 operations. This option is presently supported only by some 15341 bare-metal MIPS configurations, where it may select a special set 15342 of libraries that lack all floating-point support (including, for 15343 example, the floating-point 'printf' formats). If code compiled 15344 with '-mno-float' accidentally contains floating-point operations, 15345 it is likely to suffer a link-time or run-time failure. 15346 15347 '-msingle-float' 15348 Assume that the floating-point coprocessor only supports 15349 single-precision operations. 15350 15351 '-mdouble-float' 15352 Assume that the floating-point coprocessor supports 15353 double-precision operations. This is the default. 15354 15355 '-mllsc' 15356 '-mno-llsc' 15357 Use (do not use) 'll', 'sc', and 'sync' instructions to implement 15358 atomic memory built-in functions. When neither option is 15359 specified, GCC uses the instructions if the target architecture 15360 supports them. 15361 15362 '-mllsc' is useful if the runtime environment can emulate the 15363 instructions and '-mno-llsc' can be useful when compiling for 15364 nonstandard ISAs. You can make either option the default by 15365 configuring GCC with '--with-llsc' and '--without-llsc' 15366 respectively. '--with-llsc' is the default for some 15367 configurations; see the installation documentation for details. 15368 15369 '-mdsp' 15370 '-mno-dsp' 15371 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 15372 Built-in Functions::. This option defines the preprocessor macro 15373 '__mips_dsp'. It also defines '__mips_dsp_rev' to 1. 15374 15375 '-mdspr2' 15376 '-mno-dspr2' 15377 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 15378 Built-in Functions::. This option defines the preprocessor macros 15379 '__mips_dsp' and '__mips_dspr2'. It also defines '__mips_dsp_rev' 15380 to 2. 15381 15382 '-msmartmips' 15383 '-mno-smartmips' 15384 Use (do not use) the MIPS SmartMIPS ASE. 15385 15386 '-mpaired-single' 15387 '-mno-paired-single' 15388 Use (do not use) paired-single floating-point instructions. *Note 15389 MIPS Paired-Single Support::. This option requires hardware 15390 floating-point support to be enabled. 15391 15392 '-mdmx' 15393 '-mno-mdmx' 15394 Use (do not use) MIPS Digital Media Extension instructions. This 15395 option can only be used when generating 64-bit code and requires 15396 hardware floating-point support to be enabled. 15397 15398 '-mips3d' 15399 '-mno-mips3d' 15400 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 15401 Functions::. The option '-mips3d' implies '-mpaired-single'. 15402 15403 '-mmt' 15404 '-mno-mt' 15405 Use (do not use) MT Multithreading instructions. 15406 15407 '-mmcu' 15408 '-mno-mcu' 15409 Use (do not use) the MIPS MCU ASE instructions. 15410 15411 '-mlong64' 15412 Force 'long' types to be 64 bits wide. See '-mlong32' for an 15413 explanation of the default and the way that the pointer size is 15414 determined. 15415 15416 '-mlong32' 15417 Force 'long', 'int', and pointer types to be 32 bits wide. 15418 15419 The default size of 'int's, 'long's and pointers depends on the 15420 ABI. All the supported ABIs use 32-bit 'int's. The n64 ABI uses 15421 64-bit 'long's, as does the 64-bit EABI; the others use 32-bit 15422 'long's. Pointers are the same size as 'long's, or the same size 15423 as integer registers, whichever is smaller. 15424 15425 '-msym32' 15426 '-mno-sym32' 15427 Assume (do not assume) that all symbols have 32-bit values, 15428 regardless of the selected ABI. This option is useful in 15429 combination with '-mabi=64' and '-mno-abicalls' because it allows 15430 GCC to generate shorter and faster references to symbolic 15431 addresses. 15432 15433 '-G NUM' 15434 Put definitions of externally-visible data in a small data section 15435 if that data is no bigger than NUM bytes. GCC can then generate 15436 more efficient accesses to the data; see '-mgpopt' for details. 15437 15438 The default '-G' option depends on the configuration. 15439 15440 '-mlocal-sdata' 15441 '-mno-local-sdata' 15442 Extend (do not extend) the '-G' behavior to local data too, such as 15443 to static variables in C. '-mlocal-sdata' is the default for all 15444 configurations. 15445 15446 If the linker complains that an application is using too much small 15447 data, you might want to try rebuilding the less 15448 performance-critical parts with '-mno-local-sdata'. You might also 15449 want to build large libraries with '-mno-local-sdata', so that the 15450 libraries leave more room for the main program. 15451 15452 '-mextern-sdata' 15453 '-mno-extern-sdata' 15454 Assume (do not assume) that externally-defined data is in a small 15455 data section if the size of that data is within the '-G' limit. 15456 '-mextern-sdata' is the default for all configurations. 15457 15458 If you compile a module MOD with '-mextern-sdata' '-G NUM' 15459 '-mgpopt', and MOD references a variable VAR that is no bigger than 15460 NUM bytes, you must make sure that VAR is placed in a small data 15461 section. If VAR is defined by another module, you must either 15462 compile that module with a high-enough '-G' setting or attach a 15463 'section' attribute to VAR's definition. If VAR is common, you 15464 must link the application with a high-enough '-G' setting. 15465 15466 The easiest way of satisfying these restrictions is to compile and 15467 link every module with the same '-G' option. However, you may wish 15468 to build a library that supports several different small data 15469 limits. You can do this by compiling the library with the highest 15470 supported '-G' setting and additionally using '-mno-extern-sdata' 15471 to stop the library from making assumptions about 15472 externally-defined data. 15473 15474 '-mgpopt' 15475 '-mno-gpopt' 15476 Use (do not use) GP-relative accesses for symbols that are known to 15477 be in a small data section; see '-G', '-mlocal-sdata' and 15478 '-mextern-sdata'. '-mgpopt' is the default for all configurations. 15479 15480 '-mno-gpopt' is useful for cases where the '$gp' register might not 15481 hold the value of '_gp'. For example, if the code is part of a 15482 library that might be used in a boot monitor, programs that call 15483 boot monitor routines pass an unknown value in '$gp'. (In such 15484 situations, the boot monitor itself is usually compiled with 15485 '-G0'.) 15486 15487 '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'. 15488 15489 '-membedded-data' 15490 '-mno-embedded-data' 15491 Allocate variables to the read-only data section first if possible, 15492 then next in the small data section if possible, otherwise in data. 15493 This gives slightly slower code than the default, but reduces the 15494 amount of RAM required when executing, and thus may be preferred 15495 for some embedded systems. 15496 15497 '-muninit-const-in-rodata' 15498 '-mno-uninit-const-in-rodata' 15499 Put uninitialized 'const' variables in the read-only data section. 15500 This option is only meaningful in conjunction with 15501 '-membedded-data'. 15502 15503 '-mcode-readable=SETTING' 15504 Specify whether GCC may generate code that reads from executable 15505 sections. There are three possible settings: 15506 15507 '-mcode-readable=yes' 15508 Instructions may freely access executable sections. This is 15509 the default setting. 15510 15511 '-mcode-readable=pcrel' 15512 MIPS16 PC-relative load instructions can access executable 15513 sections, but other instructions must not do so. This option 15514 is useful on 4KSc and 4KSd processors when the code TLBs have 15515 the Read Inhibit bit set. It is also useful on processors 15516 that can be configured to have a dual instruction/data SRAM 15517 interface and that, like the M4K, automatically redirect 15518 PC-relative loads to the instruction RAM. 15519 15520 '-mcode-readable=no' 15521 Instructions must not access executable sections. This option 15522 can be useful on targets that are configured to have a dual 15523 instruction/data SRAM interface but that (unlike the M4K) do 15524 not automatically redirect PC-relative loads to the 15525 instruction RAM. 15526 15527 '-msplit-addresses' 15528 '-mno-split-addresses' 15529 Enable (disable) use of the '%hi()' and '%lo()' assembler 15530 relocation operators. This option has been superseded by 15531 '-mexplicit-relocs' but is retained for backwards compatibility. 15532 15533 '-mexplicit-relocs' 15534 '-mno-explicit-relocs' 15535 Use (do not use) assembler relocation operators when dealing with 15536 symbolic addresses. The alternative, selected by 15537 '-mno-explicit-relocs', is to use assembler macros instead. 15538 15539 '-mexplicit-relocs' is the default if GCC was configured to use an 15540 assembler that supports relocation operators. 15541 15542 '-mcheck-zero-division' 15543 '-mno-check-zero-division' 15544 Trap (do not trap) on integer division by zero. 15545 15546 The default is '-mcheck-zero-division'. 15547 15548 '-mdivide-traps' 15549 '-mdivide-breaks' 15550 MIPS systems check for division by zero by generating either a 15551 conditional trap or a break instruction. Using traps results in 15552 smaller code, but is only supported on MIPS II and later. Also, 15553 some versions of the Linux kernel have a bug that prevents trap 15554 from generating the proper signal ('SIGFPE'). Use '-mdivide-traps' 15555 to allow conditional traps on architectures that support them and 15556 '-mdivide-breaks' to force the use of breaks. 15557 15558 The default is usually '-mdivide-traps', but this can be overridden 15559 at configure time using '--with-divide=breaks'. Divide-by-zero 15560 checks can be completely disabled using '-mno-check-zero-division'. 15561 15562 '-mmemcpy' 15563 '-mno-memcpy' 15564 Force (do not force) the use of 'memcpy()' for non-trivial block 15565 moves. The default is '-mno-memcpy', which allows GCC to inline 15566 most constant-sized copies. 15567 15568 '-mlong-calls' 15569 '-mno-long-calls' 15570 Disable (do not disable) use of the 'jal' instruction. Calling 15571 functions using 'jal' is more efficient but requires the caller and 15572 callee to be in the same 256 megabyte segment. 15573 15574 This option has no effect on abicalls code. The default is 15575 '-mno-long-calls'. 15576 15577 '-mmad' 15578 '-mno-mad' 15579 Enable (disable) use of the 'mad', 'madu' and 'mul' instructions, 15580 as provided by the R4650 ISA. 15581 15582 '-mfused-madd' 15583 '-mno-fused-madd' 15584 Enable (disable) use of the floating-point multiply-accumulate 15585 instructions, when they are available. The default is 15586 '-mfused-madd'. 15587 15588 On the R8000 CPU when multiply-accumulate instructions are used, 15589 the intermediate product is calculated to infinite precision and is 15590 not subject to the FCSR Flush to Zero bit. This may be undesirable 15591 in some circumstances. On other processors the result is 15592 numerically identical to the equivalent computation using separate 15593 multiply, add, subtract and negate instructions. 15594 15595 '-nocpp' 15596 Tell the MIPS assembler to not run its preprocessor over user 15597 assembler files (with a '.s' suffix) when assembling them. 15598 15599 '-mfix-24k' 15600 '-mno-fix-24k' 15601 Work around the 24K E48 (lost data on stores during refill) errata. 15602 The workarounds are implemented by the assembler rather than by 15603 GCC. 15604 15605 '-mfix-r4000' 15606 '-mno-fix-r4000' 15607 Work around certain R4000 CPU errata: 15608 - A double-word or a variable shift may give an incorrect result 15609 if executed immediately after starting an integer division. 15610 - A double-word or a variable shift may give an incorrect result 15611 if executed while an integer multiplication is in progress. 15612 - An integer division may give an incorrect result if started in 15613 a delay slot of a taken branch or a jump. 15614 15615 '-mfix-r4400' 15616 '-mno-fix-r4400' 15617 Work around certain R4400 CPU errata: 15618 - A double-word or a variable shift may give an incorrect result 15619 if executed immediately after starting an integer division. 15620 15621 '-mfix-r10000' 15622 '-mno-fix-r10000' 15623 Work around certain R10000 errata: 15624 - 'll'/'sc' sequences may not behave atomically on revisions 15625 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 15626 15627 This option can only be used if the target architecture supports 15628 branch-likely instructions. '-mfix-r10000' is the default when 15629 '-march=r10000' is used; '-mno-fix-r10000' is the default 15630 otherwise. 15631 15632 '-mfix-vr4120' 15633 '-mno-fix-vr4120' 15634 Work around certain VR4120 errata: 15635 - 'dmultu' does not always produce the correct result. 15636 - 'div' and 'ddiv' do not always produce the correct result if 15637 one of the operands is negative. 15638 The workarounds for the division errata rely on special functions 15639 in 'libgcc.a'. At present, these functions are only provided by 15640 the 'mips64vr*-elf' configurations. 15641 15642 Other VR4120 errata require a NOP to be inserted between certain 15643 pairs of instructions. These errata are handled by the assembler, 15644 not by GCC itself. 15645 15646 '-mfix-vr4130' 15647 Work around the VR4130 'mflo'/'mfhi' errata. The workarounds are 15648 implemented by the assembler rather than by GCC, although GCC 15649 avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi', 15650 'dmacc' and 'dmacchi' instructions are available instead. 15651 15652 '-mfix-sb1' 15653 '-mno-fix-sb1' 15654 Work around certain SB-1 CPU core errata. (This flag currently 15655 works around the SB-1 revision 2 "F1" and "F2" floating-point 15656 errata.) 15657 15658 '-mr10k-cache-barrier=SETTING' 15659 Specify whether GCC should insert cache barriers to avoid the 15660 side-effects of speculation on R10K processors. 15661 15662 In common with many processors, the R10K tries to predict the 15663 outcome of a conditional branch and speculatively executes 15664 instructions from the "taken" branch. It later aborts these 15665 instructions if the predicted outcome is wrong. However, on the 15666 R10K, even aborted instructions can have side effects. 15667 15668 This problem only affects kernel stores and, depending on the 15669 system, kernel loads. As an example, a speculatively-executed 15670 store may load the target memory into cache and mark the cache line 15671 as dirty, even if the store itself is later aborted. If a DMA 15672 operation writes to the same area of memory before the "dirty" line 15673 is flushed, the cached data overwrites the DMA-ed data. See the 15674 R10K processor manual for a full description, including other 15675 potential problems. 15676 15677 One workaround is to insert cache barrier instructions before every 15678 memory access that might be speculatively executed and that might 15679 have side effects even if aborted. '-mr10k-cache-barrier=SETTING' 15680 controls GCC's implementation of this workaround. It assumes that 15681 aborted accesses to any byte in the following regions does not have 15682 side effects: 15683 15684 1. the memory occupied by the current function's stack frame; 15685 15686 2. the memory occupied by an incoming stack argument; 15687 15688 3. the memory occupied by an object with a link-time-constant 15689 address. 15690 15691 It is the kernel's responsibility to ensure that speculative 15692 accesses to these regions are indeed safe. 15693 15694 If the input program contains a function declaration such as: 15695 15696 void foo (void); 15697 15698 then the implementation of 'foo' must allow 'j foo' and 'jal foo' 15699 to be executed speculatively. GCC honors this restriction for 15700 functions it compiles itself. It expects non-GCC functions (such 15701 as hand-written assembly code) to do the same. 15702 15703 The option has three forms: 15704 15705 '-mr10k-cache-barrier=load-store' 15706 Insert a cache barrier before a load or store that might be 15707 speculatively executed and that might have side effects even 15708 if aborted. 15709 15710 '-mr10k-cache-barrier=store' 15711 Insert a cache barrier before a store that might be 15712 speculatively executed and that might have side effects even 15713 if aborted. 15714 15715 '-mr10k-cache-barrier=none' 15716 Disable the insertion of cache barriers. This is the default 15717 setting. 15718 15719 '-mflush-func=FUNC' 15720 '-mno-flush-func' 15721 Specifies the function to call to flush the I and D caches, or to 15722 not call any such function. If called, the function must take the 15723 same arguments as the common '_flush_func()', that is, the address 15724 of the memory range for which the cache is being flushed, the size 15725 of the memory range, and the number 3 (to flush both caches). The 15726 default depends on the target GCC was configured for, but commonly 15727 is either '_flush_func' or '__cpu_flush'. 15728 15729 'mbranch-cost=NUM' 15730 Set the cost of branches to roughly NUM "simple" instructions. 15731 This cost is only a heuristic and is not guaranteed to produce 15732 consistent results across releases. A zero cost redundantly 15733 selects the default, which is based on the '-mtune' setting. 15734 15735 '-mbranch-likely' 15736 '-mno-branch-likely' 15737 Enable or disable use of Branch Likely instructions, regardless of 15738 the default for the selected architecture. By default, Branch 15739 Likely instructions may be generated if they are supported by the 15740 selected architecture. An exception is for the MIPS32 and MIPS64 15741 architectures and processors that implement those architectures; 15742 for those, Branch Likely instructions are not be generated by 15743 default because the MIPS32 and MIPS64 architectures specifically 15744 deprecate their use. 15745 15746 '-mfp-exceptions' 15747 '-mno-fp-exceptions' 15748 Specifies whether FP exceptions are enabled. This affects how FP 15749 instructions are scheduled for some processors. The default is 15750 that FP exceptions are enabled. 15751 15752 For instance, on the SB-1, if FP exceptions are disabled, and we 15753 are emitting 64-bit code, then we can use both FP pipes. 15754 Otherwise, we can only use one FP pipe. 15755 15756 '-mvr4130-align' 15757 '-mno-vr4130-align' 15758 The VR4130 pipeline is two-way superscalar, but can only issue two 15759 instructions together if the first one is 8-byte aligned. When 15760 this option is enabled, GCC aligns pairs of instructions that it 15761 thinks should execute in parallel. 15762 15763 This option only has an effect when optimizing for the VR4130. It 15764 normally makes code faster, but at the expense of making it bigger. 15765 It is enabled by default at optimization level '-O3'. 15766 15767 '-msynci' 15768 '-mno-synci' 15769 Enable (disable) generation of 'synci' instructions on 15770 architectures that support it. The 'synci' instructions (if 15771 enabled) are generated when '__builtin___clear_cache()' is 15772 compiled. 15773 15774 This option defaults to '-mno-synci', but the default can be 15775 overridden by configuring with '--with-synci'. 15776 15777 When compiling code for single processor systems, it is generally 15778 safe to use 'synci'. However, on many multi-core (SMP) systems, it 15779 does not invalidate the instruction caches on all cores and may 15780 lead to undefined behavior. 15781 15782 '-mrelax-pic-calls' 15783 '-mno-relax-pic-calls' 15784 Try to turn PIC calls that are normally dispatched via register 15785 '$25' into direct calls. This is only possible if the linker can 15786 resolve the destination at link-time and if the destination is 15787 within range for a direct call. 15788 15789 '-mrelax-pic-calls' is the default if GCC was configured to use an 15790 assembler and a linker that support the '.reloc' assembly directive 15791 and '-mexplicit-relocs' is in effect. With '-mno-explicit-relocs', 15792 this optimization can be performed by the assembler and the linker 15793 alone without help from the compiler. 15794 15795 '-mmcount-ra-address' 15796 '-mno-mcount-ra-address' 15797 Emit (do not emit) code that allows '_mcount' to modify the calling 15798 function's return address. When enabled, this option extends the 15799 usual '_mcount' interface with a new RA-ADDRESS parameter, which 15800 has type 'intptr_t *' and is passed in register '$12'. '_mcount' 15801 can then modify the return address by doing both of the following: 15802 * Returning the new address in register '$31'. 15803 * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is 15804 nonnull. 15805 15806 The default is '-mno-mcount-ra-address'. 15807 15808 15809 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 15810 15811 3.17.27 MMIX Options 15812 -------------------- 15813 15814 These options are defined for the MMIX: 15815 15816 '-mlibfuncs' 15817 '-mno-libfuncs' 15818 Specify that intrinsic library functions are being compiled, 15819 passing all values in registers, no matter the size. 15820 15821 '-mepsilon' 15822 '-mno-epsilon' 15823 Generate floating-point comparison instructions that compare with 15824 respect to the 'rE' epsilon register. 15825 15826 '-mabi=mmixware' 15827 '-mabi=gnu' 15828 Generate code that passes function parameters and return values 15829 that (in the called function) are seen as registers '$0' and up, as 15830 opposed to the GNU ABI which uses global registers '$231' and up. 15831 15832 '-mzero-extend' 15833 '-mno-zero-extend' 15834 When reading data from memory in sizes shorter than 64 bits, use 15835 (do not use) zero-extending load instructions by default, rather 15836 than sign-extending ones. 15837 15838 '-mknuthdiv' 15839 '-mno-knuthdiv' 15840 Make the result of a division yielding a remainder have the same 15841 sign as the divisor. With the default, '-mno-knuthdiv', the sign 15842 of the remainder follows the sign of the dividend. Both methods 15843 are arithmetically valid, the latter being almost exclusively used. 15844 15845 '-mtoplevel-symbols' 15846 '-mno-toplevel-symbols' 15847 Prepend (do not prepend) a ':' to all global symbols, so the 15848 assembly code can be used with the 'PREFIX' assembly directive. 15849 15850 '-melf' 15851 Generate an executable in the ELF format, rather than the default 15852 'mmo' format used by the 'mmix' simulator. 15853 15854 '-mbranch-predict' 15855 '-mno-branch-predict' 15856 Use (do not use) the probable-branch instructions, when static 15857 branch prediction indicates a probable branch. 15858 15859 '-mbase-addresses' 15860 '-mno-base-addresses' 15861 Generate (do not generate) code that uses _base addresses_. Using 15862 a base address automatically generates a request (handled by the 15863 assembler and the linker) for a constant to be set up in a global 15864 register. The register is used for one or more base address 15865 requests within the range 0 to 255 from the value held in the 15866 register. The generally leads to short and fast code, but the 15867 number of different data items that can be addressed is limited. 15868 This means that a program that uses lots of static data may require 15869 '-mno-base-addresses'. 15870 15871 '-msingle-exit' 15872 '-mno-single-exit' 15873 Force (do not force) generated code to have a single exit point in 15874 each function. 15875 15876 15877 File: gcc.info, Node: MN10300 Options, Next: Moxie Options, Prev: MMIX Options, Up: Submodel Options 15878 15879 3.17.28 MN10300 Options 15880 ----------------------- 15881 15882 These '-m' options are defined for Matsushita MN10300 architectures: 15883 15884 '-mmult-bug' 15885 Generate code to avoid bugs in the multiply instructions for the 15886 MN10300 processors. This is the default. 15887 15888 '-mno-mult-bug' 15889 Do not generate code to avoid bugs in the multiply instructions for 15890 the MN10300 processors. 15891 15892 '-mam33' 15893 Generate code using features specific to the AM33 processor. 15894 15895 '-mno-am33' 15896 Do not generate code using features specific to the AM33 processor. 15897 This is the default. 15898 15899 '-mam33-2' 15900 Generate code using features specific to the AM33/2.0 processor. 15901 15902 '-mam34' 15903 Generate code using features specific to the AM34 processor. 15904 15905 '-mtune=CPU-TYPE' 15906 Use the timing characteristics of the indicated CPU type when 15907 scheduling instructions. This does not change the targeted 15908 processor type. The CPU type must be one of 'mn10300', 'am33', 15909 'am33-2' or 'am34'. 15910 15911 '-mreturn-pointer-on-d0' 15912 When generating a function that returns a pointer, return the 15913 pointer in both 'a0' and 'd0'. Otherwise, the pointer is returned 15914 only in 'a0', and attempts to call such functions without a 15915 prototype result in errors. Note that this option is on by 15916 default; use '-mno-return-pointer-on-d0' to disable it. 15917 15918 '-mno-crt0' 15919 Do not link in the C run-time initialization object file. 15920 15921 '-mrelax' 15922 Indicate to the linker that it should perform a relaxation 15923 optimization pass to shorten branches, calls and absolute memory 15924 addresses. This option only has an effect when used on the command 15925 line for the final link step. 15926 15927 This option makes symbolic debugging impossible. 15928 15929 '-mliw' 15930 Allow the compiler to generate _Long Instruction Word_ instructions 15931 if the target is the 'AM33' or later. This is the default. This 15932 option defines the preprocessor macro '__LIW__'. 15933 15934 '-mnoliw' 15935 Do not allow the compiler to generate _Long Instruction Word_ 15936 instructions. This option defines the preprocessor macro 15937 '__NO_LIW__'. 15938 15939 '-msetlb' 15940 Allow the compiler to generate the _SETLB_ and _Lcc_ instructions 15941 if the target is the 'AM33' or later. This is the default. This 15942 option defines the preprocessor macro '__SETLB__'. 15943 15944 '-mnosetlb' 15945 Do not allow the compiler to generate _SETLB_ or _Lcc_ 15946 instructions. This option defines the preprocessor macro 15947 '__NO_SETLB__'. 15948 15949 15950 File: gcc.info, Node: Moxie Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options 15951 15952 3.17.29 Moxie Options 15953 --------------------- 15954 15955 '-meb' 15956 Generate big-endian code. This is the default for 'moxie-*-*' 15957 configurations. 15958 15959 '-mel' 15960 Generate little-endian code. 15961 15962 '-mno-crt0' 15963 Do not link in the C run-time initialization object file. 15964 15965 15966 File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: Moxie Options, Up: Submodel Options 15967 15968 3.17.30 PDP-11 Options 15969 ---------------------- 15970 15971 These options are defined for the PDP-11: 15972 15973 '-mfpu' 15974 Use hardware FPP floating point. This is the default. (FIS 15975 floating point on the PDP-11/40 is not supported.) 15976 15977 '-msoft-float' 15978 Do not use hardware floating point. 15979 15980 '-mac0' 15981 Return floating-point results in ac0 (fr0 in Unix assembler 15982 syntax). 15983 15984 '-mno-ac0' 15985 Return floating-point results in memory. This is the default. 15986 15987 '-m40' 15988 Generate code for a PDP-11/40. 15989 15990 '-m45' 15991 Generate code for a PDP-11/45. This is the default. 15992 15993 '-m10' 15994 Generate code for a PDP-11/10. 15995 15996 '-mbcopy-builtin' 15997 Use inline 'movmemhi' patterns for copying memory. This is the 15998 default. 15999 16000 '-mbcopy' 16001 Do not use inline 'movmemhi' patterns for copying memory. 16002 16003 '-mint16' 16004 '-mno-int32' 16005 Use 16-bit 'int'. This is the default. 16006 16007 '-mint32' 16008 '-mno-int16' 16009 Use 32-bit 'int'. 16010 16011 '-mfloat64' 16012 '-mno-float32' 16013 Use 64-bit 'float'. This is the default. 16014 16015 '-mfloat32' 16016 '-mno-float64' 16017 Use 32-bit 'float'. 16018 16019 '-mabshi' 16020 Use 'abshi2' pattern. This is the default. 16021 16022 '-mno-abshi' 16023 Do not use 'abshi2' pattern. 16024 16025 '-mbranch-expensive' 16026 Pretend that branches are expensive. This is for experimenting 16027 with code generation only. 16028 16029 '-mbranch-cheap' 16030 Do not pretend that branches are expensive. This is the default. 16031 16032 '-munix-asm' 16033 Use Unix assembler syntax. This is the default when configured for 16034 'pdp11-*-bsd'. 16035 16036 '-mdec-asm' 16037 Use DEC assembler syntax. This is the default when configured for 16038 any PDP-11 target other than 'pdp11-*-bsd'. 16039 16040 16041 File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 16042 16043 3.17.31 picoChip Options 16044 ------------------------ 16045 16046 These '-m' options are defined for picoChip implementations: 16047 16048 '-mae=AE_TYPE' 16049 Set the instruction set, register set, and instruction scheduling 16050 parameters for array element type AE_TYPE. Supported values for 16051 AE_TYPE are 'ANY', 'MUL', and 'MAC'. 16052 16053 '-mae=ANY' selects a completely generic AE type. Code generated 16054 with this option runs on any of the other AE types. The code is 16055 not as efficient as it would be if compiled for a specific AE type, 16056 and some types of operation (e.g., multiplication) do not work 16057 properly on all types of AE. 16058 16059 '-mae=MUL' selects a MUL AE type. This is the most useful AE type 16060 for compiled code, and is the default. 16061 16062 '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 16063 option may suffer from poor performance of byte (char) 16064 manipulation, since the DSP AE does not provide hardware support 16065 for byte load/stores. 16066 16067 '-msymbol-as-address' 16068 Enable the compiler to directly use a symbol name as an address in 16069 a load/store instruction, without first loading it into a register. 16070 Typically, the use of this option generates larger programs, which 16071 run faster than when the option isn't used. However, the results 16072 vary from program to program, so it is left as a user option, 16073 rather than being permanently enabled. 16074 16075 '-mno-inefficient-warnings' 16076 Disables warnings about the generation of inefficient code. These 16077 warnings can be generated, for example, when compiling code that 16078 performs byte-level memory operations on the MAC AE type. The MAC 16079 AE has no hardware support for byte-level memory operations, so all 16080 byte load/stores must be synthesized from word load/store 16081 operations. This is inefficient and a warning is generated to 16082 indicate that you should rewrite the code to avoid byte operations, 16083 or to target an AE type that has the necessary hardware support. 16084 This option disables these warnings. 16085 16086 16087 File: gcc.info, Node: PowerPC Options, Next: RL78 Options, Prev: picoChip Options, Up: Submodel Options 16088 16089 3.17.32 PowerPC Options 16090 ----------------------- 16091 16092 These are listed under *Note RS/6000 and PowerPC Options::. 16093 16094 16095 File: gcc.info, Node: RL78 Options, Next: RS/6000 and PowerPC Options, Prev: PowerPC Options, Up: Submodel Options 16096 16097 3.17.33 RL78 Options 16098 -------------------- 16099 16100 '-msim' 16101 Links in additional target libraries to support operation within a 16102 simulator. 16103 16104 '-mmul=none' 16105 '-mmul=g13' 16106 '-mmul=rl78' 16107 Specifies the type of hardware multiplication support to be used. 16108 The default is 'none', which uses software multiplication 16109 functions. The 'g13' option is for the hardware multiply/divide 16110 peripheral only on the RL78/G13 targets. The 'rl78' option is for 16111 the standard hardware multiplication defined in the RL78 software 16112 manual. 16113 16114 16115 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: RL78 Options, Up: Submodel Options 16116 16117 3.17.34 IBM RS/6000 and PowerPC Options 16118 --------------------------------------- 16119 16120 These '-m' options are defined for the IBM RS/6000 and PowerPC: 16121 '-mpowerpc-gpopt' 16122 '-mno-powerpc-gpopt' 16123 '-mpowerpc-gfxopt' 16124 '-mno-powerpc-gfxopt' 16125 '-mpowerpc64' 16126 '-mno-powerpc64' 16127 '-mmfcrf' 16128 '-mno-mfcrf' 16129 '-mpopcntb' 16130 '-mno-popcntb' 16131 '-mpopcntd' 16132 '-mno-popcntd' 16133 '-mfprnd' 16134 '-mno-fprnd' 16135 '-mcmpb' 16136 '-mno-cmpb' 16137 '-mmfpgpr' 16138 '-mno-mfpgpr' 16139 '-mhard-dfp' 16140 '-mno-hard-dfp' 16141 You use these options to specify which instructions are available 16142 on the processor you are using. The default value of these options 16143 is determined when configuring GCC. Specifying the 16144 '-mcpu=CPU_TYPE' overrides the specification of these options. We 16145 recommend you use the '-mcpu=CPU_TYPE' option rather than the 16146 options listed above. 16147 16148 Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC 16149 architecture instructions in the General Purpose group, including 16150 floating-point square root. Specifying '-mpowerpc-gfxopt' allows 16151 GCC to use the optional PowerPC architecture instructions in the 16152 Graphics group, including floating-point select. 16153 16154 The '-mmfcrf' option allows GCC to generate the move from condition 16155 register field instruction implemented on the POWER4 processor and 16156 other processors that support the PowerPC V2.01 architecture. The 16157 '-mpopcntb' option allows GCC to generate the popcount and 16158 double-precision FP reciprocal estimate instruction implemented on 16159 the POWER5 processor and other processors that support the PowerPC 16160 V2.02 architecture. The '-mpopcntd' option allows GCC to generate 16161 the popcount instruction implemented on the POWER7 processor and 16162 other processors that support the PowerPC V2.06 architecture. The 16163 '-mfprnd' option allows GCC to generate the FP round to integer 16164 instructions implemented on the POWER5+ processor and other 16165 processors that support the PowerPC V2.03 architecture. The 16166 '-mcmpb' option allows GCC to generate the compare bytes 16167 instruction implemented on the POWER6 processor and other 16168 processors that support the PowerPC V2.05 architecture. The 16169 '-mmfpgpr' option allows GCC to generate the FP move to/from 16170 general-purpose register instructions implemented on the POWER6X 16171 processor and other processors that support the extended PowerPC 16172 V2.05 architecture. The '-mhard-dfp' option allows GCC to generate 16173 the decimal floating-point instructions implemented on some POWER 16174 processors. 16175 16176 The '-mpowerpc64' option allows GCC to generate the additional 16177 64-bit instructions that are found in the full PowerPC64 16178 architecture and to treat GPRs as 64-bit, doubleword quantities. 16179 GCC defaults to '-mno-powerpc64'. 16180 16181 '-mcpu=CPU_TYPE' 16182 Set architecture type, register usage, and instruction scheduling 16183 parameters for machine type CPU_TYPE. Supported values for 16184 CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464', 16185 '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604', 16186 '604e', '620', '630', '740', '7400', '7450', '750', '801', '821', 16187 '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc', 16188 'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan', 16189 'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x', 16190 'power7', 'power8', 'powerpc', 'powerpc64', and 'rs64'. 16191 16192 '-mcpu=powerpc', and '-mcpu=powerpc64' specify pure 32-bit PowerPC 16193 and 64-bit PowerPC architecture machine types, with an appropriate, 16194 generic processor model assumed for scheduling purposes. 16195 16196 The other options specify a specific processor. Code generated 16197 under those options runs best on that processor, and may not run at 16198 all on others. 16199 16200 The '-mcpu' options automatically enable or disable the following 16201 options: 16202 16203 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 16204 -mpopcntb -mpopcntd -mpowerpc64 16205 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 16206 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 16207 -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector 16208 -mquad-memory -mquad-memory-atomic 16209 16210 The particular options set for any particular CPU varies between 16211 compiler versions, depending on what setting seems to produce 16212 optimal code for that CPU; it doesn't necessarily reflect the 16213 actual hardware's capabilities. If you wish to set an individual 16214 option to a particular value, you may specify it after the '-mcpu' 16215 option, like '-mcpu=970 -mno-altivec'. 16216 16217 On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled 16218 or disabled by the '-mcpu' option at present because AIX does not 16219 have full support for these options. You may still enable or 16220 disable them individually if you're sure it'll work in your 16221 environment. 16222 16223 '-mtune=CPU_TYPE' 16224 Set the instruction scheduling parameters for machine type 16225 CPU_TYPE, but do not set the architecture type or register usage, 16226 as '-mcpu=CPU_TYPE' does. The same values for CPU_TYPE are used 16227 for '-mtune' as for '-mcpu'. If both are specified, the code 16228 generated uses the architecture and registers set by '-mcpu', but 16229 the scheduling parameters set by '-mtune'. 16230 16231 '-mcmodel=small' 16232 Generate PowerPC64 code for the small model: The TOC is limited to 16233 64k. 16234 16235 '-mcmodel=medium' 16236 Generate PowerPC64 code for the medium model: The TOC and other 16237 static data may be up to a total of 4G in size. 16238 16239 '-mcmodel=large' 16240 Generate PowerPC64 code for the large model: The TOC may be up to 16241 4G in size. Other data and code is only limited by the 64-bit 16242 address space. 16243 16244 '-maltivec' 16245 '-mno-altivec' 16246 Generate code that uses (does not use) AltiVec instructions, and 16247 also enable the use of built-in functions that allow more direct 16248 access to the AltiVec instruction set. You may also need to set 16249 '-mabi=altivec' to adjust the current ABI with AltiVec ABI 16250 enhancements. 16251 16252 When '-maltivec' is used, rather than '-maltivec=le' or 16253 '-maltivec=be', the element order for Altivec intrinsics such as 16254 'vec_splat', 'vec_extract', and 'vec_insert' will match array 16255 element order corresponding to the endianness of the target. That 16256 is, element zero identifies the leftmost element in a vector 16257 register when targeting a big-endian platform, and identifies the 16258 rightmost element in a vector register when targeting a 16259 little-endian platform. 16260 16261 '-maltivec=be' 16262 Generate Altivec instructions using big-endian element order, 16263 regardless of whether the target is big- or little-endian. This is 16264 the default when targeting a big-endian platform. 16265 16266 The element order is used to interpret element numbers in Altivec 16267 intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'. 16268 By default, these will match array element order corresponding to 16269 the endianness for the target. 16270 16271 '-maltivec=le' 16272 Generate Altivec instructions using little-endian element order, 16273 regardless of whether the target is big- or little-endian. This is 16274 the default when targeting a little-endian platform. This option 16275 is currently ignored when targeting a big-endian platform. 16276 16277 The element order is used to interpret element numbers in Altivec 16278 intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'. 16279 By default, these will match array element order corresponding to 16280 the endianness for the target. 16281 16282 '-mvrsave' 16283 '-mno-vrsave' 16284 Generate VRSAVE instructions when generating AltiVec code. 16285 16286 '-mgen-cell-microcode' 16287 Generate Cell microcode instructions. 16288 16289 '-mwarn-cell-microcode' 16290 Warn when a Cell microcode instruction is emitted. An example of a 16291 Cell microcode instruction is a variable shift. 16292 16293 '-msecure-plt' 16294 Generate code that allows 'ld' and 'ld.so' to build executables and 16295 shared libraries with non-executable '.plt' and '.got' sections. 16296 This is a PowerPC 32-bit SYSV ABI option. 16297 16298 '-mbss-plt' 16299 Generate code that uses a BSS '.plt' section that 'ld.so' fills in, 16300 and requires '.plt' and '.got' sections that are both writable and 16301 executable. This is a PowerPC 32-bit SYSV ABI option. 16302 16303 '-misel' 16304 '-mno-isel' 16305 This switch enables or disables the generation of ISEL 16306 instructions. 16307 16308 '-misel=YES/NO' 16309 This switch has been deprecated. Use '-misel' and '-mno-isel' 16310 instead. 16311 16312 '-mspe' 16313 '-mno-spe' 16314 This switch enables or disables the generation of SPE simd 16315 instructions. 16316 16317 '-mpaired' 16318 '-mno-paired' 16319 This switch enables or disables the generation of PAIRED simd 16320 instructions. 16321 16322 '-mspe=YES/NO' 16323 This option has been deprecated. Use '-mspe' and '-mno-spe' 16324 instead. 16325 16326 '-mvsx' 16327 '-mno-vsx' 16328 Generate code that uses (does not use) vector/scalar (VSX) 16329 instructions, and also enable the use of built-in functions that 16330 allow more direct access to the VSX instruction set. 16331 16332 '-mcrypto' 16333 '-mno-crypto' 16334 Enable the use (disable) of the built-in functions that allow 16335 direct access to the cryptographic instructions that were added in 16336 version 2.07 of the PowerPC ISA. 16337 16338 '-mdirect-move' 16339 '-mno-direct-move' 16340 Generate code that uses (does not use) the instructions to move 16341 data between the general purpose registers and the vector/scalar 16342 (VSX) registers that were added in version 2.07 of the PowerPC ISA. 16343 16344 '-mpower8-fusion' 16345 '-mno-power8-fusion' 16346 Generate code that keeps (does not keeps) some integer operations 16347 adjacent so that the instructions can be fused together on power8 16348 and later processors. 16349 16350 '-mpower8-vector' 16351 '-mno-power8-vector' 16352 Generate code that uses (does not use) the vector and scalar 16353 instructions that were added in version 2.07 of the PowerPC ISA. 16354 Also enable the use of built-in functions that allow more direct 16355 access to the vector instructions. 16356 16357 '-mquad-memory' 16358 '-mno-quad-memory' 16359 Generate code that uses (does not use) the non-atomic quad word 16360 memory instructions. The '-mquad-memory' option requires use of 16361 64-bit mode. 16362 16363 '-mquad-memory-atomic' 16364 '-mno-quad-memory-atomic' 16365 Generate code that uses (does not use) the atomic quad word memory 16366 instructions. The '-mquad-memory-atomic' option requires use of 16367 64-bit mode. 16368 16369 '-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 16370 '-mfloat-gprs' 16371 This switch enables or disables the generation of floating-point 16372 operations on the general-purpose registers for architectures that 16373 support it. 16374 16375 The argument YES or SINGLE enables the use of single-precision 16376 floating-point operations. 16377 16378 The argument DOUBLE enables the use of single and double-precision 16379 floating-point operations. 16380 16381 The argument NO disables floating-point operations on the 16382 general-purpose registers. 16383 16384 This option is currently only available on the MPC854x. 16385 16386 '-m32' 16387 '-m64' 16388 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 16389 targets (including GNU/Linux). The 32-bit environment sets int, 16390 long and pointer to 32 bits and generates code that runs on any 16391 PowerPC variant. The 64-bit environment sets int to 32 bits and 16392 long and pointer to 64 bits, and generates code for PowerPC64, as 16393 for '-mpowerpc64'. 16394 16395 '-mfull-toc' 16396 '-mno-fp-in-toc' 16397 '-mno-sum-in-toc' 16398 '-mminimal-toc' 16399 Modify generation of the TOC (Table Of Contents), which is created 16400 for every executable file. The '-mfull-toc' option is selected by 16401 default. In that case, GCC allocates at least one TOC entry for 16402 each unique non-automatic variable reference in your program. GCC 16403 also places floating-point constants in the TOC. However, only 16404 16,384 entries are available in the TOC. 16405 16406 If you receive a linker error message that saying you have 16407 overflowed the available TOC space, you can reduce the amount of 16408 TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc' 16409 options. '-mno-fp-in-toc' prevents GCC from putting floating-point 16410 constants in the TOC and '-mno-sum-in-toc' forces GCC to generate 16411 code to calculate the sum of an address and a constant at run time 16412 instead of putting that sum into the TOC. You may specify one or 16413 both of these options. Each causes GCC to produce very slightly 16414 slower and larger code at the expense of conserving TOC space. 16415 16416 If you still run out of space in the TOC even when you specify both 16417 of these options, specify '-mminimal-toc' instead. This option 16418 causes GCC to make only one TOC entry for every file. When you 16419 specify this option, GCC produces code that is slower and larger 16420 but which uses extremely little TOC space. You may wish to use 16421 this option only on files that contain less frequently-executed 16422 code. 16423 16424 '-maix64' 16425 '-maix32' 16426 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 16427 64-bit 'long' type, and the infrastructure needed to support them. 16428 Specifying '-maix64' implies '-mpowerpc64', while '-maix32' 16429 disables the 64-bit ABI and implies '-mno-powerpc64'. GCC defaults 16430 to '-maix32'. 16431 16432 '-mxl-compat' 16433 '-mno-xl-compat' 16434 Produce code that conforms more closely to IBM XL compiler 16435 semantics when using AIX-compatible ABI. Pass floating-point 16436 arguments to prototyped functions beyond the register save area 16437 (RSA) on the stack in addition to argument FPRs. Do not assume 16438 that most significant double in 128-bit long double value is 16439 properly rounded when comparing values and converting to double. 16440 Use XL symbol names for long double support routines. 16441 16442 The AIX calling convention was extended but not initially 16443 documented to handle an obscure K&R C case of calling a function 16444 that takes the address of its arguments with fewer arguments than 16445 declared. IBM XL compilers access floating-point arguments that do 16446 not fit in the RSA from the stack when a subroutine is compiled 16447 without optimization. Because always storing floating-point 16448 arguments on the stack is inefficient and rarely needed, this 16449 option is not enabled by default and only is necessary when calling 16450 subroutines compiled by IBM XL compilers without optimization. 16451 16452 '-mpe' 16453 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 16454 application written to use message passing with special startup 16455 code to enable the application to run. The system must have PE 16456 installed in the standard location ('/usr/lpp/ppe.poe/'), or the 16457 'specs' file must be overridden with the '-specs=' option to 16458 specify the appropriate directory location. The Parallel 16459 Environment does not support threads, so the '-mpe' option and the 16460 '-pthread' option are incompatible. 16461 16462 '-malign-natural' 16463 '-malign-power' 16464 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 16465 '-malign-natural' overrides the ABI-defined alignment of larger 16466 types, such as floating-point doubles, on their natural size-based 16467 boundary. The option '-malign-power' instructs GCC to follow the 16468 ABI-specified alignment rules. GCC defaults to the standard 16469 alignment defined in the ABI. 16470 16471 On 64-bit Darwin, natural alignment is the default, and 16472 '-malign-power' is not supported. 16473 16474 '-msoft-float' 16475 '-mhard-float' 16476 Generate code that does not use (uses) the floating-point register 16477 set. Software floating-point emulation is provided if you use the 16478 '-msoft-float' option, and pass the option to GCC when linking. 16479 16480 '-msingle-float' 16481 '-mdouble-float' 16482 Generate code for single- or double-precision floating-point 16483 operations. '-mdouble-float' implies '-msingle-float'. 16484 16485 '-msimple-fpu' 16486 Do not generate 'sqrt' and 'div' instructions for hardware 16487 floating-point unit. 16488 16489 '-mfpu=NAME' 16490 Specify type of floating-point unit. Valid values for NAME are 16491 'sp_lite' (equivalent to '-msingle-float -msimple-fpu'), 'dp_lite' 16492 (equivalent to '-mdouble-float -msimple-fpu'), 'sp_full' 16493 (equivalent to '-msingle-float'), and 'dp_full' (equivalent to 16494 '-mdouble-float'). 16495 16496 '-mxilinx-fpu' 16497 Perform optimizations for the floating-point unit on Xilinx PPC 16498 405/440. 16499 16500 '-mmultiple' 16501 '-mno-multiple' 16502 Generate code that uses (does not use) the load multiple word 16503 instructions and the store multiple word instructions. These 16504 instructions are generated by default on POWER systems, and not 16505 generated on PowerPC systems. Do not use '-mmultiple' on 16506 little-endian PowerPC systems, since those instructions do not work 16507 when the processor is in little-endian mode. The exceptions are 16508 PPC740 and PPC750 which permit these instructions in little-endian 16509 mode. 16510 16511 '-mstring' 16512 '-mno-string' 16513 Generate code that uses (does not use) the load string instructions 16514 and the store string word instructions to save multiple registers 16515 and do small block moves. These instructions are generated by 16516 default on POWER systems, and not generated on PowerPC systems. Do 16517 not use '-mstring' on little-endian PowerPC systems, since those 16518 instructions do not work when the processor is in little-endian 16519 mode. The exceptions are PPC740 and PPC750 which permit these 16520 instructions in little-endian mode. 16521 16522 '-mupdate' 16523 '-mno-update' 16524 Generate code that uses (does not use) the load or store 16525 instructions that update the base register to the address of the 16526 calculated memory location. These instructions are generated by 16527 default. If you use '-mno-update', there is a small window between 16528 the time that the stack pointer is updated and the address of the 16529 previous frame is stored, which means code that walks the stack 16530 frame across interrupts or signals may get corrupted data. 16531 16532 '-mavoid-indexed-addresses' 16533 '-mno-avoid-indexed-addresses' 16534 Generate code that tries to avoid (not avoid) the use of indexed 16535 load or store instructions. These instructions can incur a 16536 performance penalty on Power6 processors in certain situations, 16537 such as when stepping through large arrays that cross a 16M 16538 boundary. This option is enabled by default when targeting Power6 16539 and disabled otherwise. 16540 16541 '-mfused-madd' 16542 '-mno-fused-madd' 16543 Generate code that uses (does not use) the floating-point multiply 16544 and accumulate instructions. These instructions are generated by 16545 default if hardware floating point is used. The machine-dependent 16546 '-mfused-madd' option is now mapped to the machine-independent 16547 '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to 16548 '-ffp-contract=off'. 16549 16550 '-mmulhw' 16551 '-mno-mulhw' 16552 Generate code that uses (does not use) the half-word multiply and 16553 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 16554 processors. These instructions are generated by default when 16555 targeting those processors. 16556 16557 '-mdlmzb' 16558 '-mno-dlmzb' 16559 Generate code that uses (does not use) the string-search 'dlmzb' 16560 instruction on the IBM 405, 440, 464 and 476 processors. This 16561 instruction is generated by default when targeting those 16562 processors. 16563 16564 '-mno-bit-align' 16565 '-mbit-align' 16566 On System V.4 and embedded PowerPC systems do not (do) force 16567 structures and unions that contain bit-fields to be aligned to the 16568 base type of the bit-field. 16569 16570 For example, by default a structure containing nothing but 8 16571 'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary 16572 and has a size of 4 bytes. By using '-mno-bit-align', the 16573 structure is aligned to a 1-byte boundary and is 1 byte in size. 16574 16575 '-mno-strict-align' 16576 '-mstrict-align' 16577 On System V.4 and embedded PowerPC systems do not (do) assume that 16578 unaligned memory references are handled by the system. 16579 16580 '-mrelocatable' 16581 '-mno-relocatable' 16582 Generate code that allows (does not allow) a static executable to 16583 be relocated to a different address at run time. A simple embedded 16584 PowerPC system loader should relocate the entire contents of 16585 '.got2' and 4-byte locations listed in the '.fixup' section, a 16586 table of 32-bit addresses generated by this option. For this to 16587 work, all objects linked together must be compiled with 16588 '-mrelocatable' or '-mrelocatable-lib'. '-mrelocatable' code 16589 aligns the stack to an 8-byte boundary. 16590 16591 '-mrelocatable-lib' 16592 '-mno-relocatable-lib' 16593 Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup' 16594 section to allow static executables to be relocated at run time, 16595 but '-mrelocatable-lib' does not use the smaller stack alignment of 16596 '-mrelocatable'. Objects compiled with '-mrelocatable-lib' may be 16597 linked with objects compiled with any combination of the 16598 '-mrelocatable' options. 16599 16600 '-mno-toc' 16601 '-mtoc' 16602 On System V.4 and embedded PowerPC systems do not (do) assume that 16603 register 2 contains a pointer to a global area pointing to the 16604 addresses used in the program. 16605 16606 '-mlittle' 16607 '-mlittle-endian' 16608 On System V.4 and embedded PowerPC systems compile code for the 16609 processor in little-endian mode. The '-mlittle-endian' option is 16610 the same as '-mlittle'. 16611 16612 '-mbig' 16613 '-mbig-endian' 16614 On System V.4 and embedded PowerPC systems compile code for the 16615 processor in big-endian mode. The '-mbig-endian' option is the 16616 same as '-mbig'. 16617 16618 '-mdynamic-no-pic' 16619 On Darwin and Mac OS X systems, compile code so that it is not 16620 relocatable, but that its external references are relocatable. The 16621 resulting code is suitable for applications, but not shared 16622 libraries. 16623 16624 '-msingle-pic-base' 16625 Treat the register used for PIC addressing as read-only, rather 16626 than loading it in the prologue for each function. The runtime 16627 system is responsible for initializing this register with an 16628 appropriate value before execution begins. 16629 16630 '-mprioritize-restricted-insns=PRIORITY' 16631 This option controls the priority that is assigned to dispatch-slot 16632 restricted instructions during the second scheduling pass. The 16633 argument PRIORITY takes the value '0', '1', or '2' to assign no, 16634 highest, or second-highest (respectively) priority to dispatch-slot 16635 restricted instructions. 16636 16637 '-msched-costly-dep=DEPENDENCE_TYPE' 16638 This option controls which dependences are considered costly by the 16639 target during instruction scheduling. The argument DEPENDENCE_TYPE 16640 takes one of the following values: 16641 16642 'no' 16643 No dependence is costly. 16644 16645 'all' 16646 All dependences are costly. 16647 16648 'true_store_to_load' 16649 A true dependence from store to load is costly. 16650 16651 'store_to_load' 16652 Any dependence from store to load is costly. 16653 16654 NUMBER 16655 Any dependence for which the latency is greater than or equal 16656 to NUMBER is costly. 16657 16658 '-minsert-sched-nops=SCHEME' 16659 This option controls which NOP insertion scheme is used during the 16660 second scheduling pass. The argument SCHEME takes one of the 16661 following values: 16662 16663 'no' 16664 Don't insert NOPs. 16665 16666 'pad' 16667 Pad with NOPs any dispatch group that has vacant issue slots, 16668 according to the scheduler's grouping. 16669 16670 'regroup_exact' 16671 Insert NOPs to force costly dependent insns into separate 16672 groups. Insert exactly as many NOPs as needed to force an 16673 insn to a new group, according to the estimated processor 16674 grouping. 16675 16676 NUMBER 16677 Insert NOPs to force costly dependent insns into separate 16678 groups. Insert NUMBER NOPs to force an insn to a new group. 16679 16680 '-mcall-sysv' 16681 On System V.4 and embedded PowerPC systems compile code using 16682 calling conventions that adhere to the March 1995 draft of the 16683 System V Application Binary Interface, PowerPC processor 16684 supplement. This is the default unless you configured GCC using 16685 'powerpc-*-eabiaix'. 16686 16687 '-mcall-sysv-eabi' 16688 '-mcall-eabi' 16689 Specify both '-mcall-sysv' and '-meabi' options. 16690 16691 '-mcall-sysv-noeabi' 16692 Specify both '-mcall-sysv' and '-mno-eabi' options. 16693 16694 '-mcall-aixdesc' 16695 On System V.4 and embedded PowerPC systems compile code for the AIX 16696 operating system. 16697 16698 '-mcall-linux' 16699 On System V.4 and embedded PowerPC systems compile code for the 16700 Linux-based GNU system. 16701 16702 '-mcall-freebsd' 16703 On System V.4 and embedded PowerPC systems compile code for the 16704 FreeBSD operating system. 16705 16706 '-mcall-netbsd' 16707 On System V.4 and embedded PowerPC systems compile code for the 16708 NetBSD operating system. 16709 16710 '-mcall-openbsd' 16711 On System V.4 and embedded PowerPC systems compile code for the 16712 OpenBSD operating system. 16713 16714 '-maix-struct-return' 16715 Return all structures in memory (as specified by the AIX ABI). 16716 16717 '-msvr4-struct-return' 16718 Return structures smaller than 8 bytes in registers (as specified 16719 by the SVR4 ABI). 16720 16721 '-mabi=ABI-TYPE' 16722 Extend the current ABI with a particular extension, or remove such 16723 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 16724 IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2. 16725 16726 '-mabi=spe' 16727 Extend the current ABI with SPE ABI extensions. This does not 16728 change the default ABI, instead it adds the SPE ABI extensions to 16729 the current ABI. 16730 16731 '-mabi=no-spe' 16732 Disable Book-E SPE ABI extensions for the current ABI. 16733 16734 '-mabi=ibmlongdouble' 16735 Change the current ABI to use IBM extended-precision long double. 16736 This is a PowerPC 32-bit SYSV ABI option. 16737 16738 '-mabi=ieeelongdouble' 16739 Change the current ABI to use IEEE extended-precision long double. 16740 This is a PowerPC 32-bit Linux ABI option. 16741 16742 '-mabi=elfv1' 16743 Change the current ABI to use the ELFv1 ABI. This is the default 16744 ABI for big-endian PowerPC 64-bit Linux. Overriding the default 16745 ABI requires special system support and is likely to fail in 16746 spectacular ways. 16747 16748 '-mabi=elfv2' 16749 Change the current ABI to use the ELFv2 ABI. This is the default 16750 ABI for little-endian PowerPC 64-bit Linux. Overriding the default 16751 ABI requires special system support and is likely to fail in 16752 spectacular ways. 16753 16754 '-mprototype' 16755 '-mno-prototype' 16756 On System V.4 and embedded PowerPC systems assume that all calls to 16757 variable argument functions are properly prototyped. Otherwise, 16758 the compiler must insert an instruction before every non-prototyped 16759 call to set or clear bit 6 of the condition code register (CR) to 16760 indicate whether floating-point values are passed in the 16761 floating-point registers in case the function takes variable 16762 arguments. With '-mprototype', only calls to prototyped variable 16763 argument functions set or clear the bit. 16764 16765 '-msim' 16766 On embedded PowerPC systems, assume that the startup module is 16767 called 'sim-crt0.o' and that the standard C libraries are 16768 'libsim.a' and 'libc.a'. This is the default for 16769 'powerpc-*-eabisim' configurations. 16770 16771 '-mmvme' 16772 On embedded PowerPC systems, assume that the startup module is 16773 called 'crt0.o' and the standard C libraries are 'libmvme.a' and 16774 'libc.a'. 16775 16776 '-mads' 16777 On embedded PowerPC systems, assume that the startup module is 16778 called 'crt0.o' and the standard C libraries are 'libads.a' and 16779 'libc.a'. 16780 16781 '-myellowknife' 16782 On embedded PowerPC systems, assume that the startup module is 16783 called 'crt0.o' and the standard C libraries are 'libyk.a' and 16784 'libc.a'. 16785 16786 '-mvxworks' 16787 On System V.4 and embedded PowerPC systems, specify that you are 16788 compiling for a VxWorks system. 16789 16790 '-memb' 16791 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 16792 header to indicate that 'eabi' extended relocations are used. 16793 16794 '-meabi' 16795 '-mno-eabi' 16796 On System V.4 and embedded PowerPC systems do (do not) adhere to 16797 the Embedded Applications Binary Interface (EABI), which is a set 16798 of modifications to the System V.4 specifications. Selecting 16799 '-meabi' means that the stack is aligned to an 8-byte boundary, a 16800 function '__eabi' is called from 'main' to set up the EABI 16801 environment, and the '-msdata' option can use both 'r2' and 'r13' 16802 to point to two separate small data areas. Selecting '-mno-eabi' 16803 means that the stack is aligned to a 16-byte boundary, no EABI 16804 initialization function is called from 'main', and the '-msdata' 16805 option only uses 'r13' to point to a single small data area. The 16806 '-meabi' option is on by default if you configured GCC using one of 16807 the 'powerpc*-*-eabi*' options. 16808 16809 '-msdata=eabi' 16810 On System V.4 and embedded PowerPC systems, put small initialized 16811 'const' global and static data in the '.sdata2' section, which is 16812 pointed to by register 'r2'. Put small initialized non-'const' 16813 global and static data in the '.sdata' section, which is pointed to 16814 by register 'r13'. Put small uninitialized global and static data 16815 in the '.sbss' section, which is adjacent to the '.sdata' section. 16816 The '-msdata=eabi' option is incompatible with the '-mrelocatable' 16817 option. The '-msdata=eabi' option also sets the '-memb' option. 16818 16819 '-msdata=sysv' 16820 On System V.4 and embedded PowerPC systems, put small global and 16821 static data in the '.sdata' section, which is pointed to by 16822 register 'r13'. Put small uninitialized global and static data in 16823 the '.sbss' section, which is adjacent to the '.sdata' section. 16824 The '-msdata=sysv' option is incompatible with the '-mrelocatable' 16825 option. 16826 16827 '-msdata=default' 16828 '-msdata' 16829 On System V.4 and embedded PowerPC systems, if '-meabi' is used, 16830 compile code the same as '-msdata=eabi', otherwise compile code the 16831 same as '-msdata=sysv'. 16832 16833 '-msdata=data' 16834 On System V.4 and embedded PowerPC systems, put small global data 16835 in the '.sdata' section. Put small uninitialized global data in 16836 the '.sbss' section. Do not use register 'r13' to address small 16837 data however. This is the default behavior unless other '-msdata' 16838 options are used. 16839 16840 '-msdata=none' 16841 '-mno-sdata' 16842 On embedded PowerPC systems, put all initialized global and static 16843 data in the '.data' section, and all uninitialized data in the 16844 '.bss' section. 16845 16846 '-mblock-move-inline-limit=NUM' 16847 Inline all block moves (such as calls to 'memcpy' or structure 16848 copies) less than or equal to NUM bytes. The minimum value for NUM 16849 is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. The 16850 default value is target-specific. 16851 16852 '-G NUM' 16853 On embedded PowerPC systems, put global and static items less than 16854 or equal to NUM bytes into the small data or BSS sections instead 16855 of the normal data or BSS section. By default, NUM is 8. The '-G 16856 NUM' switch is also passed to the linker. All modules should be 16857 compiled with the same '-G NUM' value. 16858 16859 '-mregnames' 16860 '-mno-regnames' 16861 On System V.4 and embedded PowerPC systems do (do not) emit 16862 register names in the assembly language output using symbolic 16863 forms. 16864 16865 '-mlongcall' 16866 '-mno-longcall' 16867 By default assume that all calls are far away so that a longer and 16868 more expensive calling sequence is required. This is required for 16869 calls farther than 32 megabytes (33,554,432 bytes) from the current 16870 location. A short call is generated if the compiler knows the call 16871 cannot be that far away. This setting can be overridden by the 16872 'shortcall' function attribute, or by '#pragma longcall(0)'. 16873 16874 Some linkers are capable of detecting out-of-range calls and 16875 generating glue code on the fly. On these systems, long calls are 16876 unnecessary and generate slower code. As of this writing, the AIX 16877 linker can do this, as can the GNU linker for PowerPC/64. It is 16878 planned to add this feature to the GNU linker for 32-bit PowerPC 16879 systems as well. 16880 16881 On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee, 16882 L42', plus a "branch island" (glue code). The two target addresses 16883 represent the callee and the branch island. The Darwin/PPC linker 16884 prefers the first address and generates a 'bl callee' if the PPC 16885 'bl' instruction reaches the callee directly; otherwise, the linker 16886 generates 'bl L42' to call the branch island. The branch island is 16887 appended to the body of the calling function; it computes the full 16888 32-bit address of the callee and jumps to it. 16889 16890 On Mach-O (Darwin) systems, this option directs the compiler emit 16891 to the glue for every direct call, and the Darwin linker decides 16892 whether to use or discard it. 16893 16894 In the future, GCC may ignore all longcall specifications when the 16895 linker is known to generate glue. 16896 16897 '-mtls-markers' 16898 '-mno-tls-markers' 16899 Mark (do not mark) calls to '__tls_get_addr' with a relocation 16900 specifying the function argument. The relocation allows the linker 16901 to reliably associate function call with argument setup 16902 instructions for TLS optimization, which in turn allows GCC to 16903 better schedule the sequence. 16904 16905 '-pthread' 16906 Adds support for multithreading with the "pthreads" library. This 16907 option sets flags for both the preprocessor and linker. 16908 16909 '-mrecip' 16910 '-mno-recip' 16911 This option enables use of the reciprocal estimate and reciprocal 16912 square root estimate instructions with additional Newton-Raphson 16913 steps to increase precision instead of doing a divide or square 16914 root and divide for floating-point arguments. You should use the 16915 '-ffast-math' option when using '-mrecip' (or at least 16916 '-funsafe-math-optimizations', '-finite-math-only', 16917 '-freciprocal-math' and '-fno-trapping-math'). Note that while the 16918 throughput of the sequence is generally higher than the throughput 16919 of the non-reciprocal instruction, the precision of the sequence 16920 can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 16921 0.99999994) for reciprocal square roots. 16922 16923 '-mrecip=OPT' 16924 This option controls which reciprocal estimate instructions may be 16925 used. OPT is a comma-separated list of options, which may be 16926 preceded by a '!' to invert the option: 'all': enable all estimate 16927 instructions, 'default': enable the default instructions, 16928 equivalent to '-mrecip', 'none': disable all estimate instructions, 16929 equivalent to '-mno-recip'; 'div': enable the reciprocal 16930 approximation instructions for both single and double precision; 16931 'divf': enable the single-precision reciprocal approximation 16932 instructions; 'divd': enable the double-precision reciprocal 16933 approximation instructions; 'rsqrt': enable the reciprocal square 16934 root approximation instructions for both single and double 16935 precision; 'rsqrtf': enable the single-precision reciprocal square 16936 root approximation instructions; 'rsqrtd': enable the 16937 double-precision reciprocal square root approximation instructions; 16938 16939 So, for example, '-mrecip=all,!rsqrtd' enables all of the 16940 reciprocal estimate instructions, except for the 'FRSQRTE', 16941 'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the 16942 double-precision reciprocal square root calculations. 16943 16944 '-mrecip-precision' 16945 '-mno-recip-precision' 16946 Assume (do not assume) that the reciprocal estimate instructions 16947 provide higher-precision estimates than is mandated by the PowerPC 16948 ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8' 16949 automatically selects '-mrecip-precision'. The double-precision 16950 square root estimate instructions are not generated by default on 16951 low-precision machines, since they do not provide an estimate that 16952 converges after three steps. 16953 16954 '-mveclibabi=TYPE' 16955 Specifies the ABI type to use for vectorizing intrinsics using an 16956 external library. The only type supported at present is 'mass', 16957 which specifies to use IBM's Mathematical Acceleration Subsystem 16958 (MASS) libraries for vectorizing intrinsics using external 16959 libraries. GCC currently emits calls to 'acosd2', 'acosf4', 16960 'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4', 16961 'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4', 16962 'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2', 16963 'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4', 16964 'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4', 16965 'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4', 16966 'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2', 16967 'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and 16968 'tanhf4' when generating code for power7. Both '-ftree-vectorize' 16969 and '-funsafe-math-optimizations' must also be enabled. The MASS 16970 libraries must be specified at link time. 16971 16972 '-mfriz' 16973 '-mno-friz' 16974 Generate (do not generate) the 'friz' instruction when the 16975 '-funsafe-math-optimizations' option is used to optimize rounding 16976 of floating-point values to 64-bit integer and back to floating 16977 point. The 'friz' instruction does not return the same value if 16978 the floating-point number is too large to fit in an integer. 16979 16980 '-mpointers-to-nested-functions' 16981 '-mno-pointers-to-nested-functions' 16982 Generate (do not generate) code to load up the static chain 16983 register (R11) when calling through a pointer on AIX and 64-bit 16984 Linux systems where a function pointer points to a 3-word 16985 descriptor giving the function address, TOC value to be loaded in 16986 register R2, and static chain value to be loaded in register R11. 16987 The '-mpointers-to-nested-functions' is on by default. You cannot 16988 call through pointers to nested functions or pointers to functions 16989 compiled in other languages that use the static chain if you use 16990 the '-mno-pointers-to-nested-functions'. 16991 16992 '-msave-toc-indirect' 16993 '-mno-save-toc-indirect' 16994 Generate (do not generate) code to save the TOC value in the 16995 reserved stack location in the function prologue if the function 16996 calls through a pointer on AIX and 64-bit Linux systems. If the 16997 TOC value is not saved in the prologue, it is saved just before the 16998 call through the pointer. The '-mno-save-toc-indirect' option is 16999 the default. 17000 17001 '-mcompat-align-parm' 17002 '-mno-compat-align-parm' 17003 Generate (do not generate) code to pass structure parameters with a 17004 maximum alignment of 64 bits, for compatibility with older versions 17005 of GCC. 17006 17007 Older versions of GCC (prior to 4.9.0) incorrectly did not align a 17008 structure parameter on a 128-bit boundary when that structure 17009 contained a member requiring 128-bit alignment. This is corrected 17010 in more recent versions of GCC. This option may be used to generate 17011 code that is compatible with functions compiled with older versions 17012 of GCC. 17013 17014 In this version of the compiler, the '-mcompat-align-parm' is the 17015 default, except when using the Linux ELFv2 ABI. 17016 17017 17018 File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 17019 17020 3.17.35 RX Options 17021 ------------------ 17022 17023 These command-line options are defined for RX targets: 17024 17025 '-m64bit-doubles' 17026 '-m32bit-doubles' 17027 Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32 17028 bits ('-m32bit-doubles') in size. The default is 17029 '-m32bit-doubles'. _Note_ RX floating-point hardware only works on 17030 32-bit values, which is why the default is '-m32bit-doubles'. 17031 17032 '-fpu' 17033 '-nofpu' 17034 Enables ('-fpu') or disables ('-nofpu') the use of RX 17035 floating-point hardware. The default is enabled for the RX600 17036 series and disabled for the RX200 series. 17037 17038 Floating-point instructions are only generated for 32-bit 17039 floating-point values, however, so the FPU hardware is not used for 17040 doubles if the '-m64bit-doubles' option is used. 17041 17042 _Note_ If the '-fpu' option is enabled then 17043 '-funsafe-math-optimizations' is also enabled automatically. This 17044 is because the RX FPU instructions are themselves unsafe. 17045 17046 '-mcpu=NAME' 17047 Selects the type of RX CPU to be targeted. Currently three types 17048 are supported, the generic RX600 and RX200 series hardware and the 17049 specific RX610 CPU. The default is RX600. 17050 17051 The only difference between RX600 and RX610 is that the RX610 does 17052 not support the 'MVTIPL' instruction. 17053 17054 The RX200 series does not have a hardware floating-point unit and 17055 so '-nofpu' is enabled by default when this type is selected. 17056 17057 '-mbig-endian-data' 17058 '-mlittle-endian-data' 17059 Store data (but not code) in the big-endian format. The default is 17060 '-mlittle-endian-data', i.e. to store data in the little-endian 17061 format. 17062 17063 '-msmall-data-limit=N' 17064 Specifies the maximum size in bytes of global and static variables 17065 which can be placed into the small data area. Using the small data 17066 area can lead to smaller and faster code, but the size of area is 17067 limited and it is up to the programmer to ensure that the area does 17068 not overflow. Also when the small data area is used one of the 17069 RX's registers (usually 'r13') is reserved for use pointing to this 17070 area, so it is no longer available for use by the compiler. This 17071 could result in slower and/or larger code if variables are pushed 17072 onto the stack instead of being held in this register. 17073 17074 Note, common variables (variables that have not been initialized) 17075 and constants are not placed into the small data area as they are 17076 assigned to other sections in the output executable. 17077 17078 The default value is zero, which disables this feature. Note, this 17079 feature is not enabled by default with higher optimization levels 17080 ('-O2' etc) because of the potentially detrimental effects of 17081 reserving a register. It is up to the programmer to experiment and 17082 discover whether this feature is of benefit to their program. See 17083 the description of the '-mpid' option for a description of how the 17084 actual register to hold the small data area pointer is chosen. 17085 17086 '-msim' 17087 '-mno-sim' 17088 Use the simulator runtime. The default is to use the libgloss 17089 board-specific runtime. 17090 17091 '-mas100-syntax' 17092 '-mno-as100-syntax' 17093 When generating assembler output use a syntax that is compatible 17094 with Renesas's AS100 assembler. This syntax can also be handled by 17095 the GAS assembler, but it has some restrictions so it is not 17096 generated by default. 17097 17098 '-mmax-constant-size=N' 17099 Specifies the maximum size, in bytes, of a constant that can be 17100 used as an operand in a RX instruction. Although the RX 17101 instruction set does allow constants of up to 4 bytes in length to 17102 be used in instructions, a longer value equates to a longer 17103 instruction. Thus in some circumstances it can be beneficial to 17104 restrict the size of constants that are used in instructions. 17105 Constants that are too big are instead placed into a constant pool 17106 and referenced via register indirection. 17107 17108 The value N can be between 0 and 4. A value of 0 (the default) or 17109 4 means that constants of any size are allowed. 17110 17111 '-mrelax' 17112 Enable linker relaxation. Linker relaxation is a process whereby 17113 the linker attempts to reduce the size of a program by finding 17114 shorter versions of various instructions. Disabled by default. 17115 17116 '-mint-register=N' 17117 Specify the number of registers to reserve for fast interrupt 17118 handler functions. The value N can be between 0 and 4. A value of 17119 1 means that register 'r13' is reserved for the exclusive use of 17120 fast interrupt handlers. A value of 2 reserves 'r13' and 'r12'. A 17121 value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4 17122 reserves 'r13' through 'r10'. A value of 0, the default, does not 17123 reserve any registers. 17124 17125 '-msave-acc-in-interrupts' 17126 Specifies that interrupt handler functions should preserve the 17127 accumulator register. This is only necessary if normal code might 17128 use the accumulator register, for example because it performs 17129 64-bit multiplications. The default is to ignore the accumulator 17130 as this makes the interrupt handlers faster. 17131 17132 '-mpid' 17133 '-mno-pid' 17134 Enables the generation of position independent data. When enabled 17135 any access to constant data is done via an offset from a base 17136 address held in a register. This allows the location of constant 17137 data to be determined at run time without requiring the executable 17138 to be relocated, which is a benefit to embedded applications with 17139 tight memory constraints. Data that can be modified is not 17140 affected by this option. 17141 17142 Note, using this feature reserves a register, usually 'r13', for 17143 the constant data base address. This can result in slower and/or 17144 larger code, especially in complicated functions. 17145 17146 The actual register chosen to hold the constant data base address 17147 depends upon whether the '-msmall-data-limit' and/or the 17148 '-mint-register' command-line options are enabled. Starting with 17149 register 'r13' and proceeding downwards, registers are allocated 17150 first to satisfy the requirements of '-mint-register', then '-mpid' 17151 and finally '-msmall-data-limit'. Thus it is possible for the 17152 small data area register to be 'r8' if both '-mint-register=4' and 17153 '-mpid' are specified on the command line. 17154 17155 By default this feature is not enabled. The default can be 17156 restored via the '-mno-pid' command-line option. 17157 17158 '-mno-warn-multiple-fast-interrupts' 17159 '-mwarn-multiple-fast-interrupts' 17160 Prevents GCC from issuing a warning message if it finds more than 17161 one fast interrupt handler when it is compiling a file. The 17162 default is to issue a warning for each extra fast interrupt handler 17163 found, as the RX only supports one such interrupt. 17164 17165 _Note:_ The generic GCC command-line option '-ffixed-REG' has special 17166 significance to the RX port when used with the 'interrupt' function 17167 attribute. This attribute indicates a function intended to process fast 17168 interrupts. GCC ensures that it only uses the registers 'r10', 'r11', 17169 'r12' and/or 'r13' and only provided that the normal use of the 17170 corresponding registers have been restricted via the '-ffixed-REG' or 17171 '-mint-register' command-line options. 17172 17173 17174 File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 17175 17176 3.17.36 S/390 and zSeries Options 17177 --------------------------------- 17178 17179 These are the '-m' options defined for the S/390 and zSeries 17180 architecture. 17181 17182 '-mhard-float' 17183 '-msoft-float' 17184 Use (do not use) the hardware floating-point instructions and 17185 registers for floating-point operations. When '-msoft-float' is 17186 specified, functions in 'libgcc.a' are used to perform 17187 floating-point operations. When '-mhard-float' is specified, the 17188 compiler generates IEEE floating-point instructions. This is the 17189 default. 17190 17191 '-mhard-dfp' 17192 '-mno-hard-dfp' 17193 Use (do not use) the hardware decimal-floating-point instructions 17194 for decimal-floating-point operations. When '-mno-hard-dfp' is 17195 specified, functions in 'libgcc.a' are used to perform 17196 decimal-floating-point operations. When '-mhard-dfp' is specified, 17197 the compiler generates decimal-floating-point hardware 17198 instructions. This is the default for '-march=z9-ec' or higher. 17199 17200 '-mlong-double-64' 17201 '-mlong-double-128' 17202 These switches control the size of 'long double' type. A size of 17203 64 bits makes the 'long double' type equivalent to the 'double' 17204 type. This is the default. 17205 17206 '-mbackchain' 17207 '-mno-backchain' 17208 Store (do not store) the address of the caller's frame as backchain 17209 pointer into the callee's stack frame. A backchain may be needed 17210 to allow debugging using tools that do not understand DWARF 2 call 17211 frame information. When '-mno-packed-stack' is in effect, the 17212 backchain pointer is stored at the bottom of the stack frame; when 17213 '-mpacked-stack' is in effect, the backchain is placed into the 17214 topmost word of the 96/160 byte register save area. 17215 17216 In general, code compiled with '-mbackchain' is call-compatible 17217 with code compiled with '-mmo-backchain'; however, use of the 17218 backchain for debugging purposes usually requires that the whole 17219 binary is built with '-mbackchain'. Note that the combination of 17220 '-mbackchain', '-mpacked-stack' and '-mhard-float' is not 17221 supported. In order to build a linux kernel use '-msoft-float'. 17222 17223 The default is to not maintain the backchain. 17224 17225 '-mpacked-stack' 17226 '-mno-packed-stack' 17227 Use (do not use) the packed stack layout. When '-mno-packed-stack' 17228 is specified, the compiler uses the all fields of the 96/160 byte 17229 register save area only for their default purpose; unused fields 17230 still take up stack space. When '-mpacked-stack' is specified, 17231 register save slots are densely packed at the top of the register 17232 save area; unused space is reused for other purposes, allowing for 17233 more efficient use of the available stack space. However, when 17234 '-mbackchain' is also in effect, the topmost word of the save area 17235 is always used to store the backchain, and the return address 17236 register is always saved two words below the backchain. 17237 17238 As long as the stack frame backchain is not used, code generated 17239 with '-mpacked-stack' is call-compatible with code generated with 17240 '-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 17241 for S/390 or zSeries generated code that uses the stack frame 17242 backchain at run time, not just for debugging purposes. Such code 17243 is not call-compatible with code compiled with '-mpacked-stack'. 17244 Also, note that the combination of '-mbackchain', '-mpacked-stack' 17245 and '-mhard-float' is not supported. In order to build a linux 17246 kernel use '-msoft-float'. 17247 17248 The default is to not use the packed stack layout. 17249 17250 '-msmall-exec' 17251 '-mno-small-exec' 17252 Generate (or do not generate) code using the 'bras' instruction to 17253 do subroutine calls. This only works reliably if the total 17254 executable size does not exceed 64k. The default is to use the 17255 'basr' instruction instead, which does not have this limitation. 17256 17257 '-m64' 17258 '-m31' 17259 When '-m31' is specified, generate code compliant to the GNU/Linux 17260 for S/390 ABI. When '-m64' is specified, generate code compliant 17261 to the GNU/Linux for zSeries ABI. This allows GCC in particular to 17262 generate 64-bit instructions. For the 's390' targets, the default 17263 is '-m31', while the 's390x' targets default to '-m64'. 17264 17265 '-mzarch' 17266 '-mesa' 17267 When '-mzarch' is specified, generate code using the instructions 17268 available on z/Architecture. When '-mesa' is specified, generate 17269 code using the instructions available on ESA/390. Note that 17270 '-mesa' is not possible with '-m64'. When generating code 17271 compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'. 17272 When generating code compliant to the GNU/Linux for zSeries ABI, 17273 the default is '-mzarch'. 17274 17275 '-mmvcle' 17276 '-mno-mvcle' 17277 Generate (or do not generate) code using the 'mvcle' instruction to 17278 perform block moves. When '-mno-mvcle' is specified, use a 'mvc' 17279 loop instead. This is the default unless optimizing for size. 17280 17281 '-mdebug' 17282 '-mno-debug' 17283 Print (or do not print) additional debug information when 17284 compiling. The default is to not print debug information. 17285 17286 '-march=CPU-TYPE' 17287 Generate code that runs on CPU-TYPE, which is the name of a system 17288 representing a certain processor type. Possible values for 17289 CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec' and 17290 'z10'. When generating code using the instructions available on 17291 z/Architecture, the default is '-march=z900'. Otherwise, the 17292 default is '-march=g5'. 17293 17294 '-mtune=CPU-TYPE' 17295 Tune to CPU-TYPE everything applicable about the generated code, 17296 except for the ABI and the set of available instructions. The list 17297 of CPU-TYPE values is the same as for '-march'. The default is the 17298 value used for '-march'. 17299 17300 '-mtpf-trace' 17301 '-mno-tpf-trace' 17302 Generate code that adds (does not add) in TPF OS specific branches 17303 to trace routines in the operating system. This option is off by 17304 default, even when compiling for the TPF OS. 17305 17306 '-mfused-madd' 17307 '-mno-fused-madd' 17308 Generate code that uses (does not use) the floating-point multiply 17309 and accumulate instructions. These instructions are generated by 17310 default if hardware floating point is used. 17311 17312 '-mwarn-framesize=FRAMESIZE' 17313 Emit a warning if the current function exceeds the given frame 17314 size. Because this is a compile-time check it doesn't need to be a 17315 real problem when the program runs. It is intended to identify 17316 functions that most probably cause a stack overflow. It is useful 17317 to be used in an environment with limited stack size e.g. the linux 17318 kernel. 17319 17320 '-mwarn-dynamicstack' 17321 Emit a warning if the function calls 'alloca' or uses 17322 dynamically-sized arrays. This is generally a bad idea with a 17323 limited stack size. 17324 17325 '-mstack-guard=STACK-GUARD' 17326 '-mstack-size=STACK-SIZE' 17327 If these options are provided the S/390 back end emits additional 17328 instructions in the function prologue that trigger a trap if the 17329 stack size is STACK-GUARD bytes above the STACK-SIZE (remember that 17330 the stack on S/390 grows downward). If the STACK-GUARD option is 17331 omitted the smallest power of 2 larger than the frame size of the 17332 compiled function is chosen. These options are intended to be used 17333 to help debugging stack overflow problems. The additionally 17334 emitted code causes only little overhead and hence can also be used 17335 in production-like systems without greater performance degradation. 17336 The given values have to be exact powers of 2 and STACK-SIZE has to 17337 be greater than STACK-GUARD without exceeding 64k. In order to be 17338 efficient the extra code makes the assumption that the stack starts 17339 at an address aligned to the value given by STACK-SIZE. The 17340 STACK-GUARD option can only be used in conjunction with STACK-SIZE. 17341 17342 '-mhotpatch[=HALFWORDS]' 17343 '-mno-hotpatch' 17344 If the hotpatch option is enabled, a "hot-patching" function 17345 prologue is generated for all functions in the compilation unit. 17346 The funtion label is prepended with the given number of two-byte 17347 Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop 17348 instructions if no argument is present. Functions with a 17349 hot-patching prologue are never inlined automatically, and a 17350 hot-patching prologue is never generated for functions functions 17351 that are explicitly inline. 17352 17353 This option can be overridden for individual functions with the 17354 'hotpatch' attribute. 17355 17356 17357 File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 17358 17359 3.17.37 Score Options 17360 --------------------- 17361 17362 These options are defined for Score implementations: 17363 17364 '-meb' 17365 Compile code for big-endian mode. This is the default. 17366 17367 '-mel' 17368 Compile code for little-endian mode. 17369 17370 '-mnhwloop' 17371 Disable generation of 'bcnz' instructions. 17372 17373 '-muls' 17374 Enable generation of unaligned load and store instructions. 17375 17376 '-mmac' 17377 Enable the use of multiply-accumulate instructions. Disabled by 17378 default. 17379 17380 '-mscore5' 17381 Specify the SCORE5 as the target architecture. 17382 17383 '-mscore5u' 17384 Specify the SCORE5U of the target architecture. 17385 17386 '-mscore7' 17387 Specify the SCORE7 as the target architecture. This is the 17388 default. 17389 17390 '-mscore7d' 17391 Specify the SCORE7D as the target architecture. 17392 17393 17394 File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options 17395 17396 3.17.38 SH Options 17397 ------------------ 17398 17399 These '-m' options are defined for the SH implementations: 17400 17401 '-m1' 17402 Generate code for the SH1. 17403 17404 '-m2' 17405 Generate code for the SH2. 17406 17407 '-m2e' 17408 Generate code for the SH2e. 17409 17410 '-m2a-nofpu' 17411 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a 17412 way that the floating-point unit is not used. 17413 17414 '-m2a-single-only' 17415 Generate code for the SH2a-FPU, in such a way that no 17416 double-precision floating-point operations are used. 17417 17418 '-m2a-single' 17419 Generate code for the SH2a-FPU assuming the floating-point unit is 17420 in single-precision mode by default. 17421 17422 '-m2a' 17423 Generate code for the SH2a-FPU assuming the floating-point unit is 17424 in double-precision mode by default. 17425 17426 '-m3' 17427 Generate code for the SH3. 17428 17429 '-m3e' 17430 Generate code for the SH3e. 17431 17432 '-m4-nofpu' 17433 Generate code for the SH4 without a floating-point unit. 17434 17435 '-m4-single-only' 17436 Generate code for the SH4 with a floating-point unit that only 17437 supports single-precision arithmetic. 17438 17439 '-m4-single' 17440 Generate code for the SH4 assuming the floating-point unit is in 17441 single-precision mode by default. 17442 17443 '-m4' 17444 Generate code for the SH4. 17445 17446 '-m4a-nofpu' 17447 Generate code for the SH4al-dsp, or for a SH4a in such a way that 17448 the floating-point unit is not used. 17449 17450 '-m4a-single-only' 17451 Generate code for the SH4a, in such a way that no double-precision 17452 floating-point operations are used. 17453 17454 '-m4a-single' 17455 Generate code for the SH4a assuming the floating-point unit is in 17456 single-precision mode by default. 17457 17458 '-m4a' 17459 Generate code for the SH4a. 17460 17461 '-m4al' 17462 Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to 17463 the assembler. GCC doesn't generate any DSP instructions at the 17464 moment. 17465 17466 '-mb' 17467 Compile code for the processor in big-endian mode. 17468 17469 '-ml' 17470 Compile code for the processor in little-endian mode. 17471 17472 '-mdalign' 17473 Align doubles at 64-bit boundaries. Note that this changes the 17474 calling conventions, and thus some functions from the standard C 17475 library do not work unless you recompile it first with '-mdalign'. 17476 17477 '-mrelax' 17478 Shorten some address references at link time, when possible; uses 17479 the linker option '-relax'. 17480 17481 '-mbigtable' 17482 Use 32-bit offsets in 'switch' tables. The default is to use 17483 16-bit offsets. 17484 17485 '-mbitops' 17486 Enable the use of bit manipulation instructions on SH2A. 17487 17488 '-mfmovd' 17489 Enable the use of the instruction 'fmovd'. Check '-mdalign' for 17490 alignment constraints. 17491 17492 '-mhitachi' 17493 Comply with the calling conventions defined by Renesas. 17494 17495 '-mrenesas' 17496 Comply with the calling conventions defined by Renesas. 17497 17498 '-mno-renesas' 17499 Comply with the calling conventions defined for GCC before the 17500 Renesas conventions were available. This option is the default for 17501 all targets of the SH toolchain. 17502 17503 '-mnomacsave' 17504 Mark the 'MAC' register as call-clobbered, even if '-mhitachi' is 17505 given. 17506 17507 '-mieee' 17508 '-mno-ieee' 17509 Control the IEEE compliance of floating-point comparisons, which 17510 affects the handling of cases where the result of a comparison is 17511 unordered. By default '-mieee' is implicitly enabled. If 17512 '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set, 17513 which results in faster floating-point greater-equal and less-equal 17514 comparisons. The implcit settings can be overridden by specifying 17515 either '-mieee' or '-mno-ieee'. 17516 17517 '-minline-ic_invalidate' 17518 Inline code to invalidate instruction cache entries after setting 17519 up nested function trampolines. This option has no effect if 17520 '-musermode' is in effect and the selected code generation option 17521 (e.g. '-m4') does not allow the use of the 'icbi' instruction. If 17522 the selected code generation option does not allow the use of the 17523 'icbi' instruction, and '-musermode' is not in effect, the inlined 17524 code manipulates the instruction cache address array directly with 17525 an associative write. This not only requires privileged mode at 17526 run time, but it also fails if the cache line had been mapped via 17527 the TLB and has become unmapped. 17528 17529 '-misize' 17530 Dump instruction size and location in the assembly code. 17531 17532 '-mpadstruct' 17533 This option is deprecated. It pads structures to multiple of 4 17534 bytes, which is incompatible with the SH ABI. 17535 17536 '-matomic-model=MODEL' 17537 Sets the model of atomic operations and additional parameters as a 17538 comma separated list. For details on the atomic built-in functions 17539 see *note __atomic Builtins::. The following models and parameters 17540 are supported: 17541 17542 'none' 17543 Disable compiler generated atomic sequences and emit library 17544 calls for atomic operations. This is the default if the 17545 target is not 'sh-*-linux*'. 17546 17547 'soft-gusa' 17548 Generate GNU/Linux compatible gUSA software atomic sequences 17549 for the atomic built-in functions. The generated atomic 17550 sequences require additional support from the 17551 interrupt/exception handling code of the system and are only 17552 suitable for SH3* and SH4* single-core systems. This option 17553 is enabled by default when the target is 'sh-*-linux*' and 17554 SH3* or SH4*. When the target is SH4A, this option will also 17555 partially utilize the hardware atomic instructions 'movli.l' 17556 and 'movco.l' to create more efficient code, unless 'strict' 17557 is specified. 17558 17559 'soft-tcb' 17560 Generate software atomic sequences that use a variable in the 17561 thread control block. This is a variation of the gUSA 17562 sequences which can also be used on SH1* and SH2* targets. 17563 The generated atomic sequences require additional support from 17564 the interrupt/exception handling code of the system and are 17565 only suitable for single-core systems. When using this model, 17566 the 'gbr-offset=' parameter has to be specified as well. 17567 17568 'soft-imask' 17569 Generate software atomic sequences that temporarily disable 17570 interrupts by setting 'SR.IMASK = 1111'. This model works 17571 only when the program runs in privileged mode and is only 17572 suitable for single-core systems. Additional support from the 17573 interrupt/exception handling code of the system is not 17574 required. This model is enabled by default when the target is 17575 'sh-*-linux*' and SH1* or SH2*. 17576 17577 'hard-llcs' 17578 Generate hardware atomic sequences using the 'movli.l' and 17579 'movco.l' instructions only. This is only available on SH4A 17580 and is suitable for multi-core systems. Since the hardware 17581 instructions support only 32 bit atomic variables access to 8 17582 or 16 bit variables is emulated with 32 bit accesses. Code 17583 compiled with this option will also be compatible with other 17584 software atomic model interrupt/exception handling systems if 17585 executed on an SH4A system. Additional support from the 17586 interrupt/exception handling code of the system is not 17587 required for this model. 17588 17589 'gbr-offset=' 17590 This parameter specifies the offset in bytes of the variable 17591 in the thread control block structure that should be used by 17592 the generated atomic sequences when the 'soft-tcb' model has 17593 been selected. For other models this parameter is ignored. 17594 The specified value must be an integer multiple of four and in 17595 the range 0-1020. 17596 17597 'strict' 17598 This parameter prevents mixed usage of multiple atomic models, 17599 even though they would be compatible, and will make the 17600 compiler generate atomic sequences of the specified model 17601 only. 17602 17603 '-mtas' 17604 Generate the 'tas.b' opcode for '__atomic_test_and_set'. Notice 17605 that depending on the particular hardware and software 17606 configuration this can degrade overall performance due to the 17607 operand cache line flushes that are implied by the 'tas.b' 17608 instruction. On multi-core SH4A processors the 'tas.b' instruction 17609 must be used with caution since it can result in data corruption 17610 for certain cache configurations. 17611 17612 '-mspace' 17613 Optimize for space instead of speed. Implied by '-Os'. 17614 17615 '-mprefergot' 17616 When generating position-independent code, emit function calls 17617 using the Global Offset Table instead of the Procedure Linkage 17618 Table. 17619 17620 '-musermode' 17621 Don't generate privileged mode only code. This option implies 17622 '-mno-inline-ic_invalidate' if the inlined code would not work in 17623 user mode. This is the default when the target is 'sh-*-linux*'. 17624 17625 '-multcost=NUMBER' 17626 Set the cost to assume for a multiply insn. 17627 17628 '-mdiv=STRATEGY' 17629 Set the division strategy to be used for integer division 17630 operations. For SHmedia STRATEGY can be one of: 17631 17632 'fp' 17633 Performs the operation in floating point. This has a very 17634 high latency, but needs only a few instructions, so it might 17635 be a good choice if your code has enough easily-exploitable 17636 ILP to allow the compiler to schedule the floating-point 17637 instructions together with other instructions. Division by 17638 zero causes a floating-point exception. 17639 17640 'inv' 17641 Uses integer operations to calculate the inverse of the 17642 divisor, and then multiplies the dividend with the inverse. 17643 This strategy allows CSE and hoisting of the inverse 17644 calculation. Division by zero calculates an unspecified 17645 result, but does not trap. 17646 17647 'inv:minlat' 17648 A variant of 'inv' where, if no CSE or hoisting opportunities 17649 have been found, or if the entire operation has been hoisted 17650 to the same place, the last stages of the inverse calculation 17651 are intertwined with the final multiply to reduce the overall 17652 latency, at the expense of using a few more instructions, and 17653 thus offering fewer scheduling opportunities with other code. 17654 17655 'call' 17656 Calls a library function that usually implements the 17657 'inv:minlat' strategy. This gives high code density for 17658 'm5-*media-nofpu' compilations. 17659 17660 'call2' 17661 Uses a different entry point of the same library function, 17662 where it assumes that a pointer to a lookup table has already 17663 been set up, which exposes the pointer load to CSE and code 17664 hoisting optimizations. 17665 17666 'inv:call' 17667 'inv:call2' 17668 'inv:fp' 17669 Use the 'inv' algorithm for initial code generation, but if 17670 the code stays unoptimized, revert to the 'call', 'call2', or 17671 'fp' strategies, respectively. Note that the 17672 potentially-trapping side effect of division by zero is 17673 carried by a separate instruction, so it is possible that all 17674 the integer instructions are hoisted out, but the marker for 17675 the side effect stays where it is. A recombination to 17676 floating-point operations or a call is not possible in that 17677 case. 17678 17679 'inv20u' 17680 'inv20l' 17681 Variants of the 'inv:minlat' strategy. In the case that the 17682 inverse calculation is not separated from the multiply, they 17683 speed up division where the dividend fits into 20 bits (plus 17684 sign where applicable) by inserting a test to skip a number of 17685 operations in this case; this test slows down the case of 17686 larger dividends. 'inv20u' assumes the case of a such a small 17687 dividend to be unlikely, and 'inv20l' assumes it to be likely. 17688 17689 For targets other than SHmedia STRATEGY can be one of: 17690 17691 'call-div1' 17692 Calls a library function that uses the single-step division 17693 instruction 'div1' to perform the operation. Division by zero 17694 calculates an unspecified result and does not trap. This is 17695 the default except for SH4, SH2A and SHcompact. 17696 17697 'call-fp' 17698 Calls a library function that performs the operation in double 17699 precision floating point. Division by zero causes a 17700 floating-point exception. This is the default for SHcompact 17701 with FPU. Specifying this for targets that do not have a 17702 double precision FPU will default to 'call-div1'. 17703 17704 'call-table' 17705 Calls a library function that uses a lookup table for small 17706 divisors and the 'div1' instruction with case distinction for 17707 larger divisors. Division by zero calculates an unspecified 17708 result and does not trap. This is the default for SH4. 17709 Specifying this for targets that do not have dynamic shift 17710 instructions will default to 'call-div1'. 17711 17712 When a division strategy has not been specified the default 17713 strategy will be selected based on the current target. For SH2A 17714 the default strategy is to use the 'divs' and 'divu' instructions 17715 instead of library function calls. 17716 17717 '-maccumulate-outgoing-args' 17718 Reserve space once for outgoing arguments in the function prologue 17719 rather than around each call. Generally beneficial for performance 17720 and size. Also needed for unwinding to avoid changing the stack 17721 frame around conditional code. 17722 17723 '-mdivsi3_libfunc=NAME' 17724 Set the name of the library function used for 32-bit signed 17725 division to NAME. This only affects the name used in the 'call' 17726 and 'inv:call' division strategies, and the compiler still expects 17727 the same sets of input/output/clobbered registers as if this option 17728 were not present. 17729 17730 '-mfixed-range=REGISTER-RANGE' 17731 Generate code treating the given register range as fixed registers. 17732 A fixed register is one that the register allocator can not use. 17733 This is useful when compiling kernel code. A register range is 17734 specified as two registers separated by a dash. Multiple register 17735 ranges can be specified separated by a comma. 17736 17737 '-mindexed-addressing' 17738 Enable the use of the indexed addressing mode for 17739 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 17740 implement 32-bit wrap-around semantics for the indexed addressing 17741 mode. The architecture allows the implementation of processors 17742 with 64-bit MMU, which the OS could use to get 32-bit addressing, 17743 but since no current hardware implementation supports this or any 17744 other way to make the indexed addressing mode safe to use in the 17745 32-bit ABI, the default is '-mno-indexed-addressing'. 17746 17747 '-mgettrcost=NUMBER' 17748 Set the cost assumed for the 'gettr' instruction to NUMBER. The 17749 default is 2 if '-mpt-fixed' is in effect, 100 otherwise. 17750 17751 '-mpt-fixed' 17752 Assume 'pt*' instructions won't trap. This generally generates 17753 better-scheduled code, but is unsafe on current hardware. The 17754 current architecture definition says that 'ptabs' and 'ptrel' trap 17755 when the target anded with 3 is 3. This has the unintentional 17756 effect of making it unsafe to schedule these instructions before a 17757 branch, or hoist them out of a loop. For example, 17758 '__do_global_ctors', a part of 'libgcc' that runs constructors at 17759 program startup, calls functions in a list which is delimited by 17760 -1. With the '-mpt-fixed' option, the 'ptabs' is done before 17761 testing against -1. That means that all the constructors run a bit 17762 more quickly, but when the loop comes to the end of the list, the 17763 program crashes because 'ptabs' loads -1 into a target register. 17764 17765 Since this option is unsafe for any hardware implementing the 17766 current architecture specification, the default is '-mno-pt-fixed'. 17767 Unless specified explicitly with '-mgettrcost', '-mno-pt-fixed' 17768 also implies '-mgettrcost=100'; this deters register allocation 17769 from using target registers for storing ordinary integers. 17770 17771 '-minvalid-symbols' 17772 Assume symbols might be invalid. Ordinary function symbols 17773 generated by the compiler are always valid to load with 17774 'movi'/'shori'/'ptabs' or 'movi'/'shori'/'ptrel', but with 17775 assembler and/or linker tricks it is possible to generate symbols 17776 that cause 'ptabs' or 'ptrel' to trap. This option is only 17777 meaningful when '-mno-pt-fixed' is in effect. It prevents 17778 cross-basic-block CSE, hoisting and most scheduling of symbol 17779 loads. The default is '-mno-invalid-symbols'. 17780 17781 '-mbranch-cost=NUM' 17782 Assume NUM to be the cost for a branch instruction. Higher numbers 17783 make the compiler try to generate more branch-free code if 17784 possible. If not specified the value is selected depending on the 17785 processor type that is being compiled for. 17786 17787 '-mzdcbranch' 17788 '-mno-zdcbranch' 17789 Assume (do not assume) that zero displacement conditional branch 17790 instructions 'bt' and 'bf' are fast. If '-mzdcbranch' is 17791 specified, the compiler will try to prefer zero displacement branch 17792 code sequences. This is enabled by default when generating code 17793 for SH4 and SH4A. It can be explicitly disabled by specifying 17794 '-mno-zdcbranch'. 17795 17796 '-mcbranchdi' 17797 Enable the 'cbranchdi4' instruction pattern. 17798 17799 '-mcmpeqdi' 17800 Emit the 'cmpeqdi_t' instruction pattern even when '-mcbranchdi' is 17801 in effect. 17802 17803 '-mfused-madd' 17804 '-mno-fused-madd' 17805 Generate code that uses (does not use) the floating-point multiply 17806 and accumulate instructions. These instructions are generated by 17807 default if hardware floating point is used. The machine-dependent 17808 '-mfused-madd' option is now mapped to the machine-independent 17809 '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to 17810 '-ffp-contract=off'. 17811 17812 '-mfsca' 17813 '-mno-fsca' 17814 Allow or disallow the compiler to emit the 'fsca' instruction for 17815 sine and cosine approximations. The option '-mfsca' must be used 17816 in combination with '-funsafe-math-optimizations'. It is enabled 17817 by default when generating code for SH4A. Using '-mno-fsca' 17818 disables sine and cosine approximations even if 17819 '-funsafe-math-optimizations' is in effect. 17820 17821 '-mfsrra' 17822 '-mno-fsrra' 17823 Allow or disallow the compiler to emit the 'fsrra' instruction for 17824 reciprocal square root approximations. The option '-mfsrra' must 17825 be used in combination with '-funsafe-math-optimizations' and 17826 '-ffinite-math-only'. It is enabled by default when generating 17827 code for SH4A. Using '-mno-fsrra' disables reciprocal square root 17828 approximations even if '-funsafe-math-optimizations' and 17829 '-ffinite-math-only' are in effect. 17830 17831 '-mpretend-cmove' 17832 Prefer zero-displacement conditional branches for conditional move 17833 instruction patterns. This can result in faster code on the SH4 17834 processor. 17835 17836 17837 File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options 17838 17839 3.17.39 Solaris 2 Options 17840 ------------------------- 17841 17842 These '-m' options are supported on Solaris 2: 17843 17844 '-mimpure-text' 17845 '-mimpure-text', used in addition to '-shared', tells the compiler 17846 to not pass '-z text' to the linker when linking a shared object. 17847 Using this option, you can link position-dependent code into a 17848 shared object. 17849 17850 '-mimpure-text' suppresses the "relocations remain against 17851 allocatable but non-writable sections" linker error message. 17852 However, the necessary relocations trigger copy-on-write, and the 17853 shared object is not actually shared across processes. Instead of 17854 using '-mimpure-text', you should compile all source code with 17855 '-fpic' or '-fPIC'. 17856 17857 These switches are supported in addition to the above on Solaris 2: 17858 17859 '-pthreads' 17860 Add support for multithreading using the POSIX threads library. 17861 This option sets flags for both the preprocessor and linker. This 17862 option does not affect the thread safety of object code produced by 17863 the compiler or that of libraries supplied with it. 17864 17865 '-pthread' 17866 This is a synonym for '-pthreads'. 17867 17868 17869 File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options 17870 17871 3.17.40 SPARC Options 17872 --------------------- 17873 17874 These '-m' options are supported on the SPARC: 17875 17876 '-mno-app-regs' 17877 '-mapp-regs' 17878 Specify '-mapp-regs' to generate output using the global registers 17879 2 through 4, which the SPARC SVR4 ABI reserves for applications. 17880 Like the global register 1, each global register 2 through 4 is 17881 then treated as an allocable register that is clobbered by function 17882 calls. This is the default. 17883 17884 To be fully SVR4 ABI-compliant at the cost of some performance 17885 loss, specify '-mno-app-regs'. You should compile libraries and 17886 system software with this option. 17887 17888 '-mflat' 17889 '-mno-flat' 17890 With '-mflat', the compiler does not generate save/restore 17891 instructions and uses a "flat" or single register window model. 17892 This model is compatible with the regular register window model. 17893 The local registers and the input registers (0-5) are still treated 17894 as "call-saved" registers and are saved on the stack as needed. 17895 17896 With '-mno-flat' (the default), the compiler generates save/restore 17897 instructions (except for leaf functions). This is the normal 17898 operating mode. 17899 17900 '-mfpu' 17901 '-mhard-float' 17902 Generate output containing floating-point instructions. This is 17903 the default. 17904 17905 '-mno-fpu' 17906 '-msoft-float' 17907 Generate output containing library calls for floating point. 17908 *Warning:* the requisite libraries are not available for all SPARC 17909 targets. Normally the facilities of the machine's usual C compiler 17910 are used, but this cannot be done directly in cross-compilation. 17911 You must make your own arrangements to provide suitable library 17912 functions for cross-compilation. The embedded targets 17913 'sparc-*-aout' and 'sparclite-*-*' do provide software 17914 floating-point support. 17915 17916 '-msoft-float' changes the calling convention in the output file; 17917 therefore, it is only useful if you compile _all_ of a program with 17918 this option. In particular, you need to compile 'libgcc.a', the 17919 library that comes with GCC, with '-msoft-float' in order for this 17920 to work. 17921 17922 '-mhard-quad-float' 17923 Generate output containing quad-word (long double) floating-point 17924 instructions. 17925 17926 '-msoft-quad-float' 17927 Generate output containing library calls for quad-word (long 17928 double) floating-point instructions. The functions called are 17929 those specified in the SPARC ABI. This is the default. 17930 17931 As of this writing, there are no SPARC implementations that have 17932 hardware support for the quad-word floating-point instructions. 17933 They all invoke a trap handler for one of these instructions, and 17934 then the trap handler emulates the effect of the instruction. 17935 Because of the trap handler overhead, this is much slower than 17936 calling the ABI library routines. Thus the '-msoft-quad-float' 17937 option is the default. 17938 17939 '-mno-unaligned-doubles' 17940 '-munaligned-doubles' 17941 Assume that doubles have 8-byte alignment. This is the default. 17942 17943 With '-munaligned-doubles', GCC assumes that doubles have 8-byte 17944 alignment only if they are contained in another type, or if they 17945 have an absolute address. Otherwise, it assumes they have 4-byte 17946 alignment. Specifying this option avoids some rare compatibility 17947 problems with code generated by other compilers. It is not the 17948 default because it results in a performance loss, especially for 17949 floating-point code. 17950 17951 '-muser-mode' 17952 '-mno-user-mode' 17953 Do not generate code that can only run in supervisor mode. This is 17954 relevant only for the 'casa' instruction emitted for the LEON3 17955 processor. The default is '-mno-user-mode'. 17956 17957 '-mno-faster-structs' 17958 '-mfaster-structs' 17959 With '-mfaster-structs', the compiler assumes that structures 17960 should have 8-byte alignment. This enables the use of pairs of 17961 'ldd' and 'std' instructions for copies in structure assignment, in 17962 place of twice as many 'ld' and 'st' pairs. However, the use of 17963 this changed alignment directly violates the SPARC ABI. Thus, it's 17964 intended only for use on targets where the developer acknowledges 17965 that their resulting code is not directly in line with the rules of 17966 the ABI. 17967 17968 '-mcpu=CPU_TYPE' 17969 Set the instruction set, register set, and instruction scheduling 17970 parameters for machine type CPU_TYPE. Supported values for 17971 CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc', 17972 'leon', 'leon3', 'sparclite', 'f930', 'f934', 'sparclite86x', 17973 'sparclet', 'tsc701', 'v9', 'ultrasparc', 'ultrasparc3', 'niagara', 17974 'niagara2', 'niagara3' and 'niagara4'. 17975 17976 Native Solaris and GNU/Linux toolchains also support the value 17977 'native', which selects the best architecture option for the host 17978 processor. '-mcpu=native' has no effect if GCC does not recognize 17979 the processor. 17980 17981 Default instruction scheduling parameters are used for values that 17982 select an architecture and not an implementation. These are 'v7', 17983 'v8', 'sparclite', 'sparclet', 'v9'. 17984 17985 Here is a list of each supported architecture and their supported 17986 implementations. 17987 17988 v7 17989 cypress 17990 17991 v8 17992 supersparc, hypersparc, leon, leon3 17993 17994 sparclite 17995 f930, f934, sparclite86x 17996 17997 sparclet 17998 tsc701 17999 18000 v9 18001 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 18002 18003 By default (unless configured otherwise), GCC generates code for 18004 the V7 variant of the SPARC architecture. With '-mcpu=cypress', 18005 the compiler additionally optimizes it for the Cypress CY7C602 18006 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 18007 also appropriate for the older SPARCStation 1, 2, IPX etc. 18008 18009 With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC 18010 architecture. The only difference from V7 code is that the 18011 compiler emits the integer multiply and integer divide instructions 18012 which exist in SPARC-V8 but not in SPARC-V7. With 18013 '-mcpu=supersparc', the compiler additionally optimizes it for the 18014 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 18015 series. 18016 18017 With '-mcpu=sparclite', GCC generates code for the SPARClite 18018 variant of the SPARC architecture. This adds the integer multiply, 18019 integer divide step and scan ('ffs') instructions which exist in 18020 SPARClite but not in SPARC-V7. With '-mcpu=f930', the compiler 18021 additionally optimizes it for the Fujitsu MB86930 chip, which is 18022 the original SPARClite, with no FPU. With '-mcpu=f934', the 18023 compiler additionally optimizes it for the Fujitsu MB86934 chip, 18024 which is the more recent SPARClite with FPU. 18025 18026 With '-mcpu=sparclet', GCC generates code for the SPARClet variant 18027 of the SPARC architecture. This adds the integer multiply, 18028 multiply/accumulate, integer divide step and scan ('ffs') 18029 instructions which exist in SPARClet but not in SPARC-V7. With 18030 '-mcpu=tsc701', the compiler additionally optimizes it for the 18031 TEMIC SPARClet chip. 18032 18033 With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC 18034 architecture. This adds 64-bit integer and floating-point move 18035 instructions, 3 additional floating-point condition code registers 18036 and conditional move instructions. With '-mcpu=ultrasparc', the 18037 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 18038 chips. With '-mcpu=ultrasparc3', the compiler additionally 18039 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 18040 chips. With '-mcpu=niagara', the compiler additionally optimizes 18041 it for Sun UltraSPARC T1 chips. With '-mcpu=niagara2', the 18042 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 18043 With '-mcpu=niagara3', the compiler additionally optimizes it for 18044 Sun UltraSPARC T3 chips. With '-mcpu=niagara4', the compiler 18045 additionally optimizes it for Sun UltraSPARC T4 chips. 18046 18047 '-mtune=CPU_TYPE' 18048 Set the instruction scheduling parameters for machine type 18049 CPU_TYPE, but do not set the instruction set or register set that 18050 the option '-mcpu=CPU_TYPE' does. 18051 18052 The same values for '-mcpu=CPU_TYPE' can be used for 18053 '-mtune=CPU_TYPE', but the only useful values are those that select 18054 a particular CPU implementation. Those are 'cypress', 18055 'supersparc', 'hypersparc', 'leon', 'leon3', 'f930', 'f934', 18056 'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3', 'niagara', 18057 'niagara2', 'niagara3' and 'niagara4'. With native Solaris and 18058 GNU/Linux toolchains, 'native' can also be used. 18059 18060 '-mv8plus' 18061 '-mno-v8plus' 18062 With '-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 18063 difference from the V8 ABI is that the global and out registers are 18064 considered 64 bits wide. This is enabled by default on Solaris in 18065 32-bit mode for all SPARC-V9 processors. 18066 18067 '-mvis' 18068 '-mno-vis' 18069 With '-mvis', GCC generates code that takes advantage of the 18070 UltraSPARC Visual Instruction Set extensions. The default is 18071 '-mno-vis'. 18072 18073 '-mvis2' 18074 '-mno-vis2' 18075 With '-mvis2', GCC generates code that takes advantage of version 18076 2.0 of the UltraSPARC Visual Instruction Set extensions. The 18077 default is '-mvis2' when targeting a cpu that supports such 18078 instructions, such as UltraSPARC-III and later. Setting '-mvis2' 18079 also sets '-mvis'. 18080 18081 '-mvis3' 18082 '-mno-vis3' 18083 With '-mvis3', GCC generates code that takes advantage of version 18084 3.0 of the UltraSPARC Visual Instruction Set extensions. The 18085 default is '-mvis3' when targeting a cpu that supports such 18086 instructions, such as niagara-3 and later. Setting '-mvis3' also 18087 sets '-mvis2' and '-mvis'. 18088 18089 '-mcbcond' 18090 '-mno-cbcond' 18091 With '-mcbcond', GCC generates code that takes advantage of 18092 compare-and-branch instructions, as defined in the Sparc 18093 Architecture 2011. The default is '-mcbcond' when targeting a cpu 18094 that supports such instructions, such as niagara-4 and later. 18095 18096 '-mpopc' 18097 '-mno-popc' 18098 With '-mpopc', GCC generates code that takes advantage of the 18099 UltraSPARC population count instruction. The default is '-mpopc' 18100 when targeting a cpu that supports such instructions, such as 18101 Niagara-2 and later. 18102 18103 '-mfmaf' 18104 '-mno-fmaf' 18105 With '-mfmaf', GCC generates code that takes advantage of the 18106 UltraSPARC Fused Multiply-Add Floating-point extensions. The 18107 default is '-mfmaf' when targeting a cpu that supports such 18108 instructions, such as Niagara-3 and later. 18109 18110 '-mfix-at697f' 18111 Enable the documented workaround for the single erratum of the 18112 Atmel AT697F processor (which corresponds to erratum #13 of the 18113 AT697E processor). 18114 18115 '-mfix-ut699' 18116 Enable the documented workarounds for the floating-point errata and 18117 the data cache nullify errata of the UT699 processor. 18118 18119 These '-m' options are supported in addition to the above on SPARC-V9 18120 processors in 64-bit environments: 18121 18122 '-m32' 18123 '-m64' 18124 Generate code for a 32-bit or 64-bit environment. The 32-bit 18125 environment sets int, long and pointer to 32 bits. The 64-bit 18126 environment sets int to 32 bits and long and pointer to 64 bits. 18127 18128 '-mcmodel=WHICH' 18129 Set the code model to one of 18130 18131 'medlow' 18132 The Medium/Low code model: 64-bit addresses, programs must be 18133 linked in the low 32 bits of memory. Programs can be 18134 statically or dynamically linked. 18135 18136 'medmid' 18137 The Medium/Middle code model: 64-bit addresses, programs must 18138 be linked in the low 44 bits of memory, the text and data 18139 segments must be less than 2GB in size and the data segment 18140 must be located within 2GB of the text segment. 18141 18142 'medany' 18143 The Medium/Anywhere code model: 64-bit addresses, programs may 18144 be linked anywhere in memory, the text and data segments must 18145 be less than 2GB in size and the data segment must be located 18146 within 2GB of the text segment. 18147 18148 'embmedany' 18149 The Medium/Anywhere code model for embedded systems: 64-bit 18150 addresses, the text and data segments must be less than 2GB in 18151 size, both starting anywhere in memory (determined at link 18152 time). The global register %g4 points to the base of the data 18153 segment. Programs are statically linked and PIC is not 18154 supported. 18155 18156 '-mmemory-model=MEM-MODEL' 18157 Set the memory model in force on the processor to one of 18158 18159 'default' 18160 The default memory model for the processor and operating 18161 system. 18162 18163 'rmo' 18164 Relaxed Memory Order 18165 18166 'pso' 18167 Partial Store Order 18168 18169 'tso' 18170 Total Store Order 18171 18172 'sc' 18173 Sequential Consistency 18174 18175 These memory models are formally defined in Appendix D of the Sparc 18176 V9 architecture manual, as set in the processor's 'PSTATE.MM' 18177 field. 18178 18179 '-mstack-bias' 18180 '-mno-stack-bias' 18181 With '-mstack-bias', GCC assumes that the stack pointer, and frame 18182 pointer if present, are offset by -2047 which must be added back 18183 when making stack frame references. This is the default in 64-bit 18184 mode. Otherwise, assume no such offset is present. 18185 18186 18187 File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 18188 18189 3.17.41 SPU Options 18190 ------------------- 18191 18192 These '-m' options are supported on the SPU: 18193 18194 '-mwarn-reloc' 18195 '-merror-reloc' 18196 18197 The loader for SPU does not handle dynamic relocations. By 18198 default, GCC gives an error when it generates code that requires a 18199 dynamic relocation. '-mno-error-reloc' disables the error, 18200 '-mwarn-reloc' generates a warning instead. 18201 18202 '-msafe-dma' 18203 '-munsafe-dma' 18204 18205 Instructions that initiate or test completion of DMA must not be 18206 reordered with respect to loads and stores of the memory that is 18207 being accessed. With '-munsafe-dma' you must use the 'volatile' 18208 keyword to protect memory accesses, but that can lead to 18209 inefficient code in places where the memory is known to not change. 18210 Rather than mark the memory as volatile, you can use '-msafe-dma' 18211 to tell the compiler to treat the DMA instructions as potentially 18212 affecting all memory. 18213 18214 '-mbranch-hints' 18215 18216 By default, GCC generates a branch hint instruction to avoid 18217 pipeline stalls for always-taken or probably-taken branches. A 18218 hint is not generated closer than 8 instructions away from its 18219 branch. There is little reason to disable them, except for 18220 debugging purposes, or to make an object a little bit smaller. 18221 18222 '-msmall-mem' 18223 '-mlarge-mem' 18224 18225 By default, GCC generates code assuming that addresses are never 18226 larger than 18 bits. With '-mlarge-mem' code is generated that 18227 assumes a full 32-bit address. 18228 18229 '-mstdmain' 18230 18231 By default, GCC links against startup code that assumes the 18232 SPU-style main function interface (which has an unconventional 18233 parameter list). With '-mstdmain', GCC links your program against 18234 startup code that assumes a C99-style interface to 'main', 18235 including a local copy of 'argv' strings. 18236 18237 '-mfixed-range=REGISTER-RANGE' 18238 Generate code treating the given register range as fixed registers. 18239 A fixed register is one that the register allocator cannot use. 18240 This is useful when compiling kernel code. A register range is 18241 specified as two registers separated by a dash. Multiple register 18242 ranges can be specified separated by a comma. 18243 18244 '-mea32' 18245 '-mea64' 18246 Compile code assuming that pointers to the PPU address space 18247 accessed via the '__ea' named address space qualifier are either 32 18248 or 64 bits wide. The default is 32 bits. As this is an 18249 ABI-changing option, all object code in an executable must be 18250 compiled with the same setting. 18251 18252 '-maddress-space-conversion' 18253 '-mno-address-space-conversion' 18254 Allow/disallow treating the '__ea' address space as superset of the 18255 generic address space. This enables explicit type casts between 18256 '__ea' and generic pointer as well as implicit conversions of 18257 generic pointers to '__ea' pointers. The default is to allow 18258 address space pointer conversions. 18259 18260 '-mcache-size=CACHE-SIZE' 18261 This option controls the version of libgcc that the compiler links 18262 to an executable and selects a software-managed cache for accessing 18263 variables in the '__ea' address space with a particular cache size. 18264 Possible options for CACHE-SIZE are '8', '16', '32', '64' and 18265 '128'. The default cache size is 64KB. 18266 18267 '-matomic-updates' 18268 '-mno-atomic-updates' 18269 This option controls the version of libgcc that the compiler links 18270 to an executable and selects whether atomic updates to the 18271 software-managed cache of PPU-side variables are used. If you use 18272 atomic updates, changes to a PPU variable from SPU code using the 18273 '__ea' named address space qualifier do not interfere with changes 18274 to other PPU variables residing in the same cache line from PPU 18275 code. If you do not use atomic updates, such interference may 18276 occur; however, writing back cache lines is more efficient. The 18277 default behavior is to use atomic updates. 18278 18279 '-mdual-nops' 18280 '-mdual-nops=N' 18281 By default, GCC inserts nops to increase dual issue when it expects 18282 it to increase performance. N can be a value from 0 to 10. A 18283 smaller N inserts fewer nops. 10 is the default, 0 is the same as 18284 '-mno-dual-nops'. Disabled with '-Os'. 18285 18286 '-mhint-max-nops=N' 18287 Maximum number of nops to insert for a branch hint. A branch hint 18288 must be at least 8 instructions away from the branch it is 18289 affecting. GCC inserts up to N nops to enforce this, otherwise it 18290 does not generate the branch hint. 18291 18292 '-mhint-max-distance=N' 18293 The encoding of the branch hint instruction limits the hint to be 18294 within 256 instructions of the branch it is affecting. By default, 18295 GCC makes sure it is within 125. 18296 18297 '-msafe-hints' 18298 Work around a hardware bug that causes the SPU to stall 18299 indefinitely. By default, GCC inserts the 'hbrp' instruction to 18300 make sure this stall won't happen. 18301 18302 18303 File: gcc.info, Node: System V Options, Next: TILE-Gx Options, Prev: SPU Options, Up: Submodel Options 18304 18305 3.17.42 Options for System V 18306 ---------------------------- 18307 18308 These additional options are available on System V Release 4 for 18309 compatibility with other compilers on those systems: 18310 18311 '-G' 18312 Create a shared object. It is recommended that '-symbolic' or 18313 '-shared' be used instead. 18314 18315 '-Qy' 18316 Identify the versions of each tool used by the compiler, in a 18317 '.ident' assembler directive in the output. 18318 18319 '-Qn' 18320 Refrain from adding '.ident' directives to the output file (this is 18321 the default). 18322 18323 '-YP,DIRS' 18324 Search the directories DIRS, and no others, for libraries specified 18325 with '-l'. 18326 18327 '-Ym,DIR' 18328 Look in the directory DIR to find the M4 preprocessor. The 18329 assembler uses this option. 18330 18331 18332 File: gcc.info, Node: TILE-Gx Options, Next: TILEPro Options, Prev: System V Options, Up: Submodel Options 18333 18334 3.17.43 TILE-Gx Options 18335 ----------------------- 18336 18337 These '-m' options are supported on the TILE-Gx: 18338 18339 '-mcmodel=small' 18340 Generate code for the small model. The distance for direct calls 18341 is limited to 500M in either direction. PC-relative addresses are 18342 32 bits. Absolute addresses support the full address range. 18343 18344 '-mcmodel=large' 18345 Generate code for the large model. There is no limitation on call 18346 distance, pc-relative addresses, or absolute addresses. 18347 18348 '-mcpu=NAME' 18349 Selects the type of CPU to be targeted. Currently the only 18350 supported type is 'tilegx'. 18351 18352 '-m32' 18353 '-m64' 18354 Generate code for a 32-bit or 64-bit environment. The 32-bit 18355 environment sets int, long, and pointer to 32 bits. The 64-bit 18356 environment sets int to 32 bits and long and pointer to 64 bits. 18357 18358 18359 File: gcc.info, Node: TILEPro Options, Next: V850 Options, Prev: TILE-Gx Options, Up: Submodel Options 18360 18361 3.17.44 TILEPro Options 18362 ----------------------- 18363 18364 These '-m' options are supported on the TILEPro: 18365 18366 '-mcpu=NAME' 18367 Selects the type of CPU to be targeted. Currently the only 18368 supported type is 'tilepro'. 18369 18370 '-m32' 18371 Generate code for a 32-bit environment, which sets int, long, and 18372 pointer to 32 bits. This is the only supported behavior so the 18373 flag is essentially ignored. 18374 18375 18376 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TILEPro Options, Up: Submodel Options 18377 18378 3.17.45 V850 Options 18379 -------------------- 18380 18381 These '-m' options are defined for V850 implementations: 18382 18383 '-mlong-calls' 18384 '-mno-long-calls' 18385 Treat all calls as being far away (near). If calls are assumed to 18386 be far away, the compiler always loads the function's address into 18387 a register, and calls indirect through the pointer. 18388 18389 '-mno-ep' 18390 '-mep' 18391 Do not optimize (do optimize) basic blocks that use the same index 18392 pointer 4 or more times to copy pointer into the 'ep' register, and 18393 use the shorter 'sld' and 'sst' instructions. The '-mep' option is 18394 on by default if you optimize. 18395 18396 '-mno-prolog-function' 18397 '-mprolog-function' 18398 Do not use (do use) external functions to save and restore 18399 registers at the prologue and epilogue of a function. The external 18400 functions are slower, but use less code space if more than one 18401 function saves the same number of registers. The 18402 '-mprolog-function' option is on by default if you optimize. 18403 18404 '-mspace' 18405 Try to make the code as small as possible. At present, this just 18406 turns on the '-mep' and '-mprolog-function' options. 18407 18408 '-mtda=N' 18409 Put static or global variables whose size is N bytes or less into 18410 the tiny data area that register 'ep' points to. The tiny data 18411 area can hold up to 256 bytes in total (128 bytes for byte 18412 references). 18413 18414 '-msda=N' 18415 Put static or global variables whose size is N bytes or less into 18416 the small data area that register 'gp' points to. The small data 18417 area can hold up to 64 kilobytes. 18418 18419 '-mzda=N' 18420 Put static or global variables whose size is N bytes or less into 18421 the first 32 kilobytes of memory. 18422 18423 '-mv850' 18424 Specify that the target processor is the V850. 18425 18426 '-mv850e3v5' 18427 Specify that the target processor is the V850E3V5. The 18428 preprocessor constant '__v850e3v5__' is defined if this option is 18429 used. 18430 18431 '-mv850e2v4' 18432 Specify that the target processor is the V850E3V5. This is an 18433 alias for the '-mv850e3v5' option. 18434 18435 '-mv850e2v3' 18436 Specify that the target processor is the V850E2V3. The 18437 preprocessor constant '__v850e2v3__' is defined if this option is 18438 used. 18439 18440 '-mv850e2' 18441 Specify that the target processor is the V850E2. The preprocessor 18442 constant '__v850e2__' is defined if this option is used. 18443 18444 '-mv850e1' 18445 Specify that the target processor is the V850E1. The preprocessor 18446 constants '__v850e1__' and '__v850e__' are defined if this option 18447 is used. 18448 18449 '-mv850es' 18450 Specify that the target processor is the V850ES. This is an alias 18451 for the '-mv850e1' option. 18452 18453 '-mv850e' 18454 Specify that the target processor is the V850E. The preprocessor 18455 constant '__v850e__' is defined if this option is used. 18456 18457 If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor 18458 '-mv850e2v3' nor '-mv850e3v5' are defined then a default target 18459 processor is chosen and the relevant '__v850*__' preprocessor 18460 constant is defined. 18461 18462 The preprocessor constants '__v850' and '__v851__' are always 18463 defined, regardless of which processor variant is the target. 18464 18465 '-mdisable-callt' 18466 '-mno-disable-callt' 18467 This option suppresses generation of the 'CALLT' instruction for 18468 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the 18469 v850 architecture. 18470 18471 This option is enabled by default when the RH850 ABI is in use (see 18472 '-mrh850-abi'), and disabled by default when the GCC ABI is in use. 18473 If 'CALLT' instructions are being generated then the C preprocessor 18474 symbol '__V850_CALLT__' will be defined. 18475 18476 '-mrelax' 18477 '-mno-relax' 18478 Pass on (or do not pass on) the '-mrelax' command line option to 18479 the assembler. 18480 18481 '-mlong-jumps' 18482 '-mno-long-jumps' 18483 Disable (or re-enable) the generation of PC-relative jump 18484 instructions. 18485 18486 '-msoft-float' 18487 '-mhard-float' 18488 Disable (or re-enable) the generation of hardware floating point 18489 instructions. This option is only significant when the target 18490 architecture is 'V850E2V3' or higher. If hardware floating point 18491 instructions are being generated then the C preprocessor symbol 18492 '__FPU_OK__' will be defined, otherwise the symbol '__NO_FPU__' 18493 will be defined. 18494 18495 '-mloop' 18496 Enables the use of the e3v5 LOOP instruction. The use of this 18497 instruction is not enabled by default when the e3v5 architecture is 18498 selected because its use is still experimental. 18499 18500 '-mrh850-abi' 18501 '-mghs' 18502 Enables support for the RH850 version of the V850 ABI. This is the 18503 default. With this version of the ABI the following rules apply: 18504 18505 * Integer sized structures and unions are returned via a memory 18506 pointer rather than a register. 18507 18508 * Large structures and unions (more than 8 bytes in size) are 18509 passed by value. 18510 18511 * Functions are aligned to 16-bit boundaries. 18512 18513 * The '-m8byte-align' command line option is supported. 18514 18515 * The '-mdisable-callt' command line option is enabled by 18516 default. The '-mno-disable-callt' command line option is not 18517 supported. 18518 18519 When this version of the ABI is enabled the C preprocessor symbol 18520 '__V850_RH850_ABI__' is defined. 18521 18522 '-mgcc-abi' 18523 Enables support for the old GCC version of the V850 ABI. With this 18524 version of the ABI the following rules apply: 18525 18526 * Integer sized structures and unions are returned in register 18527 'r10'. 18528 18529 * Large structures and unions (more than 8 bytes in size) are 18530 passed by reference. 18531 18532 * Functions are aligned to 32-bit boundaries, unless optimizing 18533 for size. 18534 18535 * The '-m8byte-align' command line option is not supported. 18536 18537 * The '-mdisable-callt' command line option is supported but not 18538 enabled by default. 18539 18540 When this version of the ABI is enabled the C preprocessor symbol 18541 '__V850_GCC_ABI__' is defined. 18542 18543 '-m8byte-align' 18544 '-mno-8byte-align' 18545 Enables support for 'doubles' and 'long long' types to be aligned 18546 on 8-byte boundaries. The default is to restrict the alignment of 18547 all objects to at most 4-bytes. When '-m8byte-align' is in effect 18548 the C preprocessor symbol '__V850_8BYTE_ALIGN__' will be defined. 18549 18550 '-mbig-switch' 18551 Generate code suitable for big switch tables. Use this option only 18552 if the assembler/linker complain about out of range branches within 18553 a switch table. 18554 18555 '-mapp-regs' 18556 This option causes r2 and r5 to be used in the code generated by 18557 the compiler. This setting is the default. 18558 18559 '-mno-app-regs' 18560 This option causes r2 and r5 to be treated as fixed registers. 18561 18562 18563 File: gcc.info, Node: VAX Options, Next: VMS Options, Prev: V850 Options, Up: Submodel Options 18564 18565 3.17.46 VAX Options 18566 ------------------- 18567 18568 These '-m' options are defined for the VAX: 18569 18570 '-munix' 18571 Do not output certain jump instructions ('aobleq' and so on) that 18572 the Unix assembler for the VAX cannot handle across long ranges. 18573 18574 '-mgnu' 18575 Do output those jump instructions, on the assumption that the GNU 18576 assembler is being used. 18577 18578 '-mg' 18579 Output code for G-format floating-point numbers instead of 18580 D-format. 18581 18582 18583 File: gcc.info, Node: VMS Options, Next: VxWorks Options, Prev: VAX Options, Up: Submodel Options 18584 18585 3.17.47 VMS Options 18586 ------------------- 18587 18588 These '-m' options are defined for the VMS implementations: 18589 18590 '-mvms-return-codes' 18591 Return VMS condition codes from 'main'. The default is to return 18592 POSIX-style condition (e.g. error) codes. 18593 18594 '-mdebug-main=PREFIX' 18595 Flag the first routine whose name starts with PREFIX as the main 18596 routine for the debugger. 18597 18598 '-mmalloc64' 18599 Default to 64-bit memory allocation routines. 18600 18601 '-mpointer-size=SIZE' 18602 Set the default size of pointers. Possible options for SIZE are 18603 '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit 18604 pointers, and 'no' for supporting only 32 bit pointers. The later 18605 option disables 'pragma pointer_size'. 18606 18607 18608 File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VMS Options, Up: Submodel Options 18609 18610 3.17.48 VxWorks Options 18611 ----------------------- 18612 18613 The options in this section are defined for all VxWorks targets. 18614 Options specific to the target hardware are listed with the other 18615 options for that target. 18616 18617 '-mrtp' 18618 GCC can generate code for both VxWorks kernels and real time 18619 processes (RTPs). This option switches from the former to the 18620 latter. It also defines the preprocessor macro '__RTP__'. 18621 18622 '-non-static' 18623 Link an RTP executable against shared libraries rather than static 18624 libraries. The options '-static' and '-shared' can also be used 18625 for RTPs (*note Link Options::); '-static' is the default. 18626 18627 '-Bstatic' 18628 '-Bdynamic' 18629 These options are passed down to the linker. They are defined for 18630 compatibility with Diab. 18631 18632 '-Xbind-lazy' 18633 Enable lazy binding of function calls. This option is equivalent 18634 to '-Wl,-z,now' and is defined for compatibility with Diab. 18635 18636 '-Xbind-now' 18637 Disable lazy binding of function calls. This option is the default 18638 and is defined for compatibility with Diab. 18639 18640 18641 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 18642 18643 3.17.49 x86-64 Options 18644 ---------------------- 18645 18646 These are listed under *Note i386 and x86-64 Options::. 18647 18648 18649 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 18650 18651 3.17.50 Xstormy16 Options 18652 ------------------------- 18653 18654 These options are defined for Xstormy16: 18655 18656 '-msim' 18657 Choose startup files and linker script suitable for the simulator. 18658 18659 18660 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 18661 18662 3.17.51 Xtensa Options 18663 ---------------------- 18664 18665 These options are supported for Xtensa targets: 18666 18667 '-mconst16' 18668 '-mno-const16' 18669 Enable or disable use of 'CONST16' instructions for loading 18670 constant values. The 'CONST16' instruction is currently not a 18671 standard option from Tensilica. When enabled, 'CONST16' 18672 instructions are always used in place of the standard 'L32R' 18673 instructions. The use of 'CONST16' is enabled by default only if 18674 the 'L32R' instruction is not available. 18675 18676 '-mfused-madd' 18677 '-mno-fused-madd' 18678 Enable or disable use of fused multiply/add and multiply/subtract 18679 instructions in the floating-point option. This has no effect if 18680 the floating-point option is not also enabled. Disabling fused 18681 multiply/add and multiply/subtract instructions forces the compiler 18682 to use separate instructions for the multiply and add/subtract 18683 operations. This may be desirable in some cases where strict IEEE 18684 754-compliant results are required: the fused multiply add/subtract 18685 instructions do not round the intermediate result, thereby 18686 producing results with _more_ bits of precision than specified by 18687 the IEEE standard. Disabling fused multiply add/subtract 18688 instructions also ensures that the program output is not sensitive 18689 to the compiler's ability to combine multiply and add/subtract 18690 operations. 18691 18692 '-mserialize-volatile' 18693 '-mno-serialize-volatile' 18694 When this option is enabled, GCC inserts 'MEMW' instructions before 18695 'volatile' memory references to guarantee sequential consistency. 18696 The default is '-mserialize-volatile'. Use 18697 '-mno-serialize-volatile' to omit the 'MEMW' instructions. 18698 18699 '-mforce-no-pic' 18700 For targets, like GNU/Linux, where all user-mode Xtensa code must 18701 be position-independent code (PIC), this option disables PIC for 18702 compiling kernel code. 18703 18704 '-mtext-section-literals' 18705 '-mno-text-section-literals' 18706 Control the treatment of literal pools. The default is 18707 '-mno-text-section-literals', which places literals in a separate 18708 section in the output file. This allows the literal pool to be 18709 placed in a data RAM/ROM, and it also allows the linker to combine 18710 literal pools from separate object files to remove redundant 18711 literals and improve code size. With '-mtext-section-literals', 18712 the literals are interspersed in the text section in order to keep 18713 them as close as possible to their references. This may be 18714 necessary for large assembly files. 18715 18716 '-mtarget-align' 18717 '-mno-target-align' 18718 When this option is enabled, GCC instructs the assembler to 18719 automatically align instructions to reduce branch penalties at the 18720 expense of some code density. The assembler attempts to widen 18721 density instructions to align branch targets and the instructions 18722 following call instructions. If there are not enough preceding 18723 safe density instructions to align a target, no widening is 18724 performed. The default is '-mtarget-align'. These options do not 18725 affect the treatment of auto-aligned instructions like 'LOOP', 18726 which the assembler always aligns, either by widening density 18727 instructions or by inserting NOP instructions. 18728 18729 '-mlongcalls' 18730 '-mno-longcalls' 18731 When this option is enabled, GCC instructs the assembler to 18732 translate direct calls to indirect calls unless it can determine 18733 that the target of a direct call is in the range allowed by the 18734 call instruction. This translation typically occurs for calls to 18735 functions in other source files. Specifically, the assembler 18736 translates a direct 'CALL' instruction into an 'L32R' followed by a 18737 'CALLX' instruction. The default is '-mno-longcalls'. This option 18738 should be used in programs where the call target can potentially be 18739 out of range. This option is implemented in the assembler, not the 18740 compiler, so the assembly code generated by GCC still shows direct 18741 call instructions--look at the disassembled object code to see the 18742 actual instructions. Note that the assembler uses an indirect call 18743 for every cross-file call, not just those that really are out of 18744 range. 18745 18746 18747 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 18748 18749 3.17.52 zSeries Options 18750 ----------------------- 18751 18752 These are listed under *Note S/390 and zSeries Options::. 18753 18754 18755 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 18756 18757 3.18 Options for Code Generation Conventions 18758 ============================================ 18759 18760 These machine-independent options control the interface conventions used 18761 in code generation. 18762 18763 Most of them have both positive and negative forms; the negative form 18764 of '-ffoo' is '-fno-foo'. In the table below, only one of the forms is 18765 listed--the one that is not the default. You can figure out the other 18766 form by either removing 'no-' or adding it. 18767 18768 '-fbounds-check' 18769 For front ends that support it, generate additional code to check 18770 that indices used to access arrays are within the declared range. 18771 This is currently only supported by the Java and Fortran front 18772 ends, where this option defaults to true and false respectively. 18773 18774 '-fstack-reuse=REUSE-LEVEL' 18775 This option controls stack space reuse for user declared local/auto 18776 variables and compiler generated temporaries. REUSE_LEVEL can be 18777 'all', 'named_vars', or 'none'. 'all' enables stack reuse for all 18778 local variables and temporaries, 'named_vars' enables the reuse 18779 only for user defined local variables with names, and 'none' 18780 disables stack reuse completely. The default value is 'all'. The 18781 option is needed when the program extends the lifetime of a scoped 18782 local variable or a compiler generated temporary beyond the end 18783 point defined by the language. When a lifetime of a variable ends, 18784 and if the variable lives in memory, the optimizing compiler has 18785 the freedom to reuse its stack space with other temporaries or 18786 scoped local variables whose live range does not overlap with it. 18787 Legacy code extending local lifetime will likely to break with the 18788 stack reuse optimization. 18789 18790 For example, 18791 18792 int *p; 18793 { 18794 int local1; 18795 18796 p = &local1; 18797 local1 = 10; 18798 .... 18799 } 18800 { 18801 int local2; 18802 local2 = 20; 18803 ... 18804 } 18805 18806 if (*p == 10) // out of scope use of local1 18807 { 18808 18809 } 18810 18811 Another example: 18812 18813 struct A 18814 { 18815 A(int k) : i(k), j(k) { } 18816 int i; 18817 int j; 18818 }; 18819 18820 A *ap; 18821 18822 void foo(const A& ar) 18823 { 18824 ap = &ar; 18825 } 18826 18827 void bar() 18828 { 18829 foo(A(10)); // temp object's lifetime ends when foo returns 18830 18831 { 18832 A a(20); 18833 .... 18834 } 18835 ap->i+= 10; // ap references out of scope temp whose space 18836 // is reused with a. What is the value of ap->i? 18837 } 18838 18839 18840 The lifetime of a compiler generated temporary is well defined by 18841 the C++ standard. When a lifetime of a temporary ends, and if the 18842 temporary lives in memory, the optimizing compiler has the freedom 18843 to reuse its stack space with other temporaries or scoped local 18844 variables whose live range does not overlap with it. However some 18845 of the legacy code relies on the behavior of older compilers in 18846 which temporaries' stack space is not reused, the aggressive stack 18847 reuse can lead to runtime errors. This option is used to control 18848 the temporary stack reuse optimization. 18849 18850 '-ftrapv' 18851 This option generates traps for signed overflow on addition, 18852 subtraction, multiplication operations. 18853 18854 '-fwrapv' 18855 This option instructs the compiler to assume that signed arithmetic 18856 overflow of addition, subtraction and multiplication wraps around 18857 using twos-complement representation. This flag enables some 18858 optimizations and disables others. This option is enabled by 18859 default for the Java front end, as required by the Java language 18860 specification. 18861 18862 '-fexceptions' 18863 Enable exception handling. Generates extra code needed to 18864 propagate exceptions. For some targets, this implies GCC generates 18865 frame unwind information for all functions, which can produce 18866 significant data size overhead, although it does not affect 18867 execution. If you do not specify this option, GCC enables it by 18868 default for languages like C++ that normally require exception 18869 handling, and disables it for languages like C that do not normally 18870 require it. However, you may need to enable this option when 18871 compiling C code that needs to interoperate properly with exception 18872 handlers written in C++. You may also wish to disable this option 18873 if you are compiling older C++ programs that don't use exception 18874 handling. 18875 18876 '-fnon-call-exceptions' 18877 Generate code that allows trapping instructions to throw 18878 exceptions. Note that this requires platform-specific runtime 18879 support that does not exist everywhere. Moreover, it only allows 18880 _trapping_ instructions to throw exceptions, i.e. memory references 18881 or floating-point instructions. It does not allow exceptions to be 18882 thrown from arbitrary signal handlers such as 'SIGALRM'. 18883 18884 '-fdelete-dead-exceptions' 18885 Consider that instructions that may throw exceptions but don't 18886 otherwise contribute to the execution of the program can be 18887 optimized away. This option is enabled by default for the Ada 18888 front end, as permitted by the Ada language specification. 18889 Optimization passes that cause dead exceptions to be removed are 18890 enabled independently at different optimization levels. 18891 18892 '-funwind-tables' 18893 Similar to '-fexceptions', except that it just generates any needed 18894 static data, but does not affect the generated code in any other 18895 way. You normally do not need to enable this option; instead, a 18896 language processor that needs this handling enables it on your 18897 behalf. 18898 18899 '-fasynchronous-unwind-tables' 18900 Generate unwind table in DWARF 2 format, if supported by target 18901 machine. The table is exact at each instruction boundary, so it 18902 can be used for stack unwinding from asynchronous events (such as 18903 debugger or garbage collector). 18904 18905 '-fpcc-struct-return' 18906 Return "short" 'struct' and 'union' values in memory like longer 18907 ones, rather than in registers. This convention is less efficient, 18908 but it has the advantage of allowing intercallability between 18909 GCC-compiled files and files compiled with other compilers, 18910 particularly the Portable C Compiler (pcc). 18911 18912 The precise convention for returning structures in memory depends 18913 on the target configuration macros. 18914 18915 Short structures and unions are those whose size and alignment 18916 match that of some integer type. 18917 18918 *Warning:* code compiled with the '-fpcc-struct-return' switch is 18919 not binary compatible with code compiled with the 18920 '-freg-struct-return' switch. Use it to conform to a non-default 18921 application binary interface. 18922 18923 '-freg-struct-return' 18924 Return 'struct' and 'union' values in registers when possible. 18925 This is more efficient for small structures than 18926 '-fpcc-struct-return'. 18927 18928 If you specify neither '-fpcc-struct-return' nor 18929 '-freg-struct-return', GCC defaults to whichever convention is 18930 standard for the target. If there is no standard convention, GCC 18931 defaults to '-fpcc-struct-return', except on targets where GCC is 18932 the principal compiler. In those cases, we can choose the 18933 standard, and we chose the more efficient register return 18934 alternative. 18935 18936 *Warning:* code compiled with the '-freg-struct-return' switch is 18937 not binary compatible with code compiled with the 18938 '-fpcc-struct-return' switch. Use it to conform to a non-default 18939 application binary interface. 18940 18941 '-fshort-enums' 18942 Allocate to an 'enum' type only as many bytes as it needs for the 18943 declared range of possible values. Specifically, the 'enum' type 18944 is equivalent to the smallest integer type that has enough room. 18945 18946 *Warning:* the '-fshort-enums' switch causes GCC to generate code 18947 that is not binary compatible with code generated without that 18948 switch. Use it to conform to a non-default application binary 18949 interface. 18950 18951 '-fshort-double' 18952 Use the same size for 'double' as for 'float'. 18953 18954 *Warning:* the '-fshort-double' switch causes GCC to generate code 18955 that is not binary compatible with code generated without that 18956 switch. Use it to conform to a non-default application binary 18957 interface. 18958 18959 '-fshort-wchar' 18960 Override the underlying type for 'wchar_t' to be 'short unsigned 18961 int' instead of the default for the target. This option is useful 18962 for building programs to run under WINE. 18963 18964 *Warning:* the '-fshort-wchar' switch causes GCC to generate code 18965 that is not binary compatible with code generated without that 18966 switch. Use it to conform to a non-default application binary 18967 interface. 18968 18969 '-fno-common' 18970 In C code, controls the placement of uninitialized global 18971 variables. Unix C compilers have traditionally permitted multiple 18972 definitions of such variables in different compilation units by 18973 placing the variables in a common block. This is the behavior 18974 specified by '-fcommon', and is the default for GCC on most 18975 targets. On the other hand, this behavior is not required by ISO 18976 C, and on some targets may carry a speed or code size penalty on 18977 variable references. The '-fno-common' option specifies that the 18978 compiler should place uninitialized global variables in the data 18979 section of the object file, rather than generating them as common 18980 blocks. This has the effect that if the same variable is declared 18981 (without 'extern') in two different compilations, you get a 18982 multiple-definition error when you link them. In this case, you 18983 must compile with '-fcommon' instead. Compiling with '-fno-common' 18984 is useful on targets for which it provides better performance, or 18985 if you wish to verify that the program will work on other systems 18986 that always treat uninitialized variable declarations this way. 18987 18988 '-fno-ident' 18989 Ignore the '#ident' directive. 18990 18991 '-finhibit-size-directive' 18992 Don't output a '.size' assembler directive, or anything else that 18993 would cause trouble if the function is split in the middle, and the 18994 two halves are placed at locations far apart in memory. This 18995 option is used when compiling 'crtstuff.c'; you should not need to 18996 use it for anything else. 18997 18998 '-fverbose-asm' 18999 Put extra commentary information in the generated assembly code to 19000 make it more readable. This option is generally only of use to 19001 those who actually need to read the generated assembly code 19002 (perhaps while debugging the compiler itself). 19003 19004 '-fno-verbose-asm', the default, causes the extra information to be 19005 omitted and is useful when comparing two assembler files. 19006 19007 '-frecord-gcc-switches' 19008 This switch causes the command line used to invoke the compiler to 19009 be recorded into the object file that is being created. This 19010 switch is only implemented on some targets and the exact format of 19011 the recording is target and binary file format dependent, but it 19012 usually takes the form of a section containing ASCII text. This 19013 switch is related to the '-fverbose-asm' switch, but that switch 19014 only records information in the assembler output file as comments, 19015 so it never reaches the object file. See also 19016 '-grecord-gcc-switches' for another way of storing compiler options 19017 into the object file. 19018 19019 '-fpic' 19020 Generate position-independent code (PIC) suitable for use in a 19021 shared library, if supported for the target machine. Such code 19022 accesses all constant addresses through a global offset table 19023 (GOT). The dynamic loader resolves the GOT entries when the 19024 program starts (the dynamic loader is not part of GCC; it is part 19025 of the operating system). If the GOT size for the linked 19026 executable exceeds a machine-specific maximum size, you get an 19027 error message from the linker indicating that '-fpic' does not 19028 work; in that case, recompile with '-fPIC' instead. (These 19029 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 19030 386 has no such limit.) 19031 19032 Position-independent code requires special support, and therefore 19033 works only on certain machines. For the 386, GCC supports PIC for 19034 System V but not for the Sun 386i. Code generated for the IBM 19035 RS/6000 is always position-independent. 19036 19037 When this flag is set, the macros '__pic__' and '__PIC__' are 19038 defined to 1. 19039 19040 '-fPIC' 19041 If supported for the target machine, emit position-independent 19042 code, suitable for dynamic linking and avoiding any limit on the 19043 size of the global offset table. This option makes a difference on 19044 the m68k, PowerPC and SPARC. 19045 19046 Position-independent code requires special support, and therefore 19047 works only on certain machines. 19048 19049 When this flag is set, the macros '__pic__' and '__PIC__' are 19050 defined to 2. 19051 19052 '-fpie' 19053 '-fPIE' 19054 These options are similar to '-fpic' and '-fPIC', but generated 19055 position independent code can be only linked into executables. 19056 Usually these options are used when '-pie' GCC option is used 19057 during linking. 19058 19059 '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'. 19060 The macros have the value 1 for '-fpie' and 2 for '-fPIE'. 19061 19062 '-fno-jump-tables' 19063 Do not use jump tables for switch statements even where it would be 19064 more efficient than other code generation strategies. This option 19065 is of use in conjunction with '-fpic' or '-fPIC' for building code 19066 that forms part of a dynamic linker and cannot reference the 19067 address of a jump table. On some targets, jump tables do not 19068 require a GOT and this option is not needed. 19069 19070 '-ffixed-REG' 19071 Treat the register named REG as a fixed register; generated code 19072 should never refer to it (except perhaps as a stack pointer, frame 19073 pointer or in some other fixed role). 19074 19075 REG must be the name of a register. The register names accepted 19076 are machine-specific and are defined in the 'REGISTER_NAMES' macro 19077 in the machine description macro file. 19078 19079 This flag does not have a negative form, because it specifies a 19080 three-way choice. 19081 19082 '-fcall-used-REG' 19083 Treat the register named REG as an allocable register that is 19084 clobbered by function calls. It may be allocated for temporaries 19085 or variables that do not live across a call. Functions compiled 19086 this way do not save and restore the register REG. 19087 19088 It is an error to use this flag with the frame pointer or stack 19089 pointer. Use of this flag for other registers that have fixed 19090 pervasive roles in the machine's execution model produces 19091 disastrous results. 19092 19093 This flag does not have a negative form, because it specifies a 19094 three-way choice. 19095 19096 '-fcall-saved-REG' 19097 Treat the register named REG as an allocable register saved by 19098 functions. It may be allocated even for temporaries or variables 19099 that live across a call. Functions compiled this way save and 19100 restore the register REG if they use it. 19101 19102 It is an error to use this flag with the frame pointer or stack 19103 pointer. Use of this flag for other registers that have fixed 19104 pervasive roles in the machine's execution model produces 19105 disastrous results. 19106 19107 A different sort of disaster results from the use of this flag for 19108 a register in which function values may be returned. 19109 19110 This flag does not have a negative form, because it specifies a 19111 three-way choice. 19112 19113 '-fpack-struct[=N]' 19114 Without a value specified, pack all structure members together 19115 without holes. When a value is specified (which must be a small 19116 power of two), pack structure members according to this value, 19117 representing the maximum alignment (that is, objects with default 19118 alignment requirements larger than this are output potentially 19119 unaligned at the next fitting location. 19120 19121 *Warning:* the '-fpack-struct' switch causes GCC to generate code 19122 that is not binary compatible with code generated without that 19123 switch. Additionally, it makes the code suboptimal. Use it to 19124 conform to a non-default application binary interface. 19125 19126 '-finstrument-functions' 19127 Generate instrumentation calls for entry and exit to functions. 19128 Just after function entry and just before function exit, the 19129 following profiling functions are called with the address of the 19130 current function and its call site. (On some platforms, 19131 '__builtin_return_address' does not work beyond the current 19132 function, so the call site information may not be available to the 19133 profiling functions otherwise.) 19134 19135 void __cyg_profile_func_enter (void *this_fn, 19136 void *call_site); 19137 void __cyg_profile_func_exit (void *this_fn, 19138 void *call_site); 19139 19140 The first argument is the address of the start of the current 19141 function, which may be looked up exactly in the symbol table. 19142 19143 This instrumentation is also done for functions expanded inline in 19144 other functions. The profiling calls indicate where, conceptually, 19145 the inline function is entered and exited. This means that 19146 addressable versions of such functions must be available. If all 19147 your uses of a function are expanded inline, this may mean an 19148 additional expansion of code size. If you use 'extern inline' in 19149 your C code, an addressable version of such functions must be 19150 provided. (This is normally the case anyway, but if you get lucky 19151 and the optimizer always expands the functions inline, you might 19152 have gotten away without providing static copies.) 19153 19154 A function may be given the attribute 'no_instrument_function', in 19155 which case this instrumentation is not done. This can be used, for 19156 example, for the profiling functions listed above, high-priority 19157 interrupt routines, and any functions from which the profiling 19158 functions cannot safely be called (perhaps signal handlers, if the 19159 profiling routines generate output or allocate memory). 19160 19161 '-finstrument-functions-exclude-file-list=FILE,FILE,...' 19162 19163 Set the list of functions that are excluded from instrumentation 19164 (see the description of '-finstrument-functions'). If the file 19165 that contains a function definition matches with one of FILE, then 19166 that function is not instrumented. The match is done on 19167 substrings: if the FILE parameter is a substring of the file name, 19168 it is considered to be a match. 19169 19170 For example: 19171 19172 -finstrument-functions-exclude-file-list=/bits/stl,include/sys 19173 19174 excludes any inline function defined in files whose pathnames 19175 contain '/bits/stl' or 'include/sys'. 19176 19177 If, for some reason, you want to include letter '','' in one of 19178 SYM, write ''\,''. For example, 19179 '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 19180 single quote surrounding the option). 19181 19182 '-finstrument-functions-exclude-function-list=SYM,SYM,...' 19183 19184 This is similar to '-finstrument-functions-exclude-file-list', but 19185 this option sets the list of function names to be excluded from 19186 instrumentation. The function name to be matched is its 19187 user-visible name, such as 'vector<int> blah(const vector<int> &)', 19188 not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE'). 19189 The match is done on substrings: if the SYM parameter is a 19190 substring of the function name, it is considered to be a match. 19191 For C99 and C++ extended identifiers, the function name must be 19192 given in UTF-8, not using universal character names. 19193 19194 '-fstack-check' 19195 Generate code to verify that you do not go beyond the boundary of 19196 the stack. You should specify this flag if you are running in an 19197 environment with multiple threads, but you only rarely need to 19198 specify it in a single-threaded environment since stack overflow is 19199 automatically detected on nearly all systems if there is only one 19200 stack. 19201 19202 Note that this switch does not actually cause checking to be done; 19203 the operating system or the language runtime must do that. The 19204 switch causes generation of code to ensure that they see the stack 19205 being extended. 19206 19207 You can additionally specify a string parameter: 'no' means no 19208 checking, 'generic' means force the use of old-style checking, 19209 'specific' means use the best checking method and is equivalent to 19210 bare '-fstack-check'. 19211 19212 Old-style checking is a generic mechanism that requires no specific 19213 target support in the compiler but comes with the following 19214 drawbacks: 19215 19216 1. Modified allocation strategy for large objects: they are 19217 always allocated dynamically if their size exceeds a fixed 19218 threshold. 19219 19220 2. Fixed limit on the size of the static frame of functions: when 19221 it is topped by a particular function, stack checking is not 19222 reliable and a warning is issued by the compiler. 19223 19224 3. Inefficiency: because of both the modified allocation strategy 19225 and the generic implementation, code performance is hampered. 19226 19227 Note that old-style stack checking is also the fallback method for 19228 'specific' if no target support has been added in the compiler. 19229 19230 '-fstack-limit-register=REG' 19231 '-fstack-limit-symbol=SYM' 19232 '-fno-stack-limit' 19233 Generate code to ensure that the stack does not grow beyond a 19234 certain value, either the value of a register or the address of a 19235 symbol. If a larger stack is required, a signal is raised at run 19236 time. For most targets, the signal is raised before the stack 19237 overruns the boundary, so it is possible to catch the signal 19238 without taking special precautions. 19239 19240 For instance, if the stack starts at absolute address '0x80000000' 19241 and grows downwards, you can use the flags 19242 '-fstack-limit-symbol=__stack_limit' and 19243 '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of 19244 128KB. Note that this may only work with the GNU linker. 19245 19246 '-fsplit-stack' 19247 Generate code to automatically split the stack before it overflows. 19248 The resulting program has a discontiguous stack which can only 19249 overflow if the program is unable to allocate any more memory. 19250 This is most useful when running threaded programs, as it is no 19251 longer necessary to calculate a good stack size to use for each 19252 thread. This is currently only implemented for the i386 and x86_64 19253 back ends running GNU/Linux. 19254 19255 When code compiled with '-fsplit-stack' calls code compiled without 19256 '-fsplit-stack', there may not be much stack space available for 19257 the latter code to run. If compiling all code, including library 19258 code, with '-fsplit-stack' is not an option, then the linker can 19259 fix up these calls so that the code compiled without 19260 '-fsplit-stack' always has a large stack. Support for this is 19261 implemented in the gold linker in GNU binutils release 2.21 and 19262 later. 19263 19264 '-fleading-underscore' 19265 This option and its counterpart, '-fno-leading-underscore', 19266 forcibly change the way C symbols are represented in the object 19267 file. One use is to help link with legacy assembly code. 19268 19269 *Warning:* the '-fleading-underscore' switch causes GCC to generate 19270 code that is not binary compatible with code generated without that 19271 switch. Use it to conform to a non-default application binary 19272 interface. Not all targets provide complete support for this 19273 switch. 19274 19275 '-ftls-model=MODEL' 19276 Alter the thread-local storage model to be used (*note 19277 Thread-Local::). The MODEL argument should be one of 19278 'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'. 19279 19280 The default without '-fpic' is 'initial-exec'; with '-fpic' the 19281 default is 'global-dynamic'. 19282 19283 '-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 19284 Set the default ELF image symbol visibility to the specified 19285 option--all symbols are marked with this unless overridden within 19286 the code. Using this feature can very substantially improve 19287 linking and load times of shared object libraries, produce more 19288 optimized code, provide near-perfect API export and prevent symbol 19289 clashes. It is *strongly* recommended that you use this in any 19290 shared objects you distribute. 19291 19292 Despite the nomenclature, 'default' always means public; i.e., 19293 available to be linked against from outside the shared object. 19294 'protected' and 'internal' are pretty useless in real-world usage 19295 so the only other commonly used option is 'hidden'. The default if 19296 '-fvisibility' isn't specified is 'default', i.e., make every 19297 symbol public--this causes the same behavior as previous versions 19298 of GCC. 19299 19300 A good explanation of the benefits offered by ensuring ELF symbols 19301 have the correct visibility is given by "How To Write Shared 19302 Libraries" by Ulrich Drepper (which can be found at 19303 <http://people.redhat.com/~drepper/>)--however a superior solution 19304 made possible by this option to marking things hidden when the 19305 default is public is to make the default hidden and mark things 19306 public. This is the norm with DLLs on Windows and with 19307 '-fvisibility=hidden' and '__attribute__ ((visibility("default")))' 19308 instead of '__declspec(dllexport)' you get almost identical 19309 semantics with identical syntax. This is a great boon to those 19310 working with cross-platform projects. 19311 19312 For those adding visibility support to existing code, you may find 19313 '#pragma GCC visibility' of use. This works by you enclosing the 19314 declarations you wish to set visibility for with (for example) 19315 '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility 19316 pop'. Bear in mind that symbol visibility should be viewed *as 19317 part of the API interface contract* and thus all new code should 19318 always specify visibility when it is not the default; i.e., 19319 declarations only for use within the local DSO should *always* be 19320 marked explicitly as hidden as so to avoid PLT indirection 19321 overheads--making this abundantly clear also aids readability and 19322 self-documentation of the code. Note that due to ISO C++ 19323 specification requirements, 'operator new' and 'operator delete' 19324 must always be of default visibility. 19325 19326 Be aware that headers from outside your project, in particular 19327 system headers and headers from any other library you use, may not 19328 be expecting to be compiled with visibility other than the default. 19329 You may need to explicitly say '#pragma GCC visibility 19330 push(default)' before including any such headers. 19331 19332 'extern' declarations are not affected by '-fvisibility', so a lot 19333 of code can be recompiled with '-fvisibility=hidden' with no 19334 modifications. However, this means that calls to 'extern' 19335 functions with no explicit visibility use the PLT, so it is more 19336 effective to use '__attribute ((visibility))' and/or '#pragma GCC 19337 visibility' to tell the compiler which 'extern' declarations should 19338 be treated as hidden. 19339 19340 Note that '-fvisibility' does affect C++ vague linkage entities. 19341 This means that, for instance, an exception class that is be thrown 19342 between DSOs must be explicitly marked with default visibility so 19343 that the 'type_info' nodes are unified between the DSOs. 19344 19345 An overview of these techniques, their benefits and how to use them 19346 is at <http://gcc.gnu.org/wiki/Visibility>. 19347 19348 '-fstrict-volatile-bitfields' 19349 This option should be used if accesses to volatile bit-fields (or 19350 other structure fields, although the compiler usually honors those 19351 types anyway) should use a single access of the width of the 19352 field's type, aligned to a natural alignment if possible. For 19353 example, targets with memory-mapped peripheral registers might 19354 require all such accesses to be 16 bits wide; with this flag you 19355 can declare all peripheral bit-fields as 'unsigned short' (assuming 19356 short is 16 bits on these targets) to force GCC to use 16-bit 19357 accesses instead of, perhaps, a more efficient 32-bit access. 19358 19359 If this option is disabled, the compiler uses the most efficient 19360 instruction. In the previous example, that might be a 32-bit load 19361 instruction, even though that accesses bytes that do not contain 19362 any portion of the bit-field, or memory-mapped registers unrelated 19363 to the one being updated. 19364 19365 If the target requires strict alignment, and honoring the field 19366 type would require violating this alignment, a warning is issued. 19367 If the field has 'packed' attribute, the access is done without 19368 honoring the field type. If the field doesn't have 'packed' 19369 attribute, the access is done honoring the field type. In both 19370 cases, GCC assumes that the user knows something about the target 19371 hardware that it is unaware of. 19372 19373 The default value of this option is determined by the application 19374 binary interface for the target processor. 19375 19376 '-fsync-libcalls' 19377 This option controls whether any out-of-line instance of the 19378 '__sync' family of functions may be used to implement the C++11 19379 '__atomic' family of functions. 19380 19381 The default value of this option is enabled, thus the only useful 19382 form of the option is '-fno-sync-libcalls'. This option is used in 19383 the implementation of the 'libatomic' runtime library. 19384 19385 19386 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 19387 19388 3.19 Environment Variables Affecting GCC 19389 ======================================== 19390 19391 This section describes several environment variables that affect how GCC 19392 operates. Some of them work by specifying directories or prefixes to 19393 use when searching for various kinds of files. Some are used to specify 19394 other aspects of the compilation environment. 19395 19396 Note that you can also specify places to search using options such as 19397 '-B', '-I' and '-L' (*note Directory Options::). These take precedence 19398 over places specified using environment variables, which in turn take 19399 precedence over those specified by the configuration of GCC. *Note 19400 Controlling the Compilation Driver 'gcc': (gccint)Driver. 19401 19402 'LANG' 19403 'LC_CTYPE' 19404 'LC_MESSAGES' 19405 'LC_ALL' 19406 These environment variables control the way that GCC uses 19407 localization information which allows GCC to work with different 19408 national conventions. GCC inspects the locale categories 19409 'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so. 19410 These locale categories can be set to any value supported by your 19411 installation. A typical value is 'en_GB.UTF-8' for English in the 19412 United Kingdom encoded in UTF-8. 19413 19414 The 'LC_CTYPE' environment variable specifies character 19415 classification. GCC uses it to determine the character boundaries 19416 in a string; this is needed for some multibyte encodings that 19417 contain quote and escape characters that are otherwise interpreted 19418 as a string end or escape. 19419 19420 The 'LC_MESSAGES' environment variable specifies the language to 19421 use in diagnostic messages. 19422 19423 If the 'LC_ALL' environment variable is set, it overrides the value 19424 of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and 19425 'LC_MESSAGES' default to the value of the 'LANG' environment 19426 variable. If none of these variables are set, GCC defaults to 19427 traditional C English behavior. 19428 19429 'TMPDIR' 19430 If 'TMPDIR' is set, it specifies the directory to use for temporary 19431 files. GCC uses temporary files to hold the output of one stage of 19432 compilation which is to be used as input to the next stage: for 19433 example, the output of the preprocessor, which is the input to the 19434 compiler proper. 19435 19436 'GCC_COMPARE_DEBUG' 19437 Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing 19438 '-fcompare-debug' to the compiler driver. See the documentation of 19439 this option for more details. 19440 19441 'GCC_EXEC_PREFIX' 19442 If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 19443 names of the subprograms executed by the compiler. No slash is 19444 added when this prefix is combined with the name of a subprogram, 19445 but you can specify a prefix that ends with a slash if you wish. 19446 19447 If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an 19448 appropriate prefix to use based on the pathname it is invoked with. 19449 19450 If GCC cannot find the subprogram using the specified prefix, it 19451 tries looking in the usual places for the subprogram. 19452 19453 The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where 19454 PREFIX is the prefix to the installed compiler. In many cases 19455 PREFIX is the value of 'prefix' when you ran the 'configure' 19456 script. 19457 19458 Other prefixes specified with '-B' take precedence over this 19459 prefix. 19460 19461 This prefix is also used for finding files such as 'crt0.o' that 19462 are used for linking. 19463 19464 In addition, the prefix is used in an unusual way in finding the 19465 directories to search for header files. For each of the standard 19466 directories whose name normally begins with '/usr/local/lib/gcc' 19467 (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries 19468 replacing that beginning with the specified prefix to produce an 19469 alternate directory name. Thus, with '-Bfoo/', GCC searches 19470 'foo/bar' just before it searches the standard directory 19471 '/usr/local/lib/bar'. If a standard directory begins with the 19472 configured PREFIX then the value of PREFIX is replaced by 19473 'GCC_EXEC_PREFIX' when looking for header files. 19474 19475 'COMPILER_PATH' 19476 The value of 'COMPILER_PATH' is a colon-separated list of 19477 directories, much like 'PATH'. GCC tries the directories thus 19478 specified when searching for subprograms, if it can't find the 19479 subprograms using 'GCC_EXEC_PREFIX'. 19480 19481 'LIBRARY_PATH' 19482 The value of 'LIBRARY_PATH' is a colon-separated list of 19483 directories, much like 'PATH'. When configured as a native 19484 compiler, GCC tries the directories thus specified when searching 19485 for special linker files, if it can't find them using 19486 'GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 19487 when searching for ordinary libraries for the '-l' option (but 19488 directories specified with '-L' come first). 19489 19490 'LANG' 19491 This variable is used to pass locale information to the compiler. 19492 One way in which this information is used is to determine the 19493 character set to be used when character literals, string literals 19494 and comments are parsed in C and C++. When the compiler is 19495 configured to allow multibyte characters, the following values for 19496 'LANG' are recognized: 19497 19498 'C-JIS' 19499 Recognize JIS characters. 19500 'C-SJIS' 19501 Recognize SJIS characters. 19502 'C-EUCJP' 19503 Recognize EUCJP characters. 19504 19505 If 'LANG' is not defined, or if it has some other value, then the 19506 compiler uses 'mblen' and 'mbtowc' as defined by the default locale 19507 to recognize and translate multibyte characters. 19508 19509 Some additional environment variables affect the behavior of the 19510 preprocessor. 19511 19512 'CPATH' 19513 'C_INCLUDE_PATH' 19514 'CPLUS_INCLUDE_PATH' 19515 'OBJC_INCLUDE_PATH' 19516 Each variable's value is a list of directories separated by a 19517 special character, much like 'PATH', in which to look for header 19518 files. The special character, 'PATH_SEPARATOR', is 19519 target-dependent and determined at GCC build time. For Microsoft 19520 Windows-based targets it is a semicolon, and for almost all other 19521 targets it is a colon. 19522 19523 'CPATH' specifies a list of directories to be searched as if 19524 specified with '-I', but after any paths given with '-I' options on 19525 the command line. This environment variable is used regardless of 19526 which language is being preprocessed. 19527 19528 The remaining environment variables apply only when preprocessing 19529 the particular language indicated. Each specifies a list of 19530 directories to be searched as if specified with '-isystem', but 19531 after any paths given with '-isystem' options on the command line. 19532 19533 In all these variables, an empty element instructs the compiler to 19534 search its current working directory. Empty elements can appear at 19535 the beginning or end of a path. For instance, if the value of 19536 'CPATH' is ':/special/include', that has the same effect as 19537 '-I. -I/special/include'. 19538 19539 'DEPENDENCIES_OUTPUT' 19540 If this variable is set, its value specifies how to output 19541 dependencies for Make based on the non-system header files 19542 processed by the compiler. System header files are ignored in the 19543 dependency output. 19544 19545 The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in 19546 which case the Make rules are written to that file, guessing the 19547 target name from the source file name. Or the value can have the 19548 form 'FILE TARGET', in which case the rules are written to file 19549 FILE using TARGET as the target name. 19550 19551 In other words, this environment variable is equivalent to 19552 combining the options '-MM' and '-MF' (*note Preprocessor 19553 Options::), with an optional '-MT' switch too. 19554 19555 'SUNPRO_DEPENDENCIES' 19556 This variable is the same as 'DEPENDENCIES_OUTPUT' (see above), 19557 except that system header files are not ignored, so it implies '-M' 19558 rather than '-MM'. However, the dependence on the main input file 19559 is omitted. *Note Preprocessor Options::. 19560 19561 19562 File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 19563 19564 3.20 Using Precompiled Headers 19565 ============================== 19566 19567 Often large projects have many header files that are included in every 19568 source file. The time the compiler takes to process these header files 19569 over and over again can account for nearly all of the time required to 19570 build the project. To make builds faster, GCC allows you to 19571 "precompile" a header file. 19572 19573 To create a precompiled header file, simply compile it as you would any 19574 other file, if necessary using the '-x' option to make the driver treat 19575 it as a C or C++ header file. You may want to use a tool like 'make' to 19576 keep the precompiled header up-to-date when the headers it contains 19577 change. 19578 19579 A precompiled header file is searched for when '#include' is seen in 19580 the compilation. As it searches for the included file (*note Search 19581 Path: (cpp)Search Path.) the compiler looks for a precompiled header in 19582 each directory just before it looks for the include file in that 19583 directory. The name searched for is the name specified in the 19584 '#include' with '.gch' appended. If the precompiled header file can't 19585 be used, it is ignored. 19586 19587 For instance, if you have '#include "all.h"', and you have 'all.h.gch' 19588 in the same directory as 'all.h', then the precompiled header file is 19589 used if possible, and the original header is used otherwise. 19590 19591 Alternatively, you might decide to put the precompiled header file in a 19592 directory and use '-I' to ensure that directory is searched before (or 19593 instead of) the directory containing the original header. Then, if you 19594 want to check that the precompiled header file is always used, you can 19595 put a file of the same name as the original header in this directory 19596 containing an '#error' command. 19597 19598 This also works with '-include'. So yet another way to use precompiled 19599 headers, good for projects not designed with precompiled header files in 19600 mind, is to simply take most of the header files used by a project, 19601 include them from another header file, precompile that header file, and 19602 '-include' the precompiled header. If the header files have guards 19603 against multiple inclusion, they are skipped because they've already 19604 been included (in the precompiled header). 19605 19606 If you need to precompile the same header file for different languages, 19607 targets, or compiler options, you can instead make a _directory_ named 19608 like 'all.h.gch', and put each precompiled header in the directory, 19609 perhaps using '-o'. It doesn't matter what you call the files in the 19610 directory; every precompiled header in the directory is considered. The 19611 first precompiled header encountered in the directory that is valid for 19612 this compilation is used; they're searched in no particular order. 19613 19614 There are many other possibilities, limited only by your imagination, 19615 good sense, and the constraints of your build system. 19616 19617 A precompiled header file can be used only when these conditions apply: 19618 19619 * Only one precompiled header can be used in a particular 19620 compilation. 19621 19622 * A precompiled header can't be used once the first C token is seen. 19623 You can have preprocessor directives before a precompiled header; 19624 you cannot include a precompiled header from inside another header. 19625 19626 * The precompiled header file must be produced for the same language 19627 as the current compilation. You can't use a C precompiled header 19628 for a C++ compilation. 19629 19630 * The precompiled header file must have been produced by the same 19631 compiler binary as the current compilation is using. 19632 19633 * Any macros defined before the precompiled header is included must 19634 either be defined in the same way as when the precompiled header 19635 was generated, or must not affect the precompiled header, which 19636 usually means that they don't appear in the precompiled header at 19637 all. 19638 19639 The '-D' option is one way to define a macro before a precompiled 19640 header is included; using a '#define' can also do it. There are 19641 also some options that define macros implicitly, like '-O' and 19642 '-Wdeprecated'; the same rule applies to macros defined this way. 19643 19644 * If debugging information is output when using the precompiled 19645 header, using '-g' or similar, the same kind of debugging 19646 information must have been output when building the precompiled 19647 header. However, a precompiled header built using '-g' can be used 19648 in a compilation when no debugging information is being output. 19649 19650 * The same '-m' options must generally be used when building and 19651 using the precompiled header. *Note Submodel Options::, for any 19652 cases where this rule is relaxed. 19653 19654 * Each of the following options must be the same when building and 19655 using the precompiled header: 19656 19657 -fexceptions 19658 19659 * Some other command-line options starting with '-f', '-p', or '-O' 19660 must be defined in the same way as when the precompiled header was 19661 generated. At present, it's not clear which options are safe to 19662 change and which are not; the safest choice is to use exactly the 19663 same options when generating and using the precompiled header. The 19664 following are known to be safe: 19665 19666 -fmessage-length= -fpreprocessed -fsched-interblock 19667 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 19668 -fsched-verbose=NUMBER -fschedule-insns -fvisibility= 19669 -pedantic-errors 19670 19671 For all of these except the last, the compiler automatically ignores 19672 the precompiled header if the conditions aren't met. If you find an 19673 option combination that doesn't work and doesn't cause the precompiled 19674 header to be ignored, please consider filing a bug report, see *note 19675 Bugs::. 19676 19677 If you do use differing options when generating and using the 19678 precompiled header, the actual behavior is a mixture of the behavior for 19679 the options. For instance, if you use '-g' to generate the precompiled 19680 header but not when using it, you may or may not get debugging 19681 information for routines in the precompiled header. 19682 19683 19684 File: gcc.info, Node: C Implementation, Next: C++ Implementation, Prev: Invoking GCC, Up: Top 19685 19686 4 C Implementation-defined behavior 19687 *********************************** 19688 19689 A conforming implementation of ISO C is required to document its choice 19690 of behavior in each of the areas that are designated "implementation 19691 defined". The following lists all such areas, along with the section 19692 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 19693 Some areas are only implementation-defined in one version of the 19694 standard. 19695 19696 Some choices depend on the externally determined ABI for the platform 19697 (including standard character encodings) which GCC follows; these are 19698 listed as "determined by ABI" below. *Note Binary Compatibility: 19699 Compatibility, and <http://gcc.gnu.org/readings.html>. Some choices are 19700 documented in the preprocessor manual. *Note Implementation-defined 19701 behavior: (cpp)Implementation-defined behavior. Some choices are made 19702 by the library and operating system (or other environment when compiling 19703 for a freestanding environment); refer to their documentation for 19704 details. 19705 19706 * Menu: 19707 19708 * Translation implementation:: 19709 * Environment implementation:: 19710 * Identifiers implementation:: 19711 * Characters implementation:: 19712 * Integers implementation:: 19713 * Floating point implementation:: 19714 * Arrays and pointers implementation:: 19715 * Hints implementation:: 19716 * Structures unions enumerations and bit-fields implementation:: 19717 * Qualifiers implementation:: 19718 * Declarators implementation:: 19719 * Statements implementation:: 19720 * Preprocessing directives implementation:: 19721 * Library functions implementation:: 19722 * Architecture implementation:: 19723 * Locale-specific behavior implementation:: 19724 19725 19726 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 19727 19728 4.1 Translation 19729 =============== 19730 19731 * 'How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 19732 5.1.1.3).' 19733 19734 Diagnostics consist of all the output sent to stderr by GCC. 19735 19736 * 'Whether each nonempty sequence of white-space characters other 19737 than new-line is retained or replaced by one space character in 19738 translation phase 3 (C90 and C99 5.1.1.2).' 19739 19740 *Note Implementation-defined behavior: (cpp)Implementation-defined 19741 behavior. 19742 19743 19744 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 19745 19746 4.2 Environment 19747 =============== 19748 19749 The behavior of most of these points are dependent on the implementation 19750 of the C library, and are not defined by GCC itself. 19751 19752 * 'The mapping between physical source file multibyte characters and 19753 the source character set in translation phase 1 (C90 and C99 19754 5.1.1.2).' 19755 19756 *Note Implementation-defined behavior: (cpp)Implementation-defined 19757 behavior. 19758 19759 19760 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 19761 19762 4.3 Identifiers 19763 =============== 19764 19765 * 'Which additional multibyte characters may appear in identifiers 19766 and their correspondence to universal character names (C99 6.4.2).' 19767 19768 *Note Implementation-defined behavior: (cpp)Implementation-defined 19769 behavior. 19770 19771 * 'The number of significant initial characters in an identifier (C90 19772 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 19773 19774 For internal names, all characters are significant. For external 19775 names, the number of significant characters are defined by the 19776 linker; for almost all targets, all characters are significant. 19777 19778 * 'Whether case distinctions are significant in an identifier with 19779 external linkage (C90 6.1.2).' 19780 19781 This is a property of the linker. C99 requires that case 19782 distinctions are always significant in identifiers with external 19783 linkage and systems without this property are not supported by GCC. 19784 19785 19786 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 19787 19788 4.4 Characters 19789 ============== 19790 19791 * 'The number of bits in a byte (C90 3.4, C99 3.6).' 19792 19793 Determined by ABI. 19794 19795 * 'The values of the members of the execution character set (C90 and 19796 C99 5.2.1).' 19797 19798 Determined by ABI. 19799 19800 * 'The unique value of the member of the execution character set 19801 produced for each of the standard alphabetic escape sequences (C90 19802 and C99 5.2.2).' 19803 19804 Determined by ABI. 19805 19806 * 'The value of a 'char' object into which has been stored any 19807 character other than a member of the basic execution character set 19808 (C90 6.1.2.5, C99 6.2.5).' 19809 19810 Determined by ABI. 19811 19812 * 'Which of 'signed char' or 'unsigned char' has the same range, 19813 representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90 19814 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 19815 19816 Determined by ABI. The options '-funsigned-char' and 19817 '-fsigned-char' change the default. *Note Options Controlling C 19818 Dialect: C Dialect Options. 19819 19820 * 'The mapping of members of the source character set (in character 19821 constants and string literals) to members of the execution 19822 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 19823 19824 Determined by ABI. 19825 19826 * 'The value of an integer character constant containing more than 19827 one character or containing a character or escape sequence that 19828 does not map to a single-byte execution character (C90 6.1.3.4, C99 19829 6.4.4.4).' 19830 19831 *Note Implementation-defined behavior: (cpp)Implementation-defined 19832 behavior. 19833 19834 * 'The value of a wide character constant containing more than one 19835 multibyte character, or containing a multibyte character or escape 19836 sequence not represented in the extended execution character set 19837 (C90 6.1.3.4, C99 6.4.4.4).' 19838 19839 *Note Implementation-defined behavior: (cpp)Implementation-defined 19840 behavior. 19841 19842 * 'The current locale used to convert a wide character constant 19843 consisting of a single multibyte character that maps to a member of 19844 the extended execution character set into a corresponding wide 19845 character code (C90 6.1.3.4, C99 6.4.4.4).' 19846 19847 *Note Implementation-defined behavior: (cpp)Implementation-defined 19848 behavior. 19849 19850 * 'The current locale used to convert a wide string literal into 19851 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 19852 19853 *Note Implementation-defined behavior: (cpp)Implementation-defined 19854 behavior. 19855 19856 * 'The value of a string literal containing a multibyte character or 19857 escape sequence not represented in the execution character set (C90 19858 6.1.4, C99 6.4.5).' 19859 19860 *Note Implementation-defined behavior: (cpp)Implementation-defined 19861 behavior. 19862 19863 19864 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 19865 19866 4.5 Integers 19867 ============ 19868 19869 * 'Any extended integer types that exist in the implementation (C99 19870 6.2.5).' 19871 19872 GCC does not support any extended integer types. 19873 19874 * 'Whether signed integer types are represented using sign and 19875 magnitude, two's complement, or one's complement, and whether the 19876 extraordinary value is a trap representation or an ordinary value 19877 (C99 6.2.6.2).' 19878 19879 GCC supports only two's complement integer types, and all bit 19880 patterns are ordinary values. 19881 19882 * 'The rank of any extended integer type relative to another extended 19883 integer type with the same precision (C99 6.3.1.1).' 19884 19885 GCC does not support any extended integer types. 19886 19887 * 'The result of, or the signal raised by, converting an integer to a 19888 signed integer type when the value cannot be represented in an 19889 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 19890 19891 For conversion to a type of width N, the value is reduced modulo 19892 2^N to be within range of the type; no signal is raised. 19893 19894 * 'The results of some bitwise operations on signed integers (C90 19895 6.3, C99 6.5).' 19896 19897 Bitwise operators act on the representation of the value including 19898 both the sign and value bits, where the sign bit is considered 19899 immediately above the highest-value value bit. Signed '>>' acts on 19900 negative numbers by sign extension. 19901 19902 GCC does not use the latitude given in C99 only to treat certain 19903 aspects of signed '<<' as undefined, but this is subject to change. 19904 19905 * 'The sign of the remainder on integer division (C90 6.3.5).' 19906 19907 GCC always follows the C99 requirement that the result of division 19908 is truncated towards zero. 19909 19910 19911 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 19912 19913 4.6 Floating point 19914 ================== 19915 19916 * 'The accuracy of the floating-point operations and of the library 19917 functions in '<math.h>' and '<complex.h>' that return 19918 floating-point results (C90 and C99 5.2.4.2.2).' 19919 19920 The accuracy is unknown. 19921 19922 * 'The rounding behaviors characterized by non-standard values of 19923 'FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 19924 19925 GCC does not use such values. 19926 19927 * 'The evaluation methods characterized by non-standard negative 19928 values of 'FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 19929 19930 GCC does not use such values. 19931 19932 * 'The direction of rounding when an integer is converted to a 19933 floating-point number that cannot exactly represent the original 19934 value (C90 6.2.1.3, C99 6.3.1.4).' 19935 19936 C99 Annex F is followed. 19937 19938 * 'The direction of rounding when a floating-point number is 19939 converted to a narrower floating-point number (C90 6.2.1.4, C99 19940 6.3.1.5).' 19941 19942 C99 Annex F is followed. 19943 19944 * 'How the nearest representable value or the larger or smaller 19945 representable value immediately adjacent to the nearest 19946 representable value is chosen for certain floating constants (C90 19947 6.1.3.1, C99 6.4.4.2).' 19948 19949 C99 Annex F is followed. 19950 19951 * 'Whether and how floating expressions are contracted when not 19952 disallowed by the 'FP_CONTRACT' pragma (C99 6.5).' 19953 19954 Expressions are currently only contracted if 19955 '-funsafe-math-optimizations' or '-ffast-math' are used. This is 19956 subject to change. 19957 19958 * 'The default state for the 'FENV_ACCESS' pragma (C99 7.6.1).' 19959 19960 This pragma is not implemented, but the default is to "off" unless 19961 '-frounding-math' is used in which case it is "on". 19962 19963 * 'Additional floating-point exceptions, rounding modes, 19964 environments, and classifications, and their macro names (C99 7.6, 19965 C99 7.12).' 19966 19967 This is dependent on the implementation of the C library, and is 19968 not defined by GCC itself. 19969 19970 * 'The default state for the 'FP_CONTRACT' pragma (C99 7.12.2).' 19971 19972 This pragma is not implemented. Expressions are currently only 19973 contracted if '-funsafe-math-optimizations' or '-ffast-math' are 19974 used. This is subject to change. 19975 19976 * 'Whether the "inexact" floating-point exception can be raised when 19977 the rounded result actually does equal the mathematical result in 19978 an IEC 60559 conformant implementation (C99 F.9).' 19979 19980 This is dependent on the implementation of the C library, and is 19981 not defined by GCC itself. 19982 19983 * 'Whether the "underflow" (and "inexact") floating-point exception 19984 can be raised when a result is tiny but not inexact in an IEC 60559 19985 conformant implementation (C99 F.9).' 19986 19987 This is dependent on the implementation of the C library, and is 19988 not defined by GCC itself. 19989 19990 19991 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 19992 19993 4.7 Arrays and pointers 19994 ======================= 19995 19996 * 'The result of converting a pointer to an integer or vice versa 19997 (C90 6.3.4, C99 6.3.2.3).' 19998 19999 A cast from pointer to integer discards most-significant bits if 20000 the pointer representation is larger than the integer type, 20001 sign-extends(1) if the pointer representation is smaller than the 20002 integer type, otherwise the bits are unchanged. 20003 20004 A cast from integer to pointer discards most-significant bits if 20005 the pointer representation is smaller than the integer type, 20006 extends according to the signedness of the integer type if the 20007 pointer representation is larger than the integer type, otherwise 20008 the bits are unchanged. 20009 20010 When casting from pointer to integer and back again, the resulting 20011 pointer must reference the same object as the original pointer, 20012 otherwise the behavior is undefined. That is, one may not use 20013 integer arithmetic to avoid the undefined behavior of pointer 20014 arithmetic as proscribed in C99 6.5.6/8. 20015 20016 * 'The size of the result of subtracting two pointers to elements of 20017 the same array (C90 6.3.6, C99 6.5.6).' 20018 20019 The value is as specified in the standard and the type is 20020 determined by the ABI. 20021 20022 ---------- Footnotes ---------- 20023 20024 (1) Future versions of GCC may zero-extend, or use a target-defined 20025 'ptr_extend' pattern. Do not rely on sign extension. 20026 20027 20028 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 20029 20030 4.8 Hints 20031 ========= 20032 20033 * 'The extent to which suggestions made by using the 'register' 20034 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 20035 20036 The 'register' specifier affects code generation only in these 20037 ways: 20038 20039 * When used as part of the register variable extension, see 20040 *note Explicit Reg Vars::. 20041 20042 * When '-O0' is in use, the compiler allocates distinct stack 20043 memory for all variables that do not have the 'register' 20044 storage-class specifier; if 'register' is specified, the 20045 variable may have a shorter lifespan than the code would 20046 indicate and may never be placed in memory. 20047 20048 * On some rare x86 targets, 'setjmp' doesn't save the registers 20049 in all circumstances. In those cases, GCC doesn't allocate 20050 any variables in registers unless they are marked 'register'. 20051 20052 * 'The extent to which suggestions made by using the inline function 20053 specifier are effective (C99 6.7.4).' 20054 20055 GCC will not inline any functions if the '-fno-inline' option is 20056 used or if '-O0' is used. Otherwise, GCC may still be unable to 20057 inline a function for many reasons; the '-Winline' option may be 20058 used to determine if a function has not been inlined and why not. 20059 20060 20061 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 20062 20063 4.9 Structures, unions, enumerations, and bit-fields 20064 ==================================================== 20065 20066 * 'A member of a union object is accessed using a member of a 20067 different type (C90 6.3.2.3).' 20068 20069 The relevant bytes of the representation of the object are treated 20070 as an object of the type used for the access. *Note 20071 Type-punning::. This may be a trap representation. 20072 20073 * 'Whether a "plain" 'int' bit-field is treated as a 'signed int' 20074 bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90 20075 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 20076 20077 By default it is treated as 'signed int' but this may be changed by 20078 the '-funsigned-bitfields' option. 20079 20080 * 'Allowable bit-field types other than '_Bool', 'signed int', and 20081 'unsigned int' (C99 6.7.2.1).' 20082 20083 No other types are permitted in strictly conforming mode. 20084 20085 * 'Whether a bit-field can straddle a storage-unit boundary (C90 20086 6.5.2.1, C99 6.7.2.1).' 20087 20088 Determined by ABI. 20089 20090 * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1, 20091 C99 6.7.2.1).' 20092 20093 Determined by ABI. 20094 20095 * 'The alignment of non-bit-field members of structures (C90 6.5.2.1, 20096 C99 6.7.2.1).' 20097 20098 Determined by ABI. 20099 20100 * 'The integer type compatible with each enumerated type (C90 20101 6.5.2.2, C99 6.7.2.2).' 20102 20103 Normally, the type is 'unsigned int' if there are no negative 20104 values in the enumeration, otherwise 'int'. If '-fshort-enums' is 20105 specified, then if there are negative values it is the first of 20106 'signed char', 'short' and 'int' that can represent all the values, 20107 otherwise it is the first of 'unsigned char', 'unsigned short' and 20108 'unsigned int' that can represent all the values. 20109 20110 On some targets, '-fshort-enums' is the default; this is determined 20111 by the ABI. 20112 20113 20114 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 20115 20116 4.10 Qualifiers 20117 =============== 20118 20119 * 'What constitutes an access to an object that has 20120 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 20121 20122 Such an object is normally accessed by pointers and used for 20123 accessing hardware. In most expressions, it is intuitively obvious 20124 what is a read and what is a write. For example 20125 20126 volatile int *dst = SOMEVALUE; 20127 volatile int *src = SOMEOTHERVALUE; 20128 *dst = *src; 20129 20130 will cause a read of the volatile object pointed to by SRC and 20131 store the value into the volatile object pointed to by DST. There 20132 is no guarantee that these reads and writes are atomic, especially 20133 for objects larger than 'int'. 20134 20135 However, if the volatile storage is not being modified, and the 20136 value of the volatile storage is not used, then the situation is 20137 less obvious. For example 20138 20139 volatile int *src = SOMEVALUE; 20140 *src; 20141 20142 According to the C standard, such an expression is an rvalue whose 20143 type is the unqualified version of its original type, i.e. 'int'. 20144 Whether GCC interprets this as a read of the volatile object being 20145 pointed to or only as a request to evaluate the expression for its 20146 side-effects depends on this type. 20147 20148 If it is a scalar type, or on most targets an aggregate type whose 20149 only member object is of a scalar type, or a union type whose 20150 member objects are of scalar types, the expression is interpreted 20151 by GCC as a read of the volatile object; in the other cases, the 20152 expression is only evaluated for its side-effects. 20153 20154 20155 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 20156 20157 4.11 Declarators 20158 ================ 20159 20160 * 'The maximum number of declarators that may modify an arithmetic, 20161 structure or union type (C90 6.5.4).' 20162 20163 GCC is only limited by available memory. 20164 20165 20166 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 20167 20168 4.12 Statements 20169 =============== 20170 20171 * 'The maximum number of 'case' values in a 'switch' statement (C90 20172 6.6.4.2).' 20173 20174 GCC is only limited by available memory. 20175 20176 20177 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 20178 20179 4.13 Preprocessing directives 20180 ============================= 20181 20182 *Note Implementation-defined behavior: (cpp)Implementation-defined 20183 behavior, for details of these aspects of implementation-defined 20184 behavior. 20185 20186 * 'How sequences in both forms of header names are mapped to headers 20187 or external source file names (C90 6.1.7, C99 6.4.7).' 20188 20189 * 'Whether the value of a character constant in a constant expression 20190 that controls conditional inclusion matches the value of the same 20191 character constant in the execution character set (C90 6.8.1, C99 20192 6.10.1).' 20193 20194 * 'Whether the value of a single-character character constant in a 20195 constant expression that controls conditional inclusion may have a 20196 negative value (C90 6.8.1, C99 6.10.1).' 20197 20198 * 'The places that are searched for an included '<>' delimited 20199 header, and how the places are specified or the header is 20200 identified (C90 6.8.2, C99 6.10.2).' 20201 20202 * 'How the named source file is searched for in an included '""' 20203 delimited header (C90 6.8.2, C99 6.10.2).' 20204 20205 * 'The method by which preprocessing tokens (possibly resulting from 20206 macro expansion) in a '#include' directive are combined into a 20207 header name (C90 6.8.2, C99 6.10.2).' 20208 20209 * 'The nesting limit for '#include' processing (C90 6.8.2, C99 20210 6.10.2).' 20211 20212 * 'Whether the '#' operator inserts a '\' character before the '\' 20213 character that begins a universal character name in a character 20214 constant or string literal (C99 6.10.3.2).' 20215 20216 * 'The behavior on each recognized non-'STDC #pragma' directive (C90 20217 6.8.6, C99 6.10.6).' 20218 20219 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC 20220 on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 20221 details of target-specific pragmas. 20222 20223 * 'The definitions for '__DATE__' and '__TIME__' when respectively, 20224 the date and time of translation are not available (C90 6.8.8, C99 20225 6.10.8).' 20226 20227 20228 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 20229 20230 4.14 Library functions 20231 ====================== 20232 20233 The behavior of most of these points are dependent on the implementation 20234 of the C library, and are not defined by GCC itself. 20235 20236 * 'The null pointer constant to which the macro 'NULL' expands (C90 20237 7.1.6, C99 7.17).' 20238 20239 In '<stddef.h>', 'NULL' expands to '((void *)0)'. GCC does not 20240 provide the other headers which define 'NULL' and some library 20241 implementations may use other definitions in those headers. 20242 20243 20244 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 20245 20246 4.15 Architecture 20247 ================= 20248 20249 * 'The values or expressions assigned to the macros specified in the 20250 headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90 and C99 20251 5.2.4.2, C99 7.18.2, C99 7.18.3).' 20252 20253 Determined by ABI. 20254 20255 * 'The number, order, and encoding of bytes in any object (when not 20256 explicitly specified in this International Standard) (C99 20257 6.2.6.1).' 20258 20259 Determined by ABI. 20260 20261 * 'The value of the result of the 'sizeof' operator (C90 6.3.3.4, C99 20262 6.5.3.4).' 20263 20264 Determined by ABI. 20265 20266 20267 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 20268 20269 4.16 Locale-specific behavior 20270 ============================= 20271 20272 The behavior of these points are dependent on the implementation of the 20273 C library, and are not defined by GCC itself. 20274 20275 20276 File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Implementation, Up: Top 20277 20278 5 C++ Implementation-defined behavior 20279 ************************************* 20280 20281 A conforming implementation of ISO C++ is required to document its 20282 choice of behavior in each of the areas that are designated 20283 "implementation defined". The following lists all such areas, along 20284 with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC 20285 14882:2003 standards. Some areas are only implementation-defined in one 20286 version of the standard. 20287 20288 Some choices depend on the externally determined ABI for the platform 20289 (including standard character encodings) which GCC follows; these are 20290 listed as "determined by ABI" below. *Note Binary Compatibility: 20291 Compatibility, and <http://gcc.gnu.org/readings.html>. Some choices are 20292 documented in the preprocessor manual. *Note Implementation-defined 20293 behavior: (cpp)Implementation-defined behavior. Some choices are 20294 documented in the corresponding document for the C language. *Note C 20295 Implementation::. Some choices are made by the library and operating 20296 system (or other environment when compiling for a freestanding 20297 environment); refer to their documentation for details. 20298 20299 * Menu: 20300 20301 * Conditionally-supported behavior:: 20302 * Exception handling:: 20303 20304 20305 File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation 20306 20307 5.1 Conditionally-supported behavior 20308 ==================================== 20309 20310 'Each implementation shall include documentation that identifies all 20311 conditionally-supported constructs that it does not support (C++0x 20312 1.4).' 20313 20314 * 'Whether an argument of class type with a non-trivial copy 20315 constructor or destructor can be passed to ... (C++0x 5.2.2).' 20316 20317 Such argument passing is not supported. 20318 20319 20320 File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation 20321 20322 5.2 Exception handling 20323 ====================== 20324 20325 * 'In the situation where no matching handler is found, it is 20326 implementation-defined whether or not the stack is unwound before 20327 std::terminate() is called (C++98 15.5.1).' 20328 20329 The stack is not unwound before std::terminate is called. 20330 20331 20332 File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C++ Implementation, Up: Top 20333 20334 6 Extensions to the C Language Family 20335 ************************************* 20336 20337 GNU C provides several language features not found in ISO standard C. 20338 (The '-pedantic' option directs GCC to print a warning message if any of 20339 these features is used.) To test for the availability of these features 20340 in conditional compilation, check for a predefined macro '__GNUC__', 20341 which is always defined under GCC. 20342 20343 These extensions are available in C and Objective-C. Most of them are 20344 also available in C++. *Note Extensions to the C++ Language: C++ 20345 Extensions, for extensions that apply _only_ to C++. 20346 20347 Some features that are in ISO C99 but not C90 or C++ are also, as 20348 extensions, accepted by GCC in C90 mode and in C++. 20349 20350 * Menu: 20351 20352 * Statement Exprs:: Putting statements and declarations inside expressions. 20353 * Local Labels:: Labels local to a block. 20354 * Labels as Values:: Getting pointers to labels, and computed gotos. 20355 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 20356 * Constructing Calls:: Dispatching a call to another function. 20357 * Typeof:: 'typeof': referring to the type of an expression. 20358 * Conditionals:: Omitting the middle operand of a '?:' expression. 20359 * __int128:: 128-bit integers--'__int128'. 20360 * Long Long:: Double-word integers--'long long int'. 20361 * Complex:: Data types for complex numbers. 20362 * Floating Types:: Additional Floating Types. 20363 * Half-Precision:: Half-Precision Floating Point. 20364 * Decimal Float:: Decimal Floating Types. 20365 * Hex Floats:: Hexadecimal floating-point constants. 20366 * Fixed-Point:: Fixed-Point Types. 20367 * Named Address Spaces::Named address spaces. 20368 * Zero Length:: Zero-length arrays. 20369 * Empty Structures:: Structures with no members. 20370 * Variable Length:: Arrays whose length is computed at run time. 20371 * Variadic Macros:: Macros with a variable number of arguments. 20372 * Escaped Newlines:: Slightly looser rules for escaped newlines. 20373 * Subscripting:: Any array can be subscripted, even if not an lvalue. 20374 * Pointer Arith:: Arithmetic on 'void'-pointers and function pointers. 20375 * Initializers:: Non-constant initializers. 20376 * Compound Literals:: Compound literals give structures, unions 20377 or arrays as values. 20378 * Designated Inits:: Labeling elements of initializers. 20379 * Case Ranges:: 'case 1 ... 9' and such. 20380 * Cast to Union:: Casting to union type from any member of the union. 20381 * Mixed Declarations:: Mixing declarations and code. 20382 * Function Attributes:: Declaring that functions have no side effects, 20383 or that they can never return. 20384 * Attribute Syntax:: Formal syntax for attributes. 20385 * Function Prototypes:: Prototype declarations and old-style definitions. 20386 * C++ Comments:: C++ comments are recognized. 20387 * Dollar Signs:: Dollar sign is allowed in identifiers. 20388 * Character Escapes:: '\e' stands for the character <ESC>. 20389 * Variable Attributes:: Specifying attributes of variables. 20390 * Type Attributes:: Specifying attributes of types. 20391 * Alignment:: Inquiring about the alignment of a type or variable. 20392 * Inline:: Defining inline functions (as fast as macros). 20393 * Volatiles:: What constitutes an access to a volatile object. 20394 * Extended Asm:: Assembler instructions with C expressions as operands. 20395 (With them you can define "built-in" functions.) 20396 * Constraints:: Constraints for asm operands 20397 * Asm Labels:: Specifying the assembler name to use for a C symbol. 20398 * Explicit Reg Vars:: Defining variables residing in specified registers. 20399 * Alternate Keywords:: '__const__', '__asm__', etc., for header files. 20400 * Incomplete Enums:: 'enum foo;', with details to follow. 20401 * Function Names:: Printable strings which are the name of the current 20402 function. 20403 * Return Address:: Getting the return or frame address of a function. 20404 * Vector Extensions:: Using vector instructions through built-in functions. 20405 * Offsetof:: Special syntax for implementing 'offsetof'. 20406 * __sync Builtins:: Legacy built-in functions for atomic memory access. 20407 * __atomic Builtins:: Atomic built-in functions with memory model. 20408 * x86 specific memory model extensions for transactional memory:: x86 memory models. 20409 * Object Size Checking:: Built-in functions for limited buffer overflow 20410 checking. 20411 * Other Builtins:: Other built-in functions. 20412 * Target Builtins:: Built-in functions specific to particular targets. 20413 * Target Format Checks:: Format checks specific to particular targets. 20414 * Pragmas:: Pragmas accepted by GCC. 20415 * Unnamed Fields:: Unnamed struct/union fields within structs/unions. 20416 * Thread-Local:: Per-thread variables. 20417 * Binary constants:: Binary constants using the '0b' prefix. 20418 20419 20420 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 20421 20422 6.1 Statements and Declarations in Expressions 20423 ============================================== 20424 20425 A compound statement enclosed in parentheses may appear as an expression 20426 in GNU C. This allows you to use loops, switches, and local variables 20427 within an expression. 20428 20429 Recall that a compound statement is a sequence of statements surrounded 20430 by braces; in this construct, parentheses go around the braces. For 20431 example: 20432 20433 ({ int y = foo (); int z; 20434 if (y > 0) z = y; 20435 else z = - y; 20436 z; }) 20437 20438 is a valid (though slightly more complex than necessary) expression for 20439 the absolute value of 'foo ()'. 20440 20441 The last thing in the compound statement should be an expression 20442 followed by a semicolon; the value of this subexpression serves as the 20443 value of the entire construct. (If you use some other kind of statement 20444 last within the braces, the construct has type 'void', and thus 20445 effectively no value.) 20446 20447 This feature is especially useful in making macro definitions "safe" 20448 (so that they evaluate each operand exactly once). For example, the 20449 "maximum" function is commonly defined as a macro in standard C as 20450 follows: 20451 20452 #define max(a,b) ((a) > (b) ? (a) : (b)) 20453 20454 But this definition computes either A or B twice, with bad results if 20455 the operand has side effects. In GNU C, if you know the type of the 20456 operands (here taken as 'int'), you can define the macro safely as 20457 follows: 20458 20459 #define maxint(a,b) \ 20460 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 20461 20462 Embedded statements are not allowed in constant expressions, such as 20463 the value of an enumeration constant, the width of a bit-field, or the 20464 initial value of a static variable. 20465 20466 If you don't know the type of the operand, you can still do this, but 20467 you must use 'typeof' (*note Typeof::). 20468 20469 In G++, the result value of a statement expression undergoes array and 20470 function pointer decay, and is returned by value to the enclosing 20471 expression. For instance, if 'A' is a class, then 20472 20473 A a; 20474 20475 ({a;}).Foo () 20476 20477 constructs a temporary 'A' object to hold the result of the statement 20478 expression, and that is used to invoke 'Foo'. Therefore the 'this' 20479 pointer observed by 'Foo' is not the address of 'a'. 20480 20481 In a statement expression, any temporaries created within a statement 20482 are destroyed at that statement's end. This makes statement expressions 20483 inside macros slightly different from function calls. In the latter 20484 case temporaries introduced during argument evaluation are destroyed at 20485 the end of the statement that includes the function call. In the 20486 statement expression case they are destroyed during the statement 20487 expression. For instance, 20488 20489 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 20490 template<typename T> T function(T a) { T b = a; return b + 3; } 20491 20492 void foo () 20493 { 20494 macro (X ()); 20495 function (X ()); 20496 } 20497 20498 has different places where temporaries are destroyed. For the 'macro' 20499 case, the temporary 'X' is destroyed just after the initialization of 20500 'b'. In the 'function' case that temporary is destroyed when the 20501 function returns. 20502 20503 These considerations mean that it is probably a bad idea to use 20504 statement expressions of this form in header files that are designed to 20505 work with C++. (Note that some versions of the GNU C Library contained 20506 header files using statement expressions that lead to precisely this 20507 bug.) 20508 20509 Jumping into a statement expression with 'goto' or using a 'switch' 20510 statement outside the statement expression with a 'case' or 'default' 20511 label inside the statement expression is not permitted. Jumping into a 20512 statement expression with a computed 'goto' (*note Labels as Values::) 20513 has undefined behavior. Jumping out of a statement expression is 20514 permitted, but if the statement expression is part of a larger 20515 expression then it is unspecified which other subexpressions of that 20516 expression have been evaluated except where the language definition 20517 requires certain subexpressions to be evaluated before or after the 20518 statement expression. In any case, as with a function call, the 20519 evaluation of a statement expression is not interleaved with the 20520 evaluation of other parts of the containing expression. For example, 20521 20522 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 20523 20524 calls 'foo' and 'bar1' and does not call 'baz' but may or may not call 20525 'bar2'. If 'bar2' is called, it is called after 'foo' and before 20526 'bar1'. 20527 20528 20529 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 20530 20531 6.2 Locally Declared Labels 20532 =========================== 20533 20534 GCC allows you to declare "local labels" in any nested block scope. A 20535 local label is just like an ordinary label, but you can only reference 20536 it (with a 'goto' statement, or by taking its address) within the block 20537 in which it is declared. 20538 20539 A local label declaration looks like this: 20540 20541 __label__ LABEL; 20542 20543 or 20544 20545 __label__ LABEL1, LABEL2, /* ... */; 20546 20547 Local label declarations must come at the beginning of the block, 20548 before any ordinary declarations or statements. 20549 20550 The label declaration defines the label _name_, but does not define the 20551 label itself. You must do this in the usual way, with 'LABEL:', within 20552 the statements of the statement expression. 20553 20554 The local label feature is useful for complex macros. If a macro 20555 contains nested loops, a 'goto' can be useful for breaking out of them. 20556 However, an ordinary label whose scope is the whole function cannot be 20557 used: if the macro can be expanded several times in one function, the 20558 label is multiply defined in that function. A local label avoids this 20559 problem. For example: 20560 20561 #define SEARCH(value, array, target) \ 20562 do { \ 20563 __label__ found; \ 20564 typeof (target) _SEARCH_target = (target); \ 20565 typeof (*(array)) *_SEARCH_array = (array); \ 20566 int i, j; \ 20567 int value; \ 20568 for (i = 0; i < max; i++) \ 20569 for (j = 0; j < max; j++) \ 20570 if (_SEARCH_array[i][j] == _SEARCH_target) \ 20571 { (value) = i; goto found; } \ 20572 (value) = -1; \ 20573 found:; \ 20574 } while (0) 20575 20576 This could also be written using a statement expression: 20577 20578 #define SEARCH(array, target) \ 20579 ({ \ 20580 __label__ found; \ 20581 typeof (target) _SEARCH_target = (target); \ 20582 typeof (*(array)) *_SEARCH_array = (array); \ 20583 int i, j; \ 20584 int value; \ 20585 for (i = 0; i < max; i++) \ 20586 for (j = 0; j < max; j++) \ 20587 if (_SEARCH_array[i][j] == _SEARCH_target) \ 20588 { value = i; goto found; } \ 20589 value = -1; \ 20590 found: \ 20591 value; \ 20592 }) 20593 20594 Local label declarations also make the labels they declare visible to 20595 nested functions, if there are any. *Note Nested Functions::, for 20596 details. 20597 20598 20599 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 20600 20601 6.3 Labels as Values 20602 ==================== 20603 20604 You can get the address of a label defined in the current function (or a 20605 containing function) with the unary operator '&&'. The value has type 20606 'void *'. This value is a constant and can be used wherever a constant 20607 of that type is valid. For example: 20608 20609 void *ptr; 20610 /* ... */ 20611 ptr = &&foo; 20612 20613 To use these values, you need to be able to jump to one. This is done 20614 with the computed goto statement(1), 'goto *EXP;'. For example, 20615 20616 goto *ptr; 20617 20618 Any expression of type 'void *' is allowed. 20619 20620 One way of using these constants is in initializing a static array that 20621 serves as a jump table: 20622 20623 static void *array[] = { &&foo, &&bar, &&hack }; 20624 20625 Then you can select a label with indexing, like this: 20626 20627 goto *array[i]; 20628 20629 Note that this does not check whether the subscript is in bounds--array 20630 indexing in C never does that. 20631 20632 Such an array of label values serves a purpose much like that of the 20633 'switch' statement. The 'switch' statement is cleaner, so use that 20634 rather than an array unless the problem does not fit a 'switch' 20635 statement very well. 20636 20637 Another use of label values is in an interpreter for threaded code. 20638 The labels within the interpreter function can be stored in the threaded 20639 code for super-fast dispatching. 20640 20641 You may not use this mechanism to jump to code in a different function. 20642 If you do that, totally unpredictable things happen. The best way to 20643 avoid this is to store the label address only in automatic variables and 20644 never pass it as an argument. 20645 20646 An alternate way to write the above example is 20647 20648 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 20649 &&hack - &&foo }; 20650 goto *(&&foo + array[i]); 20651 20652 This is more friendly to code living in shared libraries, as it reduces 20653 the number of dynamic relocations that are needed, and by consequence, 20654 allows the data to be read-only. 20655 20656 The '&&foo' expressions for the same label might have different values 20657 if the containing function is inlined or cloned. If a program relies on 20658 them being always the same, '__attribute__((__noinline__,__noclone__))' 20659 should be used to prevent inlining and cloning. If '&&foo' is used in a 20660 static variable initializer, inlining and cloning is forbidden. 20661 20662 ---------- Footnotes ---------- 20663 20664 (1) The analogous feature in Fortran is called an assigned goto, but 20665 that name seems inappropriate in C, where one can do more than simply 20666 store label addresses in label variables. 20667 20668 20669 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 20670 20671 6.4 Nested Functions 20672 ==================== 20673 20674 A "nested function" is a function defined inside another function. 20675 Nested functions are supported as an extension in GNU C, but are not 20676 supported by GNU C++. 20677 20678 The nested function's name is local to the block where it is defined. 20679 For example, here we define a nested function named 'square', and call 20680 it twice: 20681 20682 foo (double a, double b) 20683 { 20684 double square (double z) { return z * z; } 20685 20686 return square (a) + square (b); 20687 } 20688 20689 The nested function can access all the variables of the containing 20690 function that are visible at the point of its definition. This is 20691 called "lexical scoping". For example, here we show a nested function 20692 which uses an inherited variable named 'offset': 20693 20694 bar (int *array, int offset, int size) 20695 { 20696 int access (int *array, int index) 20697 { return array[index + offset]; } 20698 int i; 20699 /* ... */ 20700 for (i = 0; i < size; i++) 20701 /* ... */ access (array, i) /* ... */ 20702 } 20703 20704 Nested function definitions are permitted within functions in the 20705 places where variable definitions are allowed; that is, in any block, 20706 mixed with the other declarations and statements in the block. 20707 20708 It is possible to call the nested function from outside the scope of 20709 its name by storing its address or passing the address to another 20710 function: 20711 20712 hack (int *array, int size) 20713 { 20714 void store (int index, int value) 20715 { array[index] = value; } 20716 20717 intermediate (store, size); 20718 } 20719 20720 Here, the function 'intermediate' receives the address of 'store' as an 20721 argument. If 'intermediate' calls 'store', the arguments given to 20722 'store' are used to store into 'array'. But this technique works only 20723 so long as the containing function ('hack', in this example) does not 20724 exit. 20725 20726 If you try to call the nested function through its address after the 20727 containing function exits, all hell breaks loose. If you try to call it 20728 after a containing scope level exits, and if it refers to some of the 20729 variables that are no longer in scope, you may be lucky, but it's not 20730 wise to take the risk. If, however, the nested function does not refer 20731 to anything that has gone out of scope, you should be safe. 20732 20733 GCC implements taking the address of a nested function using a 20734 technique called "trampolines". This technique was described in 20735 'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 20736 Proceedings, October 17-21, 1988). 20737 20738 A nested function can jump to a label inherited from a containing 20739 function, provided the label is explicitly declared in the containing 20740 function (*note Local Labels::). Such a jump returns instantly to the 20741 containing function, exiting the nested function that did the 'goto' and 20742 any intermediate functions as well. Here is an example: 20743 20744 bar (int *array, int offset, int size) 20745 { 20746 __label__ failure; 20747 int access (int *array, int index) 20748 { 20749 if (index > size) 20750 goto failure; 20751 return array[index + offset]; 20752 } 20753 int i; 20754 /* ... */ 20755 for (i = 0; i < size; i++) 20756 /* ... */ access (array, i) /* ... */ 20757 /* ... */ 20758 return 0; 20759 20760 /* Control comes here from 'access' 20761 if it detects an error. */ 20762 failure: 20763 return -1; 20764 } 20765 20766 A nested function always has no linkage. Declaring one with 'extern' 20767 or 'static' is erroneous. If you need to declare the nested function 20768 before its definition, use 'auto' (which is otherwise meaningless for 20769 function declarations). 20770 20771 bar (int *array, int offset, int size) 20772 { 20773 __label__ failure; 20774 auto int access (int *, int); 20775 /* ... */ 20776 int access (int *array, int index) 20777 { 20778 if (index > size) 20779 goto failure; 20780 return array[index + offset]; 20781 } 20782 /* ... */ 20783 } 20784 20785 20786 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 20787 20788 6.5 Constructing Function Calls 20789 =============================== 20790 20791 Using the built-in functions described below, you can record the 20792 arguments a function received, and call another function with the same 20793 arguments, without knowing the number or types of the arguments. 20794 20795 You can also record the return value of that function call, and later 20796 return that value, without knowing what data type the function tried to 20797 return (as long as your caller expects that data type). 20798 20799 However, these built-in functions may interact badly with some 20800 sophisticated features or other extensions of the language. It is, 20801 therefore, not recommended to use them outside very simple functions 20802 acting as mere forwarders for their arguments. 20803 20804 -- Built-in Function: void * __builtin_apply_args () 20805 This built-in function returns a pointer to data describing how to 20806 perform a call with the same arguments as are passed to the current 20807 function. 20808 20809 The function saves the arg pointer register, structure value 20810 address, and all registers that might be used to pass arguments to 20811 a function into a block of memory allocated on the stack. Then it 20812 returns the address of that block. 20813 20814 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 20815 *ARGUMENTS, size_t SIZE) 20816 This built-in function invokes FUNCTION with a copy of the 20817 parameters described by ARGUMENTS and SIZE. 20818 20819 The value of ARGUMENTS should be the value returned by 20820 '__builtin_apply_args'. The argument SIZE specifies the size of 20821 the stack argument data, in bytes. 20822 20823 This function returns a pointer to data describing how to return 20824 whatever value is returned by FUNCTION. The data is saved in a 20825 block of memory allocated on the stack. 20826 20827 It is not always simple to compute the proper value for SIZE. The 20828 value is used by '__builtin_apply' to compute the amount of data 20829 that should be pushed on the stack and copied from the incoming 20830 argument area. 20831 20832 -- Built-in Function: void __builtin_return (void *RESULT) 20833 This built-in function returns the value described by RESULT from 20834 the containing function. You should specify, for RESULT, a value 20835 returned by '__builtin_apply'. 20836 20837 -- Built-in Function: __builtin_va_arg_pack () 20838 This built-in function represents all anonymous arguments of an 20839 inline function. It can be used only in inline functions that are 20840 always inlined, never compiled as a separate function, such as 20841 those using '__attribute__ ((__always_inline__))' or '__attribute__ 20842 ((__gnu_inline__))' extern inline functions. It must be only 20843 passed as last argument to some other function with variable 20844 arguments. This is useful for writing small wrapper inlines for 20845 variable argument functions, when using preprocessor macros is 20846 undesirable. For example: 20847 extern int myprintf (FILE *f, const char *format, ...); 20848 extern inline __attribute__ ((__gnu_inline__)) int 20849 myprintf (FILE *f, const char *format, ...) 20850 { 20851 int r = fprintf (f, "myprintf: "); 20852 if (r < 0) 20853 return r; 20854 int s = fprintf (f, format, __builtin_va_arg_pack ()); 20855 if (s < 0) 20856 return s; 20857 return r + s; 20858 } 20859 20860 -- Built-in Function: size_t __builtin_va_arg_pack_len () 20861 This built-in function returns the number of anonymous arguments of 20862 an inline function. It can be used only in inline functions that 20863 are always inlined, never compiled as a separate function, such as 20864 those using '__attribute__ ((__always_inline__))' or '__attribute__ 20865 ((__gnu_inline__))' extern inline functions. For example following 20866 does link- or run-time checking of open arguments for optimized 20867 code: 20868 #ifdef __OPTIMIZE__ 20869 extern inline __attribute__((__gnu_inline__)) int 20870 myopen (const char *path, int oflag, ...) 20871 { 20872 if (__builtin_va_arg_pack_len () > 1) 20873 warn_open_too_many_arguments (); 20874 20875 if (__builtin_constant_p (oflag)) 20876 { 20877 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 20878 { 20879 warn_open_missing_mode (); 20880 return __open_2 (path, oflag); 20881 } 20882 return open (path, oflag, __builtin_va_arg_pack ()); 20883 } 20884 20885 if (__builtin_va_arg_pack_len () < 1) 20886 return __open_2 (path, oflag); 20887 20888 return open (path, oflag, __builtin_va_arg_pack ()); 20889 } 20890 #endif 20891 20892 20893 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 20894 20895 6.6 Referring to a Type with 'typeof' 20896 ===================================== 20897 20898 Another way to refer to the type of an expression is with 'typeof'. The 20899 syntax of using of this keyword looks like 'sizeof', but the construct 20900 acts semantically like a type name defined with 'typedef'. 20901 20902 There are two ways of writing the argument to 'typeof': with an 20903 expression or with a type. Here is an example with an expression: 20904 20905 typeof (x[0](1)) 20906 20907 This assumes that 'x' is an array of pointers to functions; the type 20908 described is that of the values of the functions. 20909 20910 Here is an example with a typename as the argument: 20911 20912 typeof (int *) 20913 20914 Here the type described is that of pointers to 'int'. 20915 20916 If you are writing a header file that must work when included in ISO C 20917 programs, write '__typeof__' instead of 'typeof'. *Note Alternate 20918 Keywords::. 20919 20920 A 'typeof' construct can be used anywhere a typedef name can be used. 20921 For example, you can use it in a declaration, in a cast, or inside of 20922 'sizeof' or 'typeof'. 20923 20924 The operand of 'typeof' is evaluated for its side effects if and only 20925 if it is an expression of variably modified type or the name of such a 20926 type. 20927 20928 'typeof' is often useful in conjunction with statement expressions 20929 (*note Statement Exprs::). Here is how the two together can be used to 20930 define a safe "maximum" macro which operates on any arithmetic type and 20931 evaluates each of its arguments exactly once: 20932 20933 #define max(a,b) \ 20934 ({ typeof (a) _a = (a); \ 20935 typeof (b) _b = (b); \ 20936 _a > _b ? _a : _b; }) 20937 20938 The reason for using names that start with underscores for the local 20939 variables is to avoid conflicts with variable names that occur within 20940 the expressions that are substituted for 'a' and 'b'. Eventually we 20941 hope to design a new form of declaration syntax that allows you to 20942 declare variables whose scopes start only after their initializers; this 20943 will be a more reliable way to prevent such conflicts. 20944 20945 Some more examples of the use of 'typeof': 20946 20947 * This declares 'y' with the type of what 'x' points to. 20948 20949 typeof (*x) y; 20950 20951 * This declares 'y' as an array of such values. 20952 20953 typeof (*x) y[4]; 20954 20955 * This declares 'y' as an array of pointers to characters: 20956 20957 typeof (typeof (char *)[4]) y; 20958 20959 It is equivalent to the following traditional C declaration: 20960 20961 char *y[4]; 20962 20963 To see the meaning of the declaration using 'typeof', and why it 20964 might be a useful way to write, rewrite it with these macros: 20965 20966 #define pointer(T) typeof(T *) 20967 #define array(T, N) typeof(T [N]) 20968 20969 Now the declaration can be rewritten this way: 20970 20971 array (pointer (char), 4) y; 20972 20973 Thus, 'array (pointer (char), 4)' is the type of arrays of 4 20974 pointers to 'char'. 20975 20976 _Compatibility Note:_ In addition to 'typeof', GCC 2 supported a more 20977 limited extension that permitted one to write 20978 20979 typedef T = EXPR; 20980 20981 with the effect of declaring T to have the type of the expression EXPR. 20982 This extension does not work with GCC 3 (versions between 3.0 and 3.2 20983 crash; 3.2.1 and later give an error). Code that relies on it should be 20984 rewritten to use 'typeof': 20985 20986 typedef typeof(EXPR) T; 20987 20988 This works with all versions of GCC. 20989 20990 20991 File: gcc.info, Node: Conditionals, Next: __int128, Prev: Typeof, Up: C Extensions 20992 20993 6.7 Conditionals with Omitted Operands 20994 ====================================== 20995 20996 The middle operand in a conditional expression may be omitted. Then if 20997 the first operand is nonzero, its value is the value of the conditional 20998 expression. 20999 21000 Therefore, the expression 21001 21002 x ? : y 21003 21004 has the value of 'x' if that is nonzero; otherwise, the value of 'y'. 21005 21006 This example is perfectly equivalent to 21007 21008 x ? x : y 21009 21010 In this simple case, the ability to omit the middle operand is not 21011 especially useful. When it becomes useful is when the first operand 21012 does, or may (if it is a macro argument), contain a side effect. Then 21013 repeating the operand in the middle would perform the side effect twice. 21014 Omitting the middle operand uses the value already computed without the 21015 undesirable effects of recomputing it. 21016 21017 21018 File: gcc.info, Node: __int128, Next: Long Long, Prev: Conditionals, Up: C Extensions 21019 21020 6.8 128-bit integers 21021 ==================== 21022 21023 As an extension the integer scalar type '__int128' is supported for 21024 targets which have an integer mode wide enough to hold 128 bits. Simply 21025 write '__int128' for a signed 128-bit integer, or 'unsigned __int128' 21026 for an unsigned 128-bit integer. There is no support in GCC for 21027 expressing an integer constant of type '__int128' for targets with 'long 21028 long' integer less than 128 bits wide. 21029 21030 21031 File: gcc.info, Node: Long Long, Next: Complex, Prev: __int128, Up: C Extensions 21032 21033 6.9 Double-Word Integers 21034 ======================== 21035 21036 ISO C99 supports data types for integers that are at least 64 bits wide, 21037 and as an extension GCC supports them in C90 mode and in C++. Simply 21038 write 'long long int' for a signed integer, or 'unsigned long long int' 21039 for an unsigned integer. To make an integer constant of type 'long long 21040 int', add the suffix 'LL' to the integer. To make an integer constant 21041 of type 'unsigned long long int', add the suffix 'ULL' to the integer. 21042 21043 You can use these types in arithmetic like any other integer types. 21044 Addition, subtraction, and bitwise boolean operations on these types are 21045 open-coded on all types of machines. Multiplication is open-coded if 21046 the machine supports a fullword-to-doubleword widening multiply 21047 instruction. Division and shifts are open-coded only on machines that 21048 provide special support. The operations that are not open-coded use 21049 special library routines that come with GCC. 21050 21051 There may be pitfalls when you use 'long long' types for function 21052 arguments without function prototypes. If a function expects type 'int' 21053 for its argument, and you pass a value of type 'long long int', 21054 confusion results because the caller and the subroutine disagree about 21055 the number of bytes for the argument. Likewise, if the function expects 21056 'long long int' and you pass 'int'. The best way to avoid such problems 21057 is to use prototypes. 21058 21059 21060 File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 21061 21062 6.10 Complex Numbers 21063 ==================== 21064 21065 ISO C99 supports complex floating data types, and as an extension GCC 21066 supports them in C90 mode and in C++. GCC also supports complex integer 21067 data types which are not part of ISO C99. You can declare complex types 21068 using the keyword '_Complex'. As an extension, the older GNU keyword 21069 '__complex__' is also supported. 21070 21071 For example, '_Complex double x;' declares 'x' as a variable whose real 21072 part and imaginary part are both of type 'double'. '_Complex short int 21073 y;' declares 'y' to have real and imaginary parts of type 'short int'; 21074 this is not likely to be useful, but it shows that the set of complex 21075 types is complete. 21076 21077 To write a constant with a complex data type, use the suffix 'i' or 'j' 21078 (either one; they are equivalent). For example, '2.5fi' has type 21079 '_Complex float' and '3i' has type '_Complex int'. Such a constant 21080 always has a pure imaginary value, but you can form any complex value 21081 you like by adding one to a real constant. This is a GNU extension; if 21082 you have an ISO C99 conforming C library (such as the GNU C Library), 21083 and want to construct complex constants of floating type, you should 21084 include '<complex.h>' and use the macros 'I' or '_Complex_I' instead. 21085 21086 To extract the real part of a complex-valued expression EXP, write 21087 '__real__ EXP'. Likewise, use '__imag__' to extract the imaginary part. 21088 This is a GNU extension; for values of floating type, you should use the 21089 ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and 21090 'cimagl', declared in '<complex.h>' and also provided as built-in 21091 functions by GCC. 21092 21093 The operator '~' performs complex conjugation when used on a value with 21094 a complex type. This is a GNU extension; for values of floating type, 21095 you should use the ISO C99 functions 'conjf', 'conj' and 'conjl', 21096 declared in '<complex.h>' and also provided as built-in functions by 21097 GCC. 21098 21099 GCC can allocate complex automatic variables in a noncontiguous 21100 fashion; it's even possible for the real part to be in a register while 21101 the imaginary part is on the stack (or vice versa). Only the DWARF 2 21102 debug info format can represent this, so use of DWARF 2 is recommended. 21103 If you are using the stabs debug info format, GCC describes a 21104 noncontiguous complex variable as if it were two separate variables of 21105 noncomplex type. If the variable's actual name is 'foo', the two 21106 fictitious variables are named 'foo$real' and 'foo$imag'. You can 21107 examine and set these two fictitious variables with your debugger. 21108 21109 21110 File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 21111 21112 6.11 Additional Floating Types 21113 ============================== 21114 21115 As an extension, GNU C supports additional floating types, '__float80' 21116 and '__float128' to support 80-bit ('XFmode') and 128-bit ('TFmode') 21117 floating types. Support for additional types includes the arithmetic 21118 operators: add, subtract, multiply, divide; unary arithmetic operators; 21119 relational operators; equality operators; and conversions to and from 21120 integer and other floating types. Use a suffix 'w' or 'W' in a literal 21121 constant of type '__float80' and 'q' or 'Q' for '_float128'. You can 21122 declare complex types using the corresponding internal complex type, 21123 'XCmode' for '__float80' type and 'TCmode' for '__float128' type: 21124 21125 typedef _Complex float __attribute__((mode(TC))) _Complex128; 21126 typedef _Complex float __attribute__((mode(XC))) _Complex80; 21127 21128 Not all targets support additional floating-point types. '__float80' 21129 and '__float128' types are supported on i386, x86_64 and IA-64 targets. 21130 The '__float128' type is supported on hppa HP-UX targets. 21131 21132 21133 File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 21134 21135 6.12 Half-Precision Floating Point 21136 ================================== 21137 21138 On ARM targets, GCC supports half-precision (16-bit) floating point via 21139 the '__fp16' type. You must enable this type explicitly with the 21140 '-mfp16-format' command-line option in order to use it. 21141 21142 ARM supports two incompatible representations for half-precision 21143 floating-point values. You must choose one of the representations and 21144 use it consistently in your program. 21145 21146 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format. This 21147 format can represent normalized values in the range of 2^{-14} to 65504. 21148 There are 11 bits of significand precision, approximately 3 decimal 21149 digits. 21150 21151 Specifying '-mfp16-format=alternative' selects the ARM alternative 21152 format. This representation is similar to the IEEE format, but does not 21153 support infinities or NaNs. Instead, the range of exponents is 21154 extended, so that this format can represent normalized values in the 21155 range of 2^{-14} to 131008. 21156 21157 The '__fp16' type is a storage format only. For purposes of arithmetic 21158 and other operations, '__fp16' values in C or C++ expressions are 21159 automatically promoted to 'float'. In addition, you cannot declare a 21160 function with a return value or parameters of type '__fp16'. 21161 21162 Note that conversions from 'double' to '__fp16' involve an intermediate 21163 conversion to 'float'. Because of rounding, this can sometimes produce 21164 a different result than a direct conversion. 21165 21166 ARM provides hardware support for conversions between '__fp16' and 21167 'float' values as an extension to VFP and NEON (Advanced SIMD). GCC 21168 generates code using these hardware instructions if you compile with 21169 options to select an FPU that provides them; for example, 21170 '-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the '-mfp16-format' 21171 option to select a half-precision format. 21172 21173 Language-level support for the '__fp16' data type is independent of 21174 whether GCC generates code using hardware floating-point instructions. 21175 In cases where hardware support is not specified, GCC implements 21176 conversions between '__fp16' and 'float' values as library calls. 21177 21178 21179 File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 21180 21181 6.13 Decimal Floating Types 21182 =========================== 21183 21184 As an extension, GNU C supports decimal floating types as defined in the 21185 N1312 draft of ISO/IEC WDTR24732. Support for decimal floating types in 21186 GCC will evolve as the draft technical report changes. Calling 21187 conventions for any target might also change. Not all targets support 21188 decimal floating types. 21189 21190 The decimal floating types are '_Decimal32', '_Decimal64', and 21191 '_Decimal128'. They use a radix of ten, unlike the floating types 21192 'float', 'double', and 'long double' whose radix is not specified by the 21193 C standard but is usually two. 21194 21195 Support for decimal floating types includes the arithmetic operators 21196 add, subtract, multiply, divide; unary arithmetic operators; relational 21197 operators; equality operators; and conversions to and from integer and 21198 other floating types. Use a suffix 'df' or 'DF' in a literal constant 21199 of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL' 21200 for '_Decimal128'. 21201 21202 GCC support of decimal float as specified by the draft technical report 21203 is incomplete: 21204 21205 * When the value of a decimal floating type cannot be represented in 21206 the integer type to which it is being converted, the result is 21207 undefined rather than the result value specified by the draft 21208 technical report. 21209 21210 * GCC does not provide the C library functionality associated with 21211 'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which 21212 must come from a separate C library implementation. Because of 21213 this the GNU C compiler does not define macro '__STDC_DEC_FP__' to 21214 indicate that the implementation conforms to the technical report. 21215 21216 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by 21217 the DWARF 2 debug information format. 21218 21219 21220 File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 21221 21222 6.14 Hex Floats 21223 =============== 21224 21225 ISO C99 supports floating-point numbers written not only in the usual 21226 decimal notation, such as '1.55e1', but also numbers such as '0x1.fp3' 21227 written in hexadecimal format. As a GNU extension, GCC supports this in 21228 C90 mode (except in some cases when strictly conforming) and in C++. In 21229 that format the '0x' hex introducer and the 'p' or 'P' exponent field 21230 are mandatory. The exponent is a decimal number that indicates the 21231 power of 2 by which the significant part is multiplied. Thus '0x1.f' is 21232 1 15/16, 'p3' multiplies it by 8, and the value of '0x1.fp3' is the same 21233 as '1.55e1'. 21234 21235 Unlike for floating-point numbers in the decimal notation the exponent 21236 is always required in the hexadecimal notation. Otherwise the compiler 21237 would not be able to resolve the ambiguity of, e.g., '0x1.f'. This 21238 could mean '1.0f' or '1.9375' since 'f' is also the extension for 21239 floating-point constants of type 'float'. 21240 21241 21242 File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 21243 21244 6.15 Fixed-Point Types 21245 ====================== 21246 21247 As an extension, GNU C supports fixed-point types as defined in the 21248 N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC 21249 will evolve as the draft technical report changes. Calling conventions 21250 for any target might also change. Not all targets support fixed-point 21251 types. 21252 21253 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract', 21254 'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract', 21255 'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short 21256 _Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract', 21257 '_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned 21258 long _Fract', '_Sat unsigned long long _Fract', 'short _Accum', 21259 '_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum', 21260 'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum', 21261 '_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long 21262 _Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat 21263 unsigned long _Accum', '_Sat unsigned long long _Accum'. 21264 21265 Fixed-point data values contain fractional and optional integral parts. 21266 The format of fixed-point data varies and depends on the target machine. 21267 21268 Support for fixed-point types includes: 21269 * prefix and postfix increment and decrement operators ('++', '--') 21270 * unary arithmetic operators ('+', '-', '!') 21271 * binary arithmetic operators ('+', '-', '*', '/') 21272 * binary shift operators ('<<', '>>') 21273 * relational operators ('<', '<=', '>=', '>') 21274 * equality operators ('==', '!=') 21275 * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=') 21276 * conversions to and from integer, floating-point, or fixed-point 21277 types 21278 21279 Use a suffix in a fixed-point literal constant: 21280 * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract' 21281 * 'r' or 'R' for '_Fract' and '_Sat _Fract' 21282 * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract' 21283 * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract' 21284 * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short 21285 _Fract' 21286 * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract' 21287 * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long 21288 _Fract' 21289 * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned 21290 long long _Fract' 21291 * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum' 21292 * 'k' or 'K' for '_Accum' and '_Sat _Accum' 21293 * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum' 21294 * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum' 21295 * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short 21296 _Accum' 21297 * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum' 21298 * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long 21299 _Accum' 21300 * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned 21301 long long _Accum' 21302 21303 GCC support of fixed-point types as specified by the draft technical 21304 report is incomplete: 21305 21306 * Pragmas to control overflow and rounding behaviors are not 21307 implemented. 21308 21309 Fixed-point types are supported by the DWARF 2 debug information 21310 format. 21311 21312 21313 File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 21314 21315 6.16 Named Address Spaces 21316 ========================= 21317 21318 As an extension, GNU C supports named address spaces as defined in the 21319 N1275 draft of ISO/IEC DTR 18037. Support for named address spaces in 21320 GCC will evolve as the draft technical report changes. Calling 21321 conventions for any target might also change. At present, only the AVR, 21322 SPU, M32C, and RL78 targets support address spaces other than the 21323 generic address space. 21324 21325 Address space identifiers may be used exactly like any other C type 21326 qualifier (e.g., 'const' or 'volatile'). See the N1275 document for 21327 more details. 21328 21329 6.16.1 AVR Named Address Spaces 21330 ------------------------------- 21331 21332 On the AVR target, there are several address spaces that can be used in 21333 order to put read-only data into the flash memory and access that data 21334 by means of the special instructions 'LPM' or 'ELPM' needed to read from 21335 flash. 21336 21337 Per default, any data including read-only data is located in RAM (the 21338 generic address space) so that non-generic address spaces are needed to 21339 locate read-only data in flash memory _and_ to generate the right 21340 instructions to access this data without using (inline) assembler code. 21341 21342 '__flash' 21343 The '__flash' qualifier locates data in the '.progmem.data' 21344 section. Data is read using the 'LPM' instruction. Pointers to 21345 this address space are 16 bits wide. 21346 21347 '__flash1' 21348 '__flash2' 21349 '__flash3' 21350 '__flash4' 21351 '__flash5' 21352 These are 16-bit address spaces locating data in section 21353 '.progmemN.data' where N refers to address space '__flashN'. The 21354 compiler sets the 'RAMPZ' segment register appropriately before 21355 reading data by means of the 'ELPM' instruction. 21356 21357 '__memx' 21358 This is a 24-bit address space that linearizes flash and RAM: If 21359 the high bit of the address is set, data is read from RAM using the 21360 lower two bytes as RAM address. If the high bit of the address is 21361 clear, data is read from flash with 'RAMPZ' set according to the 21362 high byte of the address. *Note '__builtin_avr_flash_segment': AVR 21363 Built-in Functions. 21364 21365 Objects in this address space are located in '.progmemx.data'. 21366 21367 Example 21368 21369 char my_read (const __flash char ** p) 21370 { 21371 /* p is a pointer to RAM that points to a pointer to flash. 21372 The first indirection of p reads that flash pointer 21373 from RAM and the second indirection reads a char from this 21374 flash address. */ 21375 21376 return **p; 21377 } 21378 21379 /* Locate array[] in flash memory */ 21380 const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 }; 21381 21382 int i = 1; 21383 21384 int main (void) 21385 { 21386 /* Return 17 by reading from flash memory */ 21387 return array[array[i]]; 21388 } 21389 21390 For each named address space supported by avr-gcc there is an equally 21391 named but uppercase built-in macro defined. The purpose is to 21392 facilitate testing if respective address space support is available or 21393 not: 21394 21395 #ifdef __FLASH 21396 const __flash int var = 1; 21397 21398 int read_var (void) 21399 { 21400 return var; 21401 } 21402 #else 21403 #include <avr/pgmspace.h> /* From AVR-LibC */ 21404 21405 const int var PROGMEM = 1; 21406 21407 int read_var (void) 21408 { 21409 return (int) pgm_read_word (&var); 21410 } 21411 #endif /* __FLASH */ 21412 21413 Notice that attribute *note 'progmem': AVR Variable Attributes. locates 21414 data in flash but accesses to these data read from generic address 21415 space, i.e. from RAM, so that you need special accessors like 21416 'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) 21417 together with attribute 'progmem'. 21418 21419 Limitations and caveats 21420 21421 * Reading across the 64 KiB section boundary of the '__flash' or 21422 '__flashN' address spaces shows undefined behavior. The only 21423 address space that supports reading across the 64 KiB flash segment 21424 boundaries is '__memx'. 21425 21426 * If you use one of the '__flashN' address spaces you must arrange 21427 your linker script to locate the '.progmemN.data' sections 21428 according to your needs. 21429 21430 * Any data or pointers to the non-generic address spaces must be 21431 qualified as 'const', i.e. as read-only data. This still applies 21432 if the data in one of these address spaces like software version 21433 number or calibration lookup table are intended to be changed after 21434 load time by, say, a boot loader. In this case the right 21435 qualification is 'const' 'volatile' so that the compiler must not 21436 optimize away known values or insert them as immediates into 21437 operands of instructions. 21438 21439 * The following code initializes a variable 'pfoo' located in static 21440 storage with a 24-bit address: 21441 extern const __memx char foo; 21442 const __memx void *pfoo = &foo; 21443 21444 Such code requires at least binutils 2.23, see 21445 PR13503 (http://sourceware.org/PR13503). 21446 21447 6.16.2 M32C Named Address Spaces 21448 -------------------------------- 21449 21450 On the M32C target, with the R8C and M16C CPU variants, variables 21451 qualified with '__far' are accessed using 32-bit addresses in order to 21452 access memory beyond the first 64 Ki bytes. If '__far' is used with the 21453 M32CM or M32C CPU variants, it has no effect. 21454 21455 6.16.3 RL78 Named Address Spaces 21456 -------------------------------- 21457 21458 On the RL78 target, variables qualified with '__far' are accessed with 21459 32-bit pointers (20-bit addresses) rather than the default 16-bit 21460 addresses. Non-far variables are assumed to appear in the topmost 21461 64 KiB of the address space. 21462 21463 6.16.4 SPU Named Address Spaces 21464 ------------------------------- 21465 21466 On the SPU target variables may be declared as belonging to another 21467 address space by qualifying the type with the '__ea' address space 21468 identifier: 21469 21470 extern int __ea i; 21471 21472 The compiler generates special code to access the variable 'i'. It may 21473 use runtime library support, or generate special machine instructions to 21474 access that address space. 21475 21476 21477 File: gcc.info, Node: Zero Length, Next: Empty Structures, Prev: Named Address Spaces, Up: C Extensions 21478 21479 6.17 Arrays of Length Zero 21480 ========================== 21481 21482 Zero-length arrays are allowed in GNU C. They are very useful as the 21483 last element of a structure that is really a header for a 21484 variable-length object: 21485 21486 struct line { 21487 int length; 21488 char contents[0]; 21489 }; 21490 21491 struct line *thisline = (struct line *) 21492 malloc (sizeof (struct line) + this_length); 21493 thisline->length = this_length; 21494 21495 In ISO C90, you would have to give 'contents' a length of 1, which 21496 means either you waste space or complicate the argument to 'malloc'. 21497 21498 In ISO C99, you would use a "flexible array member", which is slightly 21499 different in syntax and semantics: 21500 21501 * Flexible array members are written as 'contents[]' without the '0'. 21502 21503 * Flexible array members have incomplete type, and so the 'sizeof' 21504 operator may not be applied. As a quirk of the original 21505 implementation of zero-length arrays, 'sizeof' evaluates to zero. 21506 21507 * Flexible array members may only appear as the last member of a 21508 'struct' that is otherwise non-empty. 21509 21510 * A structure containing a flexible array member, or a union 21511 containing such a structure (possibly recursively), may not be a 21512 member of a structure or an element of an array. (However, these 21513 uses are permitted by GCC as extensions.) 21514 21515 GCC versions before 3.0 allowed zero-length arrays to be statically 21516 initialized, as if they were flexible arrays. In addition to those 21517 cases that were useful, it also allowed initializations in situations 21518 that would corrupt later data. Non-empty initialization of zero-length 21519 arrays is now treated like any case where there are more initializer 21520 elements than the array holds, in that a suitable warning about "excess 21521 elements in array" is given, and the excess elements (all of them, in 21522 this case) are ignored. 21523 21524 Instead GCC allows static initialization of flexible array members. 21525 This is equivalent to defining a new structure containing the original 21526 structure followed by an array of sufficient size to contain the data. 21527 E.g. in the following, 'f1' is constructed as if it were declared like 21528 'f2'. 21529 21530 struct f1 { 21531 int x; int y[]; 21532 } f1 = { 1, { 2, 3, 4 } }; 21533 21534 struct f2 { 21535 struct f1 f1; int data[3]; 21536 } f2 = { { 1 }, { 2, 3, 4 } }; 21537 21538 The convenience of this extension is that 'f1' has the desired type, 21539 eliminating the need to consistently refer to 'f2.f1'. 21540 21541 This has symmetry with normal static arrays, in that an array of 21542 unknown size is also written with '[]'. 21543 21544 Of course, this extension only makes sense if the extra data comes at 21545 the end of a top-level object, as otherwise we would be overwriting data 21546 at subsequent offsets. To avoid undue complication and confusion with 21547 initialization of deeply nested arrays, we simply disallow any non-empty 21548 initialization except when the structure is the top-level object. For 21549 example: 21550 21551 struct foo { int x; int y[]; }; 21552 struct bar { struct foo z; }; 21553 21554 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 21555 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 21556 struct bar c = { { 1, { } } }; // Valid. 21557 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 21558 21559 21560 File: gcc.info, Node: Empty Structures, Next: Variable Length, Prev: Zero Length, Up: C Extensions 21561 21562 6.18 Structures With No Members 21563 =============================== 21564 21565 GCC permits a C structure to have no members: 21566 21567 struct empty { 21568 }; 21569 21570 The structure has size zero. In C++, empty structures are part of the 21571 language. G++ treats empty structures as if they had a single member of 21572 type 'char'. 21573 21574 21575 File: gcc.info, Node: Variable Length, Next: Variadic Macros, Prev: Empty Structures, Up: C Extensions 21576 21577 6.19 Arrays of Variable Length 21578 ============================== 21579 21580 Variable-length automatic arrays are allowed in ISO C99, and as an 21581 extension GCC accepts them in C90 mode and in C++. These arrays are 21582 declared like any other automatic arrays, but with a length that is not 21583 a constant expression. The storage is allocated at the point of 21584 declaration and deallocated when the block scope containing the 21585 declaration exits. For example: 21586 21587 FILE * 21588 concat_fopen (char *s1, char *s2, char *mode) 21589 { 21590 char str[strlen (s1) + strlen (s2) + 1]; 21591 strcpy (str, s1); 21592 strcat (str, s2); 21593 return fopen (str, mode); 21594 } 21595 21596 Jumping or breaking out of the scope of the array name deallocates the 21597 storage. Jumping into the scope is not allowed; you get an error 21598 message for it. 21599 21600 You can use the function 'alloca' to get an effect much like 21601 variable-length arrays. The function 'alloca' is available in many 21602 other C implementations (but not in all). On the other hand, 21603 variable-length arrays are more elegant. 21604 21605 There are other differences between these two methods. Space allocated 21606 with 'alloca' exists until the containing _function_ returns. The space 21607 for a variable-length array is deallocated as soon as the array name's 21608 scope ends. (If you use both variable-length arrays and 'alloca' in the 21609 same function, deallocation of a variable-length array also deallocates 21610 anything more recently allocated with 'alloca'.) 21611 21612 You can also use variable-length arrays as arguments to functions: 21613 21614 struct entry 21615 tester (int len, char data[len][len]) 21616 { 21617 /* ... */ 21618 } 21619 21620 The length of an array is computed once when the storage is allocated 21621 and is remembered for the scope of the array in case you access it with 21622 'sizeof'. 21623 21624 If you want to pass the array first and the length afterward, you can 21625 use a forward declaration in the parameter list--another GNU extension. 21626 21627 struct entry 21628 tester (int len; char data[len][len], int len) 21629 { 21630 /* ... */ 21631 } 21632 21633 The 'int len' before the semicolon is a "parameter forward 21634 declaration", and it serves the purpose of making the name 'len' known 21635 when the declaration of 'data' is parsed. 21636 21637 You can write any number of such parameter forward declarations in the 21638 parameter list. They can be separated by commas or semicolons, but the 21639 last one must end with a semicolon, which is followed by the "real" 21640 parameter declarations. Each forward declaration must match a "real" 21641 declaration in parameter name and data type. ISO C99 does not support 21642 parameter forward declarations. 21643 21644 21645 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Variable Length, Up: C Extensions 21646 21647 6.20 Macros with a Variable Number of Arguments. 21648 ================================================ 21649 21650 In the ISO C standard of 1999, a macro can be declared to accept a 21651 variable number of arguments much as a function can. The syntax for 21652 defining the macro is similar to that of a function. Here is an 21653 example: 21654 21655 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 21656 21657 Here '...' is a "variable argument". In the invocation of such a macro, 21658 it represents the zero or more tokens until the closing parenthesis that 21659 ends the invocation, including any commas. This set of tokens replaces 21660 the identifier '__VA_ARGS__' in the macro body wherever it appears. See 21661 the CPP manual for more information. 21662 21663 GCC has long supported variadic macros, and used a different syntax 21664 that allowed you to give a name to the variable arguments just like any 21665 other argument. Here is an example: 21666 21667 #define debug(format, args...) fprintf (stderr, format, args) 21668 21669 This is in all ways equivalent to the ISO C example above, but arguably 21670 more readable and descriptive. 21671 21672 GNU CPP has two further variadic macro extensions, and permits them to 21673 be used with either of the above forms of macro definition. 21674 21675 In standard C, you are not allowed to leave the variable argument out 21676 entirely; but you are allowed to pass an empty argument. For example, 21677 this invocation is invalid in ISO C, because there is no comma after the 21678 string: 21679 21680 debug ("A message") 21681 21682 GNU CPP permits you to completely omit the variable arguments in this 21683 way. In the above examples, the compiler would complain, though since 21684 the expansion of the macro still has the extra comma after the format 21685 string. 21686 21687 To help solve this problem, CPP behaves specially for variable 21688 arguments used with the token paste operator, '##'. If instead you 21689 write 21690 21691 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 21692 21693 and if the variable arguments are omitted or empty, the '##' operator 21694 causes the preprocessor to remove the comma before it. If you do 21695 provide some variable arguments in your macro invocation, GNU CPP does 21696 not complain about the paste operation and instead places the variable 21697 arguments after the comma. Just like any other pasted macro argument, 21698 these arguments are not macro expanded. 21699 21700 21701 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 21702 21703 6.21 Slightly Looser Rules for Escaped Newlines 21704 =============================================== 21705 21706 Recently, the preprocessor has relaxed its treatment of escaped 21707 newlines. Previously, the newline had to immediately follow a 21708 backslash. The current implementation allows whitespace in the form of 21709 spaces, horizontal and vertical tabs, and form feeds between the 21710 backslash and the subsequent newline. The preprocessor issues a 21711 warning, but treats it as a valid escaped newline and combines the two 21712 lines to form a single logical line. This works within comments and 21713 tokens, as well as between tokens. Comments are _not_ treated as 21714 whitespace for the purposes of this relaxation, since they have not yet 21715 been replaced with spaces. 21716 21717 21718 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 21719 21720 6.22 Non-Lvalue Arrays May Have Subscripts 21721 ========================================== 21722 21723 In ISO C99, arrays that are not lvalues still decay to pointers, and may 21724 be subscripted, although they may not be modified or used after the next 21725 sequence point and the unary '&' operator may not be applied to them. 21726 As an extension, GNU C allows such arrays to be subscripted in C90 mode, 21727 though otherwise they do not decay to pointers outside C99 mode. For 21728 example, this is valid in GNU C though not valid in C90: 21729 21730 struct foo {int a[4];}; 21731 21732 struct foo f(); 21733 21734 bar (int index) 21735 { 21736 return f().a[index]; 21737 } 21738 21739 21740 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 21741 21742 6.23 Arithmetic on 'void'- and Function-Pointers 21743 ================================================ 21744 21745 In GNU C, addition and subtraction operations are supported on pointers 21746 to 'void' and on pointers to functions. This is done by treating the 21747 size of a 'void' or of a function as 1. 21748 21749 A consequence of this is that 'sizeof' is also allowed on 'void' and on 21750 function types, and returns 1. 21751 21752 The option '-Wpointer-arith' requests a warning if these extensions are 21753 used. 21754 21755 21756 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 21757 21758 6.24 Non-Constant Initializers 21759 ============================== 21760 21761 As in standard C++ and ISO C99, the elements of an aggregate initializer 21762 for an automatic variable are not required to be constant expressions in 21763 GNU C. Here is an example of an initializer with run-time varying 21764 elements: 21765 21766 foo (float f, float g) 21767 { 21768 float beat_freqs[2] = { f-g, f+g }; 21769 /* ... */ 21770 } 21771 21772 21773 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 21774 21775 6.25 Compound Literals 21776 ====================== 21777 21778 ISO C99 supports compound literals. A compound literal looks like a 21779 cast containing an initializer. Its value is an object of the type 21780 specified in the cast, containing the elements specified in the 21781 initializer; it is an lvalue. As an extension, GCC supports compound 21782 literals in C90 mode and in C++, though the semantics are somewhat 21783 different in C++. 21784 21785 Usually, the specified type is a structure. Assume that 'struct foo' 21786 and 'structure' are declared as shown: 21787 21788 struct foo {int a; char b[2];} structure; 21789 21790 Here is an example of constructing a 'struct foo' with a compound 21791 literal: 21792 21793 structure = ((struct foo) {x + y, 'a', 0}); 21794 21795 This is equivalent to writing the following: 21796 21797 { 21798 struct foo temp = {x + y, 'a', 0}; 21799 structure = temp; 21800 } 21801 21802 You can also construct an array, though this is dangerous in C++, as 21803 explained below. If all the elements of the compound literal are (made 21804 up of) simple constant expressions, suitable for use in initializers of 21805 objects of static storage duration, then the compound literal can be 21806 coerced to a pointer to its first element and used in such an 21807 initializer, as shown here: 21808 21809 char **foo = (char *[]) { "x", "y", "z" }; 21810 21811 Compound literals for scalar types and union types are also allowed, 21812 but then the compound literal is equivalent to a cast. 21813 21814 As a GNU extension, GCC allows initialization of objects with static 21815 storage duration by compound literals (which is not possible in ISO C99, 21816 because the initializer is not a constant). It is handled as if the 21817 object is initialized only with the bracket enclosed list if the types 21818 of the compound literal and the object match. The initializer list of 21819 the compound literal must be constant. If the object being initialized 21820 has array type of unknown size, the size is determined by compound 21821 literal size. 21822 21823 static struct foo x = (struct foo) {1, 'a', 'b'}; 21824 static int y[] = (int []) {1, 2, 3}; 21825 static int z[] = (int [3]) {1}; 21826 21827 The above lines are equivalent to the following: 21828 static struct foo x = {1, 'a', 'b'}; 21829 static int y[] = {1, 2, 3}; 21830 static int z[] = {1, 0, 0}; 21831 21832 In C, a compound literal designates an unnamed object with static or 21833 automatic storage duration. In C++, a compound literal designates a 21834 temporary object, which only lives until the end of its full-expression. 21835 As a result, well-defined C code that takes the address of a subobject 21836 of a compound literal can be undefined in C++. For instance, if the 21837 array compound literal example above appeared inside a function, any 21838 subsequent use of 'foo' in C++ has undefined behavior because the 21839 lifetime of the array ends after the declaration of 'foo'. As a result, 21840 the C++ compiler now rejects the conversion of a temporary array to a 21841 pointer. 21842 21843 As an optimization, the C++ compiler sometimes gives array compound 21844 literals longer lifetimes: when the array either appears outside a 21845 function or has const-qualified type. If 'foo' and its initializer had 21846 elements of 'char *const' type rather than 'char *', or if 'foo' were a 21847 global variable, the array would have static storage duration. But it 21848 is probably safest just to avoid the use of array compound literals in 21849 code compiled as C++. 21850 21851 21852 File: gcc.info, Node: Designated Inits, Next: Case Ranges, Prev: Compound Literals, Up: C Extensions 21853 21854 6.26 Designated Initializers 21855 ============================ 21856 21857 Standard C90 requires the elements of an initializer to appear in a 21858 fixed order, the same as the order of the elements in the array or 21859 structure being initialized. 21860 21861 In ISO C99 you can give the elements in any order, specifying the array 21862 indices or structure field names they apply to, and GNU C allows this as 21863 an extension in C90 mode as well. This extension is not implemented in 21864 GNU C++. 21865 21866 To specify an array index, write '[INDEX] =' before the element value. 21867 For example, 21868 21869 int a[6] = { [4] = 29, [2] = 15 }; 21870 21871 is equivalent to 21872 21873 int a[6] = { 0, 0, 15, 0, 29, 0 }; 21874 21875 The index values must be constant expressions, even if the array being 21876 initialized is automatic. 21877 21878 An alternative syntax for this that has been obsolete since GCC 2.5 but 21879 GCC still accepts is to write '[INDEX]' before the element value, with 21880 no '='. 21881 21882 To initialize a range of elements to the same value, write '[FIRST ... 21883 LAST] = VALUE'. This is a GNU extension. For example, 21884 21885 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 21886 21887 If the value in it has side-effects, the side-effects happen only once, 21888 not for each initialized field by the range initializer. 21889 21890 Note that the length of the array is the highest value specified plus 21891 one. 21892 21893 In a structure initializer, specify the name of a field to initialize 21894 with '.FIELDNAME =' before the element value. For example, given the 21895 following structure, 21896 21897 struct point { int x, y; }; 21898 21899 the following initialization 21900 21901 struct point p = { .y = yvalue, .x = xvalue }; 21902 21903 is equivalent to 21904 21905 struct point p = { xvalue, yvalue }; 21906 21907 Another syntax that has the same meaning, obsolete since GCC 2.5, is 21908 'FIELDNAME:', as shown here: 21909 21910 struct point p = { y: yvalue, x: xvalue }; 21911 21912 The '[INDEX]' or '.FIELDNAME' is known as a "designator". You can also 21913 use a designator (or the obsolete colon syntax) when initializing a 21914 union, to specify which element of the union should be used. For 21915 example, 21916 21917 union foo { int i; double d; }; 21918 21919 union foo f = { .d = 4 }; 21920 21921 converts 4 to a 'double' to store it in the union using the second 21922 element. By contrast, casting 4 to type 'union foo' stores it into the 21923 union as the integer 'i', since it is an integer. (*Note Cast to 21924 Union::.) 21925 21926 You can combine this technique of naming elements with ordinary C 21927 initialization of successive elements. Each initializer element that 21928 does not have a designator applies to the next consecutive element of 21929 the array or structure. For example, 21930 21931 int a[6] = { [1] = v1, v2, [4] = v4 }; 21932 21933 is equivalent to 21934 21935 int a[6] = { 0, v1, v2, 0, v4, 0 }; 21936 21937 Labeling the elements of an array initializer is especially useful when 21938 the indices are characters or belong to an 'enum' type. For example: 21939 21940 int whitespace[256] 21941 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 21942 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 21943 21944 You can also write a series of '.FIELDNAME' and '[INDEX]' designators 21945 before an '=' to specify a nested subobject to initialize; the list is 21946 taken relative to the subobject corresponding to the closest surrounding 21947 brace pair. For example, with the 'struct point' declaration above: 21948 21949 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 21950 21951 If the same field is initialized multiple times, it has the value from 21952 the last initialization. If any such overridden initialization has 21953 side-effect, it is unspecified whether the side-effect happens or not. 21954 Currently, GCC discards them and issues a warning. 21955 21956 21957 File: gcc.info, Node: Case Ranges, Next: Cast to Union, Prev: Designated Inits, Up: C Extensions 21958 21959 6.27 Case Ranges 21960 ================ 21961 21962 You can specify a range of consecutive values in a single 'case' label, 21963 like this: 21964 21965 case LOW ... HIGH: 21966 21967 This has the same effect as the proper number of individual 'case' 21968 labels, one for each integer value from LOW to HIGH, inclusive. 21969 21970 This feature is especially useful for ranges of ASCII character codes: 21971 21972 case 'A' ... 'Z': 21973 21974 *Be careful:* Write spaces around the '...', for otherwise it may be 21975 parsed wrong when you use it with integer values. For example, write 21976 this: 21977 21978 case 1 ... 5: 21979 21980 rather than this: 21981 21982 case 1...5: 21983 21984 21985 File: gcc.info, Node: Cast to Union, Next: Mixed Declarations, Prev: Case Ranges, Up: C Extensions 21986 21987 6.28 Cast to a Union Type 21988 ========================= 21989 21990 A cast to union type is similar to other casts, except that the type 21991 specified is a union type. You can specify the type either with 'union 21992 TAG' or with a typedef name. A cast to union is actually a constructor, 21993 not a cast, and hence does not yield an lvalue like normal casts. 21994 (*Note Compound Literals::.) 21995 21996 The types that may be cast to the union type are those of the members 21997 of the union. Thus, given the following union and variables: 21998 21999 union foo { int i; double d; }; 22000 int x; 22001 double y; 22002 22003 both 'x' and 'y' can be cast to type 'union foo'. 22004 22005 Using the cast as the right-hand side of an assignment to a variable of 22006 union type is equivalent to storing in a member of the union: 22007 22008 union foo u; 22009 /* ... */ 22010 u = (union foo) x == u.i = x 22011 u = (union foo) y == u.d = y 22012 22013 You can also use the union cast as a function argument: 22014 22015 void hack (union foo); 22016 /* ... */ 22017 hack ((union foo) x); 22018 22019 22020 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Cast to Union, Up: C Extensions 22021 22022 6.29 Mixed Declarations and Code 22023 ================================ 22024 22025 ISO C99 and ISO C++ allow declarations and code to be freely mixed 22026 within compound statements. As an extension, GNU C also allows this in 22027 C90 mode. For example, you could do: 22028 22029 int i; 22030 /* ... */ 22031 i++; 22032 int j = i + 2; 22033 22034 Each identifier is visible from where it is declared until the end of 22035 the enclosing block. 22036 22037 22038 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 22039 22040 6.30 Declaring Attributes of Functions 22041 ====================================== 22042 22043 In GNU C, you declare certain things about functions called in your 22044 program which help the compiler optimize function calls and check your 22045 code more carefully. 22046 22047 The keyword '__attribute__' allows you to specify special attributes 22048 when making a declaration. This keyword is followed by an attribute 22049 specification inside double parentheses. The following attributes are 22050 currently defined for functions on all targets: 'aligned', 'alloc_size', 22051 'noreturn', 'returns_twice', 'noinline', 'noclone', 'always_inline', 22052 'flatten', 'pure', 'const', 'nothrow', 'sentinel', 'format', 22053 'format_arg', 'no_instrument_function', 'no_split_stack', 'section', 22054 'constructor', 'destructor', 'used', 'unused', 'deprecated', 'weak', 22055 'malloc', 'alias', 'ifunc', 'warn_unused_result', 'nonnull', 22056 'gnu_inline', 'externally_visible', 'hot', 'cold', 'artificial', 22057 'no_sanitize_address', 'no_address_safety_analysis', 'error' and 22058 'warning'. Several other attributes are defined for functions on 22059 particular target systems. Other attributes, including 'section' are 22060 supported for variables declarations (*note Variable Attributes::) and 22061 for types (*note Type Attributes::). 22062 22063 GCC plugins may provide their own attributes. 22064 22065 You may also specify attributes with '__' preceding and following each 22066 keyword. This allows you to use them in header files without being 22067 concerned about a possible macro of the same name. For example, you may 22068 use '__noreturn__' instead of 'noreturn'. 22069 22070 *Note Attribute Syntax::, for details of the exact syntax for using 22071 attributes. 22072 22073 'alias ("TARGET")' 22074 The 'alias' attribute causes the declaration to be emitted as an 22075 alias for another symbol, which must be specified. For instance, 22076 22077 void __f () { /* Do something. */; } 22078 void f () __attribute__ ((weak, alias ("__f"))); 22079 22080 defines 'f' to be a weak alias for '__f'. In C++, the mangled name 22081 for the target must be used. It is an error if '__f' is not 22082 defined in the same translation unit. 22083 22084 Not all target machines support this attribute. 22085 22086 'aligned (ALIGNMENT)' 22087 This attribute specifies a minimum alignment for the function, 22088 measured in bytes. 22089 22090 You cannot use this attribute to decrease the alignment of a 22091 function, only to increase it. However, when you explicitly 22092 specify a function alignment this overrides the effect of the 22093 '-falign-functions' (*note Optimize Options::) option for this 22094 function. 22095 22096 Note that the effectiveness of 'aligned' attributes may be limited 22097 by inherent limitations in your linker. On many systems, the 22098 linker is only able to arrange for functions to be aligned up to a 22099 certain maximum alignment. (For some linkers, the maximum 22100 supported alignment may be very very small.) See your linker 22101 documentation for further information. 22102 22103 The 'aligned' attribute can also be used for variables and fields 22104 (*note Variable Attributes::.) 22105 22106 'alloc_size' 22107 The 'alloc_size' attribute is used to tell the compiler that the 22108 function return value points to memory, where the size is given by 22109 one or two of the functions parameters. GCC uses this information 22110 to improve the correctness of '__builtin_object_size'. 22111 22112 The function parameter(s) denoting the allocated size are specified 22113 by one or two integer arguments supplied to the attribute. The 22114 allocated size is either the value of the single function argument 22115 specified or the product of the two function arguments specified. 22116 Argument numbering starts at one. 22117 22118 For instance, 22119 22120 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 22121 void my_realloc(void*, size_t) __attribute__((alloc_size(2))) 22122 22123 declares that 'my_calloc' returns memory of the size given by the 22124 product of parameter 1 and 2 and that 'my_realloc' returns memory 22125 of the size given by parameter 2. 22126 22127 'always_inline' 22128 Generally, functions are not inlined unless optimization is 22129 specified. For functions declared inline, this attribute inlines 22130 the function even if no optimization level is specified. 22131 22132 'gnu_inline' 22133 This attribute should be used with a function that is also declared 22134 with the 'inline' keyword. It directs GCC to treat the function as 22135 if it were defined in gnu90 mode even when compiling in C99 or 22136 gnu99 mode. 22137 22138 If the function is declared 'extern', then this definition of the 22139 function is used only for inlining. In no case is the function 22140 compiled as a standalone function, not even if you take its address 22141 explicitly. Such an address becomes an external reference, as if 22142 you had only declared the function, and had not defined it. This 22143 has almost the effect of a macro. The way to use this is to put a 22144 function definition in a header file with this attribute, and put 22145 another copy of the function, without 'extern', in a library file. 22146 The definition in the header file causes most calls to the function 22147 to be inlined. If any uses of the function remain, they refer to 22148 the single copy in the library. Note that the two definitions of 22149 the functions need not be precisely the same, although if they do 22150 not have the same effect your program may behave oddly. 22151 22152 In C, if the function is neither 'extern' nor 'static', then the 22153 function is compiled as a standalone function, as well as being 22154 inlined where possible. 22155 22156 This is how GCC traditionally handled functions declared 'inline'. 22157 Since ISO C99 specifies a different semantics for 'inline', this 22158 function attribute is provided as a transition measure and as a 22159 useful feature in its own right. This attribute is available in 22160 GCC 4.1.3 and later. It is available if either of the preprocessor 22161 macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined. 22162 *Note An Inline Function is As Fast As a Macro: Inline. 22163 22164 In C++, this attribute does not depend on 'extern' in any way, but 22165 it still requires the 'inline' keyword to enable its special 22166 behavior. 22167 22168 'artificial' 22169 This attribute is useful for small inline wrappers that if possible 22170 should appear during debugging as a unit. Depending on the debug 22171 info format it either means marking the function as artificial or 22172 using the caller location for all instructions within the inlined 22173 body. 22174 22175 'bank_switch' 22176 When added to an interrupt handler with the M32C port, causes the 22177 prologue and epilogue to use bank switching to preserve the 22178 registers rather than saving them on the stack. 22179 22180 'flatten' 22181 Generally, inlining into a function is limited. For a function 22182 marked with this attribute, every call inside this function is 22183 inlined, if possible. Whether the function itself is considered 22184 for inlining depends on its size and the current inlining 22185 parameters. 22186 22187 'error ("MESSAGE")' 22188 If this attribute is used on a function declaration and a call to 22189 such a function is not eliminated through dead code elimination or 22190 other optimizations, an error that includes MESSAGE is diagnosed. 22191 This is useful for compile-time checking, especially together with 22192 '__builtin_constant_p' and inline functions where checking the 22193 inline function arguments is not possible through 'extern char 22194 [(condition) ? 1 : -1];' tricks. While it is possible to leave the 22195 function undefined and thus invoke a link failure, when using this 22196 attribute the problem is diagnosed earlier and with exact location 22197 of the call even in presence of inline functions or when not 22198 emitting debugging information. 22199 22200 'warning ("MESSAGE")' 22201 If this attribute is used on a function declaration and a call to 22202 such a function is not eliminated through dead code elimination or 22203 other optimizations, a warning that includes MESSAGE is diagnosed. 22204 This is useful for compile-time checking, especially together with 22205 '__builtin_constant_p' and inline functions. While it is possible 22206 to define the function with a message in '.gnu.warning*' section, 22207 when using this attribute the problem is diagnosed earlier and with 22208 exact location of the call even in presence of inline functions or 22209 when not emitting debugging information. 22210 22211 'cdecl' 22212 On the Intel 386, the 'cdecl' attribute causes the compiler to 22213 assume that the calling function pops off the stack space used to 22214 pass arguments. This is useful to override the effects of the 22215 '-mrtd' switch. 22216 22217 'const' 22218 Many functions do not examine any values except their arguments, 22219 and have no effects except the return value. Basically this is 22220 just slightly more strict class than the 'pure' attribute below, 22221 since function is not allowed to read global memory. 22222 22223 Note that a function that has pointer arguments and examines the 22224 data pointed to must _not_ be declared 'const'. Likewise, a 22225 function that calls a non-'const' function usually must not be 22226 'const'. It does not make sense for a 'const' function to return 22227 'void'. 22228 22229 The attribute 'const' is not implemented in GCC versions earlier 22230 than 2.5. An alternative way to declare that a function has no 22231 side effects, which works in the current version and in some older 22232 versions, is as follows: 22233 22234 typedef int intfn (); 22235 22236 extern const intfn square; 22237 22238 This approach does not work in GNU C++ from 2.6.0 on, since the 22239 language specifies that the 'const' must be attached to the return 22240 value. 22241 22242 'constructor' 22243 'destructor' 22244 'constructor (PRIORITY)' 22245 'destructor (PRIORITY)' 22246 The 'constructor' attribute causes the function to be called 22247 automatically before execution enters 'main ()'. Similarly, the 22248 'destructor' attribute causes the function to be called 22249 automatically after 'main ()' completes or 'exit ()' is called. 22250 Functions with these attributes are useful for initializing data 22251 that is used implicitly during the execution of the program. 22252 22253 You may provide an optional integer priority to control the order 22254 in which constructor and destructor functions are run. A 22255 constructor with a smaller priority number runs before a 22256 constructor with a larger priority number; the opposite 22257 relationship holds for destructors. So, if you have a constructor 22258 that allocates a resource and a destructor that deallocates the 22259 same resource, both functions typically have the same priority. 22260 The priorities for constructor and destructor functions are the 22261 same as those specified for namespace-scope C++ objects (*note C++ 22262 Attributes::). 22263 22264 These attributes are not currently implemented for Objective-C. 22265 22266 'deprecated' 22267 'deprecated (MSG)' 22268 The 'deprecated' attribute results in a warning if the function is 22269 used anywhere in the source file. This is useful when identifying 22270 functions that are expected to be removed in a future version of a 22271 program. The warning also includes the location of the declaration 22272 of the deprecated function, to enable users to easily find further 22273 information about why the function is deprecated, or what they 22274 should do instead. Note that the warnings only occurs for uses: 22275 22276 int old_fn () __attribute__ ((deprecated)); 22277 int old_fn (); 22278 int (*fn_ptr)() = old_fn; 22279 22280 results in a warning on line 3 but not line 2. The optional MSG 22281 argument, which must be a string, is printed in the warning if 22282 present. 22283 22284 The 'deprecated' attribute can also be used for variables and types 22285 (*note Variable Attributes::, *note Type Attributes::.) 22286 22287 'disinterrupt' 22288 On Epiphany and MeP targets, this attribute causes the compiler to 22289 emit instructions to disable interrupts for the duration of the 22290 given function. 22291 22292 'dllexport' 22293 On Microsoft Windows targets and Symbian OS targets the 'dllexport' 22294 attribute causes the compiler to provide a global pointer to a 22295 pointer in a DLL, so that it can be referenced with the 'dllimport' 22296 attribute. On Microsoft Windows targets, the pointer name is 22297 formed by combining '_imp__' and the function or variable name. 22298 22299 You can use '__declspec(dllexport)' as a synonym for '__attribute__ 22300 ((dllexport))' for compatibility with other compilers. 22301 22302 On systems that support the 'visibility' attribute, this attribute 22303 also implies "default" visibility. It is an error to explicitly 22304 specify any other visibility. 22305 22306 In previous versions of GCC, the 'dllexport' attribute was ignored 22307 for inlined functions, unless the '-fkeep-inline-functions' flag 22308 had been used. The default behavior now is to emit all dllexported 22309 inline functions; however, this can cause object file-size bloat, 22310 in which case the old behavior can be restored by using 22311 '-fno-keep-inline-dllexport'. 22312 22313 The attribute is also ignored for undefined symbols. 22314 22315 When applied to C++ classes, the attribute marks defined 22316 non-inlined member functions and static data members as exports. 22317 Static consts initialized in-class are not marked unless they are 22318 also defined out-of-class. 22319 22320 For Microsoft Windows targets there are alternative methods for 22321 including the symbol in the DLL's export table such as using a 22322 '.def' file with an 'EXPORTS' section or, with GNU ld, using the 22323 '--export-all' linker flag. 22324 22325 'dllimport' 22326 On Microsoft Windows and Symbian OS targets, the 'dllimport' 22327 attribute causes the compiler to reference a function or variable 22328 via a global pointer to a pointer that is set up by the DLL 22329 exporting the symbol. The attribute implies 'extern'. On 22330 Microsoft Windows targets, the pointer name is formed by combining 22331 '_imp__' and the function or variable name. 22332 22333 You can use '__declspec(dllimport)' as a synonym for '__attribute__ 22334 ((dllimport))' for compatibility with other compilers. 22335 22336 On systems that support the 'visibility' attribute, this attribute 22337 also implies "default" visibility. It is an error to explicitly 22338 specify any other visibility. 22339 22340 Currently, the attribute is ignored for inlined functions. If the 22341 attribute is applied to a symbol _definition_, an error is 22342 reported. If a symbol previously declared 'dllimport' is later 22343 defined, the attribute is ignored in subsequent references, and a 22344 warning is emitted. The attribute is also overridden by a 22345 subsequent declaration as 'dllexport'. 22346 22347 When applied to C++ classes, the attribute marks non-inlined member 22348 functions and static data members as imports. However, the 22349 attribute is ignored for virtual methods to allow creation of 22350 vtables using thunks. 22351 22352 On the SH Symbian OS target the 'dllimport' attribute also has 22353 another affect--it can cause the vtable and run-time type 22354 information for a class to be exported. This happens when the 22355 class has a dllimported constructor or a non-inline, non-pure 22356 virtual function and, for either of those two conditions, the class 22357 also has an inline constructor or destructor and has a key function 22358 that is defined in the current translation unit. 22359 22360 For Microsoft Windows targets the use of the 'dllimport' attribute 22361 on functions is not necessary, but provides a small performance 22362 benefit by eliminating a thunk in the DLL. The use of the 22363 'dllimport' attribute on imported variables was required on older 22364 versions of the GNU linker, but can now be avoided by passing the 22365 '--enable-auto-import' switch to the GNU linker. As with 22366 functions, using the attribute for a variable eliminates a thunk in 22367 the DLL. 22368 22369 One drawback to using this attribute is that a pointer to a 22370 _variable_ marked as 'dllimport' cannot be used as a constant 22371 address. However, a pointer to a _function_ with the 'dllimport' 22372 attribute can be used as a constant initializer; in this case, the 22373 address of a stub function in the import lib is referenced. On 22374 Microsoft Windows targets, the attribute can be disabled for 22375 functions by setting the '-mnop-fun-dllimport' flag. 22376 22377 'eightbit_data' 22378 Use this attribute on the H8/300, H8/300H, and H8S to indicate that 22379 the specified variable should be placed into the eight-bit data 22380 section. The compiler generates more efficient code for certain 22381 operations on data in the eight-bit data area. Note the eight-bit 22382 data area is limited to 256 bytes of data. 22383 22384 You must use GAS and GLD from GNU binutils version 2.7 or later for 22385 this attribute to work correctly. 22386 22387 'exception_handler' 22388 Use this attribute on the Blackfin to indicate that the specified 22389 function is an exception handler. The compiler generates function 22390 entry and exit sequences suitable for use in an exception handler 22391 when this attribute is present. 22392 22393 'externally_visible' 22394 This attribute, attached to a global variable or function, 22395 nullifies the effect of the '-fwhole-program' command-line option, 22396 so the object remains visible outside the current compilation unit. 22397 22398 If '-fwhole-program' is used together with '-flto' and 'gold' is 22399 used as the linker plugin, 'externally_visible' attributes are 22400 automatically added to functions (not variable yet due to a current 22401 'gold' issue) that are accessed outside of LTO objects according to 22402 resolution file produced by 'gold'. For other linkers that cannot 22403 generate resolution file, explicit 'externally_visible' attributes 22404 are still necessary. 22405 22406 'far' 22407 On 68HC11 and 68HC12 the 'far' attribute causes the compiler to use 22408 a calling convention that takes care of switching memory banks when 22409 entering and leaving a function. This calling convention is also 22410 the default when using the '-mlong-calls' option. 22411 22412 On 68HC12 the compiler uses the 'call' and 'rtc' instructions to 22413 call and return from a function. 22414 22415 On 68HC11 the compiler generates a sequence of instructions to 22416 invoke a board-specific routine to switch the memory bank and call 22417 the real function. The board-specific routine simulates a 'call'. 22418 At the end of a function, it jumps to a board-specific routine 22419 instead of using 'rts'. The board-specific return routine 22420 simulates the 'rtc'. 22421 22422 On MeP targets this causes the compiler to use a calling convention 22423 that assumes the called function is too far away for the built-in 22424 addressing modes. 22425 22426 'fast_interrupt' 22427 Use this attribute on the M32C and RX ports to indicate that the 22428 specified function is a fast interrupt handler. This is just like 22429 the 'interrupt' attribute, except that 'freit' is used to return 22430 instead of 'reit'. 22431 22432 'fastcall' 22433 On the Intel 386, the 'fastcall' attribute causes the compiler to 22434 pass the first argument (if of integral type) in the register ECX 22435 and the second argument (if of integral type) in the register EDX. 22436 Subsequent and other typed arguments are passed on the stack. The 22437 called function pops the arguments off the stack. If the number of 22438 arguments is variable all arguments are pushed on the stack. 22439 22440 'thiscall' 22441 On the Intel 386, the 'thiscall' attribute causes the compiler to 22442 pass the first argument (if of integral type) in the register ECX. 22443 Subsequent and other typed arguments are passed on the stack. The 22444 called function pops the arguments off the stack. If the number of 22445 arguments is variable all arguments are pushed on the stack. The 22446 'thiscall' attribute is intended for C++ non-static member 22447 functions. As a GCC extension, this calling convention can be used 22448 for C functions and for static member methods. 22449 22450 'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 22451 The 'format' attribute specifies that a function takes 'printf', 22452 'scanf', 'strftime' or 'strfmon' style arguments that should be 22453 type-checked against a format string. For example, the 22454 declaration: 22455 22456 extern int 22457 my_printf (void *my_object, const char *my_format, ...) 22458 __attribute__ ((format (printf, 2, 3))); 22459 22460 causes the compiler to check the arguments in calls to 'my_printf' 22461 for consistency with the 'printf' style format string argument 22462 'my_format'. 22463 22464 The parameter ARCHETYPE determines how the format string is 22465 interpreted, and should be 'printf', 'scanf', 'strftime', 22466 'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'. (You can 22467 also use '__printf__', '__scanf__', '__strftime__' or 22468 '__strfmon__'.) On MinGW targets, 'ms_printf', 'ms_scanf', and 22469 'ms_strftime' are also present. ARCHETYPE values such as 'printf' 22470 refer to the formats accepted by the system's C runtime library, 22471 while values prefixed with 'gnu_' always refer to the formats 22472 accepted by the GNU C Library. On Microsoft Windows targets, 22473 values prefixed with 'ms_' refer to the formats accepted by the 22474 'msvcrt.dll' library. The parameter STRING-INDEX specifies which 22475 argument is the format string argument (starting from 1), while 22476 FIRST-TO-CHECK is the number of the first argument to check against 22477 the format string. For functions where the arguments are not 22478 available to be checked (such as 'vprintf'), specify the third 22479 parameter as zero. In this case the compiler only checks the 22480 format string for consistency. For 'strftime' formats, the third 22481 parameter is required to be zero. Since non-static C++ methods 22482 have an implicit 'this' argument, the arguments of such methods 22483 should be counted from two, not one, when giving values for 22484 STRING-INDEX and FIRST-TO-CHECK. 22485 22486 In the example above, the format string ('my_format') is the second 22487 argument of the function 'my_print', and the arguments to check 22488 start with the third argument, so the correct parameters for the 22489 format attribute are 2 and 3. 22490 22491 The 'format' attribute allows you to identify your own functions 22492 that take format strings as arguments, so that GCC can check the 22493 calls to these functions for errors. The compiler always (unless 22494 '-ffreestanding' or '-fno-builtin' is used) checks formats for the 22495 standard library functions 'printf', 'fprintf', 'sprintf', 'scanf', 22496 'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and 22497 'vsprintf' whenever such warnings are requested (using '-Wformat'), 22498 so there is no need to modify the header file 'stdio.h'. In C99 22499 mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf' 22500 and 'vsscanf' are also checked. Except in strictly conforming C 22501 standard modes, the X/Open function 'strfmon' is also checked as 22502 are 'printf_unlocked' and 'fprintf_unlocked'. *Note Options 22503 Controlling C Dialect: C Dialect Options. 22504 22505 For Objective-C dialects, 'NSString' (or '__NSString__') is 22506 recognized in the same context. Declarations including these 22507 format attributes are parsed for correct syntax, however the result 22508 of checking of such format strings is not yet defined, and is not 22509 carried out by this version of the compiler. 22510 22511 The target may also provide additional types of format checks. 22512 *Note Format Checks Specific to Particular Target Machines: Target 22513 Format Checks. 22514 22515 'format_arg (STRING-INDEX)' 22516 The 'format_arg' attribute specifies that a function takes a format 22517 string for a 'printf', 'scanf', 'strftime' or 'strfmon' style 22518 function and modifies it (for example, to translate it into another 22519 language), so the result can be passed to a 'printf', 'scanf', 22520 'strftime' or 'strfmon' style function (with the remaining 22521 arguments to the format function the same as they would have been 22522 for the unmodified string). For example, the declaration: 22523 22524 extern char * 22525 my_dgettext (char *my_domain, const char *my_format) 22526 __attribute__ ((format_arg (2))); 22527 22528 causes the compiler to check the arguments in calls to a 'printf', 22529 'scanf', 'strftime' or 'strfmon' type function, whose format string 22530 argument is a call to the 'my_dgettext' function, for consistency 22531 with the format string argument 'my_format'. If the 'format_arg' 22532 attribute had not been specified, all the compiler could tell in 22533 such calls to format functions would be that the format string 22534 argument is not constant; this would generate a warning when 22535 '-Wformat-nonliteral' is used, but the calls could not be checked 22536 without the attribute. 22537 22538 The parameter STRING-INDEX specifies which argument is the format 22539 string argument (starting from one). Since non-static C++ methods 22540 have an implicit 'this' argument, the arguments of such methods 22541 should be counted from two. 22542 22543 The 'format_arg' attribute allows you to identify your own 22544 functions that modify format strings, so that GCC can check the 22545 calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function 22546 whose operands are a call to one of your own function. The 22547 compiler always treats 'gettext', 'dgettext', and 'dcgettext' in 22548 this manner except when strict ISO C support is requested by 22549 '-ansi' or an appropriate '-std' option, or '-ffreestanding' or 22550 '-fno-builtin' is used. *Note Options Controlling C Dialect: C 22551 Dialect Options. 22552 22553 For Objective-C dialects, the 'format-arg' attribute may refer to 22554 an 'NSString' reference for compatibility with the 'format' 22555 attribute above. 22556 22557 The target may also allow additional types in 'format-arg' 22558 attributes. *Note Format Checks Specific to Particular Target 22559 Machines: Target Format Checks. 22560 22561 'function_vector' 22562 Use this attribute on the H8/300, H8/300H, and H8S to indicate that 22563 the specified function should be called through the function 22564 vector. Calling a function through the function vector reduces 22565 code size, however; the function vector has a limited size (maximum 22566 128 entries on the H8/300 and 64 entries on the H8/300H and H8S) 22567 and shares space with the interrupt vector. 22568 22569 On SH2A targets, this attribute declares a function to be called 22570 using the TBR relative addressing mode. The argument to this 22571 attribute is the entry number of the same function in a vector 22572 table containing all the TBR relative addressable functions. For 22573 correct operation the TBR must be setup accordingly to point to the 22574 start of the vector table before any functions with this attribute 22575 are invoked. Usually a good place to do the initialization is the 22576 startup routine. The TBR relative vector table can have at max 256 22577 function entries. The jumps to these functions are generated using 22578 a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR). 22579 You must use GAS and GLD from GNU binutils version 2.7 or later for 22580 this attribute to work correctly. 22581 22582 Please refer the example of M16C target, to see the use of this 22583 attribute while declaring a function, 22584 22585 In an application, for a function being called once, this attribute 22586 saves at least 8 bytes of code; and if other successive calls are 22587 being made to the same function, it saves 2 bytes of code per each 22588 of these calls. 22589 22590 On M16C/M32C targets, the 'function_vector' attribute declares a 22591 special page subroutine call function. Use of this attribute 22592 reduces the code size by 2 bytes for each call generated to the 22593 subroutine. The argument to the attribute is the vector number 22594 entry from the special page vector table which contains the 16 22595 low-order bits of the subroutine's entry address. Each vector 22596 table has special page number (18 to 255) that is used in 'jsrs' 22597 instructions. Jump addresses of the routines are generated by 22598 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 22599 M32C targets), to the 2-byte addresses set in the vector table. 22600 Therefore you need to ensure that all the special page vector 22601 routines should get mapped within the address range 0x0F0000 to 22602 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 22603 22604 In the following example 2 bytes are saved for each call to 22605 function 'foo'. 22606 22607 void foo (void) __attribute__((function_vector(0x18))); 22608 void foo (void) 22609 { 22610 } 22611 22612 void bar (void) 22613 { 22614 foo(); 22615 } 22616 22617 If functions are defined in one file and are called in another 22618 file, then be sure to write this declaration in both files. 22619 22620 This attribute is ignored for R8C target. 22621 22622 'ifunc ("RESOLVER")' 22623 The 'ifunc' attribute is used to mark a function as an indirect 22624 function using the STT_GNU_IFUNC symbol type extension to the ELF 22625 standard. This allows the resolution of the symbol value to be 22626 determined dynamically at load time, and an optimized version of 22627 the routine can be selected for the particular processor or other 22628 system characteristics determined then. To use this attribute, 22629 first define the implementation functions available, and a resolver 22630 function that returns a pointer to the selected implementation 22631 function. The implementation functions' declarations must match 22632 the API of the function being implemented, the resolver's 22633 declaration is be a function returning pointer to void function 22634 returning void: 22635 22636 void *my_memcpy (void *dst, const void *src, size_t len) 22637 { 22638 ... 22639 } 22640 22641 static void (*resolve_memcpy (void)) (void) 22642 { 22643 return my_memcpy; // we'll just always select this routine 22644 } 22645 22646 The exported header file declaring the function the user calls 22647 would contain: 22648 22649 extern void *memcpy (void *, const void *, size_t); 22650 22651 allowing the user to call this as a regular function, unaware of 22652 the implementation. Finally, the indirect function needs to be 22653 defined in the same translation unit as the resolver function: 22654 22655 void *memcpy (void *, const void *, size_t) 22656 __attribute__ ((ifunc ("resolve_memcpy"))); 22657 22658 Indirect functions cannot be weak, and require a recent binutils 22659 (at least version 2.20.1), and GNU C library (at least version 22660 2.11.1). 22661 22662 'interrupt' 22663 Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D, 22664 m68k, MeP, MIPS, RL78, RX and Xstormy16 ports to indicate that the 22665 specified function is an interrupt handler. The compiler generates 22666 function entry and exit sequences suitable for use in an interrupt 22667 handler when this attribute is present. With Epiphany targets it 22668 may also generate a special section with code to initialize the 22669 interrupt vector table. 22670 22671 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 22672 MicroBlaze, and SH processors can be specified via the 22673 'interrupt_handler' attribute. 22674 22675 Note, on the AVR, the hardware globally disables interrupts when an 22676 interrupt is executed. The first instruction of an interrupt 22677 handler declared with this attribute is a 'SEI' instruction to 22678 re-enable interrupts. See also the 'signal' function attribute 22679 that does not insert a 'SEI' instruction. If both 'signal' and 22680 'interrupt' are specified for the same function, 'signal' is 22681 silently ignored. 22682 22683 Note, for the ARM, you can specify the kind of interrupt to be 22684 handled by adding an optional parameter to the interrupt attribute 22685 like this: 22686 22687 void f () __attribute__ ((interrupt ("IRQ"))); 22688 22689 Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI', 22690 'ABORT' and 'UNDEF'. 22691 22692 On ARMv7-M the interrupt type is ignored, and the attribute means 22693 the function may be called with a word-aligned stack pointer. 22694 22695 On Epiphany targets one or more optional parameters can be added 22696 like this: 22697 22698 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 22699 22700 Permissible values for these parameters are: 'reset', 22701 'software_exception', 'page_miss', 'timer0', 'timer1', 'message', 22702 'dma0', 'dma1', 'wand' and 'swi'. Multiple parameters indicate 22703 that multiple entries in the interrupt vector table should be 22704 initialized for this function, i.e. for each parameter NAME, a jump 22705 to the function is emitted in the section ivt_entry_NAME. The 22706 parameter(s) may be omitted entirely, in which case no interrupt 22707 vector table entry is provided. 22708 22709 Note, on Epiphany targets, interrupts are enabled inside the 22710 function unless the 'disinterrupt' attribute is also specified. 22711 22712 On Epiphany targets, you can also use the following attribute to 22713 modify the behavior of an interrupt handler: 22714 'forwarder_section' 22715 The interrupt handler may be in external memory which cannot 22716 be reached by a branch instruction, so generate a local memory 22717 trampoline to transfer control. The single parameter 22718 identifies the section where the trampoline is placed. 22719 22720 The following examples are all valid uses of these attributes on 22721 Epiphany targets: 22722 void __attribute__ ((interrupt)) universal_handler (); 22723 void __attribute__ ((interrupt ("dma1"))) dma1_handler (); 22724 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 22725 void __attribute__ ((interrupt ("timer0"), disinterrupt)) 22726 fast_timer_handler (); 22727 void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp"))) 22728 external_dma_handler (); 22729 22730 On MIPS targets, you can use the following attributes to modify the 22731 behavior of an interrupt handler: 22732 'use_shadow_register_set' 22733 Assume that the handler uses a shadow register set, instead of 22734 the main general-purpose registers. 22735 22736 'keep_interrupts_masked' 22737 Keep interrupts masked for the whole function. Without this 22738 attribute, GCC tries to reenable interrupts for as much of the 22739 function as it can. 22740 22741 'use_debug_exception_return' 22742 Return using the 'deret' instruction. Interrupt handlers that 22743 don't have this attribute return using 'eret' instead. 22744 22745 You can use any combination of these attributes, as shown below: 22746 void __attribute__ ((interrupt)) v0 (); 22747 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 22748 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 22749 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 22750 void __attribute__ ((interrupt, use_shadow_register_set, 22751 keep_interrupts_masked)) v4 (); 22752 void __attribute__ ((interrupt, use_shadow_register_set, 22753 use_debug_exception_return)) v5 (); 22754 void __attribute__ ((interrupt, keep_interrupts_masked, 22755 use_debug_exception_return)) v6 (); 22756 void __attribute__ ((interrupt, use_shadow_register_set, 22757 keep_interrupts_masked, 22758 use_debug_exception_return)) v7 (); 22759 22760 On RL78, use 'brk_interrupt' instead of 'interrupt' for handlers 22761 intended to be used with the 'BRK' opcode (i.e. those that must end 22762 with 'RETB' instead of 'RETI'). 22763 22764 'interrupt_handler' 22765 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and 22766 SH to indicate that the specified function is an interrupt handler. 22767 The compiler generates function entry and exit sequences suitable 22768 for use in an interrupt handler when this attribute is present. 22769 22770 'interrupt_thread' 22771 Use this attribute on fido, a subarchitecture of the m68k, to 22772 indicate that the specified function is an interrupt handler that 22773 is designed to run as a thread. The compiler omits generate 22774 prologue/epilogue sequences and replaces the return instruction 22775 with a 'sleep' instruction. This attribute is available only on 22776 fido. 22777 22778 'isr' 22779 Use this attribute on ARM to write Interrupt Service Routines. 22780 This is an alias to the 'interrupt' attribute above. 22781 22782 'kspisusp' 22783 When used together with 'interrupt_handler', 'exception_handler' or 22784 'nmi_handler', code is generated to load the stack pointer from the 22785 USP register in the function prologue. 22786 22787 'l1_text' 22788 This attribute specifies a function to be placed into L1 22789 Instruction SRAM. The function is put into a specific section 22790 named '.l1.text'. With '-mfdpic', function calls with a such 22791 function as the callee or caller uses inlined PLT. 22792 22793 'l2' 22794 On the Blackfin, this attribute specifies a function to be placed 22795 into L2 SRAM. The function is put into a specific section named 22796 '.l1.text'. With '-mfdpic', callers of such functions use an 22797 inlined PLT. 22798 22799 'leaf' 22800 Calls to external functions with this attribute must return to the 22801 current compilation unit only by return or by exception handling. 22802 In particular, leaf functions are not allowed to call callback 22803 function passed to it from the current compilation unit or directly 22804 call functions exported by the unit or longjmp into the unit. Leaf 22805 function might still call functions from other compilation units 22806 and thus they are not necessarily leaf in the sense that they 22807 contain no function calls at all. 22808 22809 The attribute is intended for library functions to improve dataflow 22810 analysis. The compiler takes the hint that any data not escaping 22811 the current compilation unit can not be used or modified by the 22812 leaf function. For example, the 'sin' function is a leaf function, 22813 but 'qsort' is not. 22814 22815 Note that leaf functions might invoke signals and signal handlers 22816 might be defined in the current compilation unit and use static 22817 variables. The only compliant way to write such a signal handler 22818 is to declare such variables 'volatile'. 22819 22820 The attribute has no effect on functions defined within the current 22821 compilation unit. This is to allow easy merging of multiple 22822 compilation units into one, for example, by using the link-time 22823 optimization. For this reason the attribute is not allowed on 22824 types to annotate indirect calls. 22825 22826 'long_call/short_call' 22827 This attribute specifies how a particular function is called on ARM 22828 and Epiphany. Both attributes override the '-mlong-calls' (*note 22829 ARM Options::) command-line switch and '#pragma long_calls' 22830 settings. The 'long_call' attribute indicates that the function 22831 might be far away from the call site and require a different (more 22832 expensive) calling sequence. The 'short_call' attribute always 22833 places the offset to the function from the call site into the 'BL' 22834 instruction directly. 22835 22836 'longcall/shortcall' 22837 On the Blackfin, RS/6000 and PowerPC, the 'longcall' attribute 22838 indicates that the function might be far away from the call site 22839 and require a different (more expensive) calling sequence. The 22840 'shortcall' attribute indicates that the function is always close 22841 enough for the shorter calling sequence to be used. These 22842 attributes override both the '-mlongcall' switch and, on the 22843 RS/6000 and PowerPC, the '#pragma longcall' setting. 22844 22845 *Note RS/6000 and PowerPC Options::, for more information on 22846 whether long calls are necessary. 22847 22848 'long_call/near/far' 22849 These attributes specify how a particular function is called on 22850 MIPS. The attributes override the '-mlong-calls' (*note MIPS 22851 Options::) command-line switch. The 'long_call' and 'far' 22852 attributes are synonyms, and cause the compiler to always call the 22853 function by first loading its address into a register, and then 22854 using the contents of that register. The 'near' attribute has the 22855 opposite effect; it specifies that non-PIC calls should be made 22856 using the more efficient 'jal' instruction. 22857 22858 'malloc' 22859 The 'malloc' attribute is used to tell the compiler that a function 22860 may be treated as if any non-'NULL' pointer it returns cannot alias 22861 any other pointer valid when the function returns and that the 22862 memory has undefined content. This often improves optimization. 22863 Standard functions with this property include 'malloc' and 22864 'calloc'. 'realloc'-like functions do not have this property as 22865 the memory pointed to does not have undefined content. 22866 22867 'mips16/nomips16' 22868 22869 On MIPS targets, you can use the 'mips16' and 'nomips16' function 22870 attributes to locally select or turn off MIPS16 code generation. A 22871 function with the 'mips16' attribute is emitted as MIPS16 code, 22872 while MIPS16 code generation is disabled for functions with the 22873 'nomips16' attribute. These attributes override the '-mips16' and 22874 '-mno-mips16' options on the command line (*note MIPS Options::). 22875 22876 When compiling files containing mixed MIPS16 and non-MIPS16 code, 22877 the preprocessor symbol '__mips16' reflects the setting on the 22878 command line, not that within individual functions. Mixed MIPS16 22879 and non-MIPS16 code may interact badly with some GCC extensions 22880 such as '__builtin_apply' (*note Constructing Calls::). 22881 22882 'model (MODEL-NAME)' 22883 22884 On the M32R/D, use this attribute to set the addressability of an 22885 object, and of the code generated for a function. The identifier 22886 MODEL-NAME is one of 'small', 'medium', or 'large', representing 22887 each of the code models. 22888 22889 Small model objects live in the lower 16MB of memory (so that their 22890 addresses can be loaded with the 'ld24' instruction), and are 22891 callable with the 'bl' instruction. 22892 22893 Medium model objects may live anywhere in the 32-bit address space 22894 (the compiler generates 'seth/add3' instructions to load their 22895 addresses), and are callable with the 'bl' instruction. 22896 22897 Large model objects may live anywhere in the 32-bit address space 22898 (the compiler generates 'seth/add3' instructions to load their 22899 addresses), and may not be reachable with the 'bl' instruction (the 22900 compiler generates the much slower 'seth/add3/jl' instruction 22901 sequence). 22902 22903 On IA-64, use this attribute to set the addressability of an 22904 object. At present, the only supported identifier for MODEL-NAME 22905 is 'small', indicating addressability via "small" (22-bit) 22906 addresses (so that their addresses can be loaded with the 'addl' 22907 instruction). Caveat: such addressing is by definition not 22908 position independent and hence this attribute must not be used for 22909 objects defined by shared libraries. 22910 22911 'ms_abi/sysv_abi' 22912 22913 On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI 22914 attribute to indicate which calling convention should be used for a 22915 function. The 'ms_abi' attribute tells the compiler to use the 22916 Microsoft ABI, while the 'sysv_abi' attribute tells the compiler to 22917 use the ABI used on GNU/Linux and other systems. The default is to 22918 use the Microsoft ABI when targeting Windows. On all other 22919 systems, the default is the x86/AMD ABI. 22920 22921 Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets 22922 currently requires the '-maccumulate-outgoing-args' option. 22923 22924 'callee_pop_aggregate_return (NUMBER)' 22925 22926 On 32-bit i?86-*-* targets, you can use this attribute to control 22927 how aggregates are returned in memory. If the caller is 22928 responsible for popping the hidden pointer together with the rest 22929 of the arguments, specify NUMBER equal to zero. If callee is 22930 responsible for popping the hidden pointer, specify NUMBER equal to 22931 one. 22932 22933 The default i386 ABI assumes that the callee pops the stack for 22934 hidden pointer. However, on 32-bit i386 Microsoft Windows targets, 22935 the compiler assumes that the caller pops the stack for hidden 22936 pointer. 22937 22938 'ms_hook_prologue' 22939 22940 On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets, you 22941 can use this function attribute to make GCC generate the 22942 "hot-patching" function prologue used in Win32 API functions in 22943 Microsoft Windows XP Service Pack 2 and newer. 22944 22945 'hotpatch [(PROLOGUE-HALFWORDS)]' 22946 22947 On S/390 System z targets, you can use this function attribute to 22948 make GCC generate a "hot-patching" function prologue. The 22949 'hotpatch' has no effect on funtions that are explicitly inline. 22950 If the '-mhotpatch' or '-mno-hotpatch' command-line option is used 22951 at the same time, the 'hotpatch' attribute takes precedence. If an 22952 argument is given, the maximum allowed value is 1000000. 22953 22954 'naked' 22955 Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to 22956 indicate that the specified function does not need 22957 prologue/epilogue sequences generated by the compiler. It is up to 22958 the programmer to provide these sequences. The only statements 22959 that can be safely included in naked functions are 'asm' statements 22960 that do not have operands. All other statements, including 22961 declarations of local variables, 'if' statements, and so forth, 22962 should be avoided. Naked functions should be used to implement the 22963 body of an assembly function, while allowing the compiler to 22964 construct the requisite function declaration for the assembler. 22965 22966 'near' 22967 On 68HC11 and 68HC12 the 'near' attribute causes the compiler to 22968 use the normal calling convention based on 'jsr' and 'rts'. This 22969 attribute can be used to cancel the effect of the '-mlong-calls' 22970 option. 22971 22972 On MeP targets this attribute causes the compiler to assume the 22973 called function is close enough to use the normal calling 22974 convention, overriding the '-mtf' command-line option. 22975 22976 'nesting' 22977 Use this attribute together with 'interrupt_handler', 22978 'exception_handler' or 'nmi_handler' to indicate that the function 22979 entry code should enable nested interrupts or exceptions. 22980 22981 'nmi_handler' 22982 Use this attribute on the Blackfin to indicate that the specified 22983 function is an NMI handler. The compiler generates function entry 22984 and exit sequences suitable for use in an NMI handler when this 22985 attribute is present. 22986 22987 'no_instrument_function' 22988 If '-finstrument-functions' is given, profiling function calls are 22989 generated at entry and exit of most user-compiled functions. 22990 Functions with this attribute are not so instrumented. 22991 22992 'no_split_stack' 22993 If '-fsplit-stack' is given, functions have a small prologue which 22994 decides whether to split the stack. Functions with the 22995 'no_split_stack' attribute do not have that prologue, and thus may 22996 run with only a small amount of stack space available. 22997 22998 'noinline' 22999 This function attribute prevents a function from being considered 23000 for inlining. If the function does not have side-effects, there 23001 are optimizations other than inlining that cause function calls to 23002 be optimized away, although the function call is live. To keep 23003 such calls from being optimized away, put 23004 asm (""); 23005 23006 (*note Extended Asm::) in the called function, to serve as a 23007 special side-effect. 23008 23009 'noclone' 23010 This function attribute prevents a function from being considered 23011 for cloning--a mechanism that produces specialized copies of 23012 functions and which is (currently) performed by interprocedural 23013 constant propagation. 23014 23015 'nonnull (ARG-INDEX, ...)' 23016 The 'nonnull' attribute specifies that some function parameters 23017 should be non-null pointers. For instance, the declaration: 23018 23019 extern void * 23020 my_memcpy (void *dest, const void *src, size_t len) 23021 __attribute__((nonnull (1, 2))); 23022 23023 causes the compiler to check that, in calls to 'my_memcpy', 23024 arguments DEST and SRC are non-null. If the compiler determines 23025 that a null pointer is passed in an argument slot marked as 23026 non-null, and the '-Wnonnull' option is enabled, a warning is 23027 issued. The compiler may also choose to make optimizations based 23028 on the knowledge that certain function arguments will never be 23029 null. 23030 23031 If no argument index list is given to the 'nonnull' attribute, all 23032 pointer arguments are marked as non-null. To illustrate, the 23033 following declaration is equivalent to the previous example: 23034 23035 extern void * 23036 my_memcpy (void *dest, const void *src, size_t len) 23037 __attribute__((nonnull)); 23038 23039 'noreturn' 23040 A few standard library functions, such as 'abort' and 'exit', 23041 cannot return. GCC knows this automatically. Some programs define 23042 their own functions that never return. You can declare them 23043 'noreturn' to tell the compiler this fact. For example, 23044 23045 void fatal () __attribute__ ((noreturn)); 23046 23047 void 23048 fatal (/* ... */) 23049 { 23050 /* ... */ /* Print error message. */ /* ... */ 23051 exit (1); 23052 } 23053 23054 The 'noreturn' keyword tells the compiler to assume that 'fatal' 23055 cannot return. It can then optimize without regard to what would 23056 happen if 'fatal' ever did return. This makes slightly better 23057 code. More importantly, it helps avoid spurious warnings of 23058 uninitialized variables. 23059 23060 The 'noreturn' keyword does not affect the exceptional path when 23061 that applies: a 'noreturn'-marked function may still return to the 23062 caller by throwing an exception or calling 'longjmp'. 23063 23064 Do not assume that registers saved by the calling function are 23065 restored before calling the 'noreturn' function. 23066 23067 It does not make sense for a 'noreturn' function to have a return 23068 type other than 'void'. 23069 23070 The attribute 'noreturn' is not implemented in GCC versions earlier 23071 than 2.5. An alternative way to declare that a function does not 23072 return, which works in the current version and in some older 23073 versions, is as follows: 23074 23075 typedef void voidfn (); 23076 23077 volatile voidfn fatal; 23078 23079 This approach does not work in GNU C++. 23080 23081 'nothrow' 23082 The 'nothrow' attribute is used to inform the compiler that a 23083 function cannot throw an exception. For example, most functions in 23084 the standard C library can be guaranteed not to throw an exception 23085 with the notable exceptions of 'qsort' and 'bsearch' that take 23086 function pointer arguments. The 'nothrow' attribute is not 23087 implemented in GCC versions earlier than 3.3. 23088 23089 'nosave_low_regs' 23090 Use this attribute on SH targets to indicate that an 23091 'interrupt_handler' function should not save and restore registers 23092 R0..R7. This can be used on SH3* and SH4* targets that have a 23093 second R0..R7 register bank for non-reentrant interrupt handlers. 23094 23095 'optimize' 23096 The 'optimize' attribute is used to specify that a function is to 23097 be compiled with different optimization options than specified on 23098 the command line. Arguments can either be numbers or strings. 23099 Numbers are assumed to be an optimization level. Strings that 23100 begin with 'O' are assumed to be an optimization option, while 23101 other options are assumed to be used with a '-f' prefix. You can 23102 also use the '#pragma GCC optimize' pragma to set the optimization 23103 options that affect more than one function. *Note Function 23104 Specific Option Pragmas::, for details about the '#pragma GCC 23105 optimize' pragma. 23106 23107 This can be used for instance to have frequently-executed functions 23108 compiled with more aggressive optimization options that produce 23109 faster and larger code, while other functions can be compiled with 23110 less aggressive options. 23111 23112 'OS_main/OS_task' 23113 On AVR, functions with the 'OS_main' or 'OS_task' attribute do not 23114 save/restore any call-saved register in their prologue/epilogue. 23115 23116 The 'OS_main' attribute can be used when there _is guarantee_ that 23117 interrupts are disabled at the time when the function is entered. 23118 This saves resources when the stack pointer has to be changed to 23119 set up a frame for local variables. 23120 23121 The 'OS_task' attribute can be used when there is _no guarantee_ 23122 that interrupts are disabled at that time when the function is 23123 entered like for, e.g. task functions in a multi-threading 23124 operating system. In that case, changing the stack pointer 23125 register is guarded by save/clear/restore of the global interrupt 23126 enable flag. 23127 23128 The differences to the 'naked' function attribute are: 23129 * 'naked' functions do not have a return instruction whereas 23130 'OS_main' and 'OS_task' functions have a 'RET' or 'RETI' 23131 return instruction. 23132 * 'naked' functions do not set up a frame for local variables or 23133 a frame pointer whereas 'OS_main' and 'OS_task' do this as 23134 needed. 23135 23136 'pcs' 23137 23138 The 'pcs' attribute can be used to control the calling convention 23139 used for a function on ARM. The attribute takes an argument that 23140 specifies the calling convention to use. 23141 23142 When compiling using the AAPCS ABI (or a variant of it) then valid 23143 values for the argument are '"aapcs"' and '"aapcs-vfp"'. In order 23144 to use a variant other than '"aapcs"' then the compiler must be 23145 permitted to use the appropriate co-processor registers (i.e., the 23146 VFP registers must be available in order to use '"aapcs-vfp"'). 23147 For example, 23148 23149 /* Argument passed in r0, and result returned in r0+r1. */ 23150 double f2d (float) __attribute__((pcs("aapcs"))); 23151 23152 Variadic functions always use the '"aapcs"' calling convention and 23153 the compiler rejects attempts to specify an alternative. 23154 23155 'pure' 23156 Many functions have no effects except the return value and their 23157 return value depends only on the parameters and/or global 23158 variables. Such a function can be subject to common subexpression 23159 elimination and loop optimization just as an arithmetic operator 23160 would be. These functions should be declared with the attribute 23161 'pure'. For example, 23162 23163 int square (int) __attribute__ ((pure)); 23164 23165 says that the hypothetical function 'square' is safe to call fewer 23166 times than the program says. 23167 23168 Some of common examples of pure functions are 'strlen' or 'memcmp'. 23169 Interesting non-pure functions are functions with infinite loops or 23170 those depending on volatile memory or other system resource, that 23171 may change between two consecutive calls (such as 'feof' in a 23172 multithreading environment). 23173 23174 The attribute 'pure' is not implemented in GCC versions earlier 23175 than 2.96. 23176 23177 'hot' 23178 The 'hot' attribute on a function is used to inform the compiler 23179 that the function is a hot spot of the compiled program. The 23180 function is optimized more aggressively and on many target it is 23181 placed into special subsection of the text section so all hot 23182 functions appears close together improving locality. 23183 23184 When profile feedback is available, via '-fprofile-use', hot 23185 functions are automatically detected and this attribute is ignored. 23186 23187 The 'hot' attribute on functions is not implemented in GCC versions 23188 earlier than 4.3. 23189 23190 The 'hot' attribute on a label is used to inform the compiler that 23191 path following the label are more likely than paths that are not so 23192 annotated. This attribute is used in cases where 23193 '__builtin_expect' cannot be used, for instance with computed goto 23194 or 'asm goto'. 23195 23196 The 'hot' attribute on labels is not implemented in GCC versions 23197 earlier than 4.8. 23198 23199 'cold' 23200 The 'cold' attribute on functions is used to inform the compiler 23201 that the function is unlikely to be executed. The function is 23202 optimized for size rather than speed and on many targets it is 23203 placed into special subsection of the text section so all cold 23204 functions appears close together improving code locality of 23205 non-cold parts of program. The paths leading to call of cold 23206 functions within code are marked as unlikely by the branch 23207 prediction mechanism. It is thus useful to mark functions used to 23208 handle unlikely conditions, such as 'perror', as cold to improve 23209 optimization of hot functions that do call marked functions in rare 23210 occasions. 23211 23212 When profile feedback is available, via '-fprofile-use', cold 23213 functions are automatically detected and this attribute is ignored. 23214 23215 The 'cold' attribute on functions is not implemented in GCC 23216 versions earlier than 4.3. 23217 23218 The 'cold' attribute on labels is used to inform the compiler that 23219 the path following the label is unlikely to be executed. This 23220 attribute is used in cases where '__builtin_expect' cannot be used, 23221 for instance with computed goto or 'asm goto'. 23222 23223 The 'cold' attribute on labels is not implemented in GCC versions 23224 earlier than 4.8. 23225 23226 'no_sanitize_address' 23227 'no_address_safety_analysis' 23228 The 'no_sanitize_address' attribute on functions is used to inform 23229 the compiler that it should not instrument memory accesses in the 23230 function when compiling with the '-fsanitize=address' option. The 23231 'no_address_safety_analysis' is a deprecated alias of the 23232 'no_sanitize_address' attribute, new code should use 23233 'no_sanitize_address'. 23234 23235 'regparm (NUMBER)' 23236 On the Intel 386, the 'regparm' attribute causes the compiler to 23237 pass arguments number one to NUMBER if they are of integral type in 23238 registers EAX, EDX, and ECX instead of on the stack. Functions 23239 that take a variable number of arguments continue to be passed all 23240 of their arguments on the stack. 23241 23242 Beware that on some ELF systems this attribute is unsuitable for 23243 global functions in shared libraries with lazy binding (which is 23244 the default). Lazy binding sends the first call via resolving code 23245 in the loader, which might assume EAX, EDX and ECX can be 23246 clobbered, as per the standard calling conventions. Solaris 8 is 23247 affected by this. Systems with the GNU C Library version 2.1 or 23248 higher and FreeBSD are believed to be safe since the loaders there 23249 save EAX, EDX and ECX. (Lazy binding can be disabled with the 23250 linker or the loader if desired, to avoid the problem.) 23251 23252 'sseregparm' 23253 On the Intel 386 with SSE support, the 'sseregparm' attribute 23254 causes the compiler to pass up to 3 floating-point arguments in SSE 23255 registers instead of on the stack. Functions that take a variable 23256 number of arguments continue to pass all of their floating-point 23257 arguments on the stack. 23258 23259 'force_align_arg_pointer' 23260 On the Intel x86, the 'force_align_arg_pointer' attribute may be 23261 applied to individual function definitions, generating an alternate 23262 prologue and epilogue that realigns the run-time stack if 23263 necessary. This supports mixing legacy codes that run with a 23264 4-byte aligned stack with modern codes that keep a 16-byte stack 23265 for SSE compatibility. 23266 23267 'renesas' 23268 On SH targets this attribute specifies that the function or struct 23269 follows the Renesas ABI. 23270 23271 'resbank' 23272 On the SH2A target, this attribute enables the high-speed register 23273 saving and restoration using a register bank for 23274 'interrupt_handler' routines. Saving to the bank is performed 23275 automatically after the CPU accepts an interrupt that uses a 23276 register bank. 23277 23278 The nineteen 32-bit registers comprising general register R0 to 23279 R14, control register GBR, and system registers MACH, MACL, and PR 23280 and the vector table address offset are saved into a register bank. 23281 Register banks are stacked in first-in last-out (FILO) sequence. 23282 Restoration from the bank is executed by issuing a RESBANK 23283 instruction. 23284 23285 'returns_twice' 23286 The 'returns_twice' attribute tells the compiler that a function 23287 may return more than one time. The compiler ensures that all 23288 registers are dead before calling such a function and emits a 23289 warning about the variables that may be clobbered after the second 23290 return from the function. Examples of such functions are 'setjmp' 23291 and 'vfork'. The 'longjmp'-like counterpart of such function, if 23292 any, might need to be marked with the 'noreturn' attribute. 23293 23294 'saveall' 23295 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 23296 indicate that all registers except the stack pointer should be 23297 saved in the prologue regardless of whether they are used or not. 23298 23299 'save_volatiles' 23300 Use this attribute on the MicroBlaze to indicate that the function 23301 is an interrupt handler. All volatile registers (in addition to 23302 non-volatile registers) are saved in the function prologue. If the 23303 function is a leaf function, only volatiles used by the function 23304 are saved. A normal function return is generated instead of a 23305 return from interrupt. 23306 23307 'section ("SECTION-NAME")' 23308 Normally, the compiler places the code it generates in the 'text' 23309 section. Sometimes, however, you need additional sections, or you 23310 need certain particular functions to appear in special sections. 23311 The 'section' attribute specifies that a function lives in a 23312 particular section. For example, the declaration: 23313 23314 extern void foobar (void) __attribute__ ((section ("bar"))); 23315 23316 puts the function 'foobar' in the 'bar' section. 23317 23318 Some file formats do not support arbitrary sections so the 23319 'section' attribute is not available on all platforms. If you need 23320 to map the entire contents of a module to a particular section, 23321 consider using the facilities of the linker instead. 23322 23323 'sentinel' 23324 This function attribute ensures that a parameter in a function call 23325 is an explicit 'NULL'. The attribute is only valid on variadic 23326 functions. By default, the sentinel is located at position zero, 23327 the last parameter of the function call. If an optional integer 23328 position argument P is supplied to the attribute, the sentinel must 23329 be located at position P counting backwards from the end of the 23330 argument list. 23331 23332 __attribute__ ((sentinel)) 23333 is equivalent to 23334 __attribute__ ((sentinel(0))) 23335 23336 The attribute is automatically set with a position of 0 for the 23337 built-in functions 'execl' and 'execlp'. The built-in function 23338 'execle' has the attribute set with a position of 1. 23339 23340 A valid 'NULL' in this context is defined as zero with any pointer 23341 type. If your system defines the 'NULL' macro with an integer type 23342 then you need to add an explicit cast. GCC replaces 'stddef.h' 23343 with a copy that redefines NULL appropriately. 23344 23345 The warnings for missing or incorrect sentinels are enabled with 23346 '-Wformat'. 23347 23348 'short_call' 23349 See 'long_call/short_call'. 23350 23351 'shortcall' 23352 See 'longcall/shortcall'. 23353 23354 'signal' 23355 Use this attribute on the AVR to indicate that the specified 23356 function is an interrupt handler. The compiler generates function 23357 entry and exit sequences suitable for use in an interrupt handler 23358 when this attribute is present. 23359 23360 See also the 'interrupt' function attribute. 23361 23362 The AVR hardware globally disables interrupts when an interrupt is 23363 executed. Interrupt handler functions defined with the 'signal' 23364 attribute do not re-enable interrupts. It is save to enable 23365 interrupts in a 'signal' handler. This "save" only applies to the 23366 code generated by the compiler and not to the IRQ layout of the 23367 application which is responsibility of the application. 23368 23369 If both 'signal' and 'interrupt' are specified for the same 23370 function, 'signal' is silently ignored. 23371 23372 'sp_switch' 23373 Use this attribute on the SH to indicate an 'interrupt_handler' 23374 function should switch to an alternate stack. It expects a string 23375 argument that names a global variable holding the address of the 23376 alternate stack. 23377 23378 void *alt_stack; 23379 void f () __attribute__ ((interrupt_handler, 23380 sp_switch ("alt_stack"))); 23381 23382 'stdcall' 23383 On the Intel 386, the 'stdcall' attribute causes the compiler to 23384 assume that the called function pops off the stack space used to 23385 pass arguments, unless it takes a variable number of arguments. 23386 23387 'syscall_linkage' 23388 This attribute is used to modify the IA-64 calling convention by 23389 marking all input registers as live at all function exits. This 23390 makes it possible to restart a system call after an interrupt 23391 without having to save/restore the input registers. This also 23392 prevents kernel data from leaking into application code. 23393 23394 'target' 23395 The 'target' attribute is used to specify that a function is to be 23396 compiled with different target options than specified on the 23397 command line. This can be used for instance to have functions 23398 compiled with a different ISA (instruction set architecture) than 23399 the default. You can also use the '#pragma GCC target' pragma to 23400 set more than one function to be compiled with specific target 23401 options. *Note Function Specific Option Pragmas::, for details 23402 about the '#pragma GCC target' pragma. 23403 23404 For instance on a 386, you could compile one function with 23405 'target("sse4.1,arch=core2")' and another with 23406 'target("sse4a,arch=amdfam10")'. This is equivalent to compiling 23407 the first function with '-msse4.1' and '-march=core2' options, and 23408 the second function with '-msse4a' and '-march=amdfam10' options. 23409 It is up to the user to make sure that a function is only invoked 23410 on a machine that supports the particular ISA it is compiled for 23411 (for example by using 'cpuid' on 386 to determine what feature bits 23412 and architecture family are used). 23413 23414 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 23415 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 23416 23417 On the 386, the following options are allowed: 23418 23419 'abm' 23420 'no-abm' 23421 Enable/disable the generation of the advanced bit 23422 instructions. 23423 23424 'aes' 23425 'no-aes' 23426 Enable/disable the generation of the AES instructions. 23427 23428 'default' 23429 *Note Function Multiversioning::, where it is used to specify 23430 the default function version. 23431 23432 'mmx' 23433 'no-mmx' 23434 Enable/disable the generation of the MMX instructions. 23435 23436 'pclmul' 23437 'no-pclmul' 23438 Enable/disable the generation of the PCLMUL instructions. 23439 23440 'popcnt' 23441 'no-popcnt' 23442 Enable/disable the generation of the POPCNT instruction. 23443 23444 'sse' 23445 'no-sse' 23446 Enable/disable the generation of the SSE instructions. 23447 23448 'sse2' 23449 'no-sse2' 23450 Enable/disable the generation of the SSE2 instructions. 23451 23452 'sse3' 23453 'no-sse3' 23454 Enable/disable the generation of the SSE3 instructions. 23455 23456 'sse4' 23457 'no-sse4' 23458 Enable/disable the generation of the SSE4 instructions (both 23459 SSE4.1 and SSE4.2). 23460 23461 'sse4.1' 23462 'no-sse4.1' 23463 Enable/disable the generation of the sse4.1 instructions. 23464 23465 'sse4.2' 23466 'no-sse4.2' 23467 Enable/disable the generation of the sse4.2 instructions. 23468 23469 'sse4a' 23470 'no-sse4a' 23471 Enable/disable the generation of the SSE4A instructions. 23472 23473 'fma4' 23474 'no-fma4' 23475 Enable/disable the generation of the FMA4 instructions. 23476 23477 'xop' 23478 'no-xop' 23479 Enable/disable the generation of the XOP instructions. 23480 23481 'lwp' 23482 'no-lwp' 23483 Enable/disable the generation of the LWP instructions. 23484 23485 'ssse3' 23486 'no-ssse3' 23487 Enable/disable the generation of the SSSE3 instructions. 23488 23489 'cld' 23490 'no-cld' 23491 Enable/disable the generation of the CLD before string moves. 23492 23493 'fancy-math-387' 23494 'no-fancy-math-387' 23495 Enable/disable the generation of the 'sin', 'cos', and 'sqrt' 23496 instructions on the 387 floating-point unit. 23497 23498 'fused-madd' 23499 'no-fused-madd' 23500 Enable/disable the generation of the fused multiply/add 23501 instructions. 23502 23503 'ieee-fp' 23504 'no-ieee-fp' 23505 Enable/disable the generation of floating point that depends 23506 on IEEE arithmetic. 23507 23508 'inline-all-stringops' 23509 'no-inline-all-stringops' 23510 Enable/disable inlining of string operations. 23511 23512 'inline-stringops-dynamically' 23513 'no-inline-stringops-dynamically' 23514 Enable/disable the generation of the inline code to do small 23515 string operations and calling the library routines for large 23516 operations. 23517 23518 'align-stringops' 23519 'no-align-stringops' 23520 Do/do not align destination of inlined string operations. 23521 23522 'recip' 23523 'no-recip' 23524 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 23525 RSQRTPS instructions followed an additional Newton-Raphson 23526 step instead of doing a floating-point division. 23527 23528 'arch=ARCH' 23529 Specify the architecture to generate code for in compiling the 23530 function. 23531 23532 'tune=TUNE' 23533 Specify the architecture to tune for in compiling the 23534 function. 23535 23536 'fpmath=FPMATH' 23537 Specify which floating-point unit to use. The 23538 'target("fpmath=sse,387")' option must be specified as 23539 'target("fpmath=sse+387")' because the comma would separate 23540 different options. 23541 23542 On the PowerPC, the following options are allowed: 23543 23544 'altivec' 23545 'no-altivec' 23546 Generate code that uses (does not use) AltiVec instructions. 23547 In 32-bit code, you cannot enable AltiVec instructions unless 23548 '-mabi=altivec' is used on the command line. 23549 23550 'cmpb' 23551 'no-cmpb' 23552 Generate code that uses (does not use) the compare bytes 23553 instruction implemented on the POWER6 processor and other 23554 processors that support the PowerPC V2.05 architecture. 23555 23556 'dlmzb' 23557 'no-dlmzb' 23558 Generate code that uses (does not use) the string-search 23559 'dlmzb' instruction on the IBM 405, 440, 464 and 476 23560 processors. This instruction is generated by default when 23561 targeting those processors. 23562 23563 'fprnd' 23564 'no-fprnd' 23565 Generate code that uses (does not use) the FP round to integer 23566 instructions implemented on the POWER5+ processor and other 23567 processors that support the PowerPC V2.03 architecture. 23568 23569 'hard-dfp' 23570 'no-hard-dfp' 23571 Generate code that uses (does not use) the decimal 23572 floating-point instructions implemented on some POWER 23573 processors. 23574 23575 'isel' 23576 'no-isel' 23577 Generate code that uses (does not use) ISEL instruction. 23578 23579 'mfcrf' 23580 'no-mfcrf' 23581 Generate code that uses (does not use) the move from condition 23582 register field instruction implemented on the POWER4 processor 23583 and other processors that support the PowerPC V2.01 23584 architecture. 23585 23586 'mfpgpr' 23587 'no-mfpgpr' 23588 Generate code that uses (does not use) the FP move to/from 23589 general purpose register instructions implemented on the 23590 POWER6X processor and other processors that support the 23591 extended PowerPC V2.05 architecture. 23592 23593 'mulhw' 23594 'no-mulhw' 23595 Generate code that uses (does not use) the half-word multiply 23596 and multiply-accumulate instructions on the IBM 405, 440, 464 23597 and 476 processors. These instructions are generated by 23598 default when targeting those processors. 23599 23600 'multiple' 23601 'no-multiple' 23602 Generate code that uses (does not use) the load multiple word 23603 instructions and the store multiple word instructions. 23604 23605 'update' 23606 'no-update' 23607 Generate code that uses (does not use) the load or store 23608 instructions that update the base register to the address of 23609 the calculated memory location. 23610 23611 'popcntb' 23612 'no-popcntb' 23613 Generate code that uses (does not use) the popcount and 23614 double-precision FP reciprocal estimate instruction 23615 implemented on the POWER5 processor and other processors that 23616 support the PowerPC V2.02 architecture. 23617 23618 'popcntd' 23619 'no-popcntd' 23620 Generate code that uses (does not use) the popcount 23621 instruction implemented on the POWER7 processor and other 23622 processors that support the PowerPC V2.06 architecture. 23623 23624 'powerpc-gfxopt' 23625 'no-powerpc-gfxopt' 23626 Generate code that uses (does not use) the optional PowerPC 23627 architecture instructions in the Graphics group, including 23628 floating-point select. 23629 23630 'powerpc-gpopt' 23631 'no-powerpc-gpopt' 23632 Generate code that uses (does not use) the optional PowerPC 23633 architecture instructions in the General Purpose group, 23634 including floating-point square root. 23635 23636 'recip-precision' 23637 'no-recip-precision' 23638 Assume (do not assume) that the reciprocal estimate 23639 instructions provide higher-precision estimates than is 23640 mandated by the powerpc ABI. 23641 23642 'string' 23643 'no-string' 23644 Generate code that uses (does not use) the load string 23645 instructions and the store string word instructions to save 23646 multiple registers and do small block moves. 23647 23648 'vsx' 23649 'no-vsx' 23650 Generate code that uses (does not use) vector/scalar (VSX) 23651 instructions, and also enable the use of built-in functions 23652 that allow more direct access to the VSX instruction set. In 23653 32-bit code, you cannot enable VSX or AltiVec instructions 23654 unless '-mabi=altivec' is used on the command line. 23655 23656 'friz' 23657 'no-friz' 23658 Generate (do not generate) the 'friz' instruction when the 23659 '-funsafe-math-optimizations' option is used to optimize 23660 rounding a floating-point value to 64-bit integer and back to 23661 floating point. The 'friz' instruction does not return the 23662 same value if the floating-point number is too large to fit in 23663 an integer. 23664 23665 'avoid-indexed-addresses' 23666 'no-avoid-indexed-addresses' 23667 Generate code that tries to avoid (not avoid) the use of 23668 indexed load or store instructions. 23669 23670 'paired' 23671 'no-paired' 23672 Generate code that uses (does not use) the generation of 23673 PAIRED simd instructions. 23674 23675 'longcall' 23676 'no-longcall' 23677 Generate code that assumes (does not assume) that all calls 23678 are far away so that a longer more expensive calling sequence 23679 is required. 23680 23681 'cpu=CPU' 23682 Specify the architecture to generate code for when compiling 23683 the function. If you select the 'target("cpu=power7")' 23684 attribute when generating 32-bit code, VSX and AltiVec 23685 instructions are not generated unless you use the 23686 '-mabi=altivec' option on the command line. 23687 23688 'tune=TUNE' 23689 Specify the architecture to tune for when compiling the 23690 function. If you do not specify the 'target("tune=TUNE")' 23691 attribute and you do specify the 'target("cpu=CPU")' 23692 attribute, compilation tunes for the CPU architecture, and not 23693 the default tuning specified on the command line. 23694 23695 On the 386/x86_64 and PowerPC back ends, you can use either 23696 multiple strings to specify multiple options, or you can separate 23697 the option with a comma (','). 23698 23699 On the 386/x86_64 and PowerPC back ends, the inliner does not 23700 inline a function that has different target options than the 23701 caller, unless the callee has a subset of the target options of the 23702 caller. For example a function declared with 'target("sse3")' can 23703 inline a function with 'target("sse2")', since '-msse3' implies 23704 '-msse2'. 23705 23706 The 'target' attribute is not implemented in GCC versions earlier 23707 than 4.4 for the i386/x86_64 and 4.6 for the PowerPC back ends. It 23708 is not currently implemented for other back ends. 23709 23710 'tiny_data' 23711 Use this attribute on the H8/300H and H8S to indicate that the 23712 specified variable should be placed into the tiny data section. 23713 The compiler generates more efficient code for loads and stores on 23714 data in the tiny data section. Note the tiny data area is limited 23715 to slightly under 32KB of data. 23716 23717 'trap_exit' 23718 Use this attribute on the SH for an 'interrupt_handler' to return 23719 using 'trapa' instead of 'rte'. This attribute expects an integer 23720 argument specifying the trap number to be used. 23721 23722 'trapa_handler' 23723 On SH targets this function attribute is similar to 23724 'interrupt_handler' but it does not save and restore all registers. 23725 23726 'unused' 23727 This attribute, attached to a function, means that the function is 23728 meant to be possibly unused. GCC does not produce a warning for 23729 this function. 23730 23731 'used' 23732 This attribute, attached to a function, means that code must be 23733 emitted for the function even if it appears that the function is 23734 not referenced. This is useful, for example, when the function is 23735 referenced only in inline assembly. 23736 23737 When applied to a member function of a C++ class template, the 23738 attribute also means that the function is instantiated if the class 23739 itself is instantiated. 23740 23741 'version_id' 23742 This IA-64 HP-UX attribute, attached to a global variable or 23743 function, renames a symbol to contain a version string, thus 23744 allowing for function level versioning. HP-UX system header files 23745 may use version level functioning for some system calls. 23746 23747 extern int foo () __attribute__((version_id ("20040821"))); 23748 23749 Calls to FOO are mapped to calls to FOO{20040821}. 23750 23751 'visibility ("VISIBILITY_TYPE")' 23752 This attribute affects the linkage of the declaration to which it 23753 is attached. There are four supported VISIBILITY_TYPE values: 23754 default, hidden, protected or internal visibility. 23755 23756 void __attribute__ ((visibility ("protected"))) 23757 f () { /* Do something. */; } 23758 int i __attribute__ ((visibility ("hidden"))); 23759 23760 The possible values of VISIBILITY_TYPE correspond to the visibility 23761 settings in the ELF gABI. 23762 23763 "default" 23764 Default visibility is the normal case for the object file 23765 format. This value is available for the visibility attribute 23766 to override other options that may change the assumed 23767 visibility of entities. 23768 23769 On ELF, default visibility means that the declaration is 23770 visible to other modules and, in shared libraries, means that 23771 the declared entity may be overridden. 23772 23773 On Darwin, default visibility means that the declaration is 23774 visible to other modules. 23775 23776 Default visibility corresponds to "external linkage" in the 23777 language. 23778 23779 "hidden" 23780 Hidden visibility indicates that the entity declared has a new 23781 form of linkage, which we call "hidden linkage". Two 23782 declarations of an object with hidden linkage refer to the 23783 same object if they are in the same shared object. 23784 23785 "internal" 23786 Internal visibility is like hidden visibility, but with 23787 additional processor specific semantics. Unless otherwise 23788 specified by the psABI, GCC defines internal visibility to 23789 mean that a function is _never_ called from another module. 23790 Compare this with hidden functions which, while they cannot be 23791 referenced directly by other modules, can be referenced 23792 indirectly via function pointers. By indicating that a 23793 function cannot be called from outside the module, GCC may for 23794 instance omit the load of a PIC register since it is known 23795 that the calling function loaded the correct value. 23796 23797 "protected" 23798 Protected visibility is like default visibility except that it 23799 indicates that references within the defining module bind to 23800 the definition in that module. That is, the declared entity 23801 cannot be overridden by another module. 23802 23803 All visibilities are supported on many, but not all, ELF targets 23804 (supported when the assembler supports the '.visibility' 23805 pseudo-op). Default visibility is supported everywhere. Hidden 23806 visibility is supported on Darwin targets. 23807 23808 The visibility attribute should be applied only to declarations 23809 that would otherwise have external linkage. The attribute should 23810 be applied consistently, so that the same entity should not be 23811 declared with different settings of the attribute. 23812 23813 In C++, the visibility attribute applies to types as well as 23814 functions and objects, because in C++ types have linkage. A class 23815 must not have greater visibility than its non-static data member 23816 types and bases, and class members default to the visibility of 23817 their class. Also, a declaration without explicit visibility is 23818 limited to the visibility of its type. 23819 23820 In C++, you can mark member functions and static member variables 23821 of a class with the visibility attribute. This is useful if you 23822 know a particular method or static member variable should only be 23823 used from one shared object; then you can mark it hidden while the 23824 rest of the class has default visibility. Care must be taken to 23825 avoid breaking the One Definition Rule; for example, it is usually 23826 not useful to mark an inline method as hidden without marking the 23827 whole class as hidden. 23828 23829 A C++ namespace declaration can also have the visibility attribute. 23830 This attribute applies only to the particular namespace body, not 23831 to other definitions of the same namespace; it is equivalent to 23832 using '#pragma GCC visibility' before and after the namespace 23833 definition (*note Visibility Pragmas::). 23834 23835 In C++, if a template argument has limited visibility, this 23836 restriction is implicitly propagated to the template instantiation. 23837 Otherwise, template instantiations and specializations default to 23838 the visibility of their template. 23839 23840 If both the template and enclosing class have explicit visibility, 23841 the visibility from the template is used. 23842 23843 'vliw' 23844 On MeP, the 'vliw' attribute tells the compiler to emit 23845 instructions in VLIW mode instead of core mode. Note that this 23846 attribute is not allowed unless a VLIW coprocessor has been 23847 configured and enabled through command-line options. 23848 23849 'warn_unused_result' 23850 The 'warn_unused_result' attribute causes a warning to be emitted 23851 if a caller of the function with this attribute does not use its 23852 return value. This is useful for functions where not checking the 23853 result is either a security problem or always a bug, such as 23854 'realloc'. 23855 23856 int fn () __attribute__ ((warn_unused_result)); 23857 int foo () 23858 { 23859 if (fn () < 0) return -1; 23860 fn (); 23861 return 0; 23862 } 23863 23864 results in warning on line 5. 23865 23866 'weak' 23867 The 'weak' attribute causes the declaration to be emitted as a weak 23868 symbol rather than a global. This is primarily useful in defining 23869 library functions that can be overridden in user code, though it 23870 can also be used with non-function declarations. Weak symbols are 23871 supported for ELF targets, and also for a.out targets when using 23872 the GNU assembler and linker. 23873 23874 'weakref' 23875 'weakref ("TARGET")' 23876 The 'weakref' attribute marks a declaration as a weak reference. 23877 Without arguments, it should be accompanied by an 'alias' attribute 23878 naming the target symbol. Optionally, the TARGET may be given as 23879 an argument to 'weakref' itself. In either case, 'weakref' 23880 implicitly marks the declaration as 'weak'. Without a TARGET, 23881 given as an argument to 'weakref' or to 'alias', 'weakref' is 23882 equivalent to 'weak'. 23883 23884 static int x() __attribute__ ((weakref ("y"))); 23885 /* is equivalent to... */ 23886 static int x() __attribute__ ((weak, weakref, alias ("y"))); 23887 /* and to... */ 23888 static int x() __attribute__ ((weakref)); 23889 static int x() __attribute__ ((alias ("y"))); 23890 23891 A weak reference is an alias that does not by itself require a 23892 definition to be given for the target symbol. If the target symbol 23893 is only referenced through weak references, then it becomes a 23894 'weak' undefined symbol. If it is directly referenced, however, 23895 then such strong references prevail, and a definition is required 23896 for the symbol, not necessarily in the same translation unit. 23897 23898 The effect is equivalent to moving all references to the alias to a 23899 separate translation unit, renaming the alias to the aliased 23900 symbol, declaring it as weak, compiling the two separate 23901 translation units and performing a reloadable link on them. 23902 23903 At present, a declaration to which 'weakref' is attached can only 23904 be 'static'. 23905 23906 You can specify multiple attributes in a declaration by separating them 23907 by commas within the double parentheses or by immediately following an 23908 attribute declaration with another attribute declaration. 23909 23910 Some people object to the '__attribute__' feature, suggesting that ISO 23911 C's '#pragma' should be used instead. At the time '__attribute__' was 23912 designed, there were two reasons for not doing this. 23913 23914 1. It is impossible to generate '#pragma' commands from a macro. 23915 23916 2. There is no telling what the same '#pragma' might mean in another 23917 compiler. 23918 23919 These two reasons applied to almost any application that might have 23920 been proposed for '#pragma'. It was basically a mistake to use 23921 '#pragma' for _anything_. 23922 23923 The ISO C99 standard includes '_Pragma', which now allows pragmas to be 23924 generated from macros. In addition, a '#pragma GCC' namespace is now in 23925 use for GCC-specific pragmas. However, it has been found convenient to 23926 use '__attribute__' to achieve a natural attachment of attributes to 23927 their corresponding declarations, whereas '#pragma GCC' is of use for 23928 constructs that do not naturally form part of the grammar. *Note 23929 Pragmas Accepted by GCC: Pragmas. 23930 23931 23932 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 23933 23934 6.31 Attribute Syntax 23935 ===================== 23936 23937 This section describes the syntax with which '__attribute__' may be 23938 used, and the constructs to which attribute specifiers bind, for the C 23939 language. Some details may vary for C++ and Objective-C. Because of 23940 infelicities in the grammar for attributes, some forms described here 23941 may not be successfully parsed in all cases. 23942 23943 There are some problems with the semantics of attributes in C++. For 23944 example, there are no manglings for attributes, although they may affect 23945 code generation, so problems may arise when attributed types are used in 23946 conjunction with templates or overloading. Similarly, 'typeid' does not 23947 distinguish between types with different attributes. Support for 23948 attributes in C++ may be restricted in future to attributes on 23949 declarations only, but not on nested declarators. 23950 23951 *Note Function Attributes::, for details of the semantics of attributes 23952 applying to functions. *Note Variable Attributes::, for details of the 23953 semantics of attributes applying to variables. *Note Type Attributes::, 23954 for details of the semantics of attributes applying to structure, union 23955 and enumerated types. 23956 23957 An "attribute specifier" is of the form '__attribute__ 23958 ((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 23959 comma-separated sequence of "attributes", where each attribute is one of 23960 the following: 23961 23962 * Empty. Empty attributes are ignored. 23963 23964 * A word (which may be an identifier such as 'unused', or a reserved 23965 word such as 'const'). 23966 23967 * A word, followed by, in parentheses, parameters for the attribute. 23968 These parameters take one of the following forms: 23969 23970 * An identifier. For example, 'mode' attributes use this form. 23971 23972 * An identifier followed by a comma and a non-empty 23973 comma-separated list of expressions. For example, 'format' 23974 attributes use this form. 23975 23976 * A possibly empty comma-separated list of expressions. For 23977 example, 'format_arg' attributes use this form with the list 23978 being a single integer constant expression, and 'alias' 23979 attributes use this form with the list being a single string 23980 constant. 23981 23982 An "attribute specifier list" is a sequence of one or more attribute 23983 specifiers, not separated by any other tokens. 23984 23985 In GNU C, an attribute specifier list may appear after the colon 23986 following a label, other than a 'case' or 'default' label. The only 23987 attribute it makes sense to use after a label is 'unused'. This feature 23988 is intended for program-generated code that may contain unused labels, 23989 but which is compiled with '-Wall'. It is not normally appropriate to 23990 use in it human-written code, though it could be useful in cases where 23991 the code that jumps to the label is contained within an '#ifdef' 23992 conditional. GNU C++ only permits attributes on labels if the attribute 23993 specifier is immediately followed by a semicolon (i.e., the label 23994 applies to an empty statement). If the semicolon is missing, C++ label 23995 attributes are ambiguous, as it is permissible for a declaration, which 23996 could begin with an attribute list, to be labelled in C++. Declarations 23997 cannot be labelled in C90 or C99, so the ambiguity does not arise there. 23998 23999 An attribute specifier list may appear as part of a 'struct', 'union' 24000 or 'enum' specifier. It may go either immediately after the 'struct', 24001 'union' or 'enum' keyword, or after the closing brace. The former 24002 syntax is preferred. Where attribute specifiers follow the closing 24003 brace, they are considered to relate to the structure, union or 24004 enumerated type defined, not to any enclosing declaration the type 24005 specifier appears in, and the type defined is not complete until after 24006 the attribute specifiers. 24007 24008 Otherwise, an attribute specifier appears as part of a declaration, 24009 counting declarations of unnamed parameters and type names, and relates 24010 to that declaration (which may be nested in another declaration, for 24011 example in the case of a parameter declaration), or to a particular 24012 declarator within a declaration. Where an attribute specifier is 24013 applied to a parameter declared as a function or an array, it should 24014 apply to the function or array rather than the pointer to which the 24015 parameter is implicitly converted, but this is not yet correctly 24016 implemented. 24017 24018 Any list of specifiers and qualifiers at the start of a declaration may 24019 contain attribute specifiers, whether or not such a list may in that 24020 context contain storage class specifiers. (Some attributes, however, 24021 are essentially in the nature of storage class specifiers, and only make 24022 sense where storage class specifiers may be used; for example, 24023 'section'.) There is one necessary limitation to this syntax: the first 24024 old-style parameter declaration in a function definition cannot begin 24025 with an attribute specifier, because such an attribute applies to the 24026 function instead by syntax described below (which, however, is not yet 24027 implemented in this case). In some other cases, attribute specifiers 24028 are permitted by this grammar but not yet supported by the compiler. 24029 All attribute specifiers in this place relate to the declaration as a 24030 whole. In the obsolescent usage where a type of 'int' is implied by the 24031 absence of type specifiers, such a list of specifiers and qualifiers may 24032 be an attribute specifier list with no other specifiers or qualifiers. 24033 24034 At present, the first parameter in a function prototype must have some 24035 type specifier that is not an attribute specifier; this resolves an 24036 ambiguity in the interpretation of 'void f(int (__attribute__((foo)) 24037 x))', but is subject to change. At present, if the parentheses of a 24038 function declarator contain only attributes then those attributes are 24039 ignored, rather than yielding an error or warning or implying a single 24040 parameter of type int, but this is subject to change. 24041 24042 An attribute specifier list may appear immediately before a declarator 24043 (other than the first) in a comma-separated list of declarators in a 24044 declaration of more than one identifier using a single list of 24045 specifiers and qualifiers. Such attribute specifiers apply only to the 24046 identifier before whose declarator they appear. For example, in 24047 24048 __attribute__((noreturn)) void d0 (void), 24049 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 24050 d2 (void) 24051 24052 the 'noreturn' attribute applies to all the functions declared; the 24053 'format' attribute only applies to 'd1'. 24054 24055 An attribute specifier list may appear immediately before the comma, 24056 '=' or semicolon terminating the declaration of an identifier other than 24057 a function definition. Such attribute specifiers apply to the declared 24058 object or function. Where an assembler name for an object or function 24059 is specified (*note Asm Labels::), the attribute must follow the 'asm' 24060 specification. 24061 24062 An attribute specifier list may, in future, be permitted to appear 24063 after the declarator in a function definition (before any old-style 24064 parameter declarations or the function body). 24065 24066 Attribute specifiers may be mixed with type qualifiers appearing inside 24067 the '[]' of a parameter array declarator, in the C99 construct by which 24068 such qualifiers are applied to the pointer to which the array is 24069 implicitly converted. Such attribute specifiers apply to the pointer, 24070 not to the array, but at present this is not implemented and they are 24071 ignored. 24072 24073 An attribute specifier list may appear at the start of a nested 24074 declarator. At present, there are some limitations in this usage: the 24075 attributes correctly apply to the declarator, but for most individual 24076 attributes the semantics this implies are not implemented. When 24077 attribute specifiers follow the '*' of a pointer declarator, they may be 24078 mixed with any type qualifiers present. The following describes the 24079 formal semantics of this syntax. It makes the most sense if you are 24080 familiar with the formal specification of declarators in the ISO C 24081 standard. 24082 24083 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1', 24084 where 'T' contains declaration specifiers that specify a type TYPE (such 24085 as 'int') and 'D1' is a declarator that contains an identifier IDENT. 24086 The type specified for IDENT for derived declarators whose type does not 24087 include an attribute specifier is as in the ISO C standard. 24088 24089 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the 24090 declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE" 24091 for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 24092 ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 24093 24094 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D', 24095 and the declaration 'T D' specifies the type 24096 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the 24097 type "DERIVED-DECLARATOR-TYPE-LIST 24098 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. 24099 24100 For example, 24101 24102 void (__attribute__((noreturn)) ****f) (void); 24103 24104 specifies the type "pointer to pointer to pointer to pointer to 24105 non-returning function returning 'void'". As another example, 24106 24107 char *__attribute__((aligned(8))) *f; 24108 24109 specifies the type "pointer to 8-byte-aligned pointer to 'char'". Note 24110 again that this does not work with most attributes; for example, the 24111 usage of 'aligned' and 'noreturn' attributes given above is not yet 24112 supported. 24113 24114 For compatibility with existing code written for compiler versions that 24115 did not implement attributes on nested declarators, some laxity is 24116 allowed in the placing of attributes. If an attribute that only applies 24117 to types is applied to a declaration, it is treated as applying to the 24118 type of that declaration. If an attribute that only applies to 24119 declarations is applied to the type of a declaration, it is treated as 24120 applying to that declaration; and, for compatibility with code placing 24121 the attributes immediately before the identifier declared, such an 24122 attribute applied to a function return type is treated as applying to 24123 the function type, and such an attribute applied to an array element 24124 type is treated as applying to the array type. If an attribute that 24125 only applies to function types is applied to a pointer-to-function type, 24126 it is treated as applying to the pointer target type; if such an 24127 attribute is applied to a function return type that is not a 24128 pointer-to-function type, it is treated as applying to the function 24129 type. 24130 24131 24132 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 24133 24134 6.32 Prototypes and Old-Style Function Definitions 24135 ================================================== 24136 24137 GNU C extends ISO C to allow a function prototype to override a later 24138 old-style non-prototype definition. Consider the following example: 24139 24140 /* Use prototypes unless the compiler is old-fashioned. */ 24141 #ifdef __STDC__ 24142 #define P(x) x 24143 #else 24144 #define P(x) () 24145 #endif 24146 24147 /* Prototype function declaration. */ 24148 int isroot P((uid_t)); 24149 24150 /* Old-style function definition. */ 24151 int 24152 isroot (x) /* ??? lossage here ??? */ 24153 uid_t x; 24154 { 24155 return x == 0; 24156 } 24157 24158 Suppose the type 'uid_t' happens to be 'short'. ISO C does not allow 24159 this example, because subword arguments in old-style non-prototype 24160 definitions are promoted. Therefore in this example the function 24161 definition's argument is really an 'int', which does not match the 24162 prototype argument type of 'short'. 24163 24164 This restriction of ISO C makes it hard to write code that is portable 24165 to traditional C compilers, because the programmer does not know whether 24166 the 'uid_t' type is 'short', 'int', or 'long'. Therefore, in cases like 24167 these GNU C allows a prototype to override a later old-style definition. 24168 More precisely, in GNU C, a function prototype argument type overrides 24169 the argument type specified by a later old-style definition if the 24170 former type is the same as the latter type before promotion. Thus in 24171 GNU C the above example is equivalent to the following: 24172 24173 int isroot (uid_t); 24174 24175 int 24176 isroot (uid_t x) 24177 { 24178 return x == 0; 24179 } 24180 24181 GNU C++ does not support old-style function definitions, so this 24182 extension is irrelevant. 24183 24184 24185 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 24186 24187 6.33 C++ Style Comments 24188 ======================= 24189 24190 In GNU C, you may use C++ style comments, which start with '//' and 24191 continue until the end of the line. Many other C implementations allow 24192 such comments, and they are included in the 1999 C standard. However, 24193 C++ style comments are not recognized if you specify an '-std' option 24194 specifying a version of ISO C before C99, or '-ansi' (equivalent to 24195 '-std=c90'). 24196 24197 24198 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 24199 24200 6.34 Dollar Signs in Identifier Names 24201 ===================================== 24202 24203 In GNU C, you may normally use dollar signs in identifier names. This 24204 is because many traditional C implementations allow such identifiers. 24205 However, dollar signs in identifiers are not supported on a few target 24206 machines, typically because the target assembler does not allow them. 24207 24208 24209 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 24210 24211 6.35 The Character <ESC> in Constants 24212 ===================================== 24213 24214 You can use the sequence '\e' in a string or character constant to stand 24215 for the ASCII character <ESC>. 24216 24217 24218 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 24219 24220 6.36 Specifying Attributes of Variables 24221 ======================================= 24222 24223 The keyword '__attribute__' allows you to specify special attributes of 24224 variables or structure fields. This keyword is followed by an attribute 24225 specification inside double parentheses. Some attributes are currently 24226 defined generically for variables. Other attributes are defined for 24227 variables on particular target systems. Other attributes are available 24228 for functions (*note Function Attributes::) and for types (*note Type 24229 Attributes::). Other front ends might define more attributes (*note 24230 Extensions to the C++ Language: C++ Extensions.). 24231 24232 You may also specify attributes with '__' preceding and following each 24233 keyword. This allows you to use them in header files without being 24234 concerned about a possible macro of the same name. For example, you may 24235 use '__aligned__' instead of 'aligned'. 24236 24237 *Note Attribute Syntax::, for details of the exact syntax for using 24238 attributes. 24239 24240 'aligned (ALIGNMENT)' 24241 This attribute specifies a minimum alignment for the variable or 24242 structure field, measured in bytes. For example, the declaration: 24243 24244 int x __attribute__ ((aligned (16))) = 0; 24245 24246 causes the compiler to allocate the global variable 'x' on a 24247 16-byte boundary. On a 68040, this could be used in conjunction 24248 with an 'asm' expression to access the 'move16' instruction which 24249 requires 16-byte aligned operands. 24250 24251 You can also specify the alignment of structure fields. For 24252 example, to create a double-word aligned 'int' pair, you could 24253 write: 24254 24255 struct foo { int x[2] __attribute__ ((aligned (8))); }; 24256 24257 This is an alternative to creating a union with a 'double' member, 24258 which forces the union to be double-word aligned. 24259 24260 As in the preceding examples, you can explicitly specify the 24261 alignment (in bytes) that you wish the compiler to use for a given 24262 variable or structure field. Alternatively, you can leave out the 24263 alignment factor and just ask the compiler to align a variable or 24264 field to the default alignment for the target architecture you are 24265 compiling for. The default alignment is sufficient for all scalar 24266 types, but may not be enough for all vector types on a target that 24267 supports vector operations. The default alignment is fixed for a 24268 particular target ABI. 24269 24270 GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__', 24271 which is the largest alignment ever used for any data type on the 24272 target machine you are compiling for. For example, you could 24273 write: 24274 24275 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 24276 24277 The compiler automatically sets the alignment for the declared 24278 variable or field to '__BIGGEST_ALIGNMENT__'. Doing this can often 24279 make copy operations more efficient, because the compiler can use 24280 whatever instructions copy the biggest chunks of memory when 24281 performing copies to or from the variables or fields that you have 24282 aligned this way. Note that the value of '__BIGGEST_ALIGNMENT__' 24283 may change depending on command-line options. 24284 24285 When used on a struct, or struct member, the 'aligned' attribute 24286 can only increase the alignment; in order to decrease it, the 24287 'packed' attribute must be specified as well. When used as part of 24288 a typedef, the 'aligned' attribute can both increase and decrease 24289 alignment, and specifying the 'packed' attribute generates a 24290 warning. 24291 24292 Note that the effectiveness of 'aligned' attributes may be limited 24293 by inherent limitations in your linker. On many systems, the 24294 linker is only able to arrange for variables to be aligned up to a 24295 certain maximum alignment. (For some linkers, the maximum 24296 supported alignment may be very very small.) If your linker is 24297 only able to align variables up to a maximum of 8-byte alignment, 24298 then specifying 'aligned(16)' in an '__attribute__' still only 24299 provides you with 8-byte alignment. See your linker documentation 24300 for further information. 24301 24302 The 'aligned' attribute can also be used for functions (*note 24303 Function Attributes::.) 24304 24305 'cleanup (CLEANUP_FUNCTION)' 24306 The 'cleanup' attribute runs a function when the variable goes out 24307 of scope. This attribute can only be applied to auto function 24308 scope variables; it may not be applied to parameters or variables 24309 with static storage duration. The function must take one 24310 parameter, a pointer to a type compatible with the variable. The 24311 return value of the function (if any) is ignored. 24312 24313 If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during 24314 the stack unwinding that happens during the processing of the 24315 exception. Note that the 'cleanup' attribute does not allow the 24316 exception to be caught, only to perform an action. It is undefined 24317 what happens if CLEANUP_FUNCTION does not return normally. 24318 24319 'common' 24320 'nocommon' 24321 The 'common' attribute requests GCC to place a variable in "common" 24322 storage. The 'nocommon' attribute requests the opposite--to 24323 allocate space for it directly. 24324 24325 These attributes override the default chosen by the '-fno-common' 24326 and '-fcommon' flags respectively. 24327 24328 'deprecated' 24329 'deprecated (MSG)' 24330 The 'deprecated' attribute results in a warning if the variable is 24331 used anywhere in the source file. This is useful when identifying 24332 variables that are expected to be removed in a future version of a 24333 program. The warning also includes the location of the declaration 24334 of the deprecated variable, to enable users to easily find further 24335 information about why the variable is deprecated, or what they 24336 should do instead. Note that the warning only occurs for uses: 24337 24338 extern int old_var __attribute__ ((deprecated)); 24339 extern int old_var; 24340 int new_fn () { return old_var; } 24341 24342 results in a warning on line 3 but not line 2. The optional MSG 24343 argument, which must be a string, is printed in the warning if 24344 present. 24345 24346 The 'deprecated' attribute can also be used for functions and types 24347 (*note Function Attributes::, *note Type Attributes::.) 24348 24349 'mode (MODE)' 24350 This attribute specifies the data type for the 24351 declaration--whichever type corresponds to the mode MODE. This in 24352 effect lets you request an integer or floating-point type according 24353 to its width. 24354 24355 You may also specify a mode of 'byte' or '__byte__' to indicate the 24356 mode corresponding to a one-byte integer, 'word' or '__word__' for 24357 the mode of a one-word integer, and 'pointer' or '__pointer__' for 24358 the mode used to represent pointers. 24359 24360 'packed' 24361 The 'packed' attribute specifies that a variable or structure field 24362 should have the smallest possible alignment--one byte for a 24363 variable, and one bit for a field, unless you specify a larger 24364 value with the 'aligned' attribute. 24365 24366 Here is a structure in which the field 'x' is packed, so that it 24367 immediately follows 'a': 24368 24369 struct foo 24370 { 24371 char a; 24372 int x[2] __attribute__ ((packed)); 24373 }; 24374 24375 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' 24376 attribute on bit-fields of type 'char'. This has been fixed in GCC 24377 4.4 but the change can lead to differences in the structure layout. 24378 See the documentation of '-Wpacked-bitfield-compat' for more 24379 information. 24380 24381 'section ("SECTION-NAME")' 24382 Normally, the compiler places the objects it generates in sections 24383 like 'data' and 'bss'. Sometimes, however, you need additional 24384 sections, or you need certain particular variables to appear in 24385 special sections, for example to map to special hardware. The 24386 'section' attribute specifies that a variable (or function) lives 24387 in a particular section. For example, this small program uses 24388 several specific section names: 24389 24390 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 24391 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 24392 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 24393 int init_data __attribute__ ((section ("INITDATA"))); 24394 24395 main() 24396 { 24397 /* Initialize stack pointer */ 24398 init_sp (stack + sizeof (stack)); 24399 24400 /* Initialize initialized data */ 24401 memcpy (&init_data, &data, &edata - &data); 24402 24403 /* Turn on the serial ports */ 24404 init_duart (&a); 24405 init_duart (&b); 24406 } 24407 24408 Use the 'section' attribute with _global_ variables and not _local_ 24409 variables, as shown in the example. 24410 24411 You may use the 'section' attribute with initialized or 24412 uninitialized global variables but the linker requires each object 24413 be defined once, with the exception that uninitialized variables 24414 tentatively go in the 'common' (or 'bss') section and can be 24415 multiply "defined". Using the 'section' attribute changes what 24416 section the variable goes into and may cause the linker to issue an 24417 error if an uninitialized variable has multiple definitions. You 24418 can force a variable to be initialized with the '-fno-common' flag 24419 or the 'nocommon' attribute. 24420 24421 Some file formats do not support arbitrary sections so the 24422 'section' attribute is not available on all platforms. If you need 24423 to map the entire contents of a module to a particular section, 24424 consider using the facilities of the linker instead. 24425 24426 'shared' 24427 On Microsoft Windows, in addition to putting variable definitions 24428 in a named section, the section can also be shared among all 24429 running copies of an executable or DLL. For example, this small 24430 program defines shared data by putting it in a named section 24431 'shared' and marking the section shareable: 24432 24433 int foo __attribute__((section ("shared"), shared)) = 0; 24434 24435 int 24436 main() 24437 { 24438 /* Read and write foo. All running 24439 copies see the same value. */ 24440 return 0; 24441 } 24442 24443 You may only use the 'shared' attribute along with 'section' 24444 attribute with a fully-initialized global definition because of the 24445 way linkers work. See 'section' attribute for more information. 24446 24447 The 'shared' attribute is only available on Microsoft Windows. 24448 24449 'tls_model ("TLS_MODEL")' 24450 The 'tls_model' attribute sets thread-local storage model (*note 24451 Thread-Local::) of a particular '__thread' variable, overriding 24452 '-ftls-model=' command-line switch on a per-variable basis. The 24453 TLS_MODEL argument should be one of 'global-dynamic', 24454 'local-dynamic', 'initial-exec' or 'local-exec'. 24455 24456 Not all targets support this attribute. 24457 24458 'unused' 24459 This attribute, attached to a variable, means that the variable is 24460 meant to be possibly unused. GCC does not produce a warning for 24461 this variable. 24462 24463 'used' 24464 This attribute, attached to a variable, means that the variable 24465 must be emitted even if it appears that the variable is not 24466 referenced. 24467 24468 When applied to a static data member of a C++ class template, the 24469 attribute also means that the member is instantiated if the class 24470 itself is instantiated. 24471 24472 'vector_size (BYTES)' 24473 This attribute specifies the vector size for the variable, measured 24474 in bytes. For example, the declaration: 24475 24476 int foo __attribute__ ((vector_size (16))); 24477 24478 causes the compiler to set the mode for 'foo', to be 16 bytes, 24479 divided into 'int' sized units. Assuming a 32-bit int (a vector of 24480 4 units of 4 bytes), the corresponding mode of 'foo' is V4SI. 24481 24482 This attribute is only applicable to integral and float scalars, 24483 although arrays, pointers, and function return values are allowed 24484 in conjunction with this construct. 24485 24486 Aggregates with this attribute are invalid, even if they are of the 24487 same size as a corresponding scalar. For example, the declaration: 24488 24489 struct S { int a; }; 24490 struct S __attribute__ ((vector_size (16))) foo; 24491 24492 is invalid even if the size of the structure is the same as the 24493 size of the 'int'. 24494 24495 'selectany' 24496 The 'selectany' attribute causes an initialized global variable to 24497 have link-once semantics. When multiple definitions of the 24498 variable are encountered by the linker, the first is selected and 24499 the remainder are discarded. Following usage by the Microsoft 24500 compiler, the linker is told _not_ to warn about size or content 24501 differences of the multiple definitions. 24502 24503 Although the primary usage of this attribute is for POD types, the 24504 attribute can also be applied to global C++ objects that are 24505 initialized by a constructor. In this case, the static 24506 initialization and destruction code for the object is emitted in 24507 each translation defining the object, but the calls to the 24508 constructor and destructor are protected by a link-once guard 24509 variable. 24510 24511 The 'selectany' attribute is only available on Microsoft Windows 24512 targets. You can use '__declspec (selectany)' as a synonym for 24513 '__attribute__ ((selectany))' for compatibility with other 24514 compilers. 24515 24516 'weak' 24517 The 'weak' attribute is described in *note Function Attributes::. 24518 24519 'dllimport' 24520 The 'dllimport' attribute is described in *note Function 24521 Attributes::. 24522 24523 'dllexport' 24524 The 'dllexport' attribute is described in *note Function 24525 Attributes::. 24526 24527 6.36.1 AVR Variable Attributes 24528 ------------------------------ 24529 24530 'progmem' 24531 The 'progmem' attribute is used on the AVR to place read-only data 24532 in the non-volatile program memory (flash). The 'progmem' 24533 attribute accomplishes this by putting respective variables into a 24534 section whose name starts with '.progmem'. 24535 24536 This attribute works similar to the 'section' attribute but adds 24537 additional checking. Notice that just like the 'section' 24538 attribute, 'progmem' affects the location of the data but not how 24539 this data is accessed. 24540 24541 In order to read data located with the 'progmem' attribute (inline) 24542 assembler must be used. 24543 /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */ 24544 #include <avr/pgmspace.h> 24545 24546 /* Locate var in flash memory */ 24547 const int var[2] PROGMEM = { 1, 2 }; 24548 24549 int read_var (int i) 24550 { 24551 /* Access var[] by accessor macro from avr/pgmspace.h */ 24552 return (int) pgm_read_word (& var[i]); 24553 } 24554 24555 AVR is a Harvard architecture processor and data and read-only data 24556 normally resides in the data memory (RAM). 24557 24558 See also the *note AVR Named Address Spaces:: section for an 24559 alternate way to locate and access data in flash memory. 24560 24561 6.36.2 Blackfin Variable Attributes 24562 ----------------------------------- 24563 24564 Three attributes are currently defined for the Blackfin. 24565 24566 'l1_data' 24567 'l1_data_A' 24568 'l1_data_B' 24569 Use these attributes on the Blackfin to place the variable into L1 24570 Data SRAM. Variables with 'l1_data' attribute are put into the 24571 specific section named '.l1.data'. Those with 'l1_data_A' 24572 attribute are put into the specific section named '.l1.data.A'. 24573 Those with 'l1_data_B' attribute are put into the specific section 24574 named '.l1.data.B'. 24575 24576 'l2' 24577 Use this attribute on the Blackfin to place the variable into L2 24578 SRAM. Variables with 'l2' attribute are put into the specific 24579 section named '.l2.data'. 24580 24581 6.36.3 M32R/D Variable Attributes 24582 --------------------------------- 24583 24584 One attribute is currently defined for the M32R/D. 24585 24586 'model (MODEL-NAME)' 24587 Use this attribute on the M32R/D to set the addressability of an 24588 object. The identifier MODEL-NAME is one of 'small', 'medium', or 24589 'large', representing each of the code models. 24590 24591 Small model objects live in the lower 16MB of memory (so that their 24592 addresses can be loaded with the 'ld24' instruction). 24593 24594 Medium and large model objects may live anywhere in the 32-bit 24595 address space (the compiler generates 'seth/add3' instructions to 24596 load their addresses). 24597 24598 6.36.4 MeP Variable Attributes 24599 ------------------------------ 24600 24601 The MeP target has a number of addressing modes and busses. The 'near' 24602 space spans the standard memory space's first 16 megabytes (24 bits). 24603 The 'far' space spans the entire 32-bit memory space. The 'based' space 24604 is a 128-byte region in the memory space that is addressed relative to 24605 the '$tp' register. The 'tiny' space is a 65536-byte region relative to 24606 the '$gp' register. In addition to these memory regions, the MeP target 24607 has a separate 16-bit control bus which is specified with 'cb' 24608 attributes. 24609 24610 'based' 24611 Any variable with the 'based' attribute is assigned to the '.based' 24612 section, and is accessed with relative to the '$tp' register. 24613 24614 'tiny' 24615 Likewise, the 'tiny' attribute assigned variables to the '.tiny' 24616 section, relative to the '$gp' register. 24617 24618 'near' 24619 Variables with the 'near' attribute are assumed to have addresses 24620 that fit in a 24-bit addressing mode. This is the default for 24621 large variables ('-mtiny=4' is the default) but this attribute can 24622 override '-mtiny=' for small variables, or override '-ml'. 24623 24624 'far' 24625 Variables with the 'far' attribute are addressed using a full 24626 32-bit address. Since this covers the entire memory space, this 24627 allows modules to make no assumptions about where variables might 24628 be stored. 24629 24630 'io' 24631 'io (ADDR)' 24632 Variables with the 'io' attribute are used to address memory-mapped 24633 peripherals. If an address is specified, the variable is assigned 24634 that address, else it is not assigned an address (it is assumed 24635 some other module assigns an address). Example: 24636 24637 int timer_count __attribute__((io(0x123))); 24638 24639 'cb' 24640 'cb (ADDR)' 24641 Variables with the 'cb' attribute are used to access the control 24642 bus, using special instructions. 'addr' indicates the control bus 24643 address. Example: 24644 24645 int cpu_clock __attribute__((cb(0x123))); 24646 24647 6.36.5 i386 Variable Attributes 24648 ------------------------------- 24649 24650 Two attributes are currently defined for i386 configurations: 24651 'ms_struct' and 'gcc_struct' 24652 24653 'ms_struct' 24654 'gcc_struct' 24655 24656 If 'packed' is used on a structure, or if bit-fields are used, it 24657 may be that the Microsoft ABI lays out the structure differently 24658 than the way GCC normally does. Particularly when moving packed 24659 data between functions compiled with GCC and the native Microsoft 24660 compiler (either via function call or as data in a file), it may be 24661 necessary to access either format. 24662 24663 Currently '-m[no-]ms-bitfields' is provided for the Microsoft 24664 Windows X86 compilers to match the native Microsoft compiler. 24665 24666 The Microsoft structure layout algorithm is fairly simple with the 24667 exception of the bit-field packing. The padding and alignment of 24668 members of structures and whether a bit-field can straddle a 24669 storage-unit boundary are determine by these rules: 24670 24671 1. Structure members are stored sequentially in the order in 24672 which they are declared: the first member has the lowest 24673 memory address and the last member the highest. 24674 24675 2. Every data object has an alignment requirement. The alignment 24676 requirement for all data except structures, unions, and arrays 24677 is either the size of the object or the current packing size 24678 (specified with either the 'aligned' attribute or the 'pack' 24679 pragma), whichever is less. For structures, unions, and 24680 arrays, the alignment requirement is the largest alignment 24681 requirement of its members. Every object is allocated an 24682 offset so that: 24683 24684 offset % alignment_requirement == 0 24685 24686 3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte 24687 allocation unit if the integral types are the same size and if 24688 the next bit-field fits into the current allocation unit 24689 without crossing the boundary imposed by the common alignment 24690 requirements of the bit-fields. 24691 24692 MSVC interprets zero-length bit-fields in the following ways: 24693 24694 1. If a zero-length bit-field is inserted between two bit-fields 24695 that are normally coalesced, the bit-fields are not coalesced. 24696 24697 For example: 24698 24699 struct 24700 { 24701 unsigned long bf_1 : 12; 24702 unsigned long : 0; 24703 unsigned long bf_2 : 12; 24704 } t1; 24705 24706 The size of 't1' is 8 bytes with the zero-length bit-field. 24707 If the zero-length bit-field were removed, 't1''s size would 24708 be 4 bytes. 24709 24710 2. If a zero-length bit-field is inserted after a bit-field, 24711 'foo', and the alignment of the zero-length bit-field is 24712 greater than the member that follows it, 'bar', 'bar' is 24713 aligned as the type of the zero-length bit-field. 24714 24715 For example: 24716 24717 struct 24718 { 24719 char foo : 4; 24720 short : 0; 24721 char bar; 24722 } t2; 24723 24724 struct 24725 { 24726 char foo : 4; 24727 short : 0; 24728 double bar; 24729 } t3; 24730 24731 For 't2', 'bar' is placed at offset 2, rather than offset 1. 24732 Accordingly, the size of 't2' is 4. For 't3', the zero-length 24733 bit-field does not affect the alignment of 'bar' or, as a 24734 result, the size of the structure. 24735 24736 Taking this into account, it is important to note the 24737 following: 24738 24739 1. If a zero-length bit-field follows a normal bit-field, 24740 the type of the zero-length bit-field may affect the 24741 alignment of the structure as whole. For example, 't2' 24742 has a size of 4 bytes, since the zero-length bit-field 24743 follows a normal bit-field, and is of type short. 24744 24745 2. Even if a zero-length bit-field is not followed by a 24746 normal bit-field, it may still affect the alignment of 24747 the structure: 24748 24749 struct 24750 { 24751 char foo : 6; 24752 long : 0; 24753 } t4; 24754 24755 Here, 't4' takes up 4 bytes. 24756 24757 3. Zero-length bit-fields following non-bit-field members are 24758 ignored: 24759 24760 struct 24761 { 24762 char foo; 24763 long : 0; 24764 char bar; 24765 } t5; 24766 24767 Here, 't5' takes up 2 bytes. 24768 24769 6.36.6 PowerPC Variable Attributes 24770 ---------------------------------- 24771 24772 Three attributes currently are defined for PowerPC configurations: 24773 'altivec', 'ms_struct' and 'gcc_struct'. 24774 24775 For full documentation of the struct attributes please see the 24776 documentation in *note i386 Variable Attributes::. 24777 24778 For documentation of 'altivec' attribute please see the documentation 24779 in *note PowerPC Type Attributes::. 24780 24781 6.36.7 SPU Variable Attributes 24782 ------------------------------ 24783 24784 The SPU supports the 'spu_vector' attribute for variables. For 24785 documentation of this attribute please see the documentation in *note 24786 SPU Type Attributes::. 24787 24788 6.36.8 Xstormy16 Variable Attributes 24789 ------------------------------------ 24790 24791 One attribute is currently defined for xstormy16 configurations: 24792 'below100'. 24793 24794 'below100' 24795 24796 If a variable has the 'below100' attribute ('BELOW100' is allowed 24797 also), GCC places the variable in the first 0x100 bytes of memory 24798 and use special opcodes to access it. Such variables are placed in 24799 either the '.bss_below100' section or the '.data_below100' section. 24800 24801 24802 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 24803 24804 6.37 Specifying Attributes of Types 24805 =================================== 24806 24807 The keyword '__attribute__' allows you to specify special attributes of 24808 'struct' and 'union' types when you define such types. This keyword is 24809 followed by an attribute specification inside double parentheses. Seven 24810 attributes are currently defined for types: 'aligned', 'packed', 24811 'transparent_union', 'unused', 'deprecated', 'visibility', and 24812 'may_alias'. Other attributes are defined for functions (*note Function 24813 Attributes::) and for variables (*note Variable Attributes::). 24814 24815 You may also specify any one of these attributes with '__' preceding 24816 and following its keyword. This allows you to use these attributes in 24817 header files without being concerned about a possible macro of the same 24818 name. For example, you may use '__aligned__' instead of 'aligned'. 24819 24820 You may specify type attributes in an enum, struct or union type 24821 declaration or definition, or for other types in a 'typedef' 24822 declaration. 24823 24824 For an enum, struct or union type, you may specify attributes either 24825 between the enum, struct or union tag and the name of the type, or just 24826 past the closing curly brace of the _definition_. The former syntax is 24827 preferred. 24828 24829 *Note Attribute Syntax::, for details of the exact syntax for using 24830 attributes. 24831 24832 'aligned (ALIGNMENT)' 24833 This attribute specifies a minimum alignment (in bytes) for 24834 variables of the specified type. For example, the declarations: 24835 24836 struct S { short f[3]; } __attribute__ ((aligned (8))); 24837 typedef int more_aligned_int __attribute__ ((aligned (8))); 24838 24839 force the compiler to ensure (as far as it can) that each variable 24840 whose type is 'struct S' or 'more_aligned_int' is allocated and 24841 aligned _at least_ on a 8-byte boundary. On a SPARC, having all 24842 variables of type 'struct S' aligned to 8-byte boundaries allows 24843 the compiler to use the 'ldd' and 'std' (doubleword load and store) 24844 instructions when copying one variable of type 'struct S' to 24845 another, thus improving run-time efficiency. 24846 24847 Note that the alignment of any given 'struct' or 'union' type is 24848 required by the ISO C standard to be at least a perfect multiple of 24849 the lowest common multiple of the alignments of all of the members 24850 of the 'struct' or 'union' in question. This means that you _can_ 24851 effectively adjust the alignment of a 'struct' or 'union' type by 24852 attaching an 'aligned' attribute to any one of the members of such 24853 a type, but the notation illustrated in the example above is a more 24854 obvious, intuitive, and readable way to request the compiler to 24855 adjust the alignment of an entire 'struct' or 'union' type. 24856 24857 As in the preceding example, you can explicitly specify the 24858 alignment (in bytes) that you wish the compiler to use for a given 24859 'struct' or 'union' type. Alternatively, you can leave out the 24860 alignment factor and just ask the compiler to align a type to the 24861 maximum useful alignment for the target machine you are compiling 24862 for. For example, you could write: 24863 24864 struct S { short f[3]; } __attribute__ ((aligned)); 24865 24866 Whenever you leave out the alignment factor in an 'aligned' 24867 attribute specification, the compiler automatically sets the 24868 alignment for the type to the largest alignment that is ever used 24869 for any data type on the target machine you are compiling for. 24870 Doing this can often make copy operations more efficient, because 24871 the compiler can use whatever instructions copy the biggest chunks 24872 of memory when performing copies to or from the variables that have 24873 types that you have aligned this way. 24874 24875 In the example above, if the size of each 'short' is 2 bytes, then 24876 the size of the entire 'struct S' type is 6 bytes. The smallest 24877 power of two that is greater than or equal to that is 8, so the 24878 compiler sets the alignment for the entire 'struct S' type to 8 24879 bytes. 24880 24881 Note that although you can ask the compiler to select a 24882 time-efficient alignment for a given type and then declare only 24883 individual stand-alone objects of that type, the compiler's ability 24884 to select a time-efficient alignment is primarily useful only when 24885 you plan to create arrays of variables having the relevant 24886 (efficiently aligned) type. If you declare or use arrays of 24887 variables of an efficiently-aligned type, then it is likely that 24888 your program also does pointer arithmetic (or subscripting, which 24889 amounts to the same thing) on pointers to the relevant type, and 24890 the code that the compiler generates for these pointer arithmetic 24891 operations is often more efficient for efficiently-aligned types 24892 than for other types. 24893 24894 The 'aligned' attribute can only increase the alignment; but you 24895 can decrease it by specifying 'packed' as well. See below. 24896 24897 Note that the effectiveness of 'aligned' attributes may be limited 24898 by inherent limitations in your linker. On many systems, the 24899 linker is only able to arrange for variables to be aligned up to a 24900 certain maximum alignment. (For some linkers, the maximum 24901 supported alignment may be very very small.) If your linker is 24902 only able to align variables up to a maximum of 8-byte alignment, 24903 then specifying 'aligned(16)' in an '__attribute__' still only 24904 provides you with 8-byte alignment. See your linker documentation 24905 for further information. 24906 24907 'packed' 24908 This attribute, attached to 'struct' or 'union' type definition, 24909 specifies that each member (other than zero-width bit-fields) of 24910 the structure or union is placed to minimize the memory required. 24911 When attached to an 'enum' definition, it indicates that the 24912 smallest integral type should be used. 24913 24914 Specifying this attribute for 'struct' and 'union' types is 24915 equivalent to specifying the 'packed' attribute on each of the 24916 structure or union members. Specifying the '-fshort-enums' flag on 24917 the line is equivalent to specifying the 'packed' attribute on all 24918 'enum' definitions. 24919 24920 In the following example 'struct my_packed_struct''s members are 24921 packed closely together, but the internal layout of its 's' member 24922 is not packed--to do that, 'struct my_unpacked_struct' needs to be 24923 packed too. 24924 24925 struct my_unpacked_struct 24926 { 24927 char c; 24928 int i; 24929 }; 24930 24931 struct __attribute__ ((__packed__)) my_packed_struct 24932 { 24933 char c; 24934 int i; 24935 struct my_unpacked_struct s; 24936 }; 24937 24938 You may only specify this attribute on the definition of an 'enum', 24939 'struct' or 'union', not on a 'typedef' that does not also define 24940 the enumerated type, structure or union. 24941 24942 'transparent_union' 24943 This attribute, attached to a 'union' type definition, indicates 24944 that any function parameter having that union type causes calls to 24945 that function to be treated in a special way. 24946 24947 First, the argument corresponding to a transparent union type can 24948 be of any type in the union; no cast is required. Also, if the 24949 union contains a pointer type, the corresponding argument can be a 24950 null pointer constant or a void pointer expression; and if the 24951 union contains a void pointer type, the corresponding argument can 24952 be any pointer expression. If the union member type is a pointer, 24953 qualifiers like 'const' on the referenced type must be respected, 24954 just as with normal pointer conversions. 24955 24956 Second, the argument is passed to the function using the calling 24957 conventions of the first member of the transparent union, not the 24958 calling conventions of the union itself. All members of the union 24959 must have the same machine representation; this is necessary for 24960 this argument passing to work properly. 24961 24962 Transparent unions are designed for library functions that have 24963 multiple interfaces for compatibility reasons. For example, 24964 suppose the 'wait' function must accept either a value of type 'int 24965 *' to comply with POSIX, or a value of type 'union wait *' to 24966 comply with the 4.1BSD interface. If 'wait''s parameter were 'void 24967 *', 'wait' would accept both kinds of arguments, but it would also 24968 accept any other pointer type and this would make argument type 24969 checking less useful. Instead, '<sys/wait.h>' might define the 24970 interface as follows: 24971 24972 typedef union __attribute__ ((__transparent_union__)) 24973 { 24974 int *__ip; 24975 union wait *__up; 24976 } wait_status_ptr_t; 24977 24978 pid_t wait (wait_status_ptr_t); 24979 24980 This interface allows either 'int *' or 'union wait *' arguments to 24981 be passed, using the 'int *' calling convention. The program can 24982 call 'wait' with arguments of either type: 24983 24984 int w1 () { int w; return wait (&w); } 24985 int w2 () { union wait w; return wait (&w); } 24986 24987 With this interface, 'wait''s implementation might look like this: 24988 24989 pid_t wait (wait_status_ptr_t p) 24990 { 24991 return waitpid (-1, p.__ip, 0); 24992 } 24993 24994 'unused' 24995 When attached to a type (including a 'union' or a 'struct'), this 24996 attribute means that variables of that type are meant to appear 24997 possibly unused. GCC does not produce a warning for any variables 24998 of that type, even if the variable appears to do nothing. This is 24999 often the case with lock or thread classes, which are usually 25000 defined and then not referenced, but contain constructors and 25001 destructors that have nontrivial bookkeeping functions. 25002 25003 'deprecated' 25004 'deprecated (MSG)' 25005 The 'deprecated' attribute results in a warning if the type is used 25006 anywhere in the source file. This is useful when identifying types 25007 that are expected to be removed in a future version of a program. 25008 If possible, the warning also includes the location of the 25009 declaration of the deprecated type, to enable users to easily find 25010 further information about why the type is deprecated, or what they 25011 should do instead. Note that the warnings only occur for uses and 25012 then only if the type is being applied to an identifier that itself 25013 is not being declared as deprecated. 25014 25015 typedef int T1 __attribute__ ((deprecated)); 25016 T1 x; 25017 typedef T1 T2; 25018 T2 y; 25019 typedef T1 T3 __attribute__ ((deprecated)); 25020 T3 z __attribute__ ((deprecated)); 25021 25022 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 25023 warning is issued for line 4 because T2 is not explicitly 25024 deprecated. Line 5 has no warning because T3 is explicitly 25025 deprecated. Similarly for line 6. The optional MSG argument, 25026 which must be a string, is printed in the warning if present. 25027 25028 The 'deprecated' attribute can also be used for functions and 25029 variables (*note Function Attributes::, *note Variable 25030 Attributes::.) 25031 25032 'may_alias' 25033 Accesses through pointers to types with this attribute are not 25034 subject to type-based alias analysis, but are instead assumed to be 25035 able to alias any other type of objects. In the context of section 25036 6.5 paragraph 7 of the C99 standard, an lvalue expression 25037 dereferencing such a pointer is treated like having a character 25038 type. See '-fstrict-aliasing' for more information on aliasing 25039 issues. This extension exists to support some vector APIs, in 25040 which pointers to one vector type are permitted to alias pointers 25041 to a different vector type. 25042 25043 Note that an object of a type with this attribute does not have any 25044 special semantics. 25045 25046 Example of use: 25047 25048 typedef short __attribute__((__may_alias__)) short_a; 25049 25050 int 25051 main (void) 25052 { 25053 int a = 0x12345678; 25054 short_a *b = (short_a *) &a; 25055 25056 b[1] = 0; 25057 25058 if (a == 0x12345678) 25059 abort(); 25060 25061 exit(0); 25062 } 25063 25064 If you replaced 'short_a' with 'short' in the variable declaration, 25065 the above program would abort when compiled with 25066 '-fstrict-aliasing', which is on by default at '-O2' or above in 25067 recent GCC versions. 25068 25069 'visibility' 25070 In C++, attribute visibility (*note Function Attributes::) can also 25071 be applied to class, struct, union and enum types. Unlike other 25072 type attributes, the attribute must appear between the initial 25073 keyword and the name of the type; it cannot appear after the body 25074 of the type. 25075 25076 Note that the type visibility is applied to vague linkage entities 25077 associated with the class (vtable, typeinfo node, etc.). In 25078 particular, if a class is thrown as an exception in one shared 25079 object and caught in another, the class must have default 25080 visibility. Otherwise the two shared objects are unable to use the 25081 same typeinfo node and exception handling will break. 25082 25083 To specify multiple attributes, separate them by commas within the 25084 double parentheses: for example, '__attribute__ ((aligned (16), 25085 packed))'. 25086 25087 6.37.1 ARM Type Attributes 25088 -------------------------- 25089 25090 On those ARM targets that support 'dllimport' (such as Symbian OS), you 25091 can use the 'notshared' attribute to indicate that the virtual table and 25092 other similar data for a class should not be exported from a DLL. For 25093 example: 25094 25095 class __declspec(notshared) C { 25096 public: 25097 __declspec(dllimport) C(); 25098 virtual void f(); 25099 } 25100 25101 __declspec(dllexport) 25102 C::C() {} 25103 25104 In this code, 'C::C' is exported from the current DLL, but the virtual 25105 table for 'C' is not exported. (You can use '__attribute__' instead of 25106 '__declspec' if you prefer, but most Symbian OS code uses '__declspec'.) 25107 25108 6.37.2 MeP Type Attributes 25109 -------------------------- 25110 25111 Many of the MeP variable attributes may be applied to types as well. 25112 Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be 25113 applied to either. The 'io' and 'cb' attributes may not be applied to 25114 types. 25115 25116 6.37.3 i386 Type Attributes 25117 --------------------------- 25118 25119 Two attributes are currently defined for i386 configurations: 25120 'ms_struct' and 'gcc_struct'. 25121 25122 'ms_struct' 25123 'gcc_struct' 25124 25125 If 'packed' is used on a structure, or if bit-fields are used it 25126 may be that the Microsoft ABI packs them differently than GCC 25127 normally packs them. Particularly when moving packed data between 25128 functions compiled with GCC and the native Microsoft compiler 25129 (either via function call or as data in a file), it may be 25130 necessary to access either format. 25131 25132 Currently '-m[no-]ms-bitfields' is provided for the Microsoft 25133 Windows X86 compilers to match the native Microsoft compiler. 25134 25135 6.37.4 PowerPC Type Attributes 25136 ------------------------------ 25137 25138 Three attributes currently are defined for PowerPC configurations: 25139 'altivec', 'ms_struct' and 'gcc_struct'. 25140 25141 For full documentation of the 'ms_struct' and 'gcc_struct' attributes 25142 please see the documentation in *note i386 Type Attributes::. 25143 25144 The 'altivec' attribute allows one to declare AltiVec vector data types 25145 supported by the AltiVec Programming Interface Manual. The attribute 25146 requires an argument to specify one of three vector types: 'vector__', 25147 'pixel__' (always followed by unsigned short), and 'bool__' (always 25148 followed by unsigned). 25149 25150 __attribute__((altivec(vector__))) 25151 __attribute__((altivec(pixel__))) unsigned short 25152 __attribute__((altivec(bool__))) unsigned 25153 25154 These attributes mainly are intended to support the '__vector', 25155 '__pixel', and '__bool' AltiVec keywords. 25156 25157 6.37.5 SPU Type Attributes 25158 -------------------------- 25159 25160 The SPU supports the 'spu_vector' attribute for types. This attribute 25161 allows one to declare vector data types supported by the 25162 Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 25163 to support the '__vector' keyword. 25164 25165 25166 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 25167 25168 6.38 Inquiring on Alignment of Types or Variables 25169 ================================================= 25170 25171 The keyword '__alignof__' allows you to inquire about how an object is 25172 aligned, or the minimum alignment usually required by a type. Its 25173 syntax is just like 'sizeof'. 25174 25175 For example, if the target machine requires a 'double' value to be 25176 aligned on an 8-byte boundary, then '__alignof__ (double)' is 8. This 25177 is true on many RISC machines. On more traditional machine designs, 25178 '__alignof__ (double)' is 4 or even 2. 25179 25180 Some machines never actually require alignment; they allow reference to 25181 any data type even at an odd address. For these machines, '__alignof__' 25182 reports the smallest alignment that GCC gives the data type, usually as 25183 mandated by the target ABI. 25184 25185 If the operand of '__alignof__' is an lvalue rather than a type, its 25186 value is the required alignment for its type, taking into account any 25187 minimum alignment specified with GCC's '__attribute__' extension (*note 25188 Variable Attributes::). For example, after this declaration: 25189 25190 struct foo { int x; char y; } foo1; 25191 25192 the value of '__alignof__ (foo1.y)' is 1, even though its actual 25193 alignment is probably 2 or 4, the same as '__alignof__ (int)'. 25194 25195 It is an error to ask for the alignment of an incomplete type. 25196 25197 25198 File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions 25199 25200 6.39 An Inline Function is As Fast As a Macro 25201 ============================================= 25202 25203 By declaring a function inline, you can direct GCC to make calls to that 25204 function faster. One way GCC can achieve this is to integrate that 25205 function's code into the code for its callers. This makes execution 25206 faster by eliminating the function-call overhead; in addition, if any of 25207 the actual argument values are constant, their known values may permit 25208 simplifications at compile time so that not all of the inline function's 25209 code needs to be included. The effect on code size is less predictable; 25210 object code may be larger or smaller with function inlining, depending 25211 on the particular case. You can also direct GCC to try to integrate all 25212 "simple enough" functions into their callers with the option 25213 '-finline-functions'. 25214 25215 GCC implements three different semantics of declaring a function 25216 inline. One is available with '-std=gnu89' or '-fgnu89-inline' or when 25217 'gnu_inline' attribute is present on all inline declarations, another 25218 when '-std=c99', '-std=c11', '-std=gnu99' or '-std=gnu11' (without 25219 '-fgnu89-inline'), and the third is used when compiling C++. 25220 25221 To declare a function inline, use the 'inline' keyword in its 25222 declaration, like this: 25223 25224 static inline int 25225 inc (int *a) 25226 { 25227 return (*a)++; 25228 } 25229 25230 If you are writing a header file to be included in ISO C90 programs, 25231 write '__inline__' instead of 'inline'. *Note Alternate Keywords::. 25232 25233 The three types of inlining behave similarly in two important cases: 25234 when the 'inline' keyword is used on a 'static' function, like the 25235 example above, and when a function is first declared without using the 25236 'inline' keyword and then is defined with 'inline', like this: 25237 25238 extern int inc (int *a); 25239 inline int 25240 inc (int *a) 25241 { 25242 return (*a)++; 25243 } 25244 25245 In both of these common cases, the program behaves the same as if you 25246 had not used the 'inline' keyword, except for its speed. 25247 25248 When a function is both inline and 'static', if all calls to the 25249 function are integrated into the caller, and the function's address is 25250 never used, then the function's own assembler code is never referenced. 25251 In this case, GCC does not actually output assembler code for the 25252 function, unless you specify the option '-fkeep-inline-functions'. Some 25253 calls cannot be integrated for various reasons (in particular, calls 25254 that precede the function's definition cannot be integrated, and neither 25255 can recursive calls within the definition). If there is a nonintegrated 25256 call, then the function is compiled to assembler code as usual. The 25257 function must also be compiled as usual if the program refers to its 25258 address, because that can't be inlined. 25259 25260 Note that certain usages in a function definition can make it 25261 unsuitable for inline substitution. Among these usages are: variadic 25262 functions, use of 'alloca', use of variable-length data types (*note 25263 Variable Length::), use of computed goto (*note Labels as Values::), use 25264 of nonlocal goto, and nested functions (*note Nested Functions::). 25265 Using '-Winline' warns when a function marked 'inline' could not be 25266 substituted, and gives the reason for the failure. 25267 25268 As required by ISO C++, GCC considers member functions defined within 25269 the body of a class to be marked inline even if they are not explicitly 25270 declared with the 'inline' keyword. You can override this with 25271 '-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 25272 Dialect Options. 25273 25274 GCC does not inline any functions when not optimizing unless you 25275 specify the 'always_inline' attribute for the function, like this: 25276 25277 /* Prototype. */ 25278 inline void foo (const char) __attribute__((always_inline)); 25279 25280 The remainder of this section is specific to GNU C90 inlining. 25281 25282 When an inline function is not 'static', then the compiler must assume 25283 that there may be calls from other source files; since a global symbol 25284 can be defined only once in any program, the function must not be 25285 defined in the other source files, so the calls therein cannot be 25286 integrated. Therefore, a non-'static' inline function is always 25287 compiled on its own in the usual fashion. 25288 25289 If you specify both 'inline' and 'extern' in the function definition, 25290 then the definition is used only for inlining. In no case is the 25291 function compiled on its own, not even if you refer to its address 25292 explicitly. Such an address becomes an external reference, as if you 25293 had only declared the function, and had not defined it. 25294 25295 This combination of 'inline' and 'extern' has almost the effect of a 25296 macro. The way to use it is to put a function definition in a header 25297 file with these keywords, and put another copy of the definition 25298 (lacking 'inline' and 'extern') in a library file. The definition in 25299 the header file causes most calls to the function to be inlined. If any 25300 uses of the function remain, they refer to the single copy in the 25301 library. 25302 25303 25304 File: gcc.info, Node: Volatiles, Next: Extended Asm, Prev: Inline, Up: C Extensions 25305 25306 6.40 When is a Volatile Object Accessed? 25307 ======================================== 25308 25309 C has the concept of volatile objects. These are normally accessed by 25310 pointers and used for accessing hardware or inter-thread communication. 25311 The standard encourages compilers to refrain from optimizations 25312 concerning accesses to volatile objects, but leaves it implementation 25313 defined as to what constitutes a volatile access. The minimum 25314 requirement is that at a sequence point all previous accesses to 25315 volatile objects have stabilized and no subsequent accesses have 25316 occurred. Thus an implementation is free to reorder and combine 25317 volatile accesses that occur between sequence points, but cannot do so 25318 for accesses across a sequence point. The use of volatile does not 25319 allow you to violate the restriction on updating objects multiple times 25320 between two sequence points. 25321 25322 Accesses to non-volatile objects are not ordered with respect to 25323 volatile accesses. You cannot use a volatile object as a memory barrier 25324 to order a sequence of writes to non-volatile memory. For instance: 25325 25326 int *ptr = SOMETHING; 25327 volatile int vobj; 25328 *ptr = SOMETHING; 25329 vobj = 1; 25330 25331 Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write 25332 to *PTR occurs by the time the update of VOBJ happens. If you need this 25333 guarantee, you must use a stronger memory barrier such as: 25334 25335 int *ptr = SOMETHING; 25336 volatile int vobj; 25337 *ptr = SOMETHING; 25338 asm volatile ("" : : : "memory"); 25339 vobj = 1; 25340 25341 A scalar volatile object is read when it is accessed in a void context: 25342 25343 volatile int *src = SOMEVALUE; 25344 *src; 25345 25346 Such expressions are rvalues, and GCC implements this as a read of the 25347 volatile object being pointed to. 25348 25349 Assignments are also expressions and have an rvalue. However when 25350 assigning to a scalar volatile, the volatile object is not reread, 25351 regardless of whether the assignment expression's rvalue is used or not. 25352 If the assignment's rvalue is used, the value is that assigned to the 25353 volatile object. For instance, there is no read of VOBJ in all the 25354 following cases: 25355 25356 int obj; 25357 volatile int vobj; 25358 vobj = SOMETHING; 25359 obj = vobj = SOMETHING; 25360 obj ? vobj = ONETHING : vobj = ANOTHERTHING; 25361 obj = (SOMETHING, vobj = ANOTHERTHING); 25362 25363 If you need to read the volatile object after an assignment has 25364 occurred, you must use a separate expression with an intervening 25365 sequence point. 25366 25367 As bit-fields are not individually addressable, volatile bit-fields may 25368 be implicitly read when written to, or when adjacent bit-fields are 25369 accessed. Bit-field operations may be optimized such that adjacent 25370 bit-fields are only partially accessed, if they straddle a storage unit 25371 boundary. For these reasons it is unwise to use volatile bit-fields to 25372 access hardware. 25373 25374 25375 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Volatiles, Up: C Extensions 25376 25377 6.41 Assembler Instructions with C Expression Operands 25378 ====================================================== 25379 25380 In an assembler instruction using 'asm', you can specify the operands of 25381 the instruction using C expressions. This means you need not guess 25382 which registers or memory locations contain the data you want to use. 25383 25384 You must specify an assembler instruction template much like what 25385 appears in a machine description, plus an operand constraint string for 25386 each operand. 25387 25388 For example, here is how to use the 68881's 'fsinx' instruction: 25389 25390 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 25391 25392 Here 'angle' is the C expression for the input operand while 'result' is 25393 that of the output operand. Each has '"f"' as its operand constraint, 25394 saying that a floating-point register is required. The '=' in '=f' 25395 indicates that the operand is an output; all output operands' 25396 constraints must use '='. The constraints use the same language used in 25397 the machine description (*note Constraints::). 25398 25399 Each operand is described by an operand-constraint string followed by 25400 the C expression in parentheses. A colon separates the assembler 25401 template from the first output operand and another separates the last 25402 output operand from the first input, if any. Commas separate the 25403 operands within each group. The total number of operands is currently 25404 limited to 30; this limitation may be lifted in some future version of 25405 GCC. 25406 25407 If there are no output operands but there are input operands, you must 25408 place two consecutive colons surrounding the place where the output 25409 operands would go. 25410 25411 As of GCC version 3.1, it is also possible to specify input and output 25412 operands using symbolic names which can be referenced within the 25413 assembler code. These names are specified inside square brackets 25414 preceding the constraint string, and can be referenced inside the 25415 assembler code using '%[NAME]' instead of a percentage sign followed by 25416 the operand number. Using named operands the above example could look 25417 like: 25418 25419 asm ("fsinx %[angle],%[output]" 25420 : [output] "=f" (result) 25421 : [angle] "f" (angle)); 25422 25423 Note that the symbolic operand names have no relation whatsoever to 25424 other C identifiers. You may use any name you like, even those of 25425 existing C symbols, but you must ensure that no two operands within the 25426 same assembler construct use the same symbolic name. 25427 25428 Output operand expressions must be lvalues; the compiler can check 25429 this. The input operands need not be lvalues. The compiler cannot 25430 check whether the operands have data types that are reasonable for the 25431 instruction being executed. It does not parse the assembler instruction 25432 template and does not know what it means or even whether it is valid 25433 assembler input. The extended 'asm' feature is most often used for 25434 machine instructions the compiler itself does not know exist. If the 25435 output expression cannot be directly addressed (for example, it is a 25436 bit-field), your constraint must allow a register. In that case, GCC 25437 uses the register as the output of the 'asm', and then stores that 25438 register into the output. 25439 25440 The ordinary output operands must be write-only; GCC assumes that the 25441 values in these operands before the instruction are dead and need not be 25442 generated. Extended asm supports input-output or read-write operands. 25443 Use the constraint character '+' to indicate such an operand and list it 25444 with the output operands. 25445 25446 You may, as an alternative, logically split its function into two 25447 separate operands, one input operand and one write-only output operand. 25448 The connection between them is expressed by constraints that say they 25449 need to be in the same location when the instruction executes. You can 25450 use the same C expression for both operands, or different expressions. 25451 For example, here we write the (fictitious) 'combine' instruction with 25452 'bar' as its read-only source operand and 'foo' as its read-write 25453 destination: 25454 25455 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 25456 25457 The constraint '"0"' for operand 1 says that it must occupy the same 25458 location as operand 0. A number in constraint is allowed only in an 25459 input operand and it must refer to an output operand. 25460 25461 Only a number in the constraint can guarantee that one operand is in 25462 the same place as another. The mere fact that 'foo' is the value of 25463 both operands is not enough to guarantee that they are in the same place 25464 in the generated assembler code. The following does not work reliably: 25465 25466 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 25467 25468 Various optimizations or reloading could cause operands 0 and 1 to be 25469 in different registers; GCC knows no reason not to do so. For example, 25470 the compiler might find a copy of the value of 'foo' in one register and 25471 use it for operand 1, but generate the output operand 0 in a different 25472 register (copying it afterward to 'foo''s own address). Of course, 25473 since the register for operand 1 is not even mentioned in the assembler 25474 code, the result will not work, but GCC can't tell that. 25475 25476 As of GCC version 3.1, one may write '[NAME]' instead of the operand 25477 number for a matching constraint. For example: 25478 25479 asm ("cmoveq %1,%2,%[result]" 25480 : [result] "=r"(result) 25481 : "r" (test), "r"(new), "[result]"(old)); 25482 25483 Sometimes you need to make an 'asm' operand be a specific register, but 25484 there's no matching constraint letter for that register _by itself_. To 25485 force the operand into that register, use a local variable for the 25486 operand and specify the register in the variable declaration. *Note 25487 Explicit Reg Vars::. Then for the 'asm' operand, use any register 25488 constraint letter that matches the register: 25489 25490 register int *p1 asm ("r0") = ...; 25491 register int *p2 asm ("r1") = ...; 25492 register int *result asm ("r0"); 25493 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 25494 25495 In the above example, beware that a register that is call-clobbered by 25496 the target ABI will be overwritten by any function call in the 25497 assignment, including library calls for arithmetic operators. Also a 25498 register may be clobbered when generating some operations, like variable 25499 shift, memory copy or memory move on x86. Assuming it is a 25500 call-clobbered register, this may happen to 'r0' above by the assignment 25501 to 'p2'. If you have to use such a register, use temporary variables 25502 for expressions between the register assignment and use: 25503 25504 int t1 = ...; 25505 register int *p1 asm ("r0") = ...; 25506 register int *p2 asm ("r1") = t1; 25507 register int *result asm ("r0"); 25508 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 25509 25510 Some instructions clobber specific hard registers. To describe this, 25511 write a third colon after the input operands, followed by the names of 25512 the clobbered hard registers (given as strings). Here is a realistic 25513 example for the VAX: 25514 25515 asm volatile ("movc3 %0,%1,%2" 25516 : /* no outputs */ 25517 : "g" (from), "g" (to), "g" (count) 25518 : "r0", "r1", "r2", "r3", "r4", "r5"); 25519 25520 You may not write a clobber description in a way that overlaps with an 25521 input or output operand. For example, you may not have an operand 25522 describing a register class with one member if you mention that register 25523 in the clobber list. Variables declared to live in specific registers 25524 (*note Explicit Reg Vars::), and used as asm input or output operands 25525 must have no part mentioned in the clobber description. There is no way 25526 for you to specify that an input operand is modified without also 25527 specifying it as an output operand. Note that if all the output 25528 operands you specify are for this purpose (and hence unused), you then 25529 also need to specify 'volatile' for the 'asm' construct, as described 25530 below, to prevent GCC from deleting the 'asm' statement as unused. 25531 25532 If you refer to a particular hardware register from the assembler code, 25533 you probably have to list the register after the third colon to tell the 25534 compiler the register's value is modified. In some assemblers, the 25535 register names begin with '%'; to produce one '%' in the assembler code, 25536 you must write '%%' in the input. 25537 25538 If your assembler instruction can alter the condition code register, 25539 add 'cc' to the list of clobbered registers. GCC on some machines 25540 represents the condition codes as a specific hardware register; 'cc' 25541 serves to name this register. On other machines, the condition code is 25542 handled differently, and specifying 'cc' has no effect. But it is valid 25543 no matter what the machine. 25544 25545 If your assembler instructions access memory in an unpredictable 25546 fashion, add 'memory' to the list of clobbered registers. This causes 25547 GCC to not keep memory values cached in registers across the assembler 25548 instruction and not optimize stores or loads to that memory. You also 25549 should add the 'volatile' keyword if the memory affected is not listed 25550 in the inputs or outputs of the 'asm', as the 'memory' clobber does not 25551 count as a side-effect of the 'asm'. If you know how large the accessed 25552 memory is, you can add it as input or output but if this is not known, 25553 you should add 'memory'. As an example, if you access ten bytes of a 25554 string, you can use a memory input like: 25555 25556 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 25557 25558 Note that in the following example the memory input is necessary, 25559 otherwise GCC might optimize the store to 'x' away: 25560 int foo () 25561 { 25562 int x = 42; 25563 int *y = &x; 25564 int result; 25565 asm ("magic stuff accessing an 'int' pointed to by '%1'" 25566 : "=&d" (r) : "a" (y), "m" (*y)); 25567 return result; 25568 } 25569 25570 You can put multiple assembler instructions together in a single 'asm' 25571 template, separated by the characters normally used in assembly code for 25572 the system. A combination that works in most places is a newline to 25573 break the line, plus a tab character to move to the instruction field 25574 (written as '\n\t'). Sometimes semicolons can be used, if the assembler 25575 allows semicolons as a line-breaking character. Note that some 25576 assembler dialects use semicolons to start a comment. The input 25577 operands are guaranteed not to use any of the clobbered registers, and 25578 neither do the output operands' addresses, so you can read and write the 25579 clobbered registers as many times as you like. Here is an example of 25580 multiple instructions in a template; it assumes the subroutine '_foo' 25581 accepts arguments in registers 9 and 10: 25582 25583 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 25584 : /* no outputs */ 25585 : "g" (from), "g" (to) 25586 : "r9", "r10"); 25587 25588 Unless an output operand has the '&' constraint modifier, GCC may 25589 allocate it in the same register as an unrelated input operand, on the 25590 assumption the inputs are consumed before the outputs are produced. 25591 This assumption may be false if the assembler code actually consists of 25592 more than one instruction. In such a case, use '&' for each output 25593 operand that may not overlap an input. *Note Modifiers::. 25594 25595 If you want to test the condition code produced by an assembler 25596 instruction, you must include a branch and a label in the 'asm' 25597 construct, as follows: 25598 25599 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 25600 : "g" (result) 25601 : "g" (input)); 25602 25603 This assumes your assembler supports local labels, as the GNU assembler 25604 and most Unix assemblers do. 25605 25606 Speaking of labels, jumps from one 'asm' to another are not supported. 25607 The compiler's optimizers do not know about these jumps, and therefore 25608 they cannot take account of them when deciding how to optimize. *Note 25609 Extended asm with goto::. 25610 25611 Usually the most convenient way to use these 'asm' instructions is to 25612 encapsulate them in macros that look like functions. For example, 25613 25614 #define sin(x) \ 25615 ({ double __value, __arg = (x); \ 25616 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 25617 __value; }) 25618 25619 Here the variable '__arg' is used to make sure that the instruction 25620 operates on a proper 'double' value, and to accept only those arguments 25621 'x' that can convert automatically to a 'double'. 25622 25623 Another way to make sure the instruction operates on the correct data 25624 type is to use a cast in the 'asm'. This is different from using a 25625 variable '__arg' in that it converts more different types. For example, 25626 if the desired type is 'int', casting the argument to 'int' accepts a 25627 pointer with no complaint, while assigning the argument to an 'int' 25628 variable named '__arg' warns about using a pointer unless the caller 25629 explicitly casts it. 25630 25631 If an 'asm' has output operands, GCC assumes for optimization purposes 25632 the instruction has no side effects except to change the output 25633 operands. This does not mean instructions with a side effect cannot be 25634 used, but you must be careful, because the compiler may eliminate them 25635 if the output operands aren't used, or move them out of loops, or 25636 replace two with one if they constitute a common subexpression. Also, 25637 if your instruction does have a side effect on a variable that otherwise 25638 appears not to change, the old value of the variable may be reused later 25639 if it happens to be found in a register. 25640 25641 You can prevent an 'asm' instruction from being deleted by writing the 25642 keyword 'volatile' after the 'asm'. For example: 25643 25644 #define get_and_set_priority(new) \ 25645 ({ int __old; \ 25646 asm volatile ("get_and_set_priority %0, %1" \ 25647 : "=g" (__old) : "g" (new)); \ 25648 __old; }) 25649 25650 The 'volatile' keyword indicates that the instruction has important 25651 side-effects. GCC does not delete a volatile 'asm' if it is reachable. 25652 (The instruction can still be deleted if GCC can prove that control flow 25653 never reaches the location of the instruction.) Note that even a 25654 volatile 'asm' instruction can be moved relative to other code, 25655 including across jump instructions. For example, on many targets there 25656 is a system register that can be set to control the rounding mode of 25657 floating-point operations. You might try setting it with a volatile 25658 'asm', like this PowerPC example: 25659 25660 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 25661 sum = x + y; 25662 25663 This does not work reliably, as the compiler may move the addition back 25664 before the volatile 'asm'. To make it work you need to add an 25665 artificial dependency to the 'asm' referencing a variable in the code 25666 you don't want moved, for example: 25667 25668 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 25669 sum = x + y; 25670 25671 Similarly, you can't expect a sequence of volatile 'asm' instructions 25672 to remain perfectly consecutive. If you want consecutive output, use a 25673 single 'asm'. Also, GCC performs some optimizations across a volatile 25674 'asm' instruction; GCC does not "forget everything" when it encounters a 25675 volatile 'asm' instruction the way some other compilers do. 25676 25677 An 'asm' instruction without any output operands is treated identically 25678 to a volatile 'asm' instruction. 25679 25680 It is a natural idea to look for a way to give access to the condition 25681 code left by the assembler instruction. However, when we attempted to 25682 implement this, we found no way to make it work reliably. The problem 25683 is that output operands might need reloading, which result in additional 25684 following "store" instructions. On most machines, these instructions 25685 alter the condition code before there is time to test it. This problem 25686 doesn't arise for ordinary "test" and "compare" instructions because 25687 they don't have any output operands. 25688 25689 For reasons similar to those described above, it is not possible to 25690 give an assembler instruction access to the condition code left by 25691 previous instructions. 25692 25693 As of GCC version 4.5, 'asm goto' may be used to have the assembly jump 25694 to one or more C labels. In this form, a fifth section after the 25695 clobber list contains a list of all C labels to which the assembly may 25696 jump. Each label operand is implicitly self-named. The 'asm' is also 25697 assumed to fall through to the next statement. 25698 25699 This form of 'asm' is restricted to not have outputs. This is due to a 25700 internal restriction in the compiler that control transfer instructions 25701 cannot have outputs. This restriction on 'asm goto' may be lifted in 25702 some future version of the compiler. In the meantime, 'asm goto' may 25703 include a memory clobber, and so leave outputs in memory. 25704 25705 int frob(int x) 25706 { 25707 int y; 25708 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 25709 : : "r"(x), "r"(&y) : "r5", "memory" : error); 25710 return y; 25711 error: 25712 return -1; 25713 } 25714 25715 In this (inefficient) example, the 'frob' instruction sets the carry bit 25716 to indicate an error. The 'jc' instruction detects this and branches to 25717 the 'error' label. Finally, the output of the 'frob' instruction 25718 ('%r5') is stored into the memory for variable 'y', which is later read 25719 by the 'return' statement. 25720 25721 void doit(void) 25722 { 25723 int i = 0; 25724 asm goto ("mfsr %%r1, 123; jmp %%r1;" 25725 ".pushsection doit_table;" 25726 ".long %l0, %l1, %l2, %l3;" 25727 ".popsection" 25728 : : : "r1" : label1, label2, label3, label4); 25729 __builtin_unreachable (); 25730 25731 label1: 25732 f1(); 25733 return; 25734 label2: 25735 f2(); 25736 return; 25737 label3: 25738 i = 1; 25739 label4: 25740 f3(i); 25741 } 25742 25743 In this (also inefficient) example, the 'mfsr' instruction reads an 25744 address from some out-of-band machine register, and the following 'jmp' 25745 instruction branches to that address. The address read by the 'mfsr' 25746 instruction is assumed to have been previously set via some 25747 application-specific mechanism to be one of the four values stored in 25748 the 'doit_table' section. Finally, the 'asm' is followed by a call to 25749 '__builtin_unreachable' to indicate that the 'asm' does not in fact fall 25750 through. 25751 25752 #define TRACE1(NUM) \ 25753 do { \ 25754 asm goto ("0: nop;" \ 25755 ".pushsection trace_table;" \ 25756 ".long 0b, %l0;" \ 25757 ".popsection" \ 25758 : : : : trace#NUM); \ 25759 if (0) { trace#NUM: trace(); } \ 25760 } while (0) 25761 #define TRACE TRACE1(__COUNTER__) 25762 25763 In this example (which in fact inspired the 'asm goto' feature) we want 25764 on rare occasions to call the 'trace' function; on other occasions we'd 25765 like to keep the overhead to the absolute minimum. The normal code path 25766 consists of a single 'nop' instruction. However, we record the address 25767 of this 'nop' together with the address of a label that calls the 25768 'trace' function. This allows the 'nop' instruction to be patched at 25769 run time to be an unconditional branch to the stored label. It is 25770 assumed that an optimizing compiler moves the labeled block out of line, 25771 to optimize the fall through path from the 'asm'. 25772 25773 If you are writing a header file that should be includable in ISO C 25774 programs, write '__asm__' instead of 'asm'. *Note Alternate Keywords::. 25775 25776 6.41.1 Size of an 'asm' 25777 ----------------------- 25778 25779 Some targets require that GCC track the size of each instruction used in 25780 order to generate correct code. Because the final length of an 'asm' is 25781 only known by the assembler, GCC must make an estimate as to how big it 25782 will be. The estimate is formed by counting the number of statements in 25783 the pattern of the 'asm' and multiplying that by the length of the 25784 longest instruction on that processor. Statements in the 'asm' are 25785 identified by newline characters and whatever statement separator 25786 characters are supported by the assembler; on most processors this is 25787 the ';' character. 25788 25789 Normally, GCC's estimate is perfectly adequate to ensure that correct 25790 code is generated, but it is possible to confuse the compiler if you use 25791 pseudo instructions or assembler macros that expand into multiple real 25792 instructions or if you use assembler directives that expand to more 25793 space in the object file than is needed for a single instruction. If 25794 this happens then the assembler produces a diagnostic saying that a 25795 label is unreachable. 25796 25797 6.41.2 i386 floating-point asm operands 25798 --------------------------------------- 25799 25800 On i386 targets, there are several rules on the usage of stack-like 25801 registers in the operands of an 'asm'. These rules apply only to the 25802 operands that are stack-like registers: 25803 25804 1. Given a set of input registers that die in an 'asm', it is 25805 necessary to know which are implicitly popped by the 'asm', and 25806 which must be explicitly popped by GCC. 25807 25808 An input register that is implicitly popped by the 'asm' must be 25809 explicitly clobbered, unless it is constrained to match an output 25810 operand. 25811 25812 2. For any input register that is implicitly popped by an 'asm', it is 25813 necessary to know how to adjust the stack to compensate for the 25814 pop. If any non-popped input is closer to the top of the reg-stack 25815 than the implicitly popped register, it would not be possible to 25816 know what the stack looked like--it's not clear how the rest of the 25817 stack "slides up". 25818 25819 All implicitly popped input registers must be closer to the top of 25820 the reg-stack than any input that is not implicitly popped. 25821 25822 It is possible that if an input dies in an 'asm', the compiler 25823 might use the input register for an output reload. Consider this 25824 example: 25825 25826 asm ("foo" : "=t" (a) : "f" (b)); 25827 25828 This code says that input 'b' is not popped by the 'asm', and that 25829 the 'asm' pushes a result onto the reg-stack, i.e., the stack is 25830 one deeper after the 'asm' than it was before. But, it is possible 25831 that reload may think that it can use the same register for both 25832 the input and the output. 25833 25834 To prevent this from happening, if any input operand uses the 'f' 25835 constraint, all output register constraints must use the '&' 25836 early-clobber modifier. 25837 25838 The example above would be correctly written as: 25839 25840 asm ("foo" : "=&t" (a) : "f" (b)); 25841 25842 3. Some operands need to be in particular places on the stack. All 25843 output operands fall in this category--GCC has no other way to know 25844 which registers the outputs appear in unless you indicate this in 25845 the constraints. 25846 25847 Output operands must specifically indicate which register an output 25848 appears in after an 'asm'. '=f' is not allowed: the operand 25849 constraints must select a class with a single register. 25850 25851 4. Output operands may not be "inserted" between existing stack 25852 registers. Since no 387 opcode uses a read/write operand, all 25853 output operands are dead before the 'asm', and are pushed by the 25854 'asm'. It makes no sense to push anywhere but the top of the 25855 reg-stack. 25856 25857 Output operands must start at the top of the reg-stack: output 25858 operands may not "skip" a register. 25859 25860 5. Some 'asm' statements may need extra stack space for internal 25861 calculations. This can be guaranteed by clobbering stack registers 25862 unrelated to the inputs and outputs. 25863 25864 Here are a couple of reasonable 'asm's to want to write. This 'asm' 25865 takes one input, which is internally popped, and produces two outputs. 25866 25867 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 25868 25869 This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode, 25870 and replaces them with one output. The 'st(1)' clobber is necessary for 25871 the compiler to know that 'fyl2xp1' pops both inputs. 25872 25873 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 25874 25875 25876 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 25877 25878 6.42 Constraints for 'asm' Operands 25879 =================================== 25880 25881 Here are specific details on what constraint letters you can use with 25882 'asm' operands. Constraints can say whether an operand may be in a 25883 register, and which kinds of register; whether the operand can be a 25884 memory reference, and which kinds of address; whether the operand may be 25885 an immediate constant, and which possible values it may have. 25886 Constraints can also require two operands to match. Side-effects aren't 25887 allowed in operands of inline 'asm', unless '<' or '>' constraints are 25888 used, because there is no guarantee that the side-effects will happen 25889 exactly once in an instruction that can update the addressing register. 25890 25891 * Menu: 25892 25893 * Simple Constraints:: Basic use of constraints. 25894 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 25895 * Modifiers:: More precise control over effects of constraints. 25896 * Machine Constraints:: Special constraints for some particular machines. 25897 25898 25899 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 25900 25901 6.42.1 Simple Constraints 25902 ------------------------- 25903 25904 The simplest kind of constraint is a string full of letters, each of 25905 which describes one kind of operand that is permitted. Here are the 25906 letters that are allowed: 25907 25908 whitespace 25909 Whitespace characters are ignored and can be inserted at any 25910 position except the first. This enables each alternative for 25911 different operands to be visually aligned in the machine 25912 description even if they have different number of constraints and 25913 modifiers. 25914 25915 'm' 25916 A memory operand is allowed, with any kind of address that the 25917 machine supports in general. Note that the letter used for the 25918 general memory constraint can be re-defined by a back end using the 25919 'TARGET_MEM_CONSTRAINT' macro. 25920 25921 'o' 25922 A memory operand is allowed, but only if the address is 25923 "offsettable". This means that adding a small integer (actually, 25924 the width in bytes of the operand, as determined by its machine 25925 mode) may be added to the address and the result is also a valid 25926 memory address. 25927 25928 For example, an address which is constant is offsettable; so is an 25929 address that is the sum of a register and a constant (as long as a 25930 slightly larger constant is also within the range of 25931 address-offsets supported by the machine); but an autoincrement or 25932 autodecrement address is not offsettable. More complicated 25933 indirect/indexed addresses may or may not be offsettable depending 25934 on the other addressing modes that the machine supports. 25935 25936 Note that in an output operand which can be matched by another 25937 operand, the constraint letter 'o' is valid only when accompanied 25938 by both '<' (if the target machine has predecrement addressing) and 25939 '>' (if the target machine has preincrement addressing). 25940 25941 'V' 25942 A memory operand that is not offsettable. In other words, anything 25943 that would fit the 'm' constraint but not the 'o' constraint. 25944 25945 '<' 25946 A memory operand with autodecrement addressing (either predecrement 25947 or postdecrement) is allowed. In inline 'asm' this constraint is 25948 only allowed if the operand is used exactly once in an instruction 25949 that can handle the side-effects. Not using an operand with '<' in 25950 constraint string in the inline 'asm' pattern at all or using it in 25951 multiple instructions isn't valid, because the side-effects 25952 wouldn't be performed or would be performed more than once. 25953 Furthermore, on some targets the operand with '<' in constraint 25954 string must be accompanied by special instruction suffixes like 25955 '%U0' instruction suffix on PowerPC or '%P0' on IA-64. 25956 25957 '>' 25958 A memory operand with autoincrement addressing (either preincrement 25959 or postincrement) is allowed. In inline 'asm' the same 25960 restrictions as for '<' apply. 25961 25962 'r' 25963 A register operand is allowed provided that it is in a general 25964 register. 25965 25966 'i' 25967 An immediate integer operand (one with constant value) is allowed. 25968 This includes symbolic constants whose values will be known only at 25969 assembly time or later. 25970 25971 'n' 25972 An immediate integer operand with a known numeric value is allowed. 25973 Many systems cannot support assembly-time constants for operands 25974 less than a word wide. Constraints for these operands should use 25975 'n' rather than 'i'. 25976 25977 'I', 'J', 'K', ... 'P' 25978 Other letters in the range 'I' through 'P' may be defined in a 25979 machine-dependent fashion to permit immediate integer operands with 25980 explicit integer values in specified ranges. For example, on the 25981 68000, 'I' is defined to stand for the range of values 1 to 8. 25982 This is the range permitted as a shift count in the shift 25983 instructions. 25984 25985 'E' 25986 An immediate floating operand (expression code 'const_double') is 25987 allowed, but only if the target floating point format is the same 25988 as that of the host machine (on which the compiler is running). 25989 25990 'F' 25991 An immediate floating operand (expression code 'const_double' or 25992 'const_vector') is allowed. 25993 25994 'G', 'H' 25995 'G' and 'H' may be defined in a machine-dependent fashion to permit 25996 immediate floating operands in particular ranges of values. 25997 25998 's' 25999 An immediate integer operand whose value is not an explicit integer 26000 is allowed. 26001 26002 This might appear strange; if an insn allows a constant operand 26003 with a value not known at compile time, it certainly must allow any 26004 known value. So why use 's' instead of 'i'? Sometimes it allows 26005 better code to be generated. 26006 26007 For example, on the 68000 in a fullword instruction it is possible 26008 to use an immediate operand; but if the immediate value is between 26009 -128 and 127, better code results from loading the value into a 26010 register and using the register. This is because the load into the 26011 register can be done with a 'moveq' instruction. We arrange for 26012 this to happen by defining the letter 'K' to mean "any integer 26013 outside the range -128 to 127", and then specifying 'Ks' in the 26014 operand constraints. 26015 26016 'g' 26017 Any register, memory or immediate integer operand is allowed, 26018 except for registers that are not general registers. 26019 26020 'X' 26021 Any operand whatsoever is allowed. 26022 26023 '0', '1', '2', ... '9' 26024 An operand that matches the specified operand number is allowed. 26025 If a digit is used together with letters within the same 26026 alternative, the digit should come last. 26027 26028 This number is allowed to be more than a single digit. If multiple 26029 digits are encountered consecutively, they are interpreted as a 26030 single decimal integer. There is scant chance for ambiguity, since 26031 to-date it has never been desirable that '10' be interpreted as 26032 matching either operand 1 _or_ operand 0. Should this be desired, 26033 one can use multiple alternatives instead. 26034 26035 This is called a "matching constraint" and what it really means is 26036 that the assembler has only a single operand that fills two roles 26037 which 'asm' distinguishes. For example, an add instruction uses 26038 two input operands and an output operand, but on most CISC machines 26039 an add instruction really has only two operands, one of them an 26040 input-output operand: 26041 26042 addl #35,r12 26043 26044 Matching constraints are used in these circumstances. More 26045 precisely, the two operands that match must include one input-only 26046 operand and one output-only operand. Moreover, the digit must be a 26047 smaller number than the number of the operand that uses it in the 26048 constraint. 26049 26050 'p' 26051 An operand that is a valid memory address is allowed. This is for 26052 "load address" and "push address" instructions. 26053 26054 'p' in the constraint must be accompanied by 'address_operand' as 26055 the predicate in the 'match_operand'. This predicate interprets 26056 the mode specified in the 'match_operand' as the mode of the memory 26057 reference for which the address would be valid. 26058 26059 OTHER-LETTERS 26060 Other letters can be defined in machine-dependent fashion to stand 26061 for particular classes of registers or other arbitrary operand 26062 types. 'd', 'a' and 'f' are defined on the 68000/68020 to stand 26063 for data, address and floating point registers. 26064 26065 26066 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 26067 26068 6.42.2 Multiple Alternative Constraints 26069 --------------------------------------- 26070 26071 Sometimes a single instruction has multiple alternative sets of possible 26072 operands. For example, on the 68000, a logical-or instruction can 26073 combine register or an immediate value into memory, or it can combine 26074 any kind of operand into a register; but it cannot combine one memory 26075 location into another. 26076 26077 These constraints are represented as multiple alternatives. An 26078 alternative can be described by a series of letters for each operand. 26079 The overall constraint for an operand is made from the letters for this 26080 operand from the first alternative, a comma, the letters for this 26081 operand from the second alternative, a comma, and so on until the last 26082 alternative. 26083 26084 If all the operands fit any one alternative, the instruction is valid. 26085 Otherwise, for each alternative, the compiler counts how many 26086 instructions must be added to copy the operands so that that alternative 26087 applies. The alternative requiring the least copying is chosen. If two 26088 alternatives need the same amount of copying, the one that comes first 26089 is chosen. These choices can be altered with the '?' and '!' 26090 characters: 26091 26092 '?' 26093 Disparage slightly the alternative that the '?' appears in, as a 26094 choice when no alternative applies exactly. The compiler regards 26095 this alternative as one unit more costly for each '?' that appears 26096 in it. 26097 26098 '!' 26099 Disparage severely the alternative that the '!' appears in. This 26100 alternative can still be used if it fits without reloading, but if 26101 reloading is needed, some other alternative will be used. 26102 26103 26104 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 26105 26106 6.42.3 Constraint Modifier Characters 26107 ------------------------------------- 26108 26109 Here are constraint modifier characters. 26110 26111 '=' 26112 Means that this operand is write-only for this instruction: the 26113 previous value is discarded and replaced by output data. 26114 26115 '+' 26116 Means that this operand is both read and written by the 26117 instruction. 26118 26119 When the compiler fixes up the operands to satisfy the constraints, 26120 it needs to know which operands are inputs to the instruction and 26121 which are outputs from it. '=' identifies an output; '+' 26122 identifies an operand that is both input and output; all other 26123 operands are assumed to be input only. 26124 26125 If you specify '=' or '+' in a constraint, you put it in the first 26126 character of the constraint string. 26127 26128 '&' 26129 Means (in a particular alternative) that this operand is an 26130 "earlyclobber" operand, which is modified before the instruction is 26131 finished using the input operands. Therefore, this operand may not 26132 lie in a register that is used as an input operand or as part of 26133 any memory address. 26134 26135 '&' applies only to the alternative in which it is written. In 26136 constraints with multiple alternatives, sometimes one alternative 26137 requires '&' while others do not. See, for example, the 'movdf' 26138 insn of the 68000. 26139 26140 An input operand can be tied to an earlyclobber operand if its only 26141 use as an input occurs before the early result is written. Adding 26142 alternatives of this form often allows GCC to produce better code 26143 when only some of the inputs can be affected by the earlyclobber. 26144 See, for example, the 'mulsi3' insn of the ARM. 26145 26146 '&' does not obviate the need to write '='. 26147 26148 '%' 26149 Declares the instruction to be commutative for this operand and the 26150 following operand. This means that the compiler may interchange 26151 the two operands if that is the cheapest way to make all operands 26152 fit the constraints. GCC can only handle one commutative pair in 26153 an asm; if you use more, the compiler may fail. Note that you need 26154 not use the modifier if the two alternatives are strictly 26155 identical; this would only waste time in the reload pass. The 26156 modifier is not operational after register allocation, so the 26157 result of 'define_peephole2' and 'define_split's performed after 26158 reload cannot rely on '%' to make the intended insn match. 26159 26160 '#' 26161 Says that all following characters, up to the next comma, are to be 26162 ignored as a constraint. They are significant only for choosing 26163 register preferences. 26164 26165 '*' 26166 Says that the following character should be ignored when choosing 26167 register preferences. '*' has no effect on the meaning of the 26168 constraint as a constraint, and no effect on reloading. For LRA 26169 '*' additionally disparages slightly the alternative if the 26170 following character matches the operand. 26171 26172 26173 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 26174 26175 6.42.4 Constraints for Particular Machines 26176 ------------------------------------------ 26177 26178 Whenever possible, you should use the general-purpose constraint letters 26179 in 'asm' arguments, since they will convey meaning more readily to 26180 people reading your code. Failing that, use the constraint letters that 26181 usually have very similar meanings across architectures. The most 26182 commonly used constraints are 'm' and 'r' (for memory and 26183 general-purpose registers respectively; *note Simple Constraints::), and 26184 'I', usually the letter indicating the most common immediate-constant 26185 format. 26186 26187 Each architecture defines additional constraints. These constraints 26188 are used by the compiler itself for instruction generation, as well as 26189 for 'asm' statements; therefore, some of the constraints are not 26190 particularly useful for 'asm'. Here is a summary of some of the 26191 machine-dependent constraints available on some particular machines; it 26192 includes both constraints that are useful for 'asm' and constraints that 26193 aren't. The compiler source file mentioned in the table heading for 26194 each architecture is the definitive reference for the meanings of that 26195 architecture's constraints. 26196 26197 _AArch64 family--'config/aarch64/constraints.md'_ 26198 'k' 26199 The stack pointer register ('SP') 26200 26201 'w' 26202 Floating point or SIMD vector register 26203 26204 'I' 26205 Integer constant that is valid as an immediate operand in an 26206 'ADD' instruction 26207 26208 'J' 26209 Integer constant that is valid as an immediate operand in a 26210 'SUB' instruction (once negated) 26211 26212 'K' 26213 Integer constant that can be used with a 32-bit logical 26214 instruction 26215 26216 'L' 26217 Integer constant that can be used with a 64-bit logical 26218 instruction 26219 26220 'M' 26221 Integer constant that is valid as an immediate operand in a 26222 32-bit 'MOV' pseudo instruction. The 'MOV' may be assembled 26223 to one of several different machine instructions depending on 26224 the value 26225 26226 'N' 26227 Integer constant that is valid as an immediate operand in a 26228 64-bit 'MOV' pseudo instruction 26229 26230 'S' 26231 An absolute symbolic address or a label reference 26232 26233 'Y' 26234 Floating point constant zero 26235 26236 'Z' 26237 Integer constant zero 26238 26239 'Usa' 26240 An absolute symbolic address 26241 26242 'Ush' 26243 The high part (bits 12 and upwards) of the pc-relative address 26244 of a symbol within 4GB of the instruction 26245 26246 'Q' 26247 A memory address which uses a single base register with no 26248 offset 26249 26250 'Ump' 26251 A memory address suitable for a load/store pair instruction in 26252 SI, DI, SF and DF modes 26253 26254 _ARM family--'config/arm/constraints.md'_ 26255 'w' 26256 VFP floating-point register 26257 26258 'G' 26259 The floating-point constant 0.0 26260 26261 'I' 26262 Integer that is valid as an immediate operand in a data 26263 processing instruction. That is, an integer in the range 0 to 26264 255 rotated by a multiple of 2 26265 26266 'J' 26267 Integer in the range -4095 to 4095 26268 26269 'K' 26270 Integer that satisfies constraint 'I' when inverted (ones 26271 complement) 26272 26273 'L' 26274 Integer that satisfies constraint 'I' when negated (twos 26275 complement) 26276 26277 'M' 26278 Integer in the range 0 to 32 26279 26280 'Q' 26281 A memory reference where the exact address is in a single 26282 register (''m'' is preferable for 'asm' statements) 26283 26284 'R' 26285 An item in the constant pool 26286 26287 'S' 26288 A symbol in the text segment of the current file 26289 26290 'Uv' 26291 A memory reference suitable for VFP load/store insns 26292 (reg+constant offset) 26293 26294 'Uy' 26295 A memory reference suitable for iWMMXt load/store 26296 instructions. 26297 26298 'Uq' 26299 A memory reference suitable for the ARMv4 ldrsb instruction. 26300 26301 _AVR family--'config/avr/constraints.md'_ 26302 'l' 26303 Registers from r0 to r15 26304 26305 'a' 26306 Registers from r16 to r23 26307 26308 'd' 26309 Registers from r16 to r31 26310 26311 'w' 26312 Registers from r24 to r31. These registers can be used in 26313 'adiw' command 26314 26315 'e' 26316 Pointer register (r26-r31) 26317 26318 'b' 26319 Base pointer register (r28-r31) 26320 26321 'q' 26322 Stack pointer register (SPH:SPL) 26323 26324 't' 26325 Temporary register r0 26326 26327 'x' 26328 Register pair X (r27:r26) 26329 26330 'y' 26331 Register pair Y (r29:r28) 26332 26333 'z' 26334 Register pair Z (r31:r30) 26335 26336 'I' 26337 Constant greater than -1, less than 64 26338 26339 'J' 26340 Constant greater than -64, less than 1 26341 26342 'K' 26343 Constant integer 2 26344 26345 'L' 26346 Constant integer 0 26347 26348 'M' 26349 Constant that fits in 8 bits 26350 26351 'N' 26352 Constant integer -1 26353 26354 'O' 26355 Constant integer 8, 16, or 24 26356 26357 'P' 26358 Constant integer 1 26359 26360 'G' 26361 A floating point constant 0.0 26362 26363 'Q' 26364 A memory address based on Y or Z pointer with displacement. 26365 26366 _Epiphany--'config/epiphany/constraints.md'_ 26367 'U16' 26368 An unsigned 16-bit constant. 26369 26370 'K' 26371 An unsigned 5-bit constant. 26372 26373 'L' 26374 A signed 11-bit constant. 26375 26376 'Cm1' 26377 A signed 11-bit constant added to -1. Can only match when the 26378 '-m1reg-REG' option is active. 26379 26380 'Cl1' 26381 Left-shift of -1, i.e., a bit mask with a block of leading 26382 ones, the rest being a block of trailing zeroes. Can only 26383 match when the '-m1reg-REG' option is active. 26384 26385 'Cr1' 26386 Right-shift of -1, i.e., a bit mask with a trailing block of 26387 ones, the rest being zeroes. Or to put it another way, one 26388 less than a power of two. Can only match when the 26389 '-m1reg-REG' option is active. 26390 26391 'Cal' 26392 Constant for arithmetic/logical operations. This is like 'i', 26393 except that for position independent code, no symbols / 26394 expressions needing relocations are allowed. 26395 26396 'Csy' 26397 Symbolic constant for call/jump instruction. 26398 26399 'Rcs' 26400 The register class usable in short insns. This is a register 26401 class constraint, and can thus drive register allocation. 26402 This constraint won't match unless '-mprefer-short-insn-regs' 26403 is in effect. 26404 26405 'Rsc' 26406 The the register class of registers that can be used to hold a 26407 sibcall call address. I.e., a caller-saved register. 26408 26409 'Rct' 26410 Core control register class. 26411 26412 'Rgs' 26413 The register group usable in short insns. This constraint 26414 does not use a register class, so that it only passively 26415 matches suitable registers, and doesn't drive register 26416 allocation. 26417 26418 'Rra' 26419 Matches the return address if it can be replaced with the link 26420 register. 26421 26422 'Rcc' 26423 Matches the integer condition code register. 26424 26425 'Sra' 26426 Matches the return address if it is in a stack slot. 26427 26428 'Cfm' 26429 Matches control register values to switch fp mode, which are 26430 encapsulated in 'UNSPEC_FP_MODE'. 26431 26432 _CR16 Architecture--'config/cr16/cr16.h'_ 26433 26434 'b' 26435 Registers from r0 to r14 (registers without stack pointer) 26436 26437 't' 26438 Register from r0 to r11 (all 16-bit registers) 26439 26440 'p' 26441 Register from r12 to r15 (all 32-bit registers) 26442 26443 'I' 26444 Signed constant that fits in 4 bits 26445 26446 'J' 26447 Signed constant that fits in 5 bits 26448 26449 'K' 26450 Signed constant that fits in 6 bits 26451 26452 'L' 26453 Unsigned constant that fits in 4 bits 26454 26455 'M' 26456 Signed constant that fits in 32 bits 26457 26458 'N' 26459 Check for 64 bits wide constants for add/sub instructions 26460 26461 'G' 26462 Floating point constant that is legal for store immediate 26463 26464 _Hewlett-Packard PA-RISC--'config/pa/pa.h'_ 26465 'a' 26466 General register 1 26467 26468 'f' 26469 Floating point register 26470 26471 'q' 26472 Shift amount register 26473 26474 'x' 26475 Floating point register (deprecated) 26476 26477 'y' 26478 Upper floating point register (32-bit), floating point 26479 register (64-bit) 26480 26481 'Z' 26482 Any register 26483 26484 'I' 26485 Signed 11-bit integer constant 26486 26487 'J' 26488 Signed 14-bit integer constant 26489 26490 'K' 26491 Integer constant that can be deposited with a 'zdepi' 26492 instruction 26493 26494 'L' 26495 Signed 5-bit integer constant 26496 26497 'M' 26498 Integer constant 0 26499 26500 'N' 26501 Integer constant that can be loaded with a 'ldil' instruction 26502 26503 'O' 26504 Integer constant whose value plus one is a power of 2 26505 26506 'P' 26507 Integer constant that can be used for 'and' operations in 26508 'depi' and 'extru' instructions 26509 26510 'S' 26511 Integer constant 31 26512 26513 'U' 26514 Integer constant 63 26515 26516 'G' 26517 Floating-point constant 0.0 26518 26519 'A' 26520 A 'lo_sum' data-linkage-table memory operand 26521 26522 'Q' 26523 A memory operand that can be used as the destination operand 26524 of an integer store instruction 26525 26526 'R' 26527 A scaled or unscaled indexed memory operand 26528 26529 'T' 26530 A memory operand for floating-point loads and stores 26531 26532 'W' 26533 A register indirect memory operand 26534 26535 _picoChip family--'picochip.h'_ 26536 'k' 26537 Stack register. 26538 26539 'f' 26540 Pointer register. A register which can be used to access 26541 memory without supplying an offset. Any other register can be 26542 used to access memory, but will need a constant offset. In 26543 the case of the offset being zero, it is more efficient to use 26544 a pointer register, since this reduces code size. 26545 26546 't' 26547 A twin register. A register which may be paired with an 26548 adjacent register to create a 32-bit register. 26549 26550 'a' 26551 Any absolute memory address (e.g., symbolic constant, symbolic 26552 constant + offset). 26553 26554 'I' 26555 4-bit signed integer. 26556 26557 'J' 26558 4-bit unsigned integer. 26559 26560 'K' 26561 8-bit signed integer. 26562 26563 'M' 26564 Any constant whose absolute value is no greater than 4-bits. 26565 26566 'N' 26567 10-bit signed integer 26568 26569 'O' 26570 16-bit signed integer. 26571 26572 _PowerPC and IBM RS6000--'config/rs6000/constraints.md'_ 26573 'b' 26574 Address base register 26575 26576 'd' 26577 Floating point register (containing 64-bit value) 26578 26579 'f' 26580 Floating point register (containing 32-bit value) 26581 26582 'v' 26583 Altivec vector register 26584 26585 'wa' 26586 Any VSX register if the -mvsx option was used or NO_REGS. 26587 26588 'wd' 26589 VSX vector register to hold vector double data or NO_REGS. 26590 26591 'wf' 26592 VSX vector register to hold vector float data or NO_REGS. 26593 26594 'wg' 26595 If '-mmfpgpr' was used, a floating point register or NO_REGS. 26596 26597 'wl' 26598 Floating point register if the LFIWAX instruction is enabled 26599 or NO_REGS. 26600 26601 'wm' 26602 VSX register if direct move instructions are enabled, or 26603 NO_REGS. 26604 26605 'wn' 26606 No register (NO_REGS). 26607 26608 'wr' 26609 General purpose register if 64-bit instructions are enabled or 26610 NO_REGS. 26611 26612 'ws' 26613 VSX vector register to hold scalar double values or NO_REGS. 26614 26615 'wt' 26616 VSX vector register to hold 128 bit integer or NO_REGS. 26617 26618 'wu' 26619 Altivec register to use for float/32-bit int loads/stores or 26620 NO_REGS. 26621 26622 'wv' 26623 Altivec register to use for double loads/stores or NO_REGS. 26624 26625 'ww' 26626 FP or VSX register to perform float operations under '-mvsx' 26627 or NO_REGS. 26628 26629 'wx' 26630 Floating point register if the STFIWX instruction is enabled 26631 or NO_REGS. 26632 26633 'wy' 26634 VSX vector register to hold scalar float values or NO_REGS. 26635 26636 'wz' 26637 Floating point register if the LFIWZX instruction is enabled 26638 or NO_REGS. 26639 26640 'wQ' 26641 A memory address that will work with the 'lq' and 'stq' 26642 instructions. 26643 26644 'h' 26645 'MQ', 'CTR', or 'LINK' register 26646 26647 'q' 26648 'MQ' register 26649 26650 'c' 26651 'CTR' register 26652 26653 'l' 26654 'LINK' register 26655 26656 'x' 26657 'CR' register (condition register) number 0 26658 26659 'y' 26660 'CR' register (condition register) 26661 26662 'z' 26663 'XER[CA]' carry bit (part of the XER register) 26664 26665 'I' 26666 Signed 16-bit constant 26667 26668 'J' 26669 Unsigned 16-bit constant shifted left 16 bits (use 'L' instead 26670 for 'SImode' constants) 26671 26672 'K' 26673 Unsigned 16-bit constant 26674 26675 'L' 26676 Signed 16-bit constant shifted left 16 bits 26677 26678 'M' 26679 Constant larger than 31 26680 26681 'N' 26682 Exact power of 2 26683 26684 'O' 26685 Zero 26686 26687 'P' 26688 Constant whose negation is a signed 16-bit constant 26689 26690 'G' 26691 Floating point constant that can be loaded into a register 26692 with one instruction per word 26693 26694 'H' 26695 Integer/Floating point constant that can be loaded into a 26696 register using three instructions 26697 26698 'm' 26699 Memory operand. Normally, 'm' does not allow addresses that 26700 update the base register. If '<' or '>' constraint is also 26701 used, they are allowed and therefore on PowerPC targets in 26702 that case it is only safe to use 'm<>' in an 'asm' statement 26703 if that 'asm' statement accesses the operand exactly once. 26704 The 'asm' statement must also use '%U<OPNO>' as a placeholder 26705 for the "update" flag in the corresponding load or store 26706 instruction. For example: 26707 26708 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 26709 26710 is correct but: 26711 26712 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 26713 26714 is not. 26715 26716 'es' 26717 A "stable" memory operand; that is, one which does not include 26718 any automodification of the base register. This used to be 26719 useful when 'm' allowed automodification of the base register, 26720 but as those are now only allowed when '<' or '>' is used, 26721 'es' is basically the same as 'm' without '<' and '>'. 26722 26723 'Q' 26724 Memory operand that is an offset from a register (it is 26725 usually better to use 'm' or 'es' in 'asm' statements) 26726 26727 'Z' 26728 Memory operand that is an indexed or indirect from a register 26729 (it is usually better to use 'm' or 'es' in 'asm' statements) 26730 26731 'R' 26732 AIX TOC entry 26733 26734 'a' 26735 Address operand that is an indexed or indirect from a register 26736 ('p' is preferable for 'asm' statements) 26737 26738 'S' 26739 Constant suitable as a 64-bit mask operand 26740 26741 'T' 26742 Constant suitable as a 32-bit mask operand 26743 26744 'U' 26745 System V Release 4 small data area reference 26746 26747 't' 26748 AND masks that can be performed by two rldic{l, r} 26749 instructions 26750 26751 'W' 26752 Vector constant that does not require memory 26753 26754 'j' 26755 Vector constant that is all zeros. 26756 26757 _Intel 386--'config/i386/constraints.md'_ 26758 'R' 26759 Legacy register--the eight integer registers available on all 26760 i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp'). 26761 26762 'q' 26763 Any register accessible as 'Rl'. In 32-bit mode, 'a', 'b', 26764 'c', and 'd'; in 64-bit mode, any integer register. 26765 26766 'Q' 26767 Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'. 26768 26769 'a' 26770 The 'a' register. 26771 26772 'b' 26773 The 'b' register. 26774 26775 'c' 26776 The 'c' register. 26777 26778 'd' 26779 The 'd' register. 26780 26781 'S' 26782 The 'si' register. 26783 26784 'D' 26785 The 'di' register. 26786 26787 'A' 26788 The 'a' and 'd' registers. This class is used for 26789 instructions that return double word results in the 'ax:dx' 26790 register pair. Single word values will be allocated either in 26791 'ax' or 'dx'. For example on i386 the following implements 26792 'rdtsc': 26793 26794 unsigned long long rdtsc (void) 26795 { 26796 unsigned long long tick; 26797 __asm__ __volatile__("rdtsc":"=A"(tick)); 26798 return tick; 26799 } 26800 26801 This is not correct on x86_64 as it would allocate tick in 26802 either 'ax' or 'dx'. You have to use the following variant 26803 instead: 26804 26805 unsigned long long rdtsc (void) 26806 { 26807 unsigned int tickl, tickh; 26808 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 26809 return ((unsigned long long)tickh << 32)|tickl; 26810 } 26811 26812 'f' 26813 Any 80387 floating-point (stack) register. 26814 26815 't' 26816 Top of 80387 floating-point stack ('%st(0)'). 26817 26818 'u' 26819 Second from top of 80387 floating-point stack ('%st(1)'). 26820 26821 'y' 26822 Any MMX register. 26823 26824 'x' 26825 Any SSE register. 26826 26827 'Yz' 26828 First SSE register ('%xmm0'). 26829 26830 'I' 26831 Integer constant in the range 0 ... 31, for 32-bit shifts. 26832 26833 'J' 26834 Integer constant in the range 0 ... 63, for 64-bit shifts. 26835 26836 'K' 26837 Signed 8-bit integer constant. 26838 26839 'L' 26840 '0xFF' or '0xFFFF', for andsi as a zero-extending move. 26841 26842 'M' 26843 0, 1, 2, or 3 (shifts for the 'lea' instruction). 26844 26845 'N' 26846 Unsigned 8-bit integer constant (for 'in' and 'out' 26847 instructions). 26848 26849 'G' 26850 Standard 80387 floating point constant. 26851 26852 'C' 26853 Standard SSE floating point constant. 26854 26855 'e' 26856 32-bit signed integer constant, or a symbolic reference known 26857 to fit that range (for immediate operands in sign-extending 26858 x86-64 instructions). 26859 26860 'Z' 26861 32-bit unsigned integer constant, or a symbolic reference 26862 known to fit that range (for immediate operands in 26863 zero-extending x86-64 instructions). 26864 26865 _Intel IA-64--'config/ia64/ia64.h'_ 26866 'a' 26867 General register 'r0' to 'r3' for 'addl' instruction 26868 26869 'b' 26870 Branch register 26871 26872 'c' 26873 Predicate register ('c' as in "conditional") 26874 26875 'd' 26876 Application register residing in M-unit 26877 26878 'e' 26879 Application register residing in I-unit 26880 26881 'f' 26882 Floating-point register 26883 26884 'm' 26885 Memory operand. If used together with '<' or '>', the operand 26886 can have postincrement and postdecrement which require 26887 printing with '%Pn' on IA-64. 26888 26889 'G' 26890 Floating-point constant 0.0 or 1.0 26891 26892 'I' 26893 14-bit signed integer constant 26894 26895 'J' 26896 22-bit signed integer constant 26897 26898 'K' 26899 8-bit signed integer constant for logical instructions 26900 26901 'L' 26902 8-bit adjusted signed integer constant for compare pseudo-ops 26903 26904 'M' 26905 6-bit unsigned integer constant for shift counts 26906 26907 'N' 26908 9-bit signed integer constant for load and store 26909 postincrements 26910 26911 'O' 26912 The constant zero 26913 26914 'P' 26915 0 or -1 for 'dep' instruction 26916 26917 'Q' 26918 Non-volatile memory for floating-point loads and stores 26919 26920 'R' 26921 Integer constant in the range 1 to 4 for 'shladd' instruction 26922 26923 'S' 26924 Memory operand except postincrement and postdecrement. This 26925 is now roughly the same as 'm' when not used together with '<' 26926 or '>'. 26927 26928 _FRV--'config/frv/frv.h'_ 26929 'a' 26930 Register in the class 'ACC_REGS' ('acc0' to 'acc7'). 26931 26932 'b' 26933 Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7'). 26934 26935 'c' 26936 Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0' 26937 to 'icc3'). 26938 26939 'd' 26940 Register in the class 'GPR_REGS' ('gr0' to 'gr63'). 26941 26942 'e' 26943 Register in the class 'EVEN_REGS' ('gr0' to 'gr63'). Odd 26944 registers are excluded not in the class but through the use of 26945 a machine mode larger than 4 bytes. 26946 26947 'f' 26948 Register in the class 'FPR_REGS' ('fr0' to 'fr63'). 26949 26950 'h' 26951 Register in the class 'FEVEN_REGS' ('fr0' to 'fr63'). Odd 26952 registers are excluded not in the class but through the use of 26953 a machine mode larger than 4 bytes. 26954 26955 'l' 26956 Register in the class 'LR_REG' (the 'lr' register). 26957 26958 'q' 26959 Register in the class 'QUAD_REGS' ('gr2' to 'gr63'). Register 26960 numbers not divisible by 4 are excluded not in the class but 26961 through the use of a machine mode larger than 8 bytes. 26962 26963 't' 26964 Register in the class 'ICC_REGS' ('icc0' to 'icc3'). 26965 26966 'u' 26967 Register in the class 'FCC_REGS' ('fcc0' to 'fcc3'). 26968 26969 'v' 26970 Register in the class 'ICR_REGS' ('cc4' to 'cc7'). 26971 26972 'w' 26973 Register in the class 'FCR_REGS' ('cc0' to 'cc3'). 26974 26975 'x' 26976 Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63'). 26977 Register numbers not divisible by 4 are excluded not in the 26978 class but through the use of a machine mode larger than 8 26979 bytes. 26980 26981 'z' 26982 Register in the class 'SPR_REGS' ('lcr' and 'lr'). 26983 26984 'A' 26985 Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7'). 26986 26987 'B' 26988 Register in the class 'ACCG_REGS' ('accg0' to 'accg7'). 26989 26990 'C' 26991 Register in the class 'CR_REGS' ('cc0' to 'cc7'). 26992 26993 'G' 26994 Floating point constant zero 26995 26996 'I' 26997 6-bit signed integer constant 26998 26999 'J' 27000 10-bit signed integer constant 27001 27002 'L' 27003 16-bit signed integer constant 27004 27005 'M' 27006 16-bit unsigned integer constant 27007 27008 'N' 27009 12-bit signed integer constant that is negative--i.e. in the 27010 range of -2048 to -1 27011 27012 'O' 27013 Constant zero 27014 27015 'P' 27016 12-bit signed integer constant that is greater than zero--i.e. 27017 in the range of 1 to 2047. 27018 27019 _Blackfin family--'config/bfin/constraints.md'_ 27020 'a' 27021 P register 27022 27023 'd' 27024 D register 27025 27026 'z' 27027 A call clobbered P register. 27028 27029 'qN' 27030 A single register. If N is in the range 0 to 7, the 27031 corresponding D register. If it is 'A', then the register P0. 27032 27033 'D' 27034 Even-numbered D register 27035 27036 'W' 27037 Odd-numbered D register 27038 27039 'e' 27040 Accumulator register. 27041 27042 'A' 27043 Even-numbered accumulator register. 27044 27045 'B' 27046 Odd-numbered accumulator register. 27047 27048 'b' 27049 I register 27050 27051 'v' 27052 B register 27053 27054 'f' 27055 M register 27056 27057 'c' 27058 Registers used for circular buffering, i.e. I, B, or L 27059 registers. 27060 27061 'C' 27062 The CC register. 27063 27064 't' 27065 LT0 or LT1. 27066 27067 'k' 27068 LC0 or LC1. 27069 27070 'u' 27071 LB0 or LB1. 27072 27073 'x' 27074 Any D, P, B, M, I or L register. 27075 27076 'y' 27077 Additional registers typically used only in prologues and 27078 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 27079 USP. 27080 27081 'w' 27082 Any register except accumulators or CC. 27083 27084 'Ksh' 27085 Signed 16 bit integer (in the range -32768 to 32767) 27086 27087 'Kuh' 27088 Unsigned 16 bit integer (in the range 0 to 65535) 27089 27090 'Ks7' 27091 Signed 7 bit integer (in the range -64 to 63) 27092 27093 'Ku7' 27094 Unsigned 7 bit integer (in the range 0 to 127) 27095 27096 'Ku5' 27097 Unsigned 5 bit integer (in the range 0 to 31) 27098 27099 'Ks4' 27100 Signed 4 bit integer (in the range -8 to 7) 27101 27102 'Ks3' 27103 Signed 3 bit integer (in the range -3 to 4) 27104 27105 'Ku3' 27106 Unsigned 3 bit integer (in the range 0 to 7) 27107 27108 'PN' 27109 Constant N, where N is a single-digit constant in the range 0 27110 to 4. 27111 27112 'PA' 27113 An integer equal to one of the MACFLAG_XXX constants that is 27114 suitable for use with either accumulator. 27115 27116 'PB' 27117 An integer equal to one of the MACFLAG_XXX constants that is 27118 suitable for use only with accumulator A1. 27119 27120 'M1' 27121 Constant 255. 27122 27123 'M2' 27124 Constant 65535. 27125 27126 'J' 27127 An integer constant with exactly a single bit set. 27128 27129 'L' 27130 An integer constant with all bits set except exactly one. 27131 27132 'H' 27133 27134 'Q' 27135 Any SYMBOL_REF. 27136 27137 _M32C--'config/m32c/m32c.c'_ 27138 'Rsp' 27139 'Rfb' 27140 'Rsb' 27141 '$sp', '$fb', '$sb'. 27142 27143 'Rcr' 27144 Any control register, when they're 16 bits wide (nothing if 27145 control registers are 24 bits wide) 27146 27147 'Rcl' 27148 Any control register, when they're 24 bits wide. 27149 27150 'R0w' 27151 'R1w' 27152 'R2w' 27153 'R3w' 27154 $r0, $r1, $r2, $r3. 27155 27156 'R02' 27157 $r0 or $r2, or $r2r0 for 32 bit values. 27158 27159 'R13' 27160 $r1 or $r3, or $r3r1 for 32 bit values. 27161 27162 'Rdi' 27163 A register that can hold a 64 bit value. 27164 27165 'Rhl' 27166 $r0 or $r1 (registers with addressable high/low bytes) 27167 27168 'R23' 27169 $r2 or $r3 27170 27171 'Raa' 27172 Address registers 27173 27174 'Raw' 27175 Address registers when they're 16 bits wide. 27176 27177 'Ral' 27178 Address registers when they're 24 bits wide. 27179 27180 'Rqi' 27181 Registers that can hold QI values. 27182 27183 'Rad' 27184 Registers that can be used with displacements ($a0, $a1, $sb). 27185 27186 'Rsi' 27187 Registers that can hold 32 bit values. 27188 27189 'Rhi' 27190 Registers that can hold 16 bit values. 27191 27192 'Rhc' 27193 Registers chat can hold 16 bit values, including all control 27194 registers. 27195 27196 'Rra' 27197 $r0 through R1, plus $a0 and $a1. 27198 27199 'Rfl' 27200 The flags register. 27201 27202 'Rmm' 27203 The memory-based pseudo-registers $mem0 through $mem15. 27204 27205 'Rpi' 27206 Registers that can hold pointers (16 bit registers for r8c, 27207 m16c; 24 bit registers for m32cm, m32c). 27208 27209 'Rpa' 27210 Matches multiple registers in a PARALLEL to form a larger 27211 register. Used to match function return values. 27212 27213 'Is3' 27214 -8 ... 7 27215 27216 'IS1' 27217 -128 ... 127 27218 27219 'IS2' 27220 -32768 ... 32767 27221 27222 'IU2' 27223 0 ... 65535 27224 27225 'In4' 27226 -8 ... -1 or 1 ... 8 27227 27228 'In5' 27229 -16 ... -1 or 1 ... 16 27230 27231 'In6' 27232 -32 ... -1 or 1 ... 32 27233 27234 'IM2' 27235 -65536 ... -1 27236 27237 'Ilb' 27238 An 8 bit value with exactly one bit set. 27239 27240 'Ilw' 27241 A 16 bit value with exactly one bit set. 27242 27243 'Sd' 27244 The common src/dest memory addressing modes. 27245 27246 'Sa' 27247 Memory addressed using $a0 or $a1. 27248 27249 'Si' 27250 Memory addressed with immediate addresses. 27251 27252 'Ss' 27253 Memory addressed using the stack pointer ($sp). 27254 27255 'Sf' 27256 Memory addressed using the frame base register ($fb). 27257 27258 'Ss' 27259 Memory addressed using the small base register ($sb). 27260 27261 'S1' 27262 $r1h 27263 27264 _MeP--'config/mep/constraints.md'_ 27265 27266 'a' 27267 The $sp register. 27268 27269 'b' 27270 The $tp register. 27271 27272 'c' 27273 Any control register. 27274 27275 'd' 27276 Either the $hi or the $lo register. 27277 27278 'em' 27279 Coprocessor registers that can be directly loaded ($c0-$c15). 27280 27281 'ex' 27282 Coprocessor registers that can be moved to each other. 27283 27284 'er' 27285 Coprocessor registers that can be moved to core registers. 27286 27287 'h' 27288 The $hi register. 27289 27290 'j' 27291 The $rpc register. 27292 27293 'l' 27294 The $lo register. 27295 27296 't' 27297 Registers which can be used in $tp-relative addressing. 27298 27299 'v' 27300 The $gp register. 27301 27302 'x' 27303 The coprocessor registers. 27304 27305 'y' 27306 The coprocessor control registers. 27307 27308 'z' 27309 The $0 register. 27310 27311 'A' 27312 User-defined register set A. 27313 27314 'B' 27315 User-defined register set B. 27316 27317 'C' 27318 User-defined register set C. 27319 27320 'D' 27321 User-defined register set D. 27322 27323 'I' 27324 Offsets for $gp-rel addressing. 27325 27326 'J' 27327 Constants that can be used directly with boolean insns. 27328 27329 'K' 27330 Constants that can be moved directly to registers. 27331 27332 'L' 27333 Small constants that can be added to registers. 27334 27335 'M' 27336 Long shift counts. 27337 27338 'N' 27339 Small constants that can be compared to registers. 27340 27341 'O' 27342 Constants that can be loaded into the top half of registers. 27343 27344 'S' 27345 Signed 8-bit immediates. 27346 27347 'T' 27348 Symbols encoded for $tp-rel or $gp-rel addressing. 27349 27350 'U' 27351 Non-constant addresses for loading/saving coprocessor 27352 registers. 27353 27354 'W' 27355 The top half of a symbol's value. 27356 27357 'Y' 27358 A register indirect address without offset. 27359 27360 'Z' 27361 Symbolic references to the control bus. 27362 27363 _MicroBlaze--'config/microblaze/constraints.md'_ 27364 'd' 27365 A general register ('r0' to 'r31'). 27366 27367 'z' 27368 A status register ('rmsr', '$fcc1' to '$fcc7'). 27369 27370 _MIPS--'config/mips/constraints.md'_ 27371 'd' 27372 An address register. This is equivalent to 'r' unless 27373 generating MIPS16 code. 27374 27375 'f' 27376 A floating-point register (if available). 27377 27378 'h' 27379 Formerly the 'hi' register. This constraint is no longer 27380 supported. 27381 27382 'l' 27383 The 'lo' register. Use this register to store values that are 27384 no bigger than a word. 27385 27386 'x' 27387 The concatenated 'hi' and 'lo' registers. Use this register 27388 to store doubleword values. 27389 27390 'c' 27391 A register suitable for use in an indirect jump. This will 27392 always be '$25' for '-mabicalls'. 27393 27394 'v' 27395 Register '$3'. Do not use this constraint in new code; it is 27396 retained only for compatibility with glibc. 27397 27398 'y' 27399 Equivalent to 'r'; retained for backwards compatibility. 27400 27401 'z' 27402 A floating-point condition code register. 27403 27404 'I' 27405 A signed 16-bit constant (for arithmetic instructions). 27406 27407 'J' 27408 Integer zero. 27409 27410 'K' 27411 An unsigned 16-bit constant (for logic instructions). 27412 27413 'L' 27414 A signed 32-bit constant in which the lower 16 bits are zero. 27415 Such constants can be loaded using 'lui'. 27416 27417 'M' 27418 A constant that cannot be loaded using 'lui', 'addiu' or 27419 'ori'. 27420 27421 'N' 27422 A constant in the range -65535 to -1 (inclusive). 27423 27424 'O' 27425 A signed 15-bit constant. 27426 27427 'P' 27428 A constant in the range 1 to 65535 (inclusive). 27429 27430 'G' 27431 Floating-point zero. 27432 27433 'R' 27434 An address that can be used in a non-macro load or store. 27435 27436 _Motorola 680x0--'config/m68k/constraints.md'_ 27437 'a' 27438 Address register 27439 27440 'd' 27441 Data register 27442 27443 'f' 27444 68881 floating-point register, if available 27445 27446 'I' 27447 Integer in the range 1 to 8 27448 27449 'J' 27450 16-bit signed number 27451 27452 'K' 27453 Signed number whose magnitude is greater than 0x80 27454 27455 'L' 27456 Integer in the range -8 to -1 27457 27458 'M' 27459 Signed number whose magnitude is greater than 0x100 27460 27461 'N' 27462 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 27463 27464 'O' 27465 16 (for rotate using swap) 27466 27467 'P' 27468 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 27469 27470 'R' 27471 Numbers that mov3q can handle 27472 27473 'G' 27474 Floating point constant that is not a 68881 constant 27475 27476 'S' 27477 Operands that satisfy 'm' when -mpcrel is in effect 27478 27479 'T' 27480 Operands that satisfy 's' when -mpcrel is not in effect 27481 27482 'Q' 27483 Address register indirect addressing mode 27484 27485 'U' 27486 Register offset addressing 27487 27488 'W' 27489 const_call_operand 27490 27491 'Cs' 27492 symbol_ref or const 27493 27494 'Ci' 27495 const_int 27496 27497 'C0' 27498 const_int 0 27499 27500 'Cj' 27501 Range of signed numbers that don't fit in 16 bits 27502 27503 'Cmvq' 27504 Integers valid for mvq 27505 27506 'Capsw' 27507 Integers valid for a moveq followed by a swap 27508 27509 'Cmvz' 27510 Integers valid for mvz 27511 27512 'Cmvs' 27513 Integers valid for mvs 27514 27515 'Ap' 27516 push_operand 27517 27518 'Ac' 27519 Non-register operands allowed in clr 27520 27521 _Moxie--'config/moxie/constraints.md'_ 27522 'A' 27523 An absolute address 27524 27525 'B' 27526 An offset address 27527 27528 'W' 27529 A register indirect memory operand 27530 27531 'I' 27532 A constant in the range of 0 to 255. 27533 27534 'N' 27535 A constant in the range of 0 to -255. 27536 27537 _PDP-11--'config/pdp11/constraints.md'_ 27538 'a' 27539 Floating point registers AC0 through AC3. These can be loaded 27540 from/to memory with a single instruction. 27541 27542 'd' 27543 Odd numbered general registers (R1, R3, R5). These are used 27544 for 16-bit multiply operations. 27545 27546 'f' 27547 Any of the floating point registers (AC0 through AC5). 27548 27549 'G' 27550 Floating point constant 0. 27551 27552 'I' 27553 An integer constant that fits in 16 bits. 27554 27555 'J' 27556 An integer constant whose low order 16 bits are zero. 27557 27558 'K' 27559 An integer constant that does not meet the constraints for 27560 codes 'I' or 'J'. 27561 27562 'L' 27563 The integer constant 1. 27564 27565 'M' 27566 The integer constant -1. 27567 27568 'N' 27569 The integer constant 0. 27570 27571 'O' 27572 Integer constants -4 through -1 and 1 through 4; shifts by 27573 these amounts are handled as multiple single-bit shifts rather 27574 than a single variable-length shift. 27575 27576 'Q' 27577 A memory reference which requires an additional word (address 27578 or offset) after the opcode. 27579 27580 'R' 27581 A memory reference that is encoded within the opcode. 27582 27583 _RL78--'config/rl78/constraints.md'_ 27584 27585 'Int3' 27586 An integer constant in the range 1 ... 7. 27587 'Int8' 27588 An integer constant in the range 0 ... 255. 27589 'J' 27590 An integer constant in the range -255 ... 0 27591 'K' 27592 The integer constant 1. 27593 'L' 27594 The integer constant -1. 27595 'M' 27596 The integer constant 0. 27597 'N' 27598 The integer constant 2. 27599 'O' 27600 The integer constant -2. 27601 'P' 27602 An integer constant in the range 1 ... 15. 27603 'Qbi' 27604 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 27605 'Qsc' 27606 The synthetic compare types-gt, lt, ge, and le. 27607 'Wab' 27608 A memory reference with an absolute address. 27609 'Wbc' 27610 A memory reference using 'BC' as a base register, with an 27611 optional offset. 27612 'Wca' 27613 A memory reference using 'AX', 'BC', 'DE', or 'HL' for the 27614 address, for calls. 27615 'Wcv' 27616 A memory reference using any 16-bit register pair for the 27617 address, for calls. 27618 'Wd2' 27619 A memory reference using 'DE' as a base register, with an 27620 optional offset. 27621 'Wde' 27622 A memory reference using 'DE' as a base register, without any 27623 offset. 27624 'Wfr' 27625 Any memory reference to an address in the far address space. 27626 'Wh1' 27627 A memory reference using 'HL' as a base register, with an 27628 optional one-byte offset. 27629 'Whb' 27630 A memory reference using 'HL' as a base register, with 'B' or 27631 'C' as the index register. 27632 'Whl' 27633 A memory reference using 'HL' as a base register, without any 27634 offset. 27635 'Ws1' 27636 A memory reference using 'SP' as a base register, with an 27637 optional one-byte offset. 27638 'Y' 27639 Any memory reference to an address in the near address space. 27640 'A' 27641 The 'AX' register. 27642 'B' 27643 The 'BC' register. 27644 'D' 27645 The 'DE' register. 27646 'R' 27647 'A' through 'L' registers. 27648 'S' 27649 The 'SP' register. 27650 'T' 27651 The 'HL' register. 27652 'Z08W' 27653 The 16-bit 'R8' register. 27654 'Z10W' 27655 The 16-bit 'R10' register. 27656 'Zint' 27657 The registers reserved for interrupts ('R24' to 'R31'). 27658 'a' 27659 The 'A' register. 27660 'b' 27661 The 'B' register. 27662 'c' 27663 The 'C' register. 27664 'd' 27665 The 'D' register. 27666 'e' 27667 The 'E' register. 27668 'h' 27669 The 'H' register. 27670 'l' 27671 The 'L' register. 27672 'v' 27673 The virtual registers. 27674 'w' 27675 The 'PSW' register. 27676 'x' 27677 The 'X' register. 27678 27679 _RX--'config/rx/constraints.md'_ 27680 'Q' 27681 An address which does not involve register indirect addressing 27682 or pre/post increment/decrement addressing. 27683 27684 'Symbol' 27685 A symbol reference. 27686 27687 'Int08' 27688 A constant in the range -256 to 255, inclusive. 27689 27690 'Sint08' 27691 A constant in the range -128 to 127, inclusive. 27692 27693 'Sint16' 27694 A constant in the range -32768 to 32767, inclusive. 27695 27696 'Sint24' 27697 A constant in the range -8388608 to 8388607, inclusive. 27698 27699 'Uint04' 27700 A constant in the range 0 to 15, inclusive. 27701 27702 _SPARC--'config/sparc/sparc.h'_ 27703 'f' 27704 Floating-point register on the SPARC-V8 architecture and lower 27705 floating-point register on the SPARC-V9 architecture. 27706 27707 'e' 27708 Floating-point register. It is equivalent to 'f' on the 27709 SPARC-V8 architecture and contains both lower and upper 27710 floating-point registers on the SPARC-V9 architecture. 27711 27712 'c' 27713 Floating-point condition code register. 27714 27715 'd' 27716 Lower floating-point register. It is only valid on the 27717 SPARC-V9 architecture when the Visual Instruction Set is 27718 available. 27719 27720 'b' 27721 Floating-point register. It is only valid on the SPARC-V9 27722 architecture when the Visual Instruction Set is available. 27723 27724 'h' 27725 64-bit global or out register for the SPARC-V8+ architecture. 27726 27727 'C' 27728 The constant all-ones, for floating-point. 27729 27730 'A' 27731 Signed 5-bit constant 27732 27733 'D' 27734 A vector constant 27735 27736 'I' 27737 Signed 13-bit constant 27738 27739 'J' 27740 Zero 27741 27742 'K' 27743 32-bit constant with the low 12 bits clear (a constant that 27744 can be loaded with the 'sethi' instruction) 27745 27746 'L' 27747 A constant in the range supported by 'movcc' instructions 27748 (11-bit signed immediate) 27749 27750 'M' 27751 A constant in the range supported by 'movrcc' instructions 27752 (10-bit signed immediate) 27753 27754 'N' 27755 Same as 'K', except that it verifies that bits that are not in 27756 the lower 32-bit range are all zero. Must be used instead of 27757 'K' for modes wider than 'SImode' 27758 27759 'O' 27760 The constant 4096 27761 27762 'G' 27763 Floating-point zero 27764 27765 'H' 27766 Signed 13-bit constant, sign-extended to 32 or 64 bits 27767 27768 'P' 27769 The constant -1 27770 27771 'Q' 27772 Floating-point constant whose integral representation can be 27773 moved into an integer register using a single sethi 27774 instruction 27775 27776 'R' 27777 Floating-point constant whose integral representation can be 27778 moved into an integer register using a single mov instruction 27779 27780 'S' 27781 Floating-point constant whose integral representation can be 27782 moved into an integer register using a high/lo_sum instruction 27783 sequence 27784 27785 'T' 27786 Memory address aligned to an 8-byte boundary 27787 27788 'U' 27789 Even register 27790 27791 'W' 27792 Memory address for 'e' constraint registers 27793 27794 'w' 27795 Memory address with only a base register 27796 27797 'Y' 27798 Vector zero 27799 27800 _SPU--'config/spu/spu.h'_ 27801 'a' 27802 An immediate which can be loaded with the il/ila/ilh/ilhu 27803 instructions. const_int is treated as a 64 bit value. 27804 27805 'c' 27806 An immediate for and/xor/or instructions. const_int is 27807 treated as a 64 bit value. 27808 27809 'd' 27810 An immediate for the 'iohl' instruction. const_int is treated 27811 as a 64 bit value. 27812 27813 'f' 27814 An immediate which can be loaded with 'fsmbi'. 27815 27816 'A' 27817 An immediate which can be loaded with the il/ila/ilh/ilhu 27818 instructions. const_int is treated as a 32 bit value. 27819 27820 'B' 27821 An immediate for most arithmetic instructions. const_int is 27822 treated as a 32 bit value. 27823 27824 'C' 27825 An immediate for and/xor/or instructions. const_int is 27826 treated as a 32 bit value. 27827 27828 'D' 27829 An immediate for the 'iohl' instruction. const_int is treated 27830 as a 32 bit value. 27831 27832 'I' 27833 A constant in the range [-64, 63] for shift/rotate 27834 instructions. 27835 27836 'J' 27837 An unsigned 7-bit constant for conversion/nop/channel 27838 instructions. 27839 27840 'K' 27841 A signed 10-bit constant for most arithmetic instructions. 27842 27843 'M' 27844 A signed 16 bit immediate for 'stop'. 27845 27846 'N' 27847 An unsigned 16-bit constant for 'iohl' and 'fsmbi'. 27848 27849 'O' 27850 An unsigned 7-bit constant whose 3 least significant bits are 27851 0. 27852 27853 'P' 27854 An unsigned 3-bit constant for 16-byte rotates and shifts 27855 27856 'R' 27857 Call operand, reg, for indirect calls 27858 27859 'S' 27860 Call operand, symbol, for relative calls. 27861 27862 'T' 27863 Call operand, const_int, for absolute calls. 27864 27865 'U' 27866 An immediate which can be loaded with the il/ila/ilh/ilhu 27867 instructions. const_int is sign extended to 128 bit. 27868 27869 'W' 27870 An immediate for shift and rotate instructions. const_int is 27871 treated as a 32 bit value. 27872 27873 'Y' 27874 An immediate for and/xor/or instructions. const_int is sign 27875 extended as a 128 bit. 27876 27877 'Z' 27878 An immediate for the 'iohl' instruction. const_int is sign 27879 extended to 128 bit. 27880 27881 _S/390 and zSeries--'config/s390/s390.h'_ 27882 'a' 27883 Address register (general purpose register except r0) 27884 27885 'c' 27886 Condition code register 27887 27888 'd' 27889 Data register (arbitrary general purpose register) 27890 27891 'f' 27892 Floating-point register 27893 27894 'I' 27895 Unsigned 8-bit constant (0-255) 27896 27897 'J' 27898 Unsigned 12-bit constant (0-4095) 27899 27900 'K' 27901 Signed 16-bit constant (-32768-32767) 27902 27903 'L' 27904 Value appropriate as displacement. 27905 '(0..4095)' 27906 for short displacement 27907 '(-524288..524287)' 27908 for long displacement 27909 27910 'M' 27911 Constant integer with a value of 0x7fffffff. 27912 27913 'N' 27914 Multiple letter constraint followed by 4 parameter letters. 27915 '0..9:' 27916 number of the part counting from most to least 27917 significant 27918 'H,Q:' 27919 mode of the part 27920 'D,S,H:' 27921 mode of the containing operand 27922 '0,F:' 27923 value of the other parts (F--all bits set) 27924 The constraint matches if the specified part of a constant has 27925 a value different from its other parts. 27926 27927 'Q' 27928 Memory reference without index register and with short 27929 displacement. 27930 27931 'R' 27932 Memory reference with index register and short displacement. 27933 27934 'S' 27935 Memory reference without index register but with long 27936 displacement. 27937 27938 'T' 27939 Memory reference with index register and long displacement. 27940 27941 'U' 27942 Pointer with short displacement. 27943 27944 'W' 27945 Pointer with long displacement. 27946 27947 'Y' 27948 Shift count operand. 27949 27950 _Score family--'config/score/score.h'_ 27951 'd' 27952 Registers from r0 to r32. 27953 27954 'e' 27955 Registers from r0 to r16. 27956 27957 't' 27958 r8--r11 or r22--r27 registers. 27959 27960 'h' 27961 hi register. 27962 27963 'l' 27964 lo register. 27965 27966 'x' 27967 hi + lo register. 27968 27969 'q' 27970 cnt register. 27971 27972 'y' 27973 lcb register. 27974 27975 'z' 27976 scb register. 27977 27978 'a' 27979 cnt + lcb + scb register. 27980 27981 'c' 27982 cr0--cr15 register. 27983 27984 'b' 27985 cp1 registers. 27986 27987 'f' 27988 cp2 registers. 27989 27990 'i' 27991 cp3 registers. 27992 27993 'j' 27994 cp1 + cp2 + cp3 registers. 27995 27996 'I' 27997 High 16-bit constant (32-bit constant with 16 LSBs zero). 27998 27999 'J' 28000 Unsigned 5 bit integer (in the range 0 to 31). 28001 28002 'K' 28003 Unsigned 16 bit integer (in the range 0 to 65535). 28004 28005 'L' 28006 Signed 16 bit integer (in the range -32768 to 32767). 28007 28008 'M' 28009 Unsigned 14 bit integer (in the range 0 to 16383). 28010 28011 'N' 28012 Signed 14 bit integer (in the range -8192 to 8191). 28013 28014 'Z' 28015 Any SYMBOL_REF. 28016 28017 _Xstormy16--'config/stormy16/stormy16.h'_ 28018 'a' 28019 Register r0. 28020 28021 'b' 28022 Register r1. 28023 28024 'c' 28025 Register r2. 28026 28027 'd' 28028 Register r8. 28029 28030 'e' 28031 Registers r0 through r7. 28032 28033 't' 28034 Registers r0 and r1. 28035 28036 'y' 28037 The carry register. 28038 28039 'z' 28040 Registers r8 and r9. 28041 28042 'I' 28043 A constant between 0 and 3 inclusive. 28044 28045 'J' 28046 A constant that has exactly one bit set. 28047 28048 'K' 28049 A constant that has exactly one bit clear. 28050 28051 'L' 28052 A constant between 0 and 255 inclusive. 28053 28054 'M' 28055 A constant between -255 and 0 inclusive. 28056 28057 'N' 28058 A constant between -3 and 0 inclusive. 28059 28060 'O' 28061 A constant between 1 and 4 inclusive. 28062 28063 'P' 28064 A constant between -4 and -1 inclusive. 28065 28066 'Q' 28067 A memory reference that is a stack push. 28068 28069 'R' 28070 A memory reference that is a stack pop. 28071 28072 'S' 28073 A memory reference that refers to a constant address of known 28074 value. 28075 28076 'T' 28077 The register indicated by Rx (not implemented yet). 28078 28079 'U' 28080 A constant that is not between 2 and 15 inclusive. 28081 28082 'Z' 28083 The constant 0. 28084 28085 _TI C6X family--'config/c6x/constraints.md'_ 28086 'a' 28087 Register file A (A0-A31). 28088 28089 'b' 28090 Register file B (B0-B31). 28091 28092 'A' 28093 Predicate registers in register file A (A0-A2 on C64X and 28094 higher, A1 and A2 otherwise). 28095 28096 'B' 28097 Predicate registers in register file B (B0-B2). 28098 28099 'C' 28100 A call-used register in register file B (B0-B9, B16-B31). 28101 28102 'Da' 28103 Register file A, excluding predicate registers (A3-A31, plus 28104 A0 if not C64X or higher). 28105 28106 'Db' 28107 Register file B, excluding predicate registers (B3-B31). 28108 28109 'Iu4' 28110 Integer constant in the range 0 ... 15. 28111 28112 'Iu5' 28113 Integer constant in the range 0 ... 31. 28114 28115 'In5' 28116 Integer constant in the range -31 ... 0. 28117 28118 'Is5' 28119 Integer constant in the range -16 ... 15. 28120 28121 'I5x' 28122 Integer constant that can be the operand of an ADDA or a SUBA 28123 insn. 28124 28125 'IuB' 28126 Integer constant in the range 0 ... 65535. 28127 28128 'IsB' 28129 Integer constant in the range -32768 ... 32767. 28130 28131 'IsC' 28132 Integer constant in the range -2^{20} ... 2^{20} - 1. 28133 28134 'Jc' 28135 Integer constant that is a valid mask for the clr instruction. 28136 28137 'Js' 28138 Integer constant that is a valid mask for the set instruction. 28139 28140 'Q' 28141 Memory location with A base register. 28142 28143 'R' 28144 Memory location with B base register. 28145 28146 'Z' 28147 Register B14 (aka DP). 28148 28149 _TILE-Gx--'config/tilegx/constraints.md'_ 28150 'R00' 28151 'R01' 28152 'R02' 28153 'R03' 28154 'R04' 28155 'R05' 28156 'R06' 28157 'R07' 28158 'R08' 28159 'R09' 28160 'R10' 28161 Each of these represents a register constraint for an 28162 individual register, from r0 to r10. 28163 28164 'I' 28165 Signed 8-bit integer constant. 28166 28167 'J' 28168 Signed 16-bit integer constant. 28169 28170 'K' 28171 Unsigned 16-bit integer constant. 28172 28173 'L' 28174 Integer constant that fits in one signed byte when incremented 28175 by one (-129 ... 126). 28176 28177 'm' 28178 Memory operand. If used together with '<' or '>', the operand 28179 can have postincrement which requires printing with '%In' and 28180 '%in' on TILE-Gx. For example: 28181 28182 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 28183 28184 'M' 28185 A bit mask suitable for the BFINS instruction. 28186 28187 'N' 28188 Integer constant that is a byte tiled out eight times. 28189 28190 'O' 28191 The integer zero constant. 28192 28193 'P' 28194 Integer constant that is a sign-extended byte tiled out as 28195 four shorts. 28196 28197 'Q' 28198 Integer constant that fits in one signed byte when incremented 28199 (-129 ... 126), but excluding -1. 28200 28201 'S' 28202 Integer constant that has all 1 bits consecutive and starting 28203 at bit 0. 28204 28205 'T' 28206 A 16-bit fragment of a got, tls, or pc-relative reference. 28207 28208 'U' 28209 Memory operand except postincrement. This is roughly the same 28210 as 'm' when not used together with '<' or '>'. 28211 28212 'W' 28213 An 8-element vector constant with identical elements. 28214 28215 'Y' 28216 A 4-element vector constant with identical elements. 28217 28218 'Z0' 28219 The integer constant 0xffffffff. 28220 28221 'Z1' 28222 The integer constant 0xffffffff00000000. 28223 28224 _TILEPro--'config/tilepro/constraints.md'_ 28225 'R00' 28226 'R01' 28227 'R02' 28228 'R03' 28229 'R04' 28230 'R05' 28231 'R06' 28232 'R07' 28233 'R08' 28234 'R09' 28235 'R10' 28236 Each of these represents a register constraint for an 28237 individual register, from r0 to r10. 28238 28239 'I' 28240 Signed 8-bit integer constant. 28241 28242 'J' 28243 Signed 16-bit integer constant. 28244 28245 'K' 28246 Nonzero integer constant with low 16 bits zero. 28247 28248 'L' 28249 Integer constant that fits in one signed byte when incremented 28250 by one (-129 ... 126). 28251 28252 'm' 28253 Memory operand. If used together with '<' or '>', the operand 28254 can have postincrement which requires printing with '%In' and 28255 '%in' on TILEPro. For example: 28256 28257 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 28258 28259 'M' 28260 A bit mask suitable for the MM instruction. 28261 28262 'N' 28263 Integer constant that is a byte tiled out four times. 28264 28265 'O' 28266 The integer zero constant. 28267 28268 'P' 28269 Integer constant that is a sign-extended byte tiled out as two 28270 shorts. 28271 28272 'Q' 28273 Integer constant that fits in one signed byte when incremented 28274 (-129 ... 126), but excluding -1. 28275 28276 'T' 28277 A symbolic operand, or a 16-bit fragment of a got, tls, or 28278 pc-relative reference. 28279 28280 'U' 28281 Memory operand except postincrement. This is roughly the same 28282 as 'm' when not used together with '<' or '>'. 28283 28284 'W' 28285 A 4-element vector constant with identical elements. 28286 28287 'Y' 28288 A 2-element vector constant with identical elements. 28289 28290 _Xtensa--'config/xtensa/constraints.md'_ 28291 'a' 28292 General-purpose 32-bit register 28293 28294 'b' 28295 One-bit boolean register 28296 28297 'A' 28298 MAC16 40-bit accumulator register 28299 28300 'I' 28301 Signed 12-bit integer constant, for use in MOVI instructions 28302 28303 'J' 28304 Signed 8-bit integer constant, for use in ADDI instructions 28305 28306 'K' 28307 Integer constant valid for BccI instructions 28308 28309 'L' 28310 Unsigned constant valid for BccUI instructions 28311 28312 28313 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 28314 28315 6.43 Controlling Names Used in Assembler Code 28316 ============================================= 28317 28318 You can specify the name to be used in the assembler code for a C 28319 function or variable by writing the 'asm' (or '__asm__') keyword after 28320 the declarator as follows: 28321 28322 int foo asm ("myfoo") = 2; 28323 28324 This specifies that the name to be used for the variable 'foo' in the 28325 assembler code should be 'myfoo' rather than the usual '_foo'. 28326 28327 On systems where an underscore is normally prepended to the name of a C 28328 function or variable, this feature allows you to define names for the 28329 linker that do not start with an underscore. 28330 28331 It does not make sense to use this feature with a non-static local 28332 variable since such variables do not have assembler names. If you are 28333 trying to put the variable in a particular register, see *note Explicit 28334 Reg Vars::. GCC presently accepts such code with a warning, but will 28335 probably be changed to issue an error, rather than a warning, in the 28336 future. 28337 28338 You cannot use 'asm' in this way in a function _definition_; but you 28339 can get the same effect by writing a declaration for the function before 28340 its definition and putting 'asm' there, like this: 28341 28342 extern func () asm ("FUNC"); 28343 28344 func (x, y) 28345 int x, y; 28346 /* ... */ 28347 28348 It is up to you to make sure that the assembler names you choose do not 28349 conflict with any other assembler symbols. Also, you must not use a 28350 register name; that would produce completely invalid assembler code. 28351 GCC does not as yet have the ability to store static variables in 28352 registers. Perhaps that will be added. 28353 28354 28355 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 28356 28357 6.44 Variables in Specified Registers 28358 ===================================== 28359 28360 GNU C allows you to put a few global variables into specified hardware 28361 registers. You can also specify the register in which an ordinary 28362 register variable should be allocated. 28363 28364 * Global register variables reserve registers throughout the program. 28365 This may be useful in programs such as programming language 28366 interpreters that have a couple of global variables that are 28367 accessed very often. 28368 28369 * Local register variables in specific registers do not reserve the 28370 registers, except at the point where they are used as input or 28371 output operands in an 'asm' statement and the 'asm' statement 28372 itself is not deleted. The compiler's data flow analysis is 28373 capable of determining where the specified registers contain live 28374 values, and where they are available for other uses. Stores into 28375 local register variables may be deleted when they appear to be dead 28376 according to dataflow analysis. References to local register 28377 variables may be deleted or moved or simplified. 28378 28379 These local variables are sometimes convenient for use with the 28380 extended 'asm' feature (*note Extended Asm::), if you want to write 28381 one output of the assembler instruction directly into a particular 28382 register. (This works provided the register you specify fits the 28383 constraints specified for that operand in the 'asm'.) 28384 28385 * Menu: 28386 28387 * Global Reg Vars:: 28388 * Local Reg Vars:: 28389 28390 28391 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 28392 28393 6.44.1 Defining Global Register Variables 28394 ----------------------------------------- 28395 28396 You can define a global register variable in GNU C like this: 28397 28398 register int *foo asm ("a5"); 28399 28400 Here 'a5' is the name of the register that should be used. Choose a 28401 register that is normally saved and restored by function calls on your 28402 machine, so that library routines will not clobber it. 28403 28404 Naturally the register name is cpu-dependent, so you need to 28405 conditionalize your program according to cpu type. The register 'a5' is 28406 a good choice on a 68000 for a variable of pointer type. On machines 28407 with register windows, be sure to choose a "global" register that is not 28408 affected magically by the function call mechanism. 28409 28410 In addition, different operating systems on the same CPU may differ in 28411 how they name the registers; then you need additional conditionals. For 28412 example, some 68000 operating systems call this register '%a5'. 28413 28414 Eventually there may be a way of asking the compiler to choose a 28415 register automatically, but first we need to figure out how it should 28416 choose and how to enable you to guide the choice. No solution is 28417 evident. 28418 28419 Defining a global register variable in a certain register reserves that 28420 register entirely for this use, at least within the current compilation. 28421 The register is not allocated for any other purpose in the functions in 28422 the current compilation, and is not saved and restored by these 28423 functions. Stores into this register are never deleted even if they 28424 appear to be dead, but references may be deleted or moved or simplified. 28425 28426 It is not safe to access the global register variables from signal 28427 handlers, or from more than one thread of control, because the system 28428 library routines may temporarily use the register for other things 28429 (unless you recompile them specially for the task at hand). 28430 28431 It is not safe for one function that uses a global register variable to 28432 call another such function 'foo' by way of a third function 'lose' that 28433 is compiled without knowledge of this variable (i.e. in a different 28434 source file in which the variable isn't declared). This is because 28435 'lose' might save the register and put some other value there. For 28436 example, you can't expect a global register variable to be available in 28437 the comparison-function that you pass to 'qsort', since 'qsort' might 28438 have put something else in that register. (If you are prepared to 28439 recompile 'qsort' with the same global register variable, you can solve 28440 this problem.) 28441 28442 If you want to recompile 'qsort' or other source files that do not 28443 actually use your global register variable, so that they do not use that 28444 register for any other purpose, then it suffices to specify the compiler 28445 option '-ffixed-REG'. You need not actually add a global register 28446 declaration to their source code. 28447 28448 A function that can alter the value of a global register variable 28449 cannot safely be called from a function compiled without this variable, 28450 because it could clobber the value the caller expects to find there on 28451 return. Therefore, the function that is the entry point into the part 28452 of the program that uses the global register variable must explicitly 28453 save and restore the value that belongs to its caller. 28454 28455 On most machines, 'longjmp' restores to each global register variable 28456 the value it had at the time of the 'setjmp'. On some machines, 28457 however, 'longjmp' does not change the value of global register 28458 variables. To be portable, the function that called 'setjmp' should 28459 make other arrangements to save the values of the global register 28460 variables, and to restore them in a 'longjmp'. This way, the same thing 28461 happens regardless of what 'longjmp' does. 28462 28463 All global register variable declarations must precede all function 28464 definitions. If such a declaration could appear after function 28465 definitions, the declaration would be too late to prevent the register 28466 from being used for other purposes in the preceding functions. 28467 28468 Global register variables may not have initial values, because an 28469 executable file has no means to supply initial contents for a register. 28470 28471 On the SPARC, there are reports that g3 ... g7 are suitable registers, 28472 but certain library functions, such as 'getwd', as well as the 28473 subroutines for division and remainder, modify g3 and g4. g1 and g2 are 28474 local temporaries. 28475 28476 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 28477 course, it does not do to use more than a few of those. 28478 28479 28480 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 28481 28482 6.44.2 Specifying Registers for Local Variables 28483 ----------------------------------------------- 28484 28485 You can define a local register variable with a specified register like 28486 this: 28487 28488 register int *foo asm ("a5"); 28489 28490 Here 'a5' is the name of the register that should be used. Note that 28491 this is the same syntax used for defining global register variables, but 28492 for a local variable it appears within a function. 28493 28494 Naturally the register name is cpu-dependent, but this is not a 28495 problem, since specific registers are most often useful with explicit 28496 assembler instructions (*note Extended Asm::). Both of these things 28497 generally require that you conditionalize your program according to cpu 28498 type. 28499 28500 In addition, operating systems on one type of cpu may differ in how 28501 they name the registers; then you need additional conditionals. For 28502 example, some 68000 operating systems call this register '%a5'. 28503 28504 Defining such a register variable does not reserve the register; it 28505 remains available for other uses in places where flow control determines 28506 the variable's value is not live. 28507 28508 This option does not guarantee that GCC generates code that has this 28509 variable in the register you specify at all times. You may not code an 28510 explicit reference to this register in the _assembler instruction 28511 template_ part of an 'asm' statement and assume it always refers to this 28512 variable. However, using the variable as an 'asm' _operand_ guarantees 28513 that the specified register is used for the operand. 28514 28515 Stores into local register variables may be deleted when they appear to 28516 be dead according to dataflow analysis. References to local register 28517 variables may be deleted or moved or simplified. 28518 28519 As for global register variables, it's recommended that you choose a 28520 register that is normally saved and restored by function calls on your 28521 machine, so that library routines will not clobber it. A common pitfall 28522 is to initialize multiple call-clobbered registers with arbitrary 28523 expressions, where a function call or library call for an arithmetic 28524 operator overwrites a register value from a previous assignment, for 28525 example 'r0' below: 28526 register int *p1 asm ("r0") = ...; 28527 register int *p2 asm ("r1") = ...; 28528 28529 In those cases, a solution is to use a temporary variable for each 28530 arbitrary expression. *Note Example of asm with clobbered asm reg::. 28531 28532 28533 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 28534 28535 6.45 Alternate Keywords 28536 ======================= 28537 28538 '-ansi' and the various '-std' options disable certain keywords. This 28539 causes trouble when you want to use GNU C extensions, or a 28540 general-purpose header file that should be usable by all programs, 28541 including ISO C programs. The keywords 'asm', 'typeof' and 'inline' are 28542 not available in programs compiled with '-ansi' or '-std' (although 28543 'inline' can be used in a program compiled with '-std=c99' or 28544 '-std=c11'). The ISO C99 keyword 'restrict' is only available when 28545 '-std=gnu99' (which will eventually be the default) or '-std=c99' (or 28546 the equivalent '-std=iso9899:1999'), or an option for a later standard 28547 version, is used. 28548 28549 The way to solve these problems is to put '__' at the beginning and end 28550 of each problematical keyword. For example, use '__asm__' instead of 28551 'asm', and '__inline__' instead of 'inline'. 28552 28553 Other C compilers won't accept these alternative keywords; if you want 28554 to compile with another compiler, you can define the alternate keywords 28555 as macros to replace them with the customary keywords. It looks like 28556 this: 28557 28558 #ifndef __GNUC__ 28559 #define __asm__ asm 28560 #endif 28561 28562 '-pedantic' and other options cause warnings for many GNU C extensions. 28563 You can prevent such warnings within one expression by writing 28564 '__extension__' before the expression. '__extension__' has no effect 28565 aside from this. 28566 28567 28568 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 28569 28570 6.46 Incomplete 'enum' Types 28571 ============================ 28572 28573 You can define an 'enum' tag without specifying its possible values. 28574 This results in an incomplete type, much like what you get if you write 28575 'struct foo' without describing the elements. A later declaration that 28576 does specify the possible values completes the type. 28577 28578 You can't allocate variables or storage using the type while it is 28579 incomplete. However, you can work with pointers to that type. 28580 28581 This extension may not be very useful, but it makes the handling of 28582 'enum' more consistent with the way 'struct' and 'union' are handled. 28583 28584 This extension is not supported by GNU C++. 28585 28586 28587 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 28588 28589 6.47 Function Names as Strings 28590 ============================== 28591 28592 GCC provides three magic variables that hold the name of the current 28593 function, as a string. The first of these is '__func__', which is part 28594 of the C99 standard: 28595 28596 The identifier '__func__' is implicitly declared by the translator as 28597 if, immediately following the opening brace of each function definition, 28598 the declaration 28599 28600 static const char __func__[] = "function-name"; 28601 28602 appeared, where function-name is the name of the lexically-enclosing 28603 function. This name is the unadorned name of the function. 28604 28605 '__FUNCTION__' is another name for '__func__'. Older versions of GCC 28606 recognize only this name. However, it is not standardized. For maximum 28607 portability, we recommend you use '__func__', but provide a fallback 28608 definition with the preprocessor: 28609 28610 #if __STDC_VERSION__ < 199901L 28611 # if __GNUC__ >= 2 28612 # define __func__ __FUNCTION__ 28613 # else 28614 # define __func__ "<unknown>" 28615 # endif 28616 #endif 28617 28618 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__'. 28619 However, in C++, '__PRETTY_FUNCTION__' contains the type signature of 28620 the function as well as its bare name. For example, this program: 28621 28622 extern "C" { 28623 extern int printf (char *, ...); 28624 } 28625 28626 class a { 28627 public: 28628 void sub (int i) 28629 { 28630 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 28631 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 28632 } 28633 }; 28634 28635 int 28636 main (void) 28637 { 28638 a ax; 28639 ax.sub (0); 28640 return 0; 28641 } 28642 28643 gives this output: 28644 28645 __FUNCTION__ = sub 28646 __PRETTY_FUNCTION__ = void a::sub(int) 28647 28648 These identifiers are not preprocessor macros. In GCC 3.3 and earlier, 28649 in C only, '__FUNCTION__' and '__PRETTY_FUNCTION__' were treated as 28650 string literals; they could be used to initialize 'char' arrays, and 28651 they could be concatenated with other string literals. GCC 3.4 and 28652 later treat them as variables, like '__func__'. In C++, '__FUNCTION__' 28653 and '__PRETTY_FUNCTION__' have always been variables. 28654 28655 28656 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 28657 28658 6.48 Getting the Return or Frame Address of a Function 28659 ====================================================== 28660 28661 These functions may be used to get information about the callers of a 28662 function. 28663 28664 -- Built-in Function: void * __builtin_return_address (unsigned int 28665 LEVEL) 28666 This function returns the return address of the current function, 28667 or of one of its callers. The LEVEL argument is number of frames 28668 to scan up the call stack. A value of '0' yields the return 28669 address of the current function, a value of '1' yields the return 28670 address of the caller of the current function, and so forth. When 28671 inlining the expected behavior is that the function returns the 28672 address of the function that is returned to. To work around this 28673 behavior use the 'noinline' function attribute. 28674 28675 The LEVEL argument must be a constant integer. 28676 28677 On some machines it may be impossible to determine the return 28678 address of any function other than the current one; in such cases, 28679 or when the top of the stack has been reached, this function 28680 returns '0' or a random value. In addition, 28681 '__builtin_frame_address' may be used to determine if the top of 28682 the stack has been reached. 28683 28684 Additional post-processing of the returned value may be needed, see 28685 '__builtin_extract_return_addr'. 28686 28687 This function should only be used with a nonzero argument for 28688 debugging purposes. 28689 28690 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR) 28691 The address as returned by '__builtin_return_address' may have to 28692 be fed through this function to get the actual encoded address. 28693 For example, on the 31-bit S/390 platform the highest bit has to be 28694 masked out, or on SPARC platforms an offset has to be added for the 28695 true next instruction to be executed. 28696 28697 If no fixup is needed, this function simply passes through ADDR. 28698 28699 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 28700 This function does the reverse of '__builtin_extract_return_addr'. 28701 28702 -- Built-in Function: void * __builtin_frame_address (unsigned int 28703 LEVEL) 28704 This function is similar to '__builtin_return_address', but it 28705 returns the address of the function frame rather than the return 28706 address of the function. Calling '__builtin_frame_address' with a 28707 value of '0' yields the frame address of the current function, a 28708 value of '1' yields the frame address of the caller of the current 28709 function, and so forth. 28710 28711 The frame is the area on the stack that holds local variables and 28712 saved registers. The frame address is normally the address of the 28713 first word pushed on to the stack by the function. However, the 28714 exact definition depends upon the processor and the calling 28715 convention. If the processor has a dedicated frame pointer 28716 register, and the function has a frame, then 28717 '__builtin_frame_address' returns the value of the frame pointer 28718 register. 28719 28720 On some machines it may be impossible to determine the frame 28721 address of any function other than the current one; in such cases, 28722 or when the top of the stack has been reached, this function 28723 returns '0' if the first frame pointer is properly initialized by 28724 the startup code. 28725 28726 This function should only be used with a nonzero argument for 28727 debugging purposes. 28728 28729 28730 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 28731 28732 6.49 Using Vector Instructions through Built-in Functions 28733 ========================================================= 28734 28735 On some targets, the instruction set contains SIMD vector instructions 28736 which operate on multiple values contained in one large register at the 28737 same time. For example, on the i386 the MMX, 3DNow! and SSE extensions 28738 can be used this way. 28739 28740 The first step in using these extensions is to provide the necessary 28741 data types. This should be done using an appropriate 'typedef': 28742 28743 typedef int v4si __attribute__ ((vector_size (16))); 28744 28745 The 'int' type specifies the base type, while the attribute specifies 28746 the vector size for the variable, measured in bytes. For example, the 28747 declaration above causes the compiler to set the mode for the 'v4si' 28748 type to be 16 bytes wide and divided into 'int' sized units. For a 28749 32-bit 'int' this means a vector of 4 units of 4 bytes, and the 28750 corresponding mode of 'foo' is V4SI. 28751 28752 The 'vector_size' attribute is only applicable to integral and float 28753 scalars, although arrays, pointers, and function return values are 28754 allowed in conjunction with this construct. Only sizes that are a power 28755 of two are currently allowed. 28756 28757 All the basic integer types can be used as base types, both as signed 28758 and as unsigned: 'char', 'short', 'int', 'long', 'long long'. In 28759 addition, 'float' and 'double' can be used to build floating-point 28760 vector types. 28761 28762 Specifying a combination that is not valid for the current architecture 28763 causes GCC to synthesize the instructions using a narrower mode. For 28764 example, if you specify a variable of type 'V4SI' and your architecture 28765 does not allow for this specific SIMD type, GCC produces code that uses 28766 4 'SIs'. 28767 28768 The types defined in this manner can be used with a subset of normal C 28769 operations. Currently, GCC allows using the following operators on 28770 these types: '+, -, *, /, unary minus, ^, |, &, ~, %'. 28771 28772 The operations behave like C++ 'valarrays'. Addition is defined as the 28773 addition of the corresponding elements of the operands. For example, in 28774 the code below, each of the 4 elements in A is added to the 28775 corresponding 4 elements in B and the resulting vector is stored in C. 28776 28777 typedef int v4si __attribute__ ((vector_size (16))); 28778 28779 v4si a, b, c; 28780 28781 c = a + b; 28782 28783 Subtraction, multiplication, division, and the logical operations 28784 operate in a similar manner. Likewise, the result of using the unary 28785 minus or complement operators on a vector type is a vector whose 28786 elements are the negative or complemented values of the corresponding 28787 elements in the operand. 28788 28789 It is possible to use shifting operators '<<', '>>' on integer-type 28790 vectors. The operation is defined as following: '{a0, a1, ..., an} >> 28791 {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector 28792 operands must have the same number of elements. 28793 28794 For convenience, it is allowed to use a binary vector operation where 28795 one operand is a scalar. In that case the compiler transforms the 28796 scalar operand into a vector where each element is the scalar from the 28797 operation. The transformation happens only if the scalar could be 28798 safely converted to the vector-element type. Consider the following 28799 code. 28800 28801 typedef int v4si __attribute__ ((vector_size (16))); 28802 28803 v4si a, b, c; 28804 long l; 28805 28806 a = b + 1; /* a = b + {1,1,1,1}; */ 28807 a = 2 * b; /* a = {2,2,2,2} * b; */ 28808 28809 a = l + a; /* Error, cannot convert long to int. */ 28810 28811 Vectors can be subscripted as if the vector were an array with the same 28812 number of elements and base type. Out of bound accesses invoke 28813 undefined behavior at run time. Warnings for out of bound accesses for 28814 vector subscription can be enabled with '-Warray-bounds'. 28815 28816 Vector comparison is supported with standard comparison operators: '==, 28817 !=, <, <=, >, >='. Comparison operands can be vector expressions of 28818 integer-type or real-type. Comparison between integer-type vectors and 28819 real-type vectors are not supported. The result of the comparison is a 28820 vector of the same width and number of elements as the comparison 28821 operands with a signed integral element type. 28822 28823 Vectors are compared element-wise producing 0 when comparison is false 28824 and -1 (constant of the appropriate type where all bits are set) 28825 otherwise. Consider the following example. 28826 28827 typedef int v4si __attribute__ ((vector_size (16))); 28828 28829 v4si a = {1,2,3,4}; 28830 v4si b = {3,2,1,4}; 28831 v4si c; 28832 28833 c = a > b; /* The result would be {0, 0,-1, 0} */ 28834 c = a == b; /* The result would be {0,-1, 0,-1} */ 28835 28836 Vector shuffling is available using functions '__builtin_shuffle (vec, 28837 mask)' and '__builtin_shuffle (vec0, vec1, mask)'. Both functions 28838 construct a permutation of elements from one or two vectors and return a 28839 vector of the same type as the input vector(s). The MASK is an integral 28840 vector with the same width (W) and element count (N) as the output 28841 vector. 28842 28843 The elements of the input vectors are numbered in memory ordering of 28844 VEC0 beginning at 0 and VEC1 beginning at N. The elements of MASK are 28845 considered modulo N in the single-operand case and modulo 2*N in the 28846 two-operand case. 28847 28848 Consider the following example, 28849 28850 typedef int v4si __attribute__ ((vector_size (16))); 28851 28852 v4si a = {1,2,3,4}; 28853 v4si b = {5,6,7,8}; 28854 v4si mask1 = {0,1,1,3}; 28855 v4si mask2 = {0,4,2,5}; 28856 v4si res; 28857 28858 res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */ 28859 res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */ 28860 28861 Note that '__builtin_shuffle' is intentionally semantically compatible 28862 with the OpenCL 'shuffle' and 'shuffle2' functions. 28863 28864 You can declare variables and use them in function calls and returns, 28865 as well as in assignments and some casts. You can specify a vector type 28866 as a return type for a function. Vector types can also be used as 28867 function arguments. It is possible to cast from one vector type to 28868 another, provided they are of the same size (in fact, you can also cast 28869 vectors to and from other datatypes of the same size). 28870 28871 You cannot operate between vectors of different lengths or different 28872 signedness without a cast. 28873 28874 28875 File: gcc.info, Node: Offsetof, Next: __sync Builtins, Prev: Vector Extensions, Up: C Extensions 28876 28877 6.50 Offsetof 28878 ============= 28879 28880 GCC implements for both C and C++ a syntactic extension to implement the 28881 'offsetof' macro. 28882 28883 primary: 28884 "__builtin_offsetof" "(" typename "," offsetof_member_designator ")" 28885 28886 offsetof_member_designator: 28887 identifier 28888 | offsetof_member_designator "." identifier 28889 | offsetof_member_designator "[" expr "]" 28890 28891 This extension is sufficient such that 28892 28893 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 28894 28895 is a suitable definition of the 'offsetof' macro. In C++, TYPE may be 28896 dependent. In either case, MEMBER may consist of a single identifier, 28897 or a sequence of member accesses and array references. 28898 28899 28900 File: gcc.info, Node: __sync Builtins, Next: __atomic Builtins, Prev: Offsetof, Up: C Extensions 28901 28902 6.51 Legacy __sync Built-in Functions for Atomic Memory Access 28903 ============================================================== 28904 28905 The following built-in functions are intended to be compatible with 28906 those described in the 'Intel Itanium Processor-specific Application 28907 Binary Interface', section 7.4. As such, they depart from the normal 28908 GCC practice of using the '__builtin_' prefix, and further that they are 28909 overloaded such that they work on multiple types. 28910 28911 The definition given in the Intel documentation allows only for the use 28912 of the types 'int', 'long', 'long long' as well as their unsigned 28913 counterparts. GCC allows any integral scalar or pointer type that is 1, 28914 2, 4 or 8 bytes in length. 28915 28916 Not all operations are supported by all target processors. If a 28917 particular operation cannot be implemented on the target processor, a 28918 warning is generated and a call an external function is generated. The 28919 external function carries the same name as the built-in version, with an 28920 additional suffix '_N' where N is the size of the data type. 28921 28922 In most cases, these built-in functions are considered a "full 28923 barrier". That is, no memory operand is moved across the operation, 28924 either forward or backward. Further, instructions are issued as 28925 necessary to prevent the processor from speculating loads across the 28926 operation and from queuing stores after the operation. 28927 28928 All of the routines are described in the Intel documentation to take 28929 "an optional list of variables protected by the memory barrier". It's 28930 not clear what is meant by that; it could mean that _only_ the following 28931 variables are protected, or it could mean that these variables should in 28932 addition be protected. At present GCC ignores this list and protects 28933 all variables that are globally accessible. If in the future we make 28934 some use of this list, an empty list will continue to mean all globally 28935 accessible variables. 28936 28937 'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 28938 'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 28939 'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 28940 'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 28941 'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 28942 'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 28943 These built-in functions perform the operation suggested by the 28944 name, and returns the value that had previously been in memory. 28945 That is, 28946 28947 { tmp = *ptr; *ptr OP= value; return tmp; } 28948 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 28949 28950 _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as 28951 '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'. 28952 28953 'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 28954 'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 28955 'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 28956 'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 28957 'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 28958 'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 28959 These built-in functions perform the operation suggested by the 28960 name, and return the new value. That is, 28961 28962 { *ptr OP= value; return *ptr; } 28963 { *ptr = ~(*ptr & value); return *ptr; } // nand 28964 28965 _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as 28966 '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'. 28967 28968 'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 28969 'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 28970 These built-in functions perform an atomic compare and swap. That 28971 is, if the current value of '*PTR' is OLDVAL, then write NEWVAL 28972 into '*PTR'. 28973 28974 The "bool" version returns true if the comparison is successful and 28975 NEWVAL is written. The "val" version returns the contents of 28976 '*PTR' before the operation. 28977 28978 '__sync_synchronize (...)' 28979 This built-in function issues a full memory barrier. 28980 28981 'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 28982 This built-in function, as described by Intel, is not a traditional 28983 test-and-set operation, but rather an atomic exchange operation. 28984 It writes VALUE into '*PTR', and returns the previous contents of 28985 '*PTR'. 28986 28987 Many targets have only minimal support for such locks, and do not 28988 support a full exchange operation. In this case, a target may 28989 support reduced functionality here by which the _only_ valid value 28990 to store is the immediate constant 1. The exact value actually 28991 stored in '*PTR' is implementation defined. 28992 28993 This built-in function is not a full barrier, but rather an 28994 "acquire barrier". This means that references after the operation 28995 cannot move to (or be speculated to) before the operation, but 28996 previous memory stores may not be globally visible yet, and 28997 previous memory loads may not yet be satisfied. 28998 28999 'void __sync_lock_release (TYPE *ptr, ...)' 29000 This built-in function releases the lock acquired by 29001 '__sync_lock_test_and_set'. Normally this means writing the 29002 constant 0 to '*PTR'. 29003 29004 This built-in function is not a full barrier, but rather a "release 29005 barrier". This means that all previous memory stores are globally 29006 visible, and all previous memory loads have been satisfied, but 29007 following memory reads are not prevented from being speculated to 29008 before the barrier. 29009 29010 29011 File: gcc.info, Node: __atomic Builtins, Next: x86 specific memory model extensions for transactional memory, Prev: __sync Builtins, Up: C Extensions 29012 29013 6.52 Built-in functions for memory model aware atomic operations 29014 ================================================================ 29015 29016 The following built-in functions approximately match the requirements 29017 for C++11 memory model. Many are similar to the '__sync' prefixed 29018 built-in functions, but all also have a memory model parameter. These 29019 are all identified by being prefixed with '__atomic', and most are 29020 overloaded such that they work with multiple types. 29021 29022 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8 29023 bytes in length. 16-byte integral types are also allowed if '__int128' 29024 (*note __int128::) is supported by the architecture. 29025 29026 Target architectures are encouraged to provide their own patterns for 29027 each of these built-in functions. If no target is provided, the 29028 original non-memory model set of '__sync' atomic built-in functions are 29029 utilized, along with any required synchronization fences surrounding it 29030 in order to achieve the proper behavior. Execution in this case is 29031 subject to the same restrictions as those built-in functions. 29032 29033 If there is no pattern or mechanism to provide a lock free instruction 29034 sequence, a call is made to an external routine with the same parameters 29035 to be resolved at run time. 29036 29037 The four non-arithmetic functions (load, store, exchange, and 29038 compare_exchange) all have a generic version as well. This generic 29039 version works on any data type. If the data type size maps to one of 29040 the integral sizes that may have lock free support, the generic version 29041 utilizes the lock free built-in function. Otherwise an external call is 29042 left to be resolved at run time. This external call is the same format 29043 with the addition of a 'size_t' parameter inserted as the first 29044 parameter indicating the size of the object being pointed to. All 29045 objects must be the same size. 29046 29047 There are 6 different memory models that can be specified. These map 29048 to the same names in the C++11 standard. Refer there or to the GCC wiki 29049 on atomic synchronization 29050 (http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed 29051 definitions. These memory models integrate both barriers to code motion 29052 as well as synchronization requirements with other threads. These are 29053 listed in approximately ascending order of strength. It is also 29054 possible to use target specific flags for memory model flags, like 29055 Hardware Lock Elision. 29056 29057 '__ATOMIC_RELAXED' 29058 No barriers or synchronization. 29059 '__ATOMIC_CONSUME' 29060 Data dependency only for both barrier and synchronization with 29061 another thread. 29062 '__ATOMIC_ACQUIRE' 29063 Barrier to hoisting of code and synchronizes with release (or 29064 stronger) semantic stores from another thread. 29065 '__ATOMIC_RELEASE' 29066 Barrier to sinking of code and synchronizes with acquire (or 29067 stronger) semantic loads from another thread. 29068 '__ATOMIC_ACQ_REL' 29069 Full barrier in both directions and synchronizes with acquire loads 29070 and release stores in another thread. 29071 '__ATOMIC_SEQ_CST' 29072 Full barrier in both directions and synchronizes with acquire loads 29073 and release stores in all threads. 29074 29075 When implementing patterns for these built-in functions, the memory 29076 model parameter can be ignored as long as the pattern implements the 29077 most restrictive '__ATOMIC_SEQ_CST' model. Any of the other memory 29078 models execute correctly with this memory model but they may not execute 29079 as efficiently as they could with a more appropriate implementation of 29080 the relaxed requirements. 29081 29082 Note that the C++11 standard allows for the memory model parameter to 29083 be determined at run time rather than at compile time. These built-in 29084 functions map any run-time value to '__ATOMIC_SEQ_CST' rather than 29085 invoke a runtime library call or inline a switch statement. This is 29086 standard compliant, safe, and the simplest approach for now. 29087 29088 The memory model parameter is a signed int, but only the lower 8 bits 29089 are reserved for the memory model. The remainder of the signed int is 29090 reserved for future use and should be 0. Use of the predefined atomic 29091 values ensures proper usage. 29092 29093 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel) 29094 This built-in function implements an atomic load operation. It 29095 returns the contents of '*PTR'. 29096 29097 The valid memory model variants are '__ATOMIC_RELAXED', 29098 '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'. 29099 29100 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int 29101 memmodel) 29102 This is the generic version of an atomic load. It returns the 29103 contents of '*PTR' in '*RET'. 29104 29105 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int 29106 memmodel) 29107 This built-in function implements an atomic store operation. It 29108 writes 'VAL' into '*PTR'. 29109 29110 The valid memory model variants are '__ATOMIC_RELAXED', 29111 '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'. 29112 29113 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int 29114 memmodel) 29115 This is the generic version of an atomic store. It stores the 29116 value of '*VAL' into '*PTR'. 29117 29118 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val, 29119 int memmodel) 29120 This built-in function implements an atomic exchange operation. It 29121 writes VAL into '*PTR', and returns the previous contents of 29122 '*PTR'. 29123 29124 The valid memory model variants are '__ATOMIC_RELAXED', 29125 '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and 29126 '__ATOMIC_ACQ_REL'. 29127 29128 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val, 29129 TYPE *ret, int memmodel) 29130 This is the generic version of an atomic exchange. It stores the 29131 contents of '*VAL' into '*PTR'. The original value of '*PTR' is 29132 copied into '*RET'. 29133 29134 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE 29135 *expected, TYPE desired, bool weak, int success_memmodel, int 29136 failure_memmodel) 29137 This built-in function implements an atomic compare and exchange 29138 operation. This compares the contents of '*PTR' with the contents 29139 of '*EXPECTED' and if equal, writes DESIRED into '*PTR'. If they 29140 are not equal, the current contents of '*PTR' is written into 29141 '*EXPECTED'. WEAK is true for weak compare_exchange, and false for 29142 the strong variation. Many targets only offer the strong variation 29143 and ignore the parameter. When in doubt, use the strong variation. 29144 29145 True is returned if DESIRED is written into '*PTR' and the 29146 execution is considered to conform to the memory model specified by 29147 SUCCESS_MEMMODEL. There are no restrictions on what memory model 29148 can be used here. 29149 29150 False is returned otherwise, and the execution is considered to 29151 conform to FAILURE_MEMMODEL. This memory model cannot be 29152 '__ATOMIC_RELEASE' nor '__ATOMIC_ACQ_REL'. It also cannot be a 29153 stronger model than that specified by SUCCESS_MEMMODEL. 29154 29155 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE 29156 *expected, TYPE *desired, bool weak, int success_memmodel, int 29157 failure_memmodel) 29158 This built-in function implements the generic version of 29159 '__atomic_compare_exchange'. The function is virtually identical 29160 to '__atomic_compare_exchange_n', except the desired value is also 29161 a pointer. 29162 29163 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int 29164 memmodel) 29165 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int 29166 memmodel) 29167 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int 29168 memmodel) 29169 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int 29170 memmodel) 29171 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int 29172 memmodel) 29173 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val, 29174 int memmodel) 29175 These built-in functions perform the operation suggested by the 29176 name, and return the result of the operation. That is, 29177 29178 { *ptr OP= val; return *ptr; } 29179 29180 All memory models are valid. 29181 29182 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int 29183 memmodel) 29184 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int 29185 memmodel) 29186 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int 29187 memmodel) 29188 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int 29189 memmodel) 29190 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int 29191 memmodel) 29192 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val, 29193 int memmodel) 29194 These built-in functions perform the operation suggested by the 29195 name, and return the value that had previously been in '*PTR'. 29196 That is, 29197 29198 { tmp = *ptr; *ptr OP= val; return tmp; } 29199 29200 All memory models are valid. 29201 29202 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int 29203 memmodel) 29204 29205 This built-in function performs an atomic test-and-set operation on 29206 the byte at '*PTR'. The byte is set to some implementation defined 29207 nonzero "set" value and the return value is 'true' if and only if 29208 the previous contents were "set". It should be only used for 29209 operands of type 'bool' or 'char'. For other types only part of 29210 the value may be set. 29211 29212 All memory models are valid. 29213 29214 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel) 29215 29216 This built-in function performs an atomic clear operation on 29217 '*PTR'. After the operation, '*PTR' contains 0. It should be only 29218 used for operands of type 'bool' or 'char' and in conjunction with 29219 '__atomic_test_and_set'. For other types it may only clear 29220 partially. If the type is not 'bool' prefer using 29221 '__atomic_store'. 29222 29223 The valid memory model variants are '__ATOMIC_RELAXED', 29224 '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'. 29225 29226 -- Built-in Function: void __atomic_thread_fence (int memmodel) 29227 29228 This built-in function acts as a synchronization fence between 29229 threads based on the specified memory model. 29230 29231 All memory orders are valid. 29232 29233 -- Built-in Function: void __atomic_signal_fence (int memmodel) 29234 29235 This built-in function acts as a synchronization fence between a 29236 thread and signal handlers based in the same thread. 29237 29238 All memory orders are valid. 29239 29240 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void 29241 *ptr) 29242 29243 This built-in function returns true if objects of SIZE bytes always 29244 generate lock free atomic instructions for the target architecture. 29245 SIZE must resolve to a compile-time constant and the result also 29246 resolves to a compile-time constant. 29247 29248 PTR is an optional pointer to the object that may be used to 29249 determine alignment. A value of 0 indicates typical alignment 29250 should be used. The compiler may also ignore this parameter. 29251 29252 if (_atomic_always_lock_free (sizeof (long long), 0)) 29253 29254 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void 29255 *ptr) 29256 29257 This built-in function returns true if objects of SIZE bytes always 29258 generate lock free atomic instructions for the target architecture. 29259 If it is not known to be lock free a call is made to a runtime 29260 routine named '__atomic_is_lock_free'. 29261 29262 PTR is an optional pointer to the object that may be used to 29263 determine alignment. A value of 0 indicates typical alignment 29264 should be used. The compiler may also ignore this parameter. 29265 29266 29267 File: gcc.info, Node: x86 specific memory model extensions for transactional memory, Next: Object Size Checking, Prev: __atomic Builtins, Up: C Extensions 29268 29269 6.53 x86 specific memory model extensions for transactional memory 29270 ================================================================== 29271 29272 The i386 architecture supports additional memory ordering flags to mark 29273 lock critical sections for hardware lock elision. These must be 29274 specified in addition to an existing memory model to atomic intrinsics. 29275 29276 '__ATOMIC_HLE_ACQUIRE' 29277 Start lock elision on a lock variable. Memory model must be 29278 '__ATOMIC_ACQUIRE' or stronger. 29279 '__ATOMIC_HLE_RELEASE' 29280 End lock elision on a lock variable. Memory model must be 29281 '__ATOMIC_RELEASE' or stronger. 29282 29283 When a lock acquire fails it is required for good performance to abort 29284 the transaction quickly. This can be done with a '_mm_pause' 29285 29286 #include <immintrin.h> // For _mm_pause 29287 29288 int lockvar; 29289 29290 /* Acquire lock with lock elision */ 29291 while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE)) 29292 _mm_pause(); /* Abort failed transaction */ 29293 ... 29294 /* Free lock with lock elision */ 29295 __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE); 29296 29297 29298 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions 29299 29300 6.54 Object Size Checking Built-in Functions 29301 ============================================ 29302 29303 GCC implements a limited buffer overflow protection mechanism that can 29304 prevent some buffer overflow attacks. 29305 29306 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 29307 TYPE) 29308 is a built-in construct that returns a constant number of bytes 29309 from PTR to the end of the object PTR pointer points to (if known 29310 at compile time). '__builtin_object_size' never evaluates its 29311 arguments for side-effects. If there are any side-effects in them, 29312 it returns '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for TYPE 29313 2 or 3. If there are multiple objects PTR can point to and all of 29314 them are known at compile time, the returned number is the maximum 29315 of remaining byte counts in those objects if TYPE & 2 is 0 and 29316 minimum if nonzero. If it is not possible to determine which 29317 objects PTR points to at compile time, '__builtin_object_size' 29318 should return '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for 29319 TYPE 2 or 3. 29320 29321 TYPE is an integer constant from 0 to 3. If the least significant 29322 bit is clear, objects are whole variables, if it is set, a closest 29323 surrounding subobject is considered the object a pointer points to. 29324 The second bit determines if maximum or minimum of remaining bytes 29325 is computed. 29326 29327 struct V { char buf1[10]; int b; char buf2[10]; } var; 29328 char *p = &var.buf1[1], *q = &var.b; 29329 29330 /* Here the object p points to is var. */ 29331 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 29332 /* The subobject p points to is var.buf1. */ 29333 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 29334 /* The object q points to is var. */ 29335 assert (__builtin_object_size (q, 0) 29336 == (char *) (&var + 1) - (char *) &var.b); 29337 /* The subobject q points to is var.b. */ 29338 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 29339 29340 There are built-in functions added for many common string operation 29341 functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is 29342 provided. This built-in has an additional last argument, which is the 29343 number of bytes remaining in object the DEST argument points to or 29344 '(size_t) -1' if the size is not known. 29345 29346 The built-in functions are optimized into the normal string functions 29347 like 'memcpy' if the last argument is '(size_t) -1' or if it is known at 29348 compile time that the destination object will not be overflown. If the 29349 compiler can determine at compile time the object will be always 29350 overflown, it issues a warning. 29351 29352 The intended use can be e.g. 29353 29354 #undef memcpy 29355 #define bos0(dest) __builtin_object_size (dest, 0) 29356 #define memcpy(dest, src, n) \ 29357 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 29358 29359 char *volatile p; 29360 char buf[10]; 29361 /* It is unknown what object p points to, so this is optimized 29362 into plain memcpy - no checking is possible. */ 29363 memcpy (p, "abcde", n); 29364 /* Destination is known and length too. It is known at compile 29365 time there will be no overflow. */ 29366 memcpy (&buf[5], "abcde", 5); 29367 /* Destination is known, but the length is not known at compile time. 29368 This will result in __memcpy_chk call that can check for overflow 29369 at run time. */ 29370 memcpy (&buf[5], "abcde", n); 29371 /* Destination is known and it is known at compile time there will 29372 be overflow. There will be a warning and __memcpy_chk call that 29373 will abort the program at run time. */ 29374 memcpy (&buf[6], "abcde", 5); 29375 29376 Such built-in functions are provided for 'memcpy', 'mempcpy', 29377 'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and 29378 'strncat'. 29379 29380 There are also checking built-in functions for formatted output 29381 functions. 29382 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 29383 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 29384 const char *fmt, ...); 29385 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 29386 va_list ap); 29387 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 29388 const char *fmt, va_list ap); 29389 29390 The added FLAG argument is passed unchanged to '__sprintf_chk' etc. 29391 functions and can contain implementation specific flags on what 29392 additional security measures the checking function might take, such as 29393 handling '%n' differently. 29394 29395 The OS argument is the object size S points to, like in the other 29396 built-in functions. There is a small difference in the behavior though, 29397 if OS is '(size_t) -1', the built-in functions are optimized into the 29398 non-checking functions only if FLAG is 0, otherwise the checking 29399 function is called with OS argument set to '(size_t) -1'. 29400 29401 In addition to this, there are checking built-in functions 29402 '__builtin___printf_chk', '__builtin___vprintf_chk', 29403 '__builtin___fprintf_chk' and '__builtin___vfprintf_chk'. These have 29404 just one additional argument, FLAG, right before format string FMT. If 29405 the compiler is able to optimize them to 'fputc' etc. functions, it 29406 does, otherwise the checking function is called and the FLAG argument 29407 passed to it. 29408 29409 29410 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 29411 29412 6.55 Other Built-in Functions Provided by GCC 29413 ============================================= 29414 29415 GCC provides a large number of built-in functions other than the ones 29416 mentioned above. Some of these are for internal use in the processing 29417 of exceptions or variable-length argument lists and are not documented 29418 here because they may change from time to time; we do not recommend 29419 general use of these functions. 29420 29421 The remaining functions are provided for optimization purposes. 29422 29423 GCC includes built-in versions of many of the functions in the standard 29424 C library. The versions prefixed with '__builtin_' are always treated 29425 as having the same meaning as the C library function even if you specify 29426 the '-fno-builtin' option. (*note C Dialect Options::) Many of these 29427 functions are only optimized in certain cases; if they are not optimized 29428 in a particular case, a call to the library function is emitted. 29429 29430 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or 29431 '-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero', 29432 'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l', 29433 'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked', 29434 'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r', 29435 'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1', 29436 'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy', 29437 'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf', 29438 'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32', 29439 'signbitd64', 'signbitd128', 'significandf', 'significandl', 29440 'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy', 29441 'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'toascii', 29442 'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be 29443 handled as built-in functions. All these functions have corresponding 29444 versions prefixed with '__builtin_', which may be used even in strict 29445 C90 mode. 29446 29447 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf', 29448 'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl', 29449 'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos', 29450 'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh', 29451 'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl', 29452 'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh', 29453 'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag', 29454 'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf', 29455 'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl', 29456 'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl', 29457 'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf', 29458 'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc', 29459 'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l', 29460 'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl', 29461 'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot', 29462 'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank', 29463 'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint', 29464 'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f', 29465 'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint', 29466 'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint', 29467 'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl', 29468 'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof', 29469 'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl', 29470 'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl', 29471 'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf', 29472 'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are 29473 handled as built-in functions except in strict ISO C90 mode ('-ansi' or 29474 '-std=c90'). 29475 29476 There are also built-in versions of the ISO C99 functions 'acosf', 29477 'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl', 29478 'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl', 29479 'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf', 29480 'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl', 29481 'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl', 29482 'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are 29483 recognized in any mode since ISO C90 reserves these names for the 29484 purpose to which ISO C99 puts them. All these functions have 29485 corresponding versions prefixed with '__builtin_'. 29486 29487 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit', 29488 'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper', 29489 'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions 29490 except in strict ISO C90 mode ('-ansi' or '-std=c90'). 29491 29492 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan', 29493 'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod', 29494 'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl', 29495 'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace', 29496 'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10', 29497 'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow', 29498 'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf', 29499 'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy', 29500 'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk', 29501 'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and 29502 'vsprintf' are all recognized as built-in functions unless 29503 '-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for 29504 an individual function). All of these functions have corresponding 29505 versions prefixed with '__builtin_'. 29506 29507 GCC provides built-in versions of the ISO C99 floating-point comparison 29508 macros that avoid raising exceptions for unordered operands. They have 29509 the same names as the standard macros ( 'isgreater', 'isgreaterequal', 29510 'isless', 'islessequal', 'islessgreater', and 'isunordered') , with 29511 '__builtin_' prefixed. We intend for a library implementor to be able 29512 to simply '#define' each standard macro to its built-in equivalent. In 29513 the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign' 29514 and 'isnormal' built-ins used with '__builtin_' prefixed. The 'isinf' 29515 and 'isnan' built-in functions appear both with and without the 29516 '__builtin_' prefix. 29517 29518 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 29519 29520 You can use the built-in function '__builtin_types_compatible_p' to 29521 determine whether two types are the same. 29522 29523 This built-in function returns 1 if the unqualified versions of the 29524 types TYPE1 and TYPE2 (which are types, not expressions) are 29525 compatible, 0 otherwise. The result of this built-in function can 29526 be used in integer constant expressions. 29527 29528 This built-in function ignores top level qualifiers (e.g., 'const', 29529 'volatile'). For example, 'int' is equivalent to 'const int'. 29530 29531 The type 'int[]' and 'int[5]' are compatible. On the other hand, 29532 'int' and 'char *' are not compatible, even if the size of their 29533 types, on the particular architecture are the same. Also, the 29534 amount of pointer indirection is taken into account when 29535 determining similarity. Consequently, 'short *' is not similar to 29536 'short **'. Furthermore, two types that are typedefed are 29537 considered compatible if their underlying types are compatible. 29538 29539 An 'enum' type is not considered to be compatible with another 29540 'enum' type even if both are compatible with the same integer type; 29541 this is what the C standard specifies. For example, 'enum {foo, 29542 bar}' is not similar to 'enum {hot, dog}'. 29543 29544 You typically use this function in code whose execution varies 29545 depending on the arguments' types. For example: 29546 29547 #define foo(x) \ 29548 ({ \ 29549 typeof (x) tmp = (x); \ 29550 if (__builtin_types_compatible_p (typeof (x), long double)) \ 29551 tmp = foo_long_double (tmp); \ 29552 else if (__builtin_types_compatible_p (typeof (x), double)) \ 29553 tmp = foo_double (tmp); \ 29554 else if (__builtin_types_compatible_p (typeof (x), float)) \ 29555 tmp = foo_float (tmp); \ 29556 else \ 29557 abort (); \ 29558 tmp; \ 29559 }) 29560 29561 _Note:_ This construct is only available for C. 29562 29563 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 29564 EXP2) 29565 29566 You can use the built-in function '__builtin_choose_expr' to 29567 evaluate code depending on the value of a constant expression. 29568 This built-in function returns EXP1 if CONST_EXP, which is an 29569 integer constant expression, is nonzero. Otherwise it returns 29570 EXP2. 29571 29572 This built-in function is analogous to the '? :' operator in C, 29573 except that the expression returned has its type unaltered by 29574 promotion rules. Also, the built-in function does not evaluate the 29575 expression that is not chosen. For example, if CONST_EXP evaluates 29576 to true, EXP2 is not evaluated even if it has side-effects. 29577 29578 This built-in function can return an lvalue if the chosen argument 29579 is an lvalue. 29580 29581 If EXP1 is returned, the return type is the same as EXP1's type. 29582 Similarly, if EXP2 is returned, its return type is the same as 29583 EXP2. 29584 29585 Example: 29586 29587 #define foo(x) \ 29588 __builtin_choose_expr ( \ 29589 __builtin_types_compatible_p (typeof (x), double), \ 29590 foo_double (x), \ 29591 __builtin_choose_expr ( \ 29592 __builtin_types_compatible_p (typeof (x), float), \ 29593 foo_float (x), \ 29594 /* The void expression results in a compile-time error \ 29595 when assigning the result to something. */ \ 29596 (void)0)) 29597 29598 _Note:_ This construct is only available for C. Furthermore, the 29599 unused expression (EXP1 or EXP2 depending on the value of 29600 CONST_EXP) may still generate syntax errors. This may change in 29601 future revisions. 29602 29603 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG) 29604 29605 The built-in function '__builtin_complex' is provided for use in 29606 implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'. 29607 REAL and IMAG must have the same type, a real binary floating-point 29608 type, and the result has the corresponding complex type with real 29609 and imaginary parts REAL and IMAG. Unlike 'REAL + I * IMAG', this 29610 works even when infinities, NaNs and negative zeros are involved. 29611 29612 -- Built-in Function: int __builtin_constant_p (EXP) 29613 You can use the built-in function '__builtin_constant_p' to 29614 determine if a value is known to be constant at compile time and 29615 hence that GCC can perform constant-folding on expressions 29616 involving that value. The argument of the function is the value to 29617 test. The function returns the integer 1 if the argument is known 29618 to be a compile-time constant and 0 if it is not known to be a 29619 compile-time constant. A return of 0 does not indicate that the 29620 value is _not_ a constant, but merely that GCC cannot prove it is a 29621 constant with the specified value of the '-O' option. 29622 29623 You typically use this function in an embedded application where 29624 memory is a critical resource. If you have some complex 29625 calculation, you may want it to be folded if it involves constants, 29626 but need to call a function if it does not. For example: 29627 29628 #define Scale_Value(X) \ 29629 (__builtin_constant_p (X) \ 29630 ? ((X) * SCALE + OFFSET) : Scale (X)) 29631 29632 You may use this built-in function in either a macro or an inline 29633 function. However, if you use it in an inlined function and pass 29634 an argument of the function as the argument to the built-in, GCC 29635 never returns 1 when you call the inline function with a string 29636 constant or compound literal (*note Compound Literals::) and does 29637 not return 1 when you pass a constant numeric value to the inline 29638 function unless you specify the '-O' option. 29639 29640 You may also use '__builtin_constant_p' in initializers for static 29641 data. For instance, you can write 29642 29643 static const int table[] = { 29644 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 29645 /* ... */ 29646 }; 29647 29648 This is an acceptable initializer even if EXPRESSION is not a 29649 constant expression, including the case where 29650 '__builtin_constant_p' returns 1 because EXPRESSION can be folded 29651 to a constant but EXPRESSION contains operands that are not 29652 otherwise permitted in a static initializer (for example, '0 && foo 29653 ()'). GCC must be more conservative about evaluating the built-in 29654 in this case, because it has no opportunity to perform 29655 optimization. 29656 29657 Previous versions of GCC did not accept this built-in in data 29658 initializers. The earliest version where it is completely safe is 29659 3.0.1. 29660 29661 -- Built-in Function: long __builtin_expect (long EXP, long C) 29662 You may use '__builtin_expect' to provide the compiler with branch 29663 prediction information. In general, you should prefer to use 29664 actual profile feedback for this ('-fprofile-arcs'), as programmers 29665 are notoriously bad at predicting how their programs actually 29666 perform. However, there are applications in which this data is 29667 hard to collect. 29668 29669 The return value is the value of EXP, which should be an integral 29670 expression. The semantics of the built-in are that it is expected 29671 that EXP == C. For example: 29672 29673 if (__builtin_expect (x, 0)) 29674 foo (); 29675 29676 indicates that we do not expect to call 'foo', since we expect 'x' 29677 to be zero. Since you are limited to integral expressions for EXP, 29678 you should use constructions such as 29679 29680 if (__builtin_expect (ptr != NULL, 1)) 29681 foo (*ptr); 29682 29683 when testing pointer or floating-point values. 29684 29685 -- Built-in Function: void __builtin_trap (void) 29686 This function causes the program to exit abnormally. GCC 29687 implements this function by using a target-dependent mechanism 29688 (such as intentionally executing an illegal instruction) or by 29689 calling 'abort'. The mechanism used may vary from release to 29690 release so you should not rely on any particular implementation. 29691 29692 -- Built-in Function: void __builtin_unreachable (void) 29693 If control flow reaches the point of the '__builtin_unreachable', 29694 the program is undefined. It is useful in situations where the 29695 compiler cannot deduce the unreachability of the code. 29696 29697 One such case is immediately following an 'asm' statement that 29698 either never terminates, or one that transfers control elsewhere 29699 and never returns. In this example, without the 29700 '__builtin_unreachable', GCC issues a warning that control reaches 29701 the end of a non-void function. It also generates code to return 29702 after the 'asm'. 29703 29704 int f (int c, int v) 29705 { 29706 if (c) 29707 { 29708 return v; 29709 } 29710 else 29711 { 29712 asm("jmp error_handler"); 29713 __builtin_unreachable (); 29714 } 29715 } 29716 29717 Because the 'asm' statement unconditionally transfers control out 29718 of the function, control never reaches the end of the function 29719 body. The '__builtin_unreachable' is in fact unreachable and 29720 communicates this fact to the compiler. 29721 29722 Another use for '__builtin_unreachable' is following a call a 29723 function that never returns but that is not declared 29724 '__attribute__((noreturn))', as in this example: 29725 29726 void function_that_never_returns (void); 29727 29728 int g (int c) 29729 { 29730 if (c) 29731 { 29732 return 1; 29733 } 29734 else 29735 { 29736 function_that_never_returns (); 29737 __builtin_unreachable (); 29738 } 29739 } 29740 29741 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP, 29742 size_t ALIGN, ...) 29743 This function returns its first argument, and allows the compiler 29744 to assume that the returned pointer is at least ALIGN bytes 29745 aligned. This built-in can have either two or three arguments, if 29746 it has three, the third argument should have integer type, and if 29747 it is nonzero means misalignment offset. For example: 29748 29749 void *x = __builtin_assume_aligned (arg, 16); 29750 29751 means that the compiler can assume 'x', set to 'arg', is at least 29752 16-byte aligned, while: 29753 29754 void *x = __builtin_assume_aligned (arg, 32, 8); 29755 29756 means that the compiler can assume for 'x', set to 'arg', that 29757 '(char *) x - 8' is 32-byte aligned. 29758 29759 -- Built-in Function: int __builtin_LINE () 29760 This function is the equivalent to the preprocessor '__LINE__' 29761 macro and returns the line number of the invocation of the 29762 built-in. 29763 29764 -- Built-in Function: int __builtin_FUNCTION () 29765 This function is the equivalent to the preprocessor '__FUNCTION__' 29766 macro and returns the function name the invocation of the built-in 29767 is in. 29768 29769 -- Built-in Function: int __builtin_FILE () 29770 This function is the equivalent to the preprocessor '__FILE__' 29771 macro and returns the file name the invocation of the built-in is 29772 in. 29773 29774 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 29775 *END) 29776 This function is used to flush the processor's instruction cache 29777 for the region of memory between BEGIN inclusive and END exclusive. 29778 Some targets require that the instruction cache be flushed, after 29779 modifying memory containing code, in order to obtain deterministic 29780 behavior. 29781 29782 If the target does not require instruction cache flushes, 29783 '__builtin___clear_cache' has no effect. Otherwise either 29784 instructions are emitted in-line to clear the instruction cache or 29785 a call to the '__clear_cache' function in libgcc is made. 29786 29787 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 29788 This function is used to minimize cache-miss latency by moving data 29789 into a cache before it is accessed. You can insert calls to 29790 '__builtin_prefetch' into code for which you know addresses of data 29791 in memory that is likely to be accessed soon. If the target 29792 supports them, data prefetch instructions are generated. If the 29793 prefetch is done early enough before the access then the data will 29794 be in the cache by the time it is accessed. 29795 29796 The value of ADDR is the address of the memory to prefetch. There 29797 are two optional arguments, RW and LOCALITY. The value of RW is a 29798 compile-time constant one or zero; one means that the prefetch is 29799 preparing for a write to the memory address and zero, the default, 29800 means that the prefetch is preparing for a read. The value 29801 LOCALITY must be a compile-time constant integer between zero and 29802 three. A value of zero means that the data has no temporal 29803 locality, so it need not be left in the cache after the access. A 29804 value of three means that the data has a high degree of temporal 29805 locality and should be left in all levels of cache possible. 29806 Values of one and two mean, respectively, a low or moderate degree 29807 of temporal locality. The default is three. 29808 29809 for (i = 0; i < n; i++) 29810 { 29811 a[i] = a[i] + b[i]; 29812 __builtin_prefetch (&a[i+j], 1, 1); 29813 __builtin_prefetch (&b[i+j], 0, 1); 29814 /* ... */ 29815 } 29816 29817 Data prefetch does not generate faults if ADDR is invalid, but the 29818 address expression itself must be valid. For example, a prefetch 29819 of 'p->next' does not fault if 'p->next' is not a valid address, 29820 but evaluation faults if 'p' is not a valid address. 29821 29822 If the target does not support data prefetch, the address 29823 expression is evaluated if it includes side effects but no other 29824 code is generated and GCC does not issue a warning. 29825 29826 -- Built-in Function: double __builtin_huge_val (void) 29827 Returns a positive infinity, if supported by the floating-point 29828 format, else 'DBL_MAX'. This function is suitable for implementing 29829 the ISO C macro 'HUGE_VAL'. 29830 29831 -- Built-in Function: float __builtin_huge_valf (void) 29832 Similar to '__builtin_huge_val', except the return type is 'float'. 29833 29834 -- Built-in Function: long double __builtin_huge_vall (void) 29835 Similar to '__builtin_huge_val', except the return type is 'long 29836 double'. 29837 29838 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 29839 int, ...) 29840 This built-in implements the C99 fpclassify functionality. The 29841 first five int arguments should be the target library's notion of 29842 the possible FP classes and are used for return values. They must 29843 be constant values and they must appear in this order: 'FP_NAN', 29844 'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'. The 29845 ellipsis is for exactly one floating-point value to classify. GCC 29846 treats the last argument as type-generic, which means it does not 29847 do default promotion from float to double. 29848 29849 -- Built-in Function: double __builtin_inf (void) 29850 Similar to '__builtin_huge_val', except a warning is generated if 29851 the target floating-point format does not support infinities. 29852 29853 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 29854 Similar to '__builtin_inf', except the return type is '_Decimal32'. 29855 29856 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 29857 Similar to '__builtin_inf', except the return type is '_Decimal64'. 29858 29859 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 29860 Similar to '__builtin_inf', except the return type is 29861 '_Decimal128'. 29862 29863 -- Built-in Function: float __builtin_inff (void) 29864 Similar to '__builtin_inf', except the return type is 'float'. 29865 This function is suitable for implementing the ISO C99 macro 29866 'INFINITY'. 29867 29868 -- Built-in Function: long double __builtin_infl (void) 29869 Similar to '__builtin_inf', except the return type is 'long 29870 double'. 29871 29872 -- Built-in Function: int __builtin_isinf_sign (...) 29873 Similar to 'isinf', except the return value is negative for an 29874 argument of '-Inf'. Note while the parameter list is an ellipsis, 29875 this function only accepts exactly one floating-point argument. 29876 GCC treats this parameter as type-generic, which means it does not 29877 do default promotion from float to double. 29878 29879 -- Built-in Function: double __builtin_nan (const char *str) 29880 This is an implementation of the ISO C99 function 'nan'. 29881 29882 Since ISO C99 defines this function in terms of 'strtod', which we 29883 do not implement, a description of the parsing is in order. The 29884 string is parsed as by 'strtol'; that is, the base is recognized by 29885 leading '0' or '0x' prefixes. The number parsed is placed in the 29886 significand such that the least significant bit of the number is at 29887 the least significant bit of the significand. The number is 29888 truncated to fit the significand field provided. The significand 29889 is forced to be a quiet NaN. 29890 29891 This function, if given a string literal all of which would have 29892 been consumed by 'strtol', is evaluated early enough that it is 29893 considered a compile-time constant. 29894 29895 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 29896 Similar to '__builtin_nan', except the return type is '_Decimal32'. 29897 29898 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 29899 Similar to '__builtin_nan', except the return type is '_Decimal64'. 29900 29901 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 29902 Similar to '__builtin_nan', except the return type is 29903 '_Decimal128'. 29904 29905 -- Built-in Function: float __builtin_nanf (const char *str) 29906 Similar to '__builtin_nan', except the return type is 'float'. 29907 29908 -- Built-in Function: long double __builtin_nanl (const char *str) 29909 Similar to '__builtin_nan', except the return type is 'long 29910 double'. 29911 29912 -- Built-in Function: double __builtin_nans (const char *str) 29913 Similar to '__builtin_nan', except the significand is forced to be 29914 a signaling NaN. The 'nans' function is proposed by WG14 N965. 29915 29916 -- Built-in Function: float __builtin_nansf (const char *str) 29917 Similar to '__builtin_nans', except the return type is 'float'. 29918 29919 -- Built-in Function: long double __builtin_nansl (const char *str) 29920 Similar to '__builtin_nans', except the return type is 'long 29921 double'. 29922 29923 -- Built-in Function: int __builtin_ffs (unsigned int x) 29924 Returns one plus the index of the least significant 1-bit of X, or 29925 if X is zero, returns zero. 29926 29927 -- Built-in Function: int __builtin_clz (unsigned int x) 29928 Returns the number of leading 0-bits in X, starting at the most 29929 significant bit position. If X is 0, the result is undefined. 29930 29931 -- Built-in Function: int __builtin_ctz (unsigned int x) 29932 Returns the number of trailing 0-bits in X, starting at the least 29933 significant bit position. If X is 0, the result is undefined. 29934 29935 -- Built-in Function: int __builtin_clrsb (int x) 29936 Returns the number of leading redundant sign bits in X, i.e. the 29937 number of bits following the most significant bit that are 29938 identical to it. There are no special cases for 0 or other values. 29939 29940 -- Built-in Function: int __builtin_popcount (unsigned int x) 29941 Returns the number of 1-bits in X. 29942 29943 -- Built-in Function: int __builtin_parity (unsigned int x) 29944 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 29945 29946 -- Built-in Function: int __builtin_ffsl (unsigned long) 29947 Similar to '__builtin_ffs', except the argument type is 'unsigned 29948 long'. 29949 29950 -- Built-in Function: int __builtin_clzl (unsigned long) 29951 Similar to '__builtin_clz', except the argument type is 'unsigned 29952 long'. 29953 29954 -- Built-in Function: int __builtin_ctzl (unsigned long) 29955 Similar to '__builtin_ctz', except the argument type is 'unsigned 29956 long'. 29957 29958 -- Built-in Function: int __builtin_clrsbl (long) 29959 Similar to '__builtin_clrsb', except the argument type is 'long'. 29960 29961 -- Built-in Function: int __builtin_popcountl (unsigned long) 29962 Similar to '__builtin_popcount', except the argument type is 29963 'unsigned long'. 29964 29965 -- Built-in Function: int __builtin_parityl (unsigned long) 29966 Similar to '__builtin_parity', except the argument type is 29967 'unsigned long'. 29968 29969 -- Built-in Function: int __builtin_ffsll (unsigned long long) 29970 Similar to '__builtin_ffs', except the argument type is 'unsigned 29971 long long'. 29972 29973 -- Built-in Function: int __builtin_clzll (unsigned long long) 29974 Similar to '__builtin_clz', except the argument type is 'unsigned 29975 long long'. 29976 29977 -- Built-in Function: int __builtin_ctzll (unsigned long long) 29978 Similar to '__builtin_ctz', except the argument type is 'unsigned 29979 long long'. 29980 29981 -- Built-in Function: int __builtin_clrsbll (long long) 29982 Similar to '__builtin_clrsb', except the argument type is 'long 29983 long'. 29984 29985 -- Built-in Function: int __builtin_popcountll (unsigned long long) 29986 Similar to '__builtin_popcount', except the argument type is 29987 'unsigned long long'. 29988 29989 -- Built-in Function: int __builtin_parityll (unsigned long long) 29990 Similar to '__builtin_parity', except the argument type is 29991 'unsigned long long'. 29992 29993 -- Built-in Function: double __builtin_powi (double, int) 29994 Returns the first argument raised to the power of the second. 29995 Unlike the 'pow' function no guarantees about precision and 29996 rounding are made. 29997 29998 -- Built-in Function: float __builtin_powif (float, int) 29999 Similar to '__builtin_powi', except the argument and return types 30000 are 'float'. 30001 30002 -- Built-in Function: long double __builtin_powil (long double, int) 30003 Similar to '__builtin_powi', except the argument and return types 30004 are 'long double'. 30005 30006 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x) 30007 Returns X with the order of the bytes reversed; for example, 30008 '0xaabb' becomes '0xbbaa'. Byte here always means exactly 8 bits. 30009 30010 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x) 30011 Similar to '__builtin_bswap16', except the argument and return 30012 types are 32 bit. 30013 30014 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x) 30015 Similar to '__builtin_bswap32', except the argument and return 30016 types are 64 bit. 30017 30018 30019 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 30020 30021 6.56 Built-in Functions Specific to Particular Target Machines 30022 ============================================================== 30023 30024 On some target machines, GCC supports many built-in functions specific 30025 to those machines. Generally these generate calls to specific machine 30026 instructions, but allow the compiler to schedule those calls. 30027 30028 * Menu: 30029 30030 * Alpha Built-in Functions:: 30031 * ARM iWMMXt Built-in Functions:: 30032 * ARM NEON Intrinsics:: 30033 * AVR Built-in Functions:: 30034 * Blackfin Built-in Functions:: 30035 * FR-V Built-in Functions:: 30036 * X86 Built-in Functions:: 30037 * X86 transactional memory intrinsics:: 30038 * MIPS DSP Built-in Functions:: 30039 * MIPS Paired-Single Support:: 30040 * MIPS Loongson Built-in Functions:: 30041 * Other MIPS Built-in Functions:: 30042 * picoChip Built-in Functions:: 30043 * PowerPC Built-in Functions:: 30044 * PowerPC AltiVec/VSX Built-in Functions:: 30045 * PowerPC Hardware Transactional Memory Built-in Functions:: 30046 * RX Built-in Functions:: 30047 * S/390 System z Built-in Functions:: 30048 * SH Built-in Functions:: 30049 * SPARC VIS Built-in Functions:: 30050 * SPU Built-in Functions:: 30051 * TI C6X Built-in Functions:: 30052 * TILE-Gx Built-in Functions:: 30053 * TILEPro Built-in Functions:: 30054 30055 30056 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 30057 30058 6.56.1 Alpha Built-in Functions 30059 ------------------------------- 30060 30061 These built-in functions are available for the Alpha family of 30062 processors, depending on the command-line switches used. 30063 30064 The following built-in functions are always available. They all 30065 generate the machine instruction that is part of the name. 30066 30067 long __builtin_alpha_implver (void) 30068 long __builtin_alpha_rpcc (void) 30069 long __builtin_alpha_amask (long) 30070 long __builtin_alpha_cmpbge (long, long) 30071 long __builtin_alpha_extbl (long, long) 30072 long __builtin_alpha_extwl (long, long) 30073 long __builtin_alpha_extll (long, long) 30074 long __builtin_alpha_extql (long, long) 30075 long __builtin_alpha_extwh (long, long) 30076 long __builtin_alpha_extlh (long, long) 30077 long __builtin_alpha_extqh (long, long) 30078 long __builtin_alpha_insbl (long, long) 30079 long __builtin_alpha_inswl (long, long) 30080 long __builtin_alpha_insll (long, long) 30081 long __builtin_alpha_insql (long, long) 30082 long __builtin_alpha_inswh (long, long) 30083 long __builtin_alpha_inslh (long, long) 30084 long __builtin_alpha_insqh (long, long) 30085 long __builtin_alpha_mskbl (long, long) 30086 long __builtin_alpha_mskwl (long, long) 30087 long __builtin_alpha_mskll (long, long) 30088 long __builtin_alpha_mskql (long, long) 30089 long __builtin_alpha_mskwh (long, long) 30090 long __builtin_alpha_msklh (long, long) 30091 long __builtin_alpha_mskqh (long, long) 30092 long __builtin_alpha_umulh (long, long) 30093 long __builtin_alpha_zap (long, long) 30094 long __builtin_alpha_zapnot (long, long) 30095 30096 The following built-in functions are always with '-mmax' or '-mcpu=CPU' 30097 where CPU is 'pca56' or later. They all generate the machine 30098 instruction that is part of the name. 30099 30100 long __builtin_alpha_pklb (long) 30101 long __builtin_alpha_pkwb (long) 30102 long __builtin_alpha_unpkbl (long) 30103 long __builtin_alpha_unpkbw (long) 30104 long __builtin_alpha_minub8 (long, long) 30105 long __builtin_alpha_minsb8 (long, long) 30106 long __builtin_alpha_minuw4 (long, long) 30107 long __builtin_alpha_minsw4 (long, long) 30108 long __builtin_alpha_maxub8 (long, long) 30109 long __builtin_alpha_maxsb8 (long, long) 30110 long __builtin_alpha_maxuw4 (long, long) 30111 long __builtin_alpha_maxsw4 (long, long) 30112 long __builtin_alpha_perr (long, long) 30113 30114 The following built-in functions are always with '-mcix' or '-mcpu=CPU' 30115 where CPU is 'ev67' or later. They all generate the machine instruction 30116 that is part of the name. 30117 30118 long __builtin_alpha_cttz (long) 30119 long __builtin_alpha_ctlz (long) 30120 long __builtin_alpha_ctpop (long) 30121 30122 The following built-in functions are available on systems that use the 30123 OSF/1 PALcode. Normally they invoke the 'rduniq' and 'wruniq' PAL 30124 calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and 30125 'wrval'. 30126 30127 void *__builtin_thread_pointer (void) 30128 void __builtin_set_thread_pointer (void *) 30129 30130 30131 File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 30132 30133 6.56.2 ARM iWMMXt Built-in Functions 30134 ------------------------------------ 30135 30136 These built-in functions are available for the ARM family of processors 30137 when the '-mcpu=iwmmxt' switch is used: 30138 30139 typedef int v2si __attribute__ ((vector_size (8))); 30140 typedef short v4hi __attribute__ ((vector_size (8))); 30141 typedef char v8qi __attribute__ ((vector_size (8))); 30142 30143 int __builtin_arm_getwcgr0 (void) 30144 void __builtin_arm_setwcgr0 (int) 30145 int __builtin_arm_getwcgr1 (void) 30146 void __builtin_arm_setwcgr1 (int) 30147 int __builtin_arm_getwcgr2 (void) 30148 void __builtin_arm_setwcgr2 (int) 30149 int __builtin_arm_getwcgr3 (void) 30150 void __builtin_arm_setwcgr3 (int) 30151 int __builtin_arm_textrmsb (v8qi, int) 30152 int __builtin_arm_textrmsh (v4hi, int) 30153 int __builtin_arm_textrmsw (v2si, int) 30154 int __builtin_arm_textrmub (v8qi, int) 30155 int __builtin_arm_textrmuh (v4hi, int) 30156 int __builtin_arm_textrmuw (v2si, int) 30157 v8qi __builtin_arm_tinsrb (v8qi, int, int) 30158 v4hi __builtin_arm_tinsrh (v4hi, int, int) 30159 v2si __builtin_arm_tinsrw (v2si, int, int) 30160 long long __builtin_arm_tmia (long long, int, int) 30161 long long __builtin_arm_tmiabb (long long, int, int) 30162 long long __builtin_arm_tmiabt (long long, int, int) 30163 long long __builtin_arm_tmiaph (long long, int, int) 30164 long long __builtin_arm_tmiatb (long long, int, int) 30165 long long __builtin_arm_tmiatt (long long, int, int) 30166 int __builtin_arm_tmovmskb (v8qi) 30167 int __builtin_arm_tmovmskh (v4hi) 30168 int __builtin_arm_tmovmskw (v2si) 30169 long long __builtin_arm_waccb (v8qi) 30170 long long __builtin_arm_wacch (v4hi) 30171 long long __builtin_arm_waccw (v2si) 30172 v8qi __builtin_arm_waddb (v8qi, v8qi) 30173 v8qi __builtin_arm_waddbss (v8qi, v8qi) 30174 v8qi __builtin_arm_waddbus (v8qi, v8qi) 30175 v4hi __builtin_arm_waddh (v4hi, v4hi) 30176 v4hi __builtin_arm_waddhss (v4hi, v4hi) 30177 v4hi __builtin_arm_waddhus (v4hi, v4hi) 30178 v2si __builtin_arm_waddw (v2si, v2si) 30179 v2si __builtin_arm_waddwss (v2si, v2si) 30180 v2si __builtin_arm_waddwus (v2si, v2si) 30181 v8qi __builtin_arm_walign (v8qi, v8qi, int) 30182 long long __builtin_arm_wand(long long, long long) 30183 long long __builtin_arm_wandn (long long, long long) 30184 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 30185 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 30186 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 30187 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 30188 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 30189 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 30190 v2si __builtin_arm_wcmpeqw (v2si, v2si) 30191 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 30192 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 30193 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 30194 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 30195 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 30196 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 30197 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 30198 long long __builtin_arm_wmacsz (v4hi, v4hi) 30199 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 30200 long long __builtin_arm_wmacuz (v4hi, v4hi) 30201 v4hi __builtin_arm_wmadds (v4hi, v4hi) 30202 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 30203 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 30204 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 30205 v2si __builtin_arm_wmaxsw (v2si, v2si) 30206 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 30207 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 30208 v2si __builtin_arm_wmaxuw (v2si, v2si) 30209 v8qi __builtin_arm_wminsb (v8qi, v8qi) 30210 v4hi __builtin_arm_wminsh (v4hi, v4hi) 30211 v2si __builtin_arm_wminsw (v2si, v2si) 30212 v8qi __builtin_arm_wminub (v8qi, v8qi) 30213 v4hi __builtin_arm_wminuh (v4hi, v4hi) 30214 v2si __builtin_arm_wminuw (v2si, v2si) 30215 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 30216 v4hi __builtin_arm_wmulul (v4hi, v4hi) 30217 v4hi __builtin_arm_wmulum (v4hi, v4hi) 30218 long long __builtin_arm_wor (long long, long long) 30219 v2si __builtin_arm_wpackdss (long long, long long) 30220 v2si __builtin_arm_wpackdus (long long, long long) 30221 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 30222 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 30223 v4hi __builtin_arm_wpackwss (v2si, v2si) 30224 v4hi __builtin_arm_wpackwus (v2si, v2si) 30225 long long __builtin_arm_wrord (long long, long long) 30226 long long __builtin_arm_wrordi (long long, int) 30227 v4hi __builtin_arm_wrorh (v4hi, long long) 30228 v4hi __builtin_arm_wrorhi (v4hi, int) 30229 v2si __builtin_arm_wrorw (v2si, long long) 30230 v2si __builtin_arm_wrorwi (v2si, int) 30231 v2si __builtin_arm_wsadb (v2si, v8qi, v8qi) 30232 v2si __builtin_arm_wsadbz (v8qi, v8qi) 30233 v2si __builtin_arm_wsadh (v2si, v4hi, v4hi) 30234 v2si __builtin_arm_wsadhz (v4hi, v4hi) 30235 v4hi __builtin_arm_wshufh (v4hi, int) 30236 long long __builtin_arm_wslld (long long, long long) 30237 long long __builtin_arm_wslldi (long long, int) 30238 v4hi __builtin_arm_wsllh (v4hi, long long) 30239 v4hi __builtin_arm_wsllhi (v4hi, int) 30240 v2si __builtin_arm_wsllw (v2si, long long) 30241 v2si __builtin_arm_wsllwi (v2si, int) 30242 long long __builtin_arm_wsrad (long long, long long) 30243 long long __builtin_arm_wsradi (long long, int) 30244 v4hi __builtin_arm_wsrah (v4hi, long long) 30245 v4hi __builtin_arm_wsrahi (v4hi, int) 30246 v2si __builtin_arm_wsraw (v2si, long long) 30247 v2si __builtin_arm_wsrawi (v2si, int) 30248 long long __builtin_arm_wsrld (long long, long long) 30249 long long __builtin_arm_wsrldi (long long, int) 30250 v4hi __builtin_arm_wsrlh (v4hi, long long) 30251 v4hi __builtin_arm_wsrlhi (v4hi, int) 30252 v2si __builtin_arm_wsrlw (v2si, long long) 30253 v2si __builtin_arm_wsrlwi (v2si, int) 30254 v8qi __builtin_arm_wsubb (v8qi, v8qi) 30255 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 30256 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 30257 v4hi __builtin_arm_wsubh (v4hi, v4hi) 30258 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 30259 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 30260 v2si __builtin_arm_wsubw (v2si, v2si) 30261 v2si __builtin_arm_wsubwss (v2si, v2si) 30262 v2si __builtin_arm_wsubwus (v2si, v2si) 30263 v4hi __builtin_arm_wunpckehsb (v8qi) 30264 v2si __builtin_arm_wunpckehsh (v4hi) 30265 long long __builtin_arm_wunpckehsw (v2si) 30266 v4hi __builtin_arm_wunpckehub (v8qi) 30267 v2si __builtin_arm_wunpckehuh (v4hi) 30268 long long __builtin_arm_wunpckehuw (v2si) 30269 v4hi __builtin_arm_wunpckelsb (v8qi) 30270 v2si __builtin_arm_wunpckelsh (v4hi) 30271 long long __builtin_arm_wunpckelsw (v2si) 30272 v4hi __builtin_arm_wunpckelub (v8qi) 30273 v2si __builtin_arm_wunpckeluh (v4hi) 30274 long long __builtin_arm_wunpckeluw (v2si) 30275 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 30276 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 30277 v2si __builtin_arm_wunpckihw (v2si, v2si) 30278 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 30279 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 30280 v2si __builtin_arm_wunpckilw (v2si, v2si) 30281 long long __builtin_arm_wxor (long long, long long) 30282 long long __builtin_arm_wzero () 30283 30284 30285 File: gcc.info, Node: ARM NEON Intrinsics, Next: AVR Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 30286 30287 6.56.3 ARM NEON Intrinsics 30288 -------------------------- 30289 30290 These built-in intrinsics for the ARM Advanced SIMD extension are 30291 available when the '-mfpu=neon' switch is used: 30292 30293 6.56.3.1 Addition 30294 ................. 30295 30296 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 30297 _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0' 30298 30299 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 30300 _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0' 30301 30302 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 30303 _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0' 30304 30305 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 30306 _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0' 30307 30308 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 30309 _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0' 30310 30311 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 30312 _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0' 30313 30314 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 30315 _Form of expected instruction(s):_ 'vadd.f32 D0, D0, D0' 30316 30317 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 30318 30319 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 30320 30321 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 30322 _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0' 30323 30324 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 30325 _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0' 30326 30327 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 30328 _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0' 30329 30330 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 30331 _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0' 30332 30333 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 30334 _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0' 30335 30336 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 30337 _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0' 30338 30339 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 30340 _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0' 30341 30342 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 30343 _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0' 30344 30345 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 30346 _Form of expected instruction(s):_ 'vadd.f32 Q0, Q0, Q0' 30347 30348 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 30349 _Form of expected instruction(s):_ 'vaddl.u32 Q0, D0, D0' 30350 30351 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 30352 _Form of expected instruction(s):_ 'vaddl.u16 Q0, D0, D0' 30353 30354 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 30355 _Form of expected instruction(s):_ 'vaddl.u8 Q0, D0, D0' 30356 30357 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 30358 _Form of expected instruction(s):_ 'vaddl.s32 Q0, D0, D0' 30359 30360 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 30361 _Form of expected instruction(s):_ 'vaddl.s16 Q0, D0, D0' 30362 30363 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 30364 _Form of expected instruction(s):_ 'vaddl.s8 Q0, D0, D0' 30365 30366 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 30367 _Form of expected instruction(s):_ 'vaddw.u32 Q0, Q0, D0' 30368 30369 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 30370 _Form of expected instruction(s):_ 'vaddw.u16 Q0, Q0, D0' 30371 30372 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 30373 _Form of expected instruction(s):_ 'vaddw.u8 Q0, Q0, D0' 30374 30375 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 30376 _Form of expected instruction(s):_ 'vaddw.s32 Q0, Q0, D0' 30377 30378 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 30379 _Form of expected instruction(s):_ 'vaddw.s16 Q0, Q0, D0' 30380 30381 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 30382 _Form of expected instruction(s):_ 'vaddw.s8 Q0, Q0, D0' 30383 30384 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 30385 _Form of expected instruction(s):_ 'vhadd.u32 D0, D0, D0' 30386 30387 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 30388 _Form of expected instruction(s):_ 'vhadd.u16 D0, D0, D0' 30389 30390 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 30391 _Form of expected instruction(s):_ 'vhadd.u8 D0, D0, D0' 30392 30393 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 30394 _Form of expected instruction(s):_ 'vhadd.s32 D0, D0, D0' 30395 30396 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 30397 _Form of expected instruction(s):_ 'vhadd.s16 D0, D0, D0' 30398 30399 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 30400 _Form of expected instruction(s):_ 'vhadd.s8 D0, D0, D0' 30401 30402 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 30403 _Form of expected instruction(s):_ 'vhadd.u32 Q0, Q0, Q0' 30404 30405 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 30406 _Form of expected instruction(s):_ 'vhadd.u16 Q0, Q0, Q0' 30407 30408 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 30409 _Form of expected instruction(s):_ 'vhadd.u8 Q0, Q0, Q0' 30410 30411 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 30412 _Form of expected instruction(s):_ 'vhadd.s32 Q0, Q0, Q0' 30413 30414 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 30415 _Form of expected instruction(s):_ 'vhadd.s16 Q0, Q0, Q0' 30416 30417 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 30418 _Form of expected instruction(s):_ 'vhadd.s8 Q0, Q0, Q0' 30419 30420 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 30421 _Form of expected instruction(s):_ 'vrhadd.u32 D0, D0, D0' 30422 30423 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 30424 _Form of expected instruction(s):_ 'vrhadd.u16 D0, D0, D0' 30425 30426 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 30427 _Form of expected instruction(s):_ 'vrhadd.u8 D0, D0, D0' 30428 30429 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 30430 _Form of expected instruction(s):_ 'vrhadd.s32 D0, D0, D0' 30431 30432 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 30433 _Form of expected instruction(s):_ 'vrhadd.s16 D0, D0, D0' 30434 30435 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 30436 _Form of expected instruction(s):_ 'vrhadd.s8 D0, D0, D0' 30437 30438 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 30439 _Form of expected instruction(s):_ 'vrhadd.u32 Q0, Q0, Q0' 30440 30441 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 30442 _Form of expected instruction(s):_ 'vrhadd.u16 Q0, Q0, Q0' 30443 30444 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 30445 _Form of expected instruction(s):_ 'vrhadd.u8 Q0, Q0, Q0' 30446 30447 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 30448 _Form of expected instruction(s):_ 'vrhadd.s32 Q0, Q0, Q0' 30449 30450 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 30451 _Form of expected instruction(s):_ 'vrhadd.s16 Q0, Q0, Q0' 30452 30453 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 30454 _Form of expected instruction(s):_ 'vrhadd.s8 Q0, Q0, Q0' 30455 30456 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 30457 _Form of expected instruction(s):_ 'vqadd.u32 D0, D0, D0' 30458 30459 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 30460 _Form of expected instruction(s):_ 'vqadd.u16 D0, D0, D0' 30461 30462 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 30463 _Form of expected instruction(s):_ 'vqadd.u8 D0, D0, D0' 30464 30465 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 30466 _Form of expected instruction(s):_ 'vqadd.s32 D0, D0, D0' 30467 30468 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 30469 _Form of expected instruction(s):_ 'vqadd.s16 D0, D0, D0' 30470 30471 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 30472 _Form of expected instruction(s):_ 'vqadd.s8 D0, D0, D0' 30473 30474 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 30475 _Form of expected instruction(s):_ 'vqadd.u64 D0, D0, D0' 30476 30477 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 30478 _Form of expected instruction(s):_ 'vqadd.s64 D0, D0, D0' 30479 30480 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 30481 _Form of expected instruction(s):_ 'vqadd.u32 Q0, Q0, Q0' 30482 30483 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 30484 _Form of expected instruction(s):_ 'vqadd.u16 Q0, Q0, Q0' 30485 30486 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 30487 _Form of expected instruction(s):_ 'vqadd.u8 Q0, Q0, Q0' 30488 30489 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 30490 _Form of expected instruction(s):_ 'vqadd.s32 Q0, Q0, Q0' 30491 30492 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 30493 _Form of expected instruction(s):_ 'vqadd.s16 Q0, Q0, Q0' 30494 30495 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 30496 _Form of expected instruction(s):_ 'vqadd.s8 Q0, Q0, Q0' 30497 30498 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 30499 _Form of expected instruction(s):_ 'vqadd.u64 Q0, Q0, Q0' 30500 30501 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 30502 _Form of expected instruction(s):_ 'vqadd.s64 Q0, Q0, Q0' 30503 30504 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 30505 _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0' 30506 30507 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 30508 _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0' 30509 30510 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 30511 _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0' 30512 30513 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 30514 _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0' 30515 30516 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 30517 _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0' 30518 30519 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 30520 _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0' 30521 30522 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 30523 _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0' 30524 30525 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 30526 _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0' 30527 30528 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 30529 _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0' 30530 30531 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 30532 _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0' 30533 30534 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 30535 _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0' 30536 30537 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 30538 _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0' 30539 30540 6.56.3.2 Multiplication 30541 ....................... 30542 30543 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 30544 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0' 30545 30546 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 30547 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0' 30548 30549 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 30550 _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0' 30551 30552 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 30553 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0' 30554 30555 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 30556 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0' 30557 30558 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 30559 _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0' 30560 30561 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 30562 _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0' 30563 30564 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 30565 _Form of expected instruction(s):_ 'vmul.p8 D0, D0, D0' 30566 30567 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 30568 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0' 30569 30570 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 30571 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0' 30572 30573 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 30574 _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0' 30575 30576 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 30577 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0' 30578 30579 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 30580 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0' 30581 30582 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 30583 _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0' 30584 30585 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 30586 _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, Q0' 30587 30588 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 30589 _Form of expected instruction(s):_ 'vmul.p8 Q0, Q0, Q0' 30590 30591 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 30592 _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0' 30593 30594 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 30595 _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0' 30596 30597 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 30598 _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, Q0' 30599 30600 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 30601 _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, Q0' 30602 30603 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 30604 _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0' 30605 30606 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 30607 _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0' 30608 30609 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 30610 _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, Q0' 30611 30612 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 30613 _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, Q0' 30614 30615 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 30616 _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0' 30617 30618 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 30619 _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0' 30620 30621 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 30622 _Form of expected instruction(s):_ 'vmull.u8 Q0, D0, D0' 30623 30624 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 30625 _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0' 30626 30627 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 30628 _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0' 30629 30630 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 30631 _Form of expected instruction(s):_ 'vmull.s8 Q0, D0, D0' 30632 30633 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 30634 _Form of expected instruction(s):_ 'vmull.p8 Q0, D0, D0' 30635 30636 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 30637 _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0' 30638 30639 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 30640 _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0' 30641 30642 6.56.3.3 Multiply-accumulate 30643 ............................ 30644 30645 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 30646 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0' 30647 30648 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 30649 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0' 30650 30651 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 30652 _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0' 30653 30654 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 30655 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0' 30656 30657 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 30658 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0' 30659 30660 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 30661 _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0' 30662 30663 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 30664 _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0' 30665 30666 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 30667 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0' 30668 30669 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 30670 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0' 30671 30672 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 30673 _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0' 30674 30675 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 30676 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0' 30677 30678 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 30679 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0' 30680 30681 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 30682 _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0' 30683 30684 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 30685 _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, Q0' 30686 30687 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 30688 _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0' 30689 30690 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 30691 _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0' 30692 30693 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 30694 _Form of expected instruction(s):_ 'vmlal.u8 Q0, D0, D0' 30695 30696 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 30697 _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0' 30698 30699 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 30700 _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0' 30701 30702 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 30703 _Form of expected instruction(s):_ 'vmlal.s8 Q0, D0, D0' 30704 30705 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 30706 _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0' 30707 30708 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 30709 _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0' 30710 30711 6.56.3.4 Multiply-subtract 30712 .......................... 30713 30714 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 30715 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0' 30716 30717 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 30718 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0' 30719 30720 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 30721 _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0' 30722 30723 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 30724 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0' 30725 30726 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 30727 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0' 30728 30729 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 30730 _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0' 30731 30732 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 30733 _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0' 30734 30735 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 30736 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0' 30737 30738 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 30739 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0' 30740 30741 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 30742 _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0' 30743 30744 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 30745 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0' 30746 30747 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 30748 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0' 30749 30750 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 30751 _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0' 30752 30753 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 30754 _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, Q0' 30755 30756 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 30757 _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0' 30758 30759 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 30760 _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0' 30761 30762 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 30763 _Form of expected instruction(s):_ 'vmlsl.u8 Q0, D0, D0' 30764 30765 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 30766 _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0' 30767 30768 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 30769 _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0' 30770 30771 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 30772 _Form of expected instruction(s):_ 'vmlsl.s8 Q0, D0, D0' 30773 30774 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 30775 _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0' 30776 30777 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 30778 _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0' 30779 30780 6.56.3.5 Fused-multiply-accumulate 30781 .................................. 30782 30783 * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t) 30784 _Form of expected instruction(s):_ 'vfma.f32 D0, D0, D0' 30785 30786 * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t) 30787 _Form of expected instruction(s):_ 'vfma.f32 Q0, Q0, Q0' 30788 30789 6.56.3.6 Fused-multiply-subtract 30790 ................................ 30791 30792 * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t) 30793 _Form of expected instruction(s):_ 'vfms.f32 D0, D0, D0' 30794 30795 * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t) 30796 _Form of expected instruction(s):_ 'vfms.f32 Q0, Q0, Q0' 30797 30798 6.56.3.7 Round to integral (to nearest, ties to even) 30799 ..................................................... 30800 30801 * float32x2_t vrndn_f32 (float32x2_t) 30802 _Form of expected instruction(s):_ 'vrintn.f32 D0, D0' 30803 30804 * float32x4_t vrndqn_f32 (float32x4_t) 30805 _Form of expected instruction(s):_ 'vrintn.f32 Q0, Q0' 30806 30807 6.56.3.8 Round to integral (to nearest, ties away from zero) 30808 ............................................................ 30809 30810 * float32x2_t vrnda_f32 (float32x2_t) 30811 _Form of expected instruction(s):_ 'vrinta.f32 D0, D0' 30812 30813 * float32x4_t vrndqa_f32 (float32x4_t) 30814 _Form of expected instruction(s):_ 'vrinta.f32 Q0, Q0' 30815 30816 6.56.3.9 Round to integral (towards +Inf) 30817 ......................................... 30818 30819 * float32x2_t vrndp_f32 (float32x2_t) 30820 _Form of expected instruction(s):_ 'vrintp.f32 D0, D0' 30821 30822 * float32x4_t vrndqp_f32 (float32x4_t) 30823 _Form of expected instruction(s):_ 'vrintp.f32 Q0, Q0' 30824 30825 6.56.3.10 Round to integral (towards -Inf) 30826 .......................................... 30827 30828 * float32x2_t vrndm_f32 (float32x2_t) 30829 _Form of expected instruction(s):_ 'vrintm.f32 D0, D0' 30830 30831 * float32x4_t vrndqm_f32 (float32x4_t) 30832 _Form of expected instruction(s):_ 'vrintm.f32 Q0, Q0' 30833 30834 6.56.3.11 Round to integral (towards 0) 30835 ....................................... 30836 30837 * float32x2_t vrnd_f32 (float32x2_t) 30838 _Form of expected instruction(s):_ 'vrintz.f32 D0, D0' 30839 30840 * float32x4_t vrndq_f32 (float32x4_t) 30841 _Form of expected instruction(s):_ 'vrintz.f32 Q0, Q0' 30842 30843 6.56.3.12 Subtraction 30844 ..................... 30845 30846 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 30847 _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0' 30848 30849 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 30850 _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0' 30851 30852 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 30853 _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0' 30854 30855 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 30856 _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0' 30857 30858 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 30859 _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0' 30860 30861 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 30862 _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0' 30863 30864 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 30865 _Form of expected instruction(s):_ 'vsub.f32 D0, D0, D0' 30866 30867 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 30868 30869 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 30870 30871 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 30872 _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0' 30873 30874 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 30875 _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0' 30876 30877 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 30878 _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0' 30879 30880 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 30881 _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0' 30882 30883 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 30884 _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0' 30885 30886 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 30887 _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0' 30888 30889 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 30890 _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0' 30891 30892 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 30893 _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0' 30894 30895 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 30896 _Form of expected instruction(s):_ 'vsub.f32 Q0, Q0, Q0' 30897 30898 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 30899 _Form of expected instruction(s):_ 'vsubl.u32 Q0, D0, D0' 30900 30901 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 30902 _Form of expected instruction(s):_ 'vsubl.u16 Q0, D0, D0' 30903 30904 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 30905 _Form of expected instruction(s):_ 'vsubl.u8 Q0, D0, D0' 30906 30907 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 30908 _Form of expected instruction(s):_ 'vsubl.s32 Q0, D0, D0' 30909 30910 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 30911 _Form of expected instruction(s):_ 'vsubl.s16 Q0, D0, D0' 30912 30913 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 30914 _Form of expected instruction(s):_ 'vsubl.s8 Q0, D0, D0' 30915 30916 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 30917 _Form of expected instruction(s):_ 'vsubw.u32 Q0, Q0, D0' 30918 30919 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 30920 _Form of expected instruction(s):_ 'vsubw.u16 Q0, Q0, D0' 30921 30922 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 30923 _Form of expected instruction(s):_ 'vsubw.u8 Q0, Q0, D0' 30924 30925 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 30926 _Form of expected instruction(s):_ 'vsubw.s32 Q0, Q0, D0' 30927 30928 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 30929 _Form of expected instruction(s):_ 'vsubw.s16 Q0, Q0, D0' 30930 30931 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 30932 _Form of expected instruction(s):_ 'vsubw.s8 Q0, Q0, D0' 30933 30934 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 30935 _Form of expected instruction(s):_ 'vhsub.u32 D0, D0, D0' 30936 30937 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 30938 _Form of expected instruction(s):_ 'vhsub.u16 D0, D0, D0' 30939 30940 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 30941 _Form of expected instruction(s):_ 'vhsub.u8 D0, D0, D0' 30942 30943 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 30944 _Form of expected instruction(s):_ 'vhsub.s32 D0, D0, D0' 30945 30946 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 30947 _Form of expected instruction(s):_ 'vhsub.s16 D0, D0, D0' 30948 30949 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 30950 _Form of expected instruction(s):_ 'vhsub.s8 D0, D0, D0' 30951 30952 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 30953 _Form of expected instruction(s):_ 'vhsub.u32 Q0, Q0, Q0' 30954 30955 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 30956 _Form of expected instruction(s):_ 'vhsub.u16 Q0, Q0, Q0' 30957 30958 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 30959 _Form of expected instruction(s):_ 'vhsub.u8 Q0, Q0, Q0' 30960 30961 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 30962 _Form of expected instruction(s):_ 'vhsub.s32 Q0, Q0, Q0' 30963 30964 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 30965 _Form of expected instruction(s):_ 'vhsub.s16 Q0, Q0, Q0' 30966 30967 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 30968 _Form of expected instruction(s):_ 'vhsub.s8 Q0, Q0, Q0' 30969 30970 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 30971 _Form of expected instruction(s):_ 'vqsub.u32 D0, D0, D0' 30972 30973 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 30974 _Form of expected instruction(s):_ 'vqsub.u16 D0, D0, D0' 30975 30976 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 30977 _Form of expected instruction(s):_ 'vqsub.u8 D0, D0, D0' 30978 30979 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 30980 _Form of expected instruction(s):_ 'vqsub.s32 D0, D0, D0' 30981 30982 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 30983 _Form of expected instruction(s):_ 'vqsub.s16 D0, D0, D0' 30984 30985 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 30986 _Form of expected instruction(s):_ 'vqsub.s8 D0, D0, D0' 30987 30988 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 30989 _Form of expected instruction(s):_ 'vqsub.u64 D0, D0, D0' 30990 30991 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 30992 _Form of expected instruction(s):_ 'vqsub.s64 D0, D0, D0' 30993 30994 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 30995 _Form of expected instruction(s):_ 'vqsub.u32 Q0, Q0, Q0' 30996 30997 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 30998 _Form of expected instruction(s):_ 'vqsub.u16 Q0, Q0, Q0' 30999 31000 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 31001 _Form of expected instruction(s):_ 'vqsub.u8 Q0, Q0, Q0' 31002 31003 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 31004 _Form of expected instruction(s):_ 'vqsub.s32 Q0, Q0, Q0' 31005 31006 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 31007 _Form of expected instruction(s):_ 'vqsub.s16 Q0, Q0, Q0' 31008 31009 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 31010 _Form of expected instruction(s):_ 'vqsub.s8 Q0, Q0, Q0' 31011 31012 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 31013 _Form of expected instruction(s):_ 'vqsub.u64 Q0, Q0, Q0' 31014 31015 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 31016 _Form of expected instruction(s):_ 'vqsub.s64 Q0, Q0, Q0' 31017 31018 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 31019 _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0' 31020 31021 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 31022 _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0' 31023 31024 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 31025 _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0' 31026 31027 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 31028 _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0' 31029 31030 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 31031 _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0' 31032 31033 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 31034 _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0' 31035 31036 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 31037 _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0' 31038 31039 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 31040 _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0' 31041 31042 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 31043 _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0' 31044 31045 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 31046 _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0' 31047 31048 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 31049 _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0' 31050 31051 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 31052 _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0' 31053 31054 6.56.3.13 Comparison (equal-to) 31055 ............................... 31056 31057 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 31058 _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0' 31059 31060 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 31061 _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0' 31062 31063 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 31064 _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' 31065 31066 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 31067 _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0' 31068 31069 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 31070 _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0' 31071 31072 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 31073 _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' 31074 31075 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 31076 _Form of expected instruction(s):_ 'vceq.f32 D0, D0, D0' 31077 31078 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 31079 _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' 31080 31081 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 31082 _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0' 31083 31084 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 31085 _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0' 31086 31087 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 31088 _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' 31089 31090 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 31091 _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0' 31092 31093 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 31094 _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0' 31095 31096 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 31097 _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' 31098 31099 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 31100 _Form of expected instruction(s):_ 'vceq.f32 Q0, Q0, Q0' 31101 31102 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 31103 _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' 31104 31105 6.56.3.14 Comparison (greater-than-or-equal-to) 31106 ............................................... 31107 31108 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 31109 _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0' 31110 31111 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 31112 _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0' 31113 31114 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 31115 _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0' 31116 31117 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 31118 _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0' 31119 31120 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 31121 _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0' 31122 31123 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 31124 _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0' 31125 31126 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 31127 _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0' 31128 31129 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 31130 _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0' 31131 31132 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 31133 _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0' 31134 31135 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 31136 _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0' 31137 31138 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 31139 _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0' 31140 31141 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 31142 _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0' 31143 31144 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 31145 _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0' 31146 31147 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 31148 _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0' 31149 31150 6.56.3.15 Comparison (less-than-or-equal-to) 31151 ............................................ 31152 31153 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 31154 _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0' 31155 31156 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 31157 _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0' 31158 31159 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 31160 _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0' 31161 31162 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 31163 _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0' 31164 31165 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 31166 _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0' 31167 31168 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 31169 _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0' 31170 31171 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 31172 _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0' 31173 31174 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 31175 _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0' 31176 31177 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 31178 _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0' 31179 31180 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 31181 _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0' 31182 31183 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 31184 _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0' 31185 31186 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 31187 _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0' 31188 31189 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 31190 _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0' 31191 31192 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 31193 _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0' 31194 31195 6.56.3.16 Comparison (greater-than) 31196 ................................... 31197 31198 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 31199 _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0' 31200 31201 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 31202 _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0' 31203 31204 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 31205 _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0' 31206 31207 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 31208 _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0' 31209 31210 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 31211 _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0' 31212 31213 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 31214 _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0' 31215 31216 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 31217 _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0' 31218 31219 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 31220 _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0' 31221 31222 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 31223 _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0' 31224 31225 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 31226 _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0' 31227 31228 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 31229 _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0' 31230 31231 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 31232 _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0' 31233 31234 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 31235 _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0' 31236 31237 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 31238 _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0' 31239 31240 6.56.3.17 Comparison (less-than) 31241 ................................ 31242 31243 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 31244 _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0' 31245 31246 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 31247 _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0' 31248 31249 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 31250 _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0' 31251 31252 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 31253 _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0' 31254 31255 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 31256 _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0' 31257 31258 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 31259 _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0' 31260 31261 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 31262 _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0' 31263 31264 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 31265 _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0' 31266 31267 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 31268 _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0' 31269 31270 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 31271 _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0' 31272 31273 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 31274 _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0' 31275 31276 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 31277 _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0' 31278 31279 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 31280 _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0' 31281 31282 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 31283 _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0' 31284 31285 6.56.3.18 Comparison (absolute greater-than-or-equal-to) 31286 ........................................................ 31287 31288 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 31289 _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0' 31290 31291 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 31292 _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0' 31293 31294 6.56.3.19 Comparison (absolute less-than-or-equal-to) 31295 ..................................................... 31296 31297 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 31298 _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0' 31299 31300 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 31301 _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0' 31302 31303 6.56.3.20 Comparison (absolute greater-than) 31304 ............................................ 31305 31306 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 31307 _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0' 31308 31309 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 31310 _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0' 31311 31312 6.56.3.21 Comparison (absolute less-than) 31313 ......................................... 31314 31315 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 31316 _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0' 31317 31318 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 31319 _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0' 31320 31321 6.56.3.22 Test bits 31322 ................... 31323 31324 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 31325 _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0' 31326 31327 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 31328 _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0' 31329 31330 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 31331 _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' 31332 31333 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 31334 _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0' 31335 31336 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 31337 _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0' 31338 31339 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 31340 _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' 31341 31342 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 31343 _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' 31344 31345 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 31346 _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0' 31347 31348 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 31349 _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0' 31350 31351 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 31352 _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' 31353 31354 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 31355 _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0' 31356 31357 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 31358 _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0' 31359 31360 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 31361 _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' 31362 31363 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 31364 _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' 31365 31366 6.56.3.23 Absolute difference 31367 ............................. 31368 31369 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 31370 _Form of expected instruction(s):_ 'vabd.u32 D0, D0, D0' 31371 31372 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 31373 _Form of expected instruction(s):_ 'vabd.u16 D0, D0, D0' 31374 31375 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 31376 _Form of expected instruction(s):_ 'vabd.u8 D0, D0, D0' 31377 31378 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 31379 _Form of expected instruction(s):_ 'vabd.s32 D0, D0, D0' 31380 31381 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 31382 _Form of expected instruction(s):_ 'vabd.s16 D0, D0, D0' 31383 31384 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 31385 _Form of expected instruction(s):_ 'vabd.s8 D0, D0, D0' 31386 31387 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 31388 _Form of expected instruction(s):_ 'vabd.f32 D0, D0, D0' 31389 31390 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 31391 _Form of expected instruction(s):_ 'vabd.u32 Q0, Q0, Q0' 31392 31393 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 31394 _Form of expected instruction(s):_ 'vabd.u16 Q0, Q0, Q0' 31395 31396 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 31397 _Form of expected instruction(s):_ 'vabd.u8 Q0, Q0, Q0' 31398 31399 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 31400 _Form of expected instruction(s):_ 'vabd.s32 Q0, Q0, Q0' 31401 31402 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 31403 _Form of expected instruction(s):_ 'vabd.s16 Q0, Q0, Q0' 31404 31405 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 31406 _Form of expected instruction(s):_ 'vabd.s8 Q0, Q0, Q0' 31407 31408 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 31409 _Form of expected instruction(s):_ 'vabd.f32 Q0, Q0, Q0' 31410 31411 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 31412 _Form of expected instruction(s):_ 'vabdl.u32 Q0, D0, D0' 31413 31414 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 31415 _Form of expected instruction(s):_ 'vabdl.u16 Q0, D0, D0' 31416 31417 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 31418 _Form of expected instruction(s):_ 'vabdl.u8 Q0, D0, D0' 31419 31420 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 31421 _Form of expected instruction(s):_ 'vabdl.s32 Q0, D0, D0' 31422 31423 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 31424 _Form of expected instruction(s):_ 'vabdl.s16 Q0, D0, D0' 31425 31426 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 31427 _Form of expected instruction(s):_ 'vabdl.s8 Q0, D0, D0' 31428 31429 6.56.3.24 Absolute difference and accumulate 31430 ............................................ 31431 31432 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 31433 _Form of expected instruction(s):_ 'vaba.u32 D0, D0, D0' 31434 31435 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 31436 _Form of expected instruction(s):_ 'vaba.u16 D0, D0, D0' 31437 31438 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 31439 _Form of expected instruction(s):_ 'vaba.u8 D0, D0, D0' 31440 31441 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 31442 _Form of expected instruction(s):_ 'vaba.s32 D0, D0, D0' 31443 31444 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 31445 _Form of expected instruction(s):_ 'vaba.s16 D0, D0, D0' 31446 31447 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 31448 _Form of expected instruction(s):_ 'vaba.s8 D0, D0, D0' 31449 31450 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 31451 _Form of expected instruction(s):_ 'vaba.u32 Q0, Q0, Q0' 31452 31453 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 31454 _Form of expected instruction(s):_ 'vaba.u16 Q0, Q0, Q0' 31455 31456 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 31457 _Form of expected instruction(s):_ 'vaba.u8 Q0, Q0, Q0' 31458 31459 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 31460 _Form of expected instruction(s):_ 'vaba.s32 Q0, Q0, Q0' 31461 31462 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 31463 _Form of expected instruction(s):_ 'vaba.s16 Q0, Q0, Q0' 31464 31465 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 31466 _Form of expected instruction(s):_ 'vaba.s8 Q0, Q0, Q0' 31467 31468 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 31469 _Form of expected instruction(s):_ 'vabal.u32 Q0, D0, D0' 31470 31471 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 31472 _Form of expected instruction(s):_ 'vabal.u16 Q0, D0, D0' 31473 31474 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 31475 _Form of expected instruction(s):_ 'vabal.u8 Q0, D0, D0' 31476 31477 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 31478 _Form of expected instruction(s):_ 'vabal.s32 Q0, D0, D0' 31479 31480 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 31481 _Form of expected instruction(s):_ 'vabal.s16 Q0, D0, D0' 31482 31483 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 31484 _Form of expected instruction(s):_ 'vabal.s8 Q0, D0, D0' 31485 31486 6.56.3.25 Maximum 31487 ................. 31488 31489 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 31490 _Form of expected instruction(s):_ 'vmax.u32 D0, D0, D0' 31491 31492 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 31493 _Form of expected instruction(s):_ 'vmax.u16 D0, D0, D0' 31494 31495 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 31496 _Form of expected instruction(s):_ 'vmax.u8 D0, D0, D0' 31497 31498 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 31499 _Form of expected instruction(s):_ 'vmax.s32 D0, D0, D0' 31500 31501 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 31502 _Form of expected instruction(s):_ 'vmax.s16 D0, D0, D0' 31503 31504 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 31505 _Form of expected instruction(s):_ 'vmax.s8 D0, D0, D0' 31506 31507 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 31508 _Form of expected instruction(s):_ 'vmax.f32 D0, D0, D0' 31509 31510 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 31511 _Form of expected instruction(s):_ 'vmax.u32 Q0, Q0, Q0' 31512 31513 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 31514 _Form of expected instruction(s):_ 'vmax.u16 Q0, Q0, Q0' 31515 31516 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 31517 _Form of expected instruction(s):_ 'vmax.u8 Q0, Q0, Q0' 31518 31519 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 31520 _Form of expected instruction(s):_ 'vmax.s32 Q0, Q0, Q0' 31521 31522 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 31523 _Form of expected instruction(s):_ 'vmax.s16 Q0, Q0, Q0' 31524 31525 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 31526 _Form of expected instruction(s):_ 'vmax.s8 Q0, Q0, Q0' 31527 31528 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 31529 _Form of expected instruction(s):_ 'vmax.f32 Q0, Q0, Q0' 31530 31531 6.56.3.26 Minimum 31532 ................. 31533 31534 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 31535 _Form of expected instruction(s):_ 'vmin.u32 D0, D0, D0' 31536 31537 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 31538 _Form of expected instruction(s):_ 'vmin.u16 D0, D0, D0' 31539 31540 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 31541 _Form of expected instruction(s):_ 'vmin.u8 D0, D0, D0' 31542 31543 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 31544 _Form of expected instruction(s):_ 'vmin.s32 D0, D0, D0' 31545 31546 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 31547 _Form of expected instruction(s):_ 'vmin.s16 D0, D0, D0' 31548 31549 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 31550 _Form of expected instruction(s):_ 'vmin.s8 D0, D0, D0' 31551 31552 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 31553 _Form of expected instruction(s):_ 'vmin.f32 D0, D0, D0' 31554 31555 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 31556 _Form of expected instruction(s):_ 'vmin.u32 Q0, Q0, Q0' 31557 31558 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 31559 _Form of expected instruction(s):_ 'vmin.u16 Q0, Q0, Q0' 31560 31561 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 31562 _Form of expected instruction(s):_ 'vmin.u8 Q0, Q0, Q0' 31563 31564 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 31565 _Form of expected instruction(s):_ 'vmin.s32 Q0, Q0, Q0' 31566 31567 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 31568 _Form of expected instruction(s):_ 'vmin.s16 Q0, Q0, Q0' 31569 31570 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 31571 _Form of expected instruction(s):_ 'vmin.s8 Q0, Q0, Q0' 31572 31573 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 31574 _Form of expected instruction(s):_ 'vmin.f32 Q0, Q0, Q0' 31575 31576 6.56.3.27 Pairwise add 31577 ...................... 31578 31579 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 31580 _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0' 31581 31582 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 31583 _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0' 31584 31585 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 31586 _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0' 31587 31588 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 31589 _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0' 31590 31591 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 31592 _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0' 31593 31594 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 31595 _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0' 31596 31597 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 31598 _Form of expected instruction(s):_ 'vpadd.f32 D0, D0, D0' 31599 31600 * uint64x1_t vpaddl_u32 (uint32x2_t) 31601 _Form of expected instruction(s):_ 'vpaddl.u32 D0, D0' 31602 31603 * uint32x2_t vpaddl_u16 (uint16x4_t) 31604 _Form of expected instruction(s):_ 'vpaddl.u16 D0, D0' 31605 31606 * uint16x4_t vpaddl_u8 (uint8x8_t) 31607 _Form of expected instruction(s):_ 'vpaddl.u8 D0, D0' 31608 31609 * int64x1_t vpaddl_s32 (int32x2_t) 31610 _Form of expected instruction(s):_ 'vpaddl.s32 D0, D0' 31611 31612 * int32x2_t vpaddl_s16 (int16x4_t) 31613 _Form of expected instruction(s):_ 'vpaddl.s16 D0, D0' 31614 31615 * int16x4_t vpaddl_s8 (int8x8_t) 31616 _Form of expected instruction(s):_ 'vpaddl.s8 D0, D0' 31617 31618 * uint64x2_t vpaddlq_u32 (uint32x4_t) 31619 _Form of expected instruction(s):_ 'vpaddl.u32 Q0, Q0' 31620 31621 * uint32x4_t vpaddlq_u16 (uint16x8_t) 31622 _Form of expected instruction(s):_ 'vpaddl.u16 Q0, Q0' 31623 31624 * uint16x8_t vpaddlq_u8 (uint8x16_t) 31625 _Form of expected instruction(s):_ 'vpaddl.u8 Q0, Q0' 31626 31627 * int64x2_t vpaddlq_s32 (int32x4_t) 31628 _Form of expected instruction(s):_ 'vpaddl.s32 Q0, Q0' 31629 31630 * int32x4_t vpaddlq_s16 (int16x8_t) 31631 _Form of expected instruction(s):_ 'vpaddl.s16 Q0, Q0' 31632 31633 * int16x8_t vpaddlq_s8 (int8x16_t) 31634 _Form of expected instruction(s):_ 'vpaddl.s8 Q0, Q0' 31635 31636 6.56.3.28 Pairwise add, single_opcode widen and accumulate 31637 .......................................................... 31638 31639 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 31640 _Form of expected instruction(s):_ 'vpadal.u32 D0, D0' 31641 31642 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 31643 _Form of expected instruction(s):_ 'vpadal.u16 D0, D0' 31644 31645 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 31646 _Form of expected instruction(s):_ 'vpadal.u8 D0, D0' 31647 31648 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 31649 _Form of expected instruction(s):_ 'vpadal.s32 D0, D0' 31650 31651 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 31652 _Form of expected instruction(s):_ 'vpadal.s16 D0, D0' 31653 31654 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 31655 _Form of expected instruction(s):_ 'vpadal.s8 D0, D0' 31656 31657 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 31658 _Form of expected instruction(s):_ 'vpadal.u32 Q0, Q0' 31659 31660 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 31661 _Form of expected instruction(s):_ 'vpadal.u16 Q0, Q0' 31662 31663 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 31664 _Form of expected instruction(s):_ 'vpadal.u8 Q0, Q0' 31665 31666 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 31667 _Form of expected instruction(s):_ 'vpadal.s32 Q0, Q0' 31668 31669 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 31670 _Form of expected instruction(s):_ 'vpadal.s16 Q0, Q0' 31671 31672 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 31673 _Form of expected instruction(s):_ 'vpadal.s8 Q0, Q0' 31674 31675 6.56.3.29 Folding maximum 31676 ......................... 31677 31678 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 31679 _Form of expected instruction(s):_ 'vpmax.u32 D0, D0, D0' 31680 31681 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 31682 _Form of expected instruction(s):_ 'vpmax.u16 D0, D0, D0' 31683 31684 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 31685 _Form of expected instruction(s):_ 'vpmax.u8 D0, D0, D0' 31686 31687 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 31688 _Form of expected instruction(s):_ 'vpmax.s32 D0, D0, D0' 31689 31690 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 31691 _Form of expected instruction(s):_ 'vpmax.s16 D0, D0, D0' 31692 31693 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 31694 _Form of expected instruction(s):_ 'vpmax.s8 D0, D0, D0' 31695 31696 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 31697 _Form of expected instruction(s):_ 'vpmax.f32 D0, D0, D0' 31698 31699 6.56.3.30 Folding minimum 31700 ......................... 31701 31702 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 31703 _Form of expected instruction(s):_ 'vpmin.u32 D0, D0, D0' 31704 31705 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 31706 _Form of expected instruction(s):_ 'vpmin.u16 D0, D0, D0' 31707 31708 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 31709 _Form of expected instruction(s):_ 'vpmin.u8 D0, D0, D0' 31710 31711 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 31712 _Form of expected instruction(s):_ 'vpmin.s32 D0, D0, D0' 31713 31714 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 31715 _Form of expected instruction(s):_ 'vpmin.s16 D0, D0, D0' 31716 31717 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 31718 _Form of expected instruction(s):_ 'vpmin.s8 D0, D0, D0' 31719 31720 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 31721 _Form of expected instruction(s):_ 'vpmin.f32 D0, D0, D0' 31722 31723 6.56.3.31 Reciprocal step 31724 ......................... 31725 31726 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 31727 _Form of expected instruction(s):_ 'vrecps.f32 D0, D0, D0' 31728 31729 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 31730 _Form of expected instruction(s):_ 'vrecps.f32 Q0, Q0, Q0' 31731 31732 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 31733 _Form of expected instruction(s):_ 'vrsqrts.f32 D0, D0, D0' 31734 31735 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 31736 _Form of expected instruction(s):_ 'vrsqrts.f32 Q0, Q0, Q0' 31737 31738 6.56.3.32 Vector shift left 31739 ........................... 31740 31741 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 31742 _Form of expected instruction(s):_ 'vshl.u32 D0, D0, D0' 31743 31744 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 31745 _Form of expected instruction(s):_ 'vshl.u16 D0, D0, D0' 31746 31747 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 31748 _Form of expected instruction(s):_ 'vshl.u8 D0, D0, D0' 31749 31750 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 31751 _Form of expected instruction(s):_ 'vshl.s32 D0, D0, D0' 31752 31753 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 31754 _Form of expected instruction(s):_ 'vshl.s16 D0, D0, D0' 31755 31756 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 31757 _Form of expected instruction(s):_ 'vshl.s8 D0, D0, D0' 31758 31759 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 31760 _Form of expected instruction(s):_ 'vshl.u64 D0, D0, D0' 31761 31762 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 31763 _Form of expected instruction(s):_ 'vshl.s64 D0, D0, D0' 31764 31765 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 31766 _Form of expected instruction(s):_ 'vshl.u32 Q0, Q0, Q0' 31767 31768 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 31769 _Form of expected instruction(s):_ 'vshl.u16 Q0, Q0, Q0' 31770 31771 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 31772 _Form of expected instruction(s):_ 'vshl.u8 Q0, Q0, Q0' 31773 31774 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 31775 _Form of expected instruction(s):_ 'vshl.s32 Q0, Q0, Q0' 31776 31777 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 31778 _Form of expected instruction(s):_ 'vshl.s16 Q0, Q0, Q0' 31779 31780 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 31781 _Form of expected instruction(s):_ 'vshl.s8 Q0, Q0, Q0' 31782 31783 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 31784 _Form of expected instruction(s):_ 'vshl.u64 Q0, Q0, Q0' 31785 31786 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 31787 _Form of expected instruction(s):_ 'vshl.s64 Q0, Q0, Q0' 31788 31789 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 31790 _Form of expected instruction(s):_ 'vrshl.u32 D0, D0, D0' 31791 31792 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 31793 _Form of expected instruction(s):_ 'vrshl.u16 D0, D0, D0' 31794 31795 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 31796 _Form of expected instruction(s):_ 'vrshl.u8 D0, D0, D0' 31797 31798 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 31799 _Form of expected instruction(s):_ 'vrshl.s32 D0, D0, D0' 31800 31801 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 31802 _Form of expected instruction(s):_ 'vrshl.s16 D0, D0, D0' 31803 31804 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 31805 _Form of expected instruction(s):_ 'vrshl.s8 D0, D0, D0' 31806 31807 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 31808 _Form of expected instruction(s):_ 'vrshl.u64 D0, D0, D0' 31809 31810 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 31811 _Form of expected instruction(s):_ 'vrshl.s64 D0, D0, D0' 31812 31813 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 31814 _Form of expected instruction(s):_ 'vrshl.u32 Q0, Q0, Q0' 31815 31816 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 31817 _Form of expected instruction(s):_ 'vrshl.u16 Q0, Q0, Q0' 31818 31819 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 31820 _Form of expected instruction(s):_ 'vrshl.u8 Q0, Q0, Q0' 31821 31822 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 31823 _Form of expected instruction(s):_ 'vrshl.s32 Q0, Q0, Q0' 31824 31825 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 31826 _Form of expected instruction(s):_ 'vrshl.s16 Q0, Q0, Q0' 31827 31828 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 31829 _Form of expected instruction(s):_ 'vrshl.s8 Q0, Q0, Q0' 31830 31831 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 31832 _Form of expected instruction(s):_ 'vrshl.u64 Q0, Q0, Q0' 31833 31834 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 31835 _Form of expected instruction(s):_ 'vrshl.s64 Q0, Q0, Q0' 31836 31837 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 31838 _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, D0' 31839 31840 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 31841 _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, D0' 31842 31843 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 31844 _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, D0' 31845 31846 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 31847 _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, D0' 31848 31849 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 31850 _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, D0' 31851 31852 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 31853 _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, D0' 31854 31855 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 31856 _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, D0' 31857 31858 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 31859 _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, D0' 31860 31861 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 31862 _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, Q0' 31863 31864 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 31865 _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, Q0' 31866 31867 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 31868 _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, Q0' 31869 31870 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 31871 _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, Q0' 31872 31873 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 31874 _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, Q0' 31875 31876 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 31877 _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, Q0' 31878 31879 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 31880 _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, Q0' 31881 31882 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 31883 _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, Q0' 31884 31885 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 31886 _Form of expected instruction(s):_ 'vqrshl.u32 D0, D0, D0' 31887 31888 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 31889 _Form of expected instruction(s):_ 'vqrshl.u16 D0, D0, D0' 31890 31891 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 31892 _Form of expected instruction(s):_ 'vqrshl.u8 D0, D0, D0' 31893 31894 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 31895 _Form of expected instruction(s):_ 'vqrshl.s32 D0, D0, D0' 31896 31897 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 31898 _Form of expected instruction(s):_ 'vqrshl.s16 D0, D0, D0' 31899 31900 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 31901 _Form of expected instruction(s):_ 'vqrshl.s8 D0, D0, D0' 31902 31903 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 31904 _Form of expected instruction(s):_ 'vqrshl.u64 D0, D0, D0' 31905 31906 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 31907 _Form of expected instruction(s):_ 'vqrshl.s64 D0, D0, D0' 31908 31909 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 31910 _Form of expected instruction(s):_ 'vqrshl.u32 Q0, Q0, Q0' 31911 31912 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 31913 _Form of expected instruction(s):_ 'vqrshl.u16 Q0, Q0, Q0' 31914 31915 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 31916 _Form of expected instruction(s):_ 'vqrshl.u8 Q0, Q0, Q0' 31917 31918 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 31919 _Form of expected instruction(s):_ 'vqrshl.s32 Q0, Q0, Q0' 31920 31921 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 31922 _Form of expected instruction(s):_ 'vqrshl.s16 Q0, Q0, Q0' 31923 31924 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 31925 _Form of expected instruction(s):_ 'vqrshl.s8 Q0, Q0, Q0' 31926 31927 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 31928 _Form of expected instruction(s):_ 'vqrshl.u64 Q0, Q0, Q0' 31929 31930 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 31931 _Form of expected instruction(s):_ 'vqrshl.s64 Q0, Q0, Q0' 31932 31933 6.56.3.33 Vector shift left by constant 31934 ....................................... 31935 31936 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 31937 _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0' 31938 31939 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 31940 _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0' 31941 31942 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 31943 _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0' 31944 31945 * int32x2_t vshl_n_s32 (int32x2_t, const int) 31946 _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0' 31947 31948 * int16x4_t vshl_n_s16 (int16x4_t, const int) 31949 _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0' 31950 31951 * int8x8_t vshl_n_s8 (int8x8_t, const int) 31952 _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0' 31953 31954 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 31955 _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0' 31956 31957 * int64x1_t vshl_n_s64 (int64x1_t, const int) 31958 _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0' 31959 31960 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 31961 _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0' 31962 31963 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 31964 _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0' 31965 31966 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 31967 _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0' 31968 31969 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 31970 _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0' 31971 31972 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 31973 _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0' 31974 31975 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 31976 _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0' 31977 31978 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 31979 _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0' 31980 31981 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 31982 _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0' 31983 31984 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 31985 _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, #0' 31986 31987 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 31988 _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, #0' 31989 31990 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 31991 _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, #0' 31992 31993 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 31994 _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, #0' 31995 31996 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 31997 _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, #0' 31998 31999 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 32000 _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, #0' 32001 32002 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 32003 _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, #0' 32004 32005 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 32006 _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, #0' 32007 32008 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 32009 _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, #0' 32010 32011 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 32012 _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, #0' 32013 32014 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 32015 _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, #0' 32016 32017 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 32018 _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, #0' 32019 32020 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 32021 _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, #0' 32022 32023 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 32024 _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, #0' 32025 32026 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 32027 _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, #0' 32028 32029 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 32030 _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, #0' 32031 32032 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 32033 _Form of expected instruction(s):_ 'vqshlu.s64 D0, D0, #0' 32034 32035 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 32036 _Form of expected instruction(s):_ 'vqshlu.s32 D0, D0, #0' 32037 32038 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 32039 _Form of expected instruction(s):_ 'vqshlu.s16 D0, D0, #0' 32040 32041 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 32042 _Form of expected instruction(s):_ 'vqshlu.s8 D0, D0, #0' 32043 32044 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 32045 _Form of expected instruction(s):_ 'vqshlu.s64 Q0, Q0, #0' 32046 32047 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 32048 _Form of expected instruction(s):_ 'vqshlu.s32 Q0, Q0, #0' 32049 32050 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 32051 _Form of expected instruction(s):_ 'vqshlu.s16 Q0, Q0, #0' 32052 32053 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 32054 _Form of expected instruction(s):_ 'vqshlu.s8 Q0, Q0, #0' 32055 32056 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 32057 _Form of expected instruction(s):_ 'vshll.u32 Q0, D0, #0' 32058 32059 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 32060 _Form of expected instruction(s):_ 'vshll.u16 Q0, D0, #0' 32061 32062 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 32063 _Form of expected instruction(s):_ 'vshll.u8 Q0, D0, #0' 32064 32065 * int64x2_t vshll_n_s32 (int32x2_t, const int) 32066 _Form of expected instruction(s):_ 'vshll.s32 Q0, D0, #0' 32067 32068 * int32x4_t vshll_n_s16 (int16x4_t, const int) 32069 _Form of expected instruction(s):_ 'vshll.s16 Q0, D0, #0' 32070 32071 * int16x8_t vshll_n_s8 (int8x8_t, const int) 32072 _Form of expected instruction(s):_ 'vshll.s8 Q0, D0, #0' 32073 32074 6.56.3.34 Vector shift right by constant 32075 ........................................ 32076 32077 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 32078 _Form of expected instruction(s):_ 'vshr.u32 D0, D0, #0' 32079 32080 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 32081 _Form of expected instruction(s):_ 'vshr.u16 D0, D0, #0' 32082 32083 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 32084 _Form of expected instruction(s):_ 'vshr.u8 D0, D0, #0' 32085 32086 * int32x2_t vshr_n_s32 (int32x2_t, const int) 32087 _Form of expected instruction(s):_ 'vshr.s32 D0, D0, #0' 32088 32089 * int16x4_t vshr_n_s16 (int16x4_t, const int) 32090 _Form of expected instruction(s):_ 'vshr.s16 D0, D0, #0' 32091 32092 * int8x8_t vshr_n_s8 (int8x8_t, const int) 32093 _Form of expected instruction(s):_ 'vshr.s8 D0, D0, #0' 32094 32095 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 32096 _Form of expected instruction(s):_ 'vshr.u64 D0, D0, #0' 32097 32098 * int64x1_t vshr_n_s64 (int64x1_t, const int) 32099 _Form of expected instruction(s):_ 'vshr.s64 D0, D0, #0' 32100 32101 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 32102 _Form of expected instruction(s):_ 'vshr.u32 Q0, Q0, #0' 32103 32104 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 32105 _Form of expected instruction(s):_ 'vshr.u16 Q0, Q0, #0' 32106 32107 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 32108 _Form of expected instruction(s):_ 'vshr.u8 Q0, Q0, #0' 32109 32110 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 32111 _Form of expected instruction(s):_ 'vshr.s32 Q0, Q0, #0' 32112 32113 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 32114 _Form of expected instruction(s):_ 'vshr.s16 Q0, Q0, #0' 32115 32116 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 32117 _Form of expected instruction(s):_ 'vshr.s8 Q0, Q0, #0' 32118 32119 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 32120 _Form of expected instruction(s):_ 'vshr.u64 Q0, Q0, #0' 32121 32122 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 32123 _Form of expected instruction(s):_ 'vshr.s64 Q0, Q0, #0' 32124 32125 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 32126 _Form of expected instruction(s):_ 'vrshr.u32 D0, D0, #0' 32127 32128 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 32129 _Form of expected instruction(s):_ 'vrshr.u16 D0, D0, #0' 32130 32131 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 32132 _Form of expected instruction(s):_ 'vrshr.u8 D0, D0, #0' 32133 32134 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 32135 _Form of expected instruction(s):_ 'vrshr.s32 D0, D0, #0' 32136 32137 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 32138 _Form of expected instruction(s):_ 'vrshr.s16 D0, D0, #0' 32139 32140 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 32141 _Form of expected instruction(s):_ 'vrshr.s8 D0, D0, #0' 32142 32143 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 32144 _Form of expected instruction(s):_ 'vrshr.u64 D0, D0, #0' 32145 32146 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 32147 _Form of expected instruction(s):_ 'vrshr.s64 D0, D0, #0' 32148 32149 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 32150 _Form of expected instruction(s):_ 'vrshr.u32 Q0, Q0, #0' 32151 32152 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 32153 _Form of expected instruction(s):_ 'vrshr.u16 Q0, Q0, #0' 32154 32155 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 32156 _Form of expected instruction(s):_ 'vrshr.u8 Q0, Q0, #0' 32157 32158 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 32159 _Form of expected instruction(s):_ 'vrshr.s32 Q0, Q0, #0' 32160 32161 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 32162 _Form of expected instruction(s):_ 'vrshr.s16 Q0, Q0, #0' 32163 32164 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 32165 _Form of expected instruction(s):_ 'vrshr.s8 Q0, Q0, #0' 32166 32167 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 32168 _Form of expected instruction(s):_ 'vrshr.u64 Q0, Q0, #0' 32169 32170 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 32171 _Form of expected instruction(s):_ 'vrshr.s64 Q0, Q0, #0' 32172 32173 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 32174 _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0' 32175 32176 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 32177 _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0' 32178 32179 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 32180 _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0' 32181 32182 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 32183 _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0' 32184 32185 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 32186 _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0' 32187 32188 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 32189 _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0' 32190 32191 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 32192 _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0' 32193 32194 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 32195 _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0' 32196 32197 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 32198 _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0' 32199 32200 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 32201 _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0' 32202 32203 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 32204 _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0' 32205 32206 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 32207 _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0' 32208 32209 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 32210 _Form of expected instruction(s):_ 'vqshrn.u64 D0, Q0, #0' 32211 32212 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 32213 _Form of expected instruction(s):_ 'vqshrn.u32 D0, Q0, #0' 32214 32215 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 32216 _Form of expected instruction(s):_ 'vqshrn.u16 D0, Q0, #0' 32217 32218 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 32219 _Form of expected instruction(s):_ 'vqshrn.s64 D0, Q0, #0' 32220 32221 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 32222 _Form of expected instruction(s):_ 'vqshrn.s32 D0, Q0, #0' 32223 32224 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 32225 _Form of expected instruction(s):_ 'vqshrn.s16 D0, Q0, #0' 32226 32227 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 32228 _Form of expected instruction(s):_ 'vqrshrn.u64 D0, Q0, #0' 32229 32230 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 32231 _Form of expected instruction(s):_ 'vqrshrn.u32 D0, Q0, #0' 32232 32233 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 32234 _Form of expected instruction(s):_ 'vqrshrn.u16 D0, Q0, #0' 32235 32236 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 32237 _Form of expected instruction(s):_ 'vqrshrn.s64 D0, Q0, #0' 32238 32239 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 32240 _Form of expected instruction(s):_ 'vqrshrn.s32 D0, Q0, #0' 32241 32242 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 32243 _Form of expected instruction(s):_ 'vqrshrn.s16 D0, Q0, #0' 32244 32245 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 32246 _Form of expected instruction(s):_ 'vqshrun.s64 D0, Q0, #0' 32247 32248 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 32249 _Form of expected instruction(s):_ 'vqshrun.s32 D0, Q0, #0' 32250 32251 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 32252 _Form of expected instruction(s):_ 'vqshrun.s16 D0, Q0, #0' 32253 32254 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 32255 _Form of expected instruction(s):_ 'vqrshrun.s64 D0, Q0, #0' 32256 32257 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 32258 _Form of expected instruction(s):_ 'vqrshrun.s32 D0, Q0, #0' 32259 32260 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 32261 _Form of expected instruction(s):_ 'vqrshrun.s16 D0, Q0, #0' 32262 32263 6.56.3.35 Vector shift right by constant and accumulate 32264 ....................................................... 32265 32266 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 32267 _Form of expected instruction(s):_ 'vsra.u32 D0, D0, #0' 32268 32269 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 32270 _Form of expected instruction(s):_ 'vsra.u16 D0, D0, #0' 32271 32272 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 32273 _Form of expected instruction(s):_ 'vsra.u8 D0, D0, #0' 32274 32275 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 32276 _Form of expected instruction(s):_ 'vsra.s32 D0, D0, #0' 32277 32278 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 32279 _Form of expected instruction(s):_ 'vsra.s16 D0, D0, #0' 32280 32281 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 32282 _Form of expected instruction(s):_ 'vsra.s8 D0, D0, #0' 32283 32284 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 32285 _Form of expected instruction(s):_ 'vsra.u64 D0, D0, #0' 32286 32287 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 32288 _Form of expected instruction(s):_ 'vsra.s64 D0, D0, #0' 32289 32290 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 32291 _Form of expected instruction(s):_ 'vsra.u32 Q0, Q0, #0' 32292 32293 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 32294 _Form of expected instruction(s):_ 'vsra.u16 Q0, Q0, #0' 32295 32296 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 32297 _Form of expected instruction(s):_ 'vsra.u8 Q0, Q0, #0' 32298 32299 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 32300 _Form of expected instruction(s):_ 'vsra.s32 Q0, Q0, #0' 32301 32302 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 32303 _Form of expected instruction(s):_ 'vsra.s16 Q0, Q0, #0' 32304 32305 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 32306 _Form of expected instruction(s):_ 'vsra.s8 Q0, Q0, #0' 32307 32308 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 32309 _Form of expected instruction(s):_ 'vsra.u64 Q0, Q0, #0' 32310 32311 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 32312 _Form of expected instruction(s):_ 'vsra.s64 Q0, Q0, #0' 32313 32314 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 32315 _Form of expected instruction(s):_ 'vrsra.u32 D0, D0, #0' 32316 32317 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 32318 _Form of expected instruction(s):_ 'vrsra.u16 D0, D0, #0' 32319 32320 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 32321 _Form of expected instruction(s):_ 'vrsra.u8 D0, D0, #0' 32322 32323 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 32324 _Form of expected instruction(s):_ 'vrsra.s32 D0, D0, #0' 32325 32326 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 32327 _Form of expected instruction(s):_ 'vrsra.s16 D0, D0, #0' 32328 32329 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 32330 _Form of expected instruction(s):_ 'vrsra.s8 D0, D0, #0' 32331 32332 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 32333 _Form of expected instruction(s):_ 'vrsra.u64 D0, D0, #0' 32334 32335 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 32336 _Form of expected instruction(s):_ 'vrsra.s64 D0, D0, #0' 32337 32338 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 32339 _Form of expected instruction(s):_ 'vrsra.u32 Q0, Q0, #0' 32340 32341 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 32342 _Form of expected instruction(s):_ 'vrsra.u16 Q0, Q0, #0' 32343 32344 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 32345 _Form of expected instruction(s):_ 'vrsra.u8 Q0, Q0, #0' 32346 32347 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 32348 _Form of expected instruction(s):_ 'vrsra.s32 Q0, Q0, #0' 32349 32350 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 32351 _Form of expected instruction(s):_ 'vrsra.s16 Q0, Q0, #0' 32352 32353 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 32354 _Form of expected instruction(s):_ 'vrsra.s8 Q0, Q0, #0' 32355 32356 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 32357 _Form of expected instruction(s):_ 'vrsra.u64 Q0, Q0, #0' 32358 32359 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 32360 _Form of expected instruction(s):_ 'vrsra.s64 Q0, Q0, #0' 32361 32362 6.56.3.36 Vector shift right and insert 32363 ....................................... 32364 32365 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 32366 _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0' 32367 32368 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 32369 _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' 32370 32371 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 32372 _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' 32373 32374 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 32375 _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0' 32376 32377 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 32378 _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' 32379 32380 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 32381 _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' 32382 32383 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 32384 _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0' 32385 32386 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 32387 _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0' 32388 32389 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 32390 _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' 32391 32392 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 32393 _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' 32394 32395 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 32396 _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0' 32397 32398 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 32399 _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' 32400 32401 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 32402 _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' 32403 32404 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 32405 _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0' 32406 32407 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 32408 _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' 32409 32410 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 32411 _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' 32412 32413 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 32414 _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0' 32415 32416 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 32417 _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0' 32418 32419 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 32420 _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' 32421 32422 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 32423 _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' 32424 32425 6.56.3.37 Vector shift left and insert 32426 ...................................... 32427 32428 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 32429 _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0' 32430 32431 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 32432 _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' 32433 32434 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 32435 _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' 32436 32437 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 32438 _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0' 32439 32440 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 32441 _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' 32442 32443 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 32444 _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' 32445 32446 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 32447 _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0' 32448 32449 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 32450 _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0' 32451 32452 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 32453 _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' 32454 32455 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 32456 _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' 32457 32458 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 32459 _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0' 32460 32461 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 32462 _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' 32463 32464 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 32465 _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' 32466 32467 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 32468 _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0' 32469 32470 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 32471 _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' 32472 32473 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 32474 _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' 32475 32476 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 32477 _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0' 32478 32479 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 32480 _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0' 32481 32482 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 32483 _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' 32484 32485 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 32486 _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' 32487 32488 6.56.3.38 Absolute value 32489 ........................ 32490 32491 * float32x2_t vabs_f32 (float32x2_t) 32492 _Form of expected instruction(s):_ 'vabs.f32 D0, D0' 32493 32494 * int32x2_t vabs_s32 (int32x2_t) 32495 _Form of expected instruction(s):_ 'vabs.s32 D0, D0' 32496 32497 * int16x4_t vabs_s16 (int16x4_t) 32498 _Form of expected instruction(s):_ 'vabs.s16 D0, D0' 32499 32500 * int8x8_t vabs_s8 (int8x8_t) 32501 _Form of expected instruction(s):_ 'vabs.s8 D0, D0' 32502 32503 * float32x4_t vabsq_f32 (float32x4_t) 32504 _Form of expected instruction(s):_ 'vabs.f32 Q0, Q0' 32505 32506 * int32x4_t vabsq_s32 (int32x4_t) 32507 _Form of expected instruction(s):_ 'vabs.s32 Q0, Q0' 32508 32509 * int16x8_t vabsq_s16 (int16x8_t) 32510 _Form of expected instruction(s):_ 'vabs.s16 Q0, Q0' 32511 32512 * int8x16_t vabsq_s8 (int8x16_t) 32513 _Form of expected instruction(s):_ 'vabs.s8 Q0, Q0' 32514 32515 * int32x2_t vqabs_s32 (int32x2_t) 32516 _Form of expected instruction(s):_ 'vqabs.s32 D0, D0' 32517 32518 * int16x4_t vqabs_s16 (int16x4_t) 32519 _Form of expected instruction(s):_ 'vqabs.s16 D0, D0' 32520 32521 * int8x8_t vqabs_s8 (int8x8_t) 32522 _Form of expected instruction(s):_ 'vqabs.s8 D0, D0' 32523 32524 * int32x4_t vqabsq_s32 (int32x4_t) 32525 _Form of expected instruction(s):_ 'vqabs.s32 Q0, Q0' 32526 32527 * int16x8_t vqabsq_s16 (int16x8_t) 32528 _Form of expected instruction(s):_ 'vqabs.s16 Q0, Q0' 32529 32530 * int8x16_t vqabsq_s8 (int8x16_t) 32531 _Form of expected instruction(s):_ 'vqabs.s8 Q0, Q0' 32532 32533 6.56.3.39 Negation 32534 .................. 32535 32536 * float32x2_t vneg_f32 (float32x2_t) 32537 _Form of expected instruction(s):_ 'vneg.f32 D0, D0' 32538 32539 * int32x2_t vneg_s32 (int32x2_t) 32540 _Form of expected instruction(s):_ 'vneg.s32 D0, D0' 32541 32542 * int16x4_t vneg_s16 (int16x4_t) 32543 _Form of expected instruction(s):_ 'vneg.s16 D0, D0' 32544 32545 * int8x8_t vneg_s8 (int8x8_t) 32546 _Form of expected instruction(s):_ 'vneg.s8 D0, D0' 32547 32548 * float32x4_t vnegq_f32 (float32x4_t) 32549 _Form of expected instruction(s):_ 'vneg.f32 Q0, Q0' 32550 32551 * int32x4_t vnegq_s32 (int32x4_t) 32552 _Form of expected instruction(s):_ 'vneg.s32 Q0, Q0' 32553 32554 * int16x8_t vnegq_s16 (int16x8_t) 32555 _Form of expected instruction(s):_ 'vneg.s16 Q0, Q0' 32556 32557 * int8x16_t vnegq_s8 (int8x16_t) 32558 _Form of expected instruction(s):_ 'vneg.s8 Q0, Q0' 32559 32560 * int32x2_t vqneg_s32 (int32x2_t) 32561 _Form of expected instruction(s):_ 'vqneg.s32 D0, D0' 32562 32563 * int16x4_t vqneg_s16 (int16x4_t) 32564 _Form of expected instruction(s):_ 'vqneg.s16 D0, D0' 32565 32566 * int8x8_t vqneg_s8 (int8x8_t) 32567 _Form of expected instruction(s):_ 'vqneg.s8 D0, D0' 32568 32569 * int32x4_t vqnegq_s32 (int32x4_t) 32570 _Form of expected instruction(s):_ 'vqneg.s32 Q0, Q0' 32571 32572 * int16x8_t vqnegq_s16 (int16x8_t) 32573 _Form of expected instruction(s):_ 'vqneg.s16 Q0, Q0' 32574 32575 * int8x16_t vqnegq_s8 (int8x16_t) 32576 _Form of expected instruction(s):_ 'vqneg.s8 Q0, Q0' 32577 32578 6.56.3.40 Bitwise not 32579 ..................... 32580 32581 * uint32x2_t vmvn_u32 (uint32x2_t) 32582 _Form of expected instruction(s):_ 'vmvn D0, D0' 32583 32584 * uint16x4_t vmvn_u16 (uint16x4_t) 32585 _Form of expected instruction(s):_ 'vmvn D0, D0' 32586 32587 * uint8x8_t vmvn_u8 (uint8x8_t) 32588 _Form of expected instruction(s):_ 'vmvn D0, D0' 32589 32590 * int32x2_t vmvn_s32 (int32x2_t) 32591 _Form of expected instruction(s):_ 'vmvn D0, D0' 32592 32593 * int16x4_t vmvn_s16 (int16x4_t) 32594 _Form of expected instruction(s):_ 'vmvn D0, D0' 32595 32596 * int8x8_t vmvn_s8 (int8x8_t) 32597 _Form of expected instruction(s):_ 'vmvn D0, D0' 32598 32599 * poly8x8_t vmvn_p8 (poly8x8_t) 32600 _Form of expected instruction(s):_ 'vmvn D0, D0' 32601 32602 * uint32x4_t vmvnq_u32 (uint32x4_t) 32603 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 32604 32605 * uint16x8_t vmvnq_u16 (uint16x8_t) 32606 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 32607 32608 * uint8x16_t vmvnq_u8 (uint8x16_t) 32609 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 32610 32611 * int32x4_t vmvnq_s32 (int32x4_t) 32612 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 32613 32614 * int16x8_t vmvnq_s16 (int16x8_t) 32615 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 32616 32617 * int8x16_t vmvnq_s8 (int8x16_t) 32618 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 32619 32620 * poly8x16_t vmvnq_p8 (poly8x16_t) 32621 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 32622 32623 6.56.3.41 Count leading sign bits 32624 ................................. 32625 32626 * int32x2_t vcls_s32 (int32x2_t) 32627 _Form of expected instruction(s):_ 'vcls.s32 D0, D0' 32628 32629 * int16x4_t vcls_s16 (int16x4_t) 32630 _Form of expected instruction(s):_ 'vcls.s16 D0, D0' 32631 32632 * int8x8_t vcls_s8 (int8x8_t) 32633 _Form of expected instruction(s):_ 'vcls.s8 D0, D0' 32634 32635 * int32x4_t vclsq_s32 (int32x4_t) 32636 _Form of expected instruction(s):_ 'vcls.s32 Q0, Q0' 32637 32638 * int16x8_t vclsq_s16 (int16x8_t) 32639 _Form of expected instruction(s):_ 'vcls.s16 Q0, Q0' 32640 32641 * int8x16_t vclsq_s8 (int8x16_t) 32642 _Form of expected instruction(s):_ 'vcls.s8 Q0, Q0' 32643 32644 6.56.3.42 Count leading zeros 32645 ............................. 32646 32647 * uint32x2_t vclz_u32 (uint32x2_t) 32648 _Form of expected instruction(s):_ 'vclz.i32 D0, D0' 32649 32650 * uint16x4_t vclz_u16 (uint16x4_t) 32651 _Form of expected instruction(s):_ 'vclz.i16 D0, D0' 32652 32653 * uint8x8_t vclz_u8 (uint8x8_t) 32654 _Form of expected instruction(s):_ 'vclz.i8 D0, D0' 32655 32656 * int32x2_t vclz_s32 (int32x2_t) 32657 _Form of expected instruction(s):_ 'vclz.i32 D0, D0' 32658 32659 * int16x4_t vclz_s16 (int16x4_t) 32660 _Form of expected instruction(s):_ 'vclz.i16 D0, D0' 32661 32662 * int8x8_t vclz_s8 (int8x8_t) 32663 _Form of expected instruction(s):_ 'vclz.i8 D0, D0' 32664 32665 * uint32x4_t vclzq_u32 (uint32x4_t) 32666 _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0' 32667 32668 * uint16x8_t vclzq_u16 (uint16x8_t) 32669 _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0' 32670 32671 * uint8x16_t vclzq_u8 (uint8x16_t) 32672 _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0' 32673 32674 * int32x4_t vclzq_s32 (int32x4_t) 32675 _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0' 32676 32677 * int16x8_t vclzq_s16 (int16x8_t) 32678 _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0' 32679 32680 * int8x16_t vclzq_s8 (int8x16_t) 32681 _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0' 32682 32683 6.56.3.43 Count number of set bits 32684 .................................. 32685 32686 * uint8x8_t vcnt_u8 (uint8x8_t) 32687 _Form of expected instruction(s):_ 'vcnt.8 D0, D0' 32688 32689 * int8x8_t vcnt_s8 (int8x8_t) 32690 _Form of expected instruction(s):_ 'vcnt.8 D0, D0' 32691 32692 * poly8x8_t vcnt_p8 (poly8x8_t) 32693 _Form of expected instruction(s):_ 'vcnt.8 D0, D0' 32694 32695 * uint8x16_t vcntq_u8 (uint8x16_t) 32696 _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' 32697 32698 * int8x16_t vcntq_s8 (int8x16_t) 32699 _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' 32700 32701 * poly8x16_t vcntq_p8 (poly8x16_t) 32702 _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' 32703 32704 6.56.3.44 Reciprocal estimate 32705 ............................. 32706 32707 * float32x2_t vrecpe_f32 (float32x2_t) 32708 _Form of expected instruction(s):_ 'vrecpe.f32 D0, D0' 32709 32710 * uint32x2_t vrecpe_u32 (uint32x2_t) 32711 _Form of expected instruction(s):_ 'vrecpe.u32 D0, D0' 32712 32713 * float32x4_t vrecpeq_f32 (float32x4_t) 32714 _Form of expected instruction(s):_ 'vrecpe.f32 Q0, Q0' 32715 32716 * uint32x4_t vrecpeq_u32 (uint32x4_t) 32717 _Form of expected instruction(s):_ 'vrecpe.u32 Q0, Q0' 32718 32719 6.56.3.45 Reciprocal square-root estimate 32720 ......................................... 32721 32722 * float32x2_t vrsqrte_f32 (float32x2_t) 32723 _Form of expected instruction(s):_ 'vrsqrte.f32 D0, D0' 32724 32725 * uint32x2_t vrsqrte_u32 (uint32x2_t) 32726 _Form of expected instruction(s):_ 'vrsqrte.u32 D0, D0' 32727 32728 * float32x4_t vrsqrteq_f32 (float32x4_t) 32729 _Form of expected instruction(s):_ 'vrsqrte.f32 Q0, Q0' 32730 32731 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 32732 _Form of expected instruction(s):_ 'vrsqrte.u32 Q0, Q0' 32733 32734 6.56.3.46 Get lanes from a vector 32735 ................................. 32736 32737 * uint32_t vget_lane_u32 (uint32x2_t, const int) 32738 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 32739 32740 * uint16_t vget_lane_u16 (uint16x4_t, const int) 32741 _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' 32742 32743 * uint8_t vget_lane_u8 (uint8x8_t, const int) 32744 _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' 32745 32746 * int32_t vget_lane_s32 (int32x2_t, const int) 32747 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 32748 32749 * int16_t vget_lane_s16 (int16x4_t, const int) 32750 _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]' 32751 32752 * int8_t vget_lane_s8 (int8x8_t, const int) 32753 _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]' 32754 32755 * float32_t vget_lane_f32 (float32x2_t, const int) 32756 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 32757 32758 * poly16_t vget_lane_p16 (poly16x4_t, const int) 32759 _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' 32760 32761 * poly8_t vget_lane_p8 (poly8x8_t, const int) 32762 _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' 32763 32764 * uint64_t vget_lane_u64 (uint64x1_t, const int) 32765 32766 * int64_t vget_lane_s64 (int64x1_t, const int) 32767 32768 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 32769 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 32770 32771 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 32772 _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' 32773 32774 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 32775 _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' 32776 32777 * int32_t vgetq_lane_s32 (int32x4_t, const int) 32778 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 32779 32780 * int16_t vgetq_lane_s16 (int16x8_t, const int) 32781 _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]' 32782 32783 * int8_t vgetq_lane_s8 (int8x16_t, const int) 32784 _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]' 32785 32786 * float32_t vgetq_lane_f32 (float32x4_t, const int) 32787 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 32788 32789 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 32790 _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' 32791 32792 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 32793 _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' 32794 32795 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 32796 _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd 32797 R0, R0, D0' 32798 32799 * int64_t vgetq_lane_s64 (int64x2_t, const int) 32800 _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd 32801 R0, R0, D0' 32802 32803 6.56.3.47 Set lanes in a vector 32804 ............................... 32805 32806 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 32807 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 32808 32809 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 32810 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 32811 32812 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 32813 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 32814 32815 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 32816 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 32817 32818 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 32819 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 32820 32821 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 32822 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 32823 32824 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 32825 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 32826 32827 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 32828 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 32829 32830 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 32831 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 32832 32833 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 32834 32835 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 32836 32837 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 32838 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 32839 32840 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 32841 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 32842 32843 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 32844 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 32845 32846 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 32847 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 32848 32849 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 32850 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 32851 32852 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 32853 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 32854 32855 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 32856 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 32857 32858 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 32859 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 32860 32861 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 32862 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 32863 32864 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 32865 _Form of expected instruction(s):_ 'vmov D0, R0, R0' 32866 32867 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 32868 _Form of expected instruction(s):_ 'vmov D0, R0, R0' 32869 32870 6.56.3.48 Create vector from literal bit pattern 32871 ................................................ 32872 32873 * uint32x2_t vcreate_u32 (uint64_t) 32874 32875 * uint16x4_t vcreate_u16 (uint64_t) 32876 32877 * uint8x8_t vcreate_u8 (uint64_t) 32878 32879 * int32x2_t vcreate_s32 (uint64_t) 32880 32881 * int16x4_t vcreate_s16 (uint64_t) 32882 32883 * int8x8_t vcreate_s8 (uint64_t) 32884 32885 * uint64x1_t vcreate_u64 (uint64_t) 32886 32887 * int64x1_t vcreate_s64 (uint64_t) 32888 32889 * float32x2_t vcreate_f32 (uint64_t) 32890 32891 * poly16x4_t vcreate_p16 (uint64_t) 32892 32893 * poly8x8_t vcreate_p8 (uint64_t) 32894 32895 6.56.3.49 Set all lanes to the same value 32896 ......................................... 32897 32898 * uint32x2_t vdup_n_u32 (uint32_t) 32899 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 32900 32901 * uint16x4_t vdup_n_u16 (uint16_t) 32902 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 32903 32904 * uint8x8_t vdup_n_u8 (uint8_t) 32905 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 32906 32907 * int32x2_t vdup_n_s32 (int32_t) 32908 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 32909 32910 * int16x4_t vdup_n_s16 (int16_t) 32911 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 32912 32913 * int8x8_t vdup_n_s8 (int8_t) 32914 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 32915 32916 * float32x2_t vdup_n_f32 (float32_t) 32917 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 32918 32919 * poly16x4_t vdup_n_p16 (poly16_t) 32920 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 32921 32922 * poly8x8_t vdup_n_p8 (poly8_t) 32923 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 32924 32925 * uint64x1_t vdup_n_u64 (uint64_t) 32926 32927 * int64x1_t vdup_n_s64 (int64_t) 32928 32929 * uint32x4_t vdupq_n_u32 (uint32_t) 32930 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 32931 32932 * uint16x8_t vdupq_n_u16 (uint16_t) 32933 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 32934 32935 * uint8x16_t vdupq_n_u8 (uint8_t) 32936 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 32937 32938 * int32x4_t vdupq_n_s32 (int32_t) 32939 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 32940 32941 * int16x8_t vdupq_n_s16 (int16_t) 32942 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 32943 32944 * int8x16_t vdupq_n_s8 (int8_t) 32945 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 32946 32947 * float32x4_t vdupq_n_f32 (float32_t) 32948 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 32949 32950 * poly16x8_t vdupq_n_p16 (poly16_t) 32951 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 32952 32953 * poly8x16_t vdupq_n_p8 (poly8_t) 32954 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 32955 32956 * uint64x2_t vdupq_n_u64 (uint64_t) 32957 32958 * int64x2_t vdupq_n_s64 (int64_t) 32959 32960 * uint32x2_t vmov_n_u32 (uint32_t) 32961 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 32962 32963 * uint16x4_t vmov_n_u16 (uint16_t) 32964 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 32965 32966 * uint8x8_t vmov_n_u8 (uint8_t) 32967 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 32968 32969 * int32x2_t vmov_n_s32 (int32_t) 32970 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 32971 32972 * int16x4_t vmov_n_s16 (int16_t) 32973 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 32974 32975 * int8x8_t vmov_n_s8 (int8_t) 32976 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 32977 32978 * float32x2_t vmov_n_f32 (float32_t) 32979 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 32980 32981 * poly16x4_t vmov_n_p16 (poly16_t) 32982 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 32983 32984 * poly8x8_t vmov_n_p8 (poly8_t) 32985 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 32986 32987 * uint64x1_t vmov_n_u64 (uint64_t) 32988 32989 * int64x1_t vmov_n_s64 (int64_t) 32990 32991 * uint32x4_t vmovq_n_u32 (uint32_t) 32992 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 32993 32994 * uint16x8_t vmovq_n_u16 (uint16_t) 32995 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 32996 32997 * uint8x16_t vmovq_n_u8 (uint8_t) 32998 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 32999 33000 * int32x4_t vmovq_n_s32 (int32_t) 33001 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 33002 33003 * int16x8_t vmovq_n_s16 (int16_t) 33004 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 33005 33006 * int8x16_t vmovq_n_s8 (int8_t) 33007 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 33008 33009 * float32x4_t vmovq_n_f32 (float32_t) 33010 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 33011 33012 * poly16x8_t vmovq_n_p16 (poly16_t) 33013 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 33014 33015 * poly8x16_t vmovq_n_p8 (poly8_t) 33016 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 33017 33018 * uint64x2_t vmovq_n_u64 (uint64_t) 33019 33020 * int64x2_t vmovq_n_s64 (int64_t) 33021 33022 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 33023 _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' 33024 33025 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 33026 _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' 33027 33028 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 33029 _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' 33030 33031 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 33032 _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' 33033 33034 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 33035 _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' 33036 33037 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 33038 _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' 33039 33040 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 33041 _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' 33042 33043 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 33044 _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' 33045 33046 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 33047 _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' 33048 33049 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 33050 33051 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 33052 33053 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 33054 _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' 33055 33056 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 33057 _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' 33058 33059 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 33060 _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' 33061 33062 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 33063 _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' 33064 33065 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 33066 _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' 33067 33068 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 33069 _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' 33070 33071 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 33072 _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' 33073 33074 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 33075 _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' 33076 33077 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 33078 _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' 33079 33080 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 33081 33082 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 33083 33084 6.56.3.50 Combining vectors 33085 ........................... 33086 33087 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 33088 33089 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 33090 33091 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 33092 33093 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 33094 33095 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 33096 33097 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 33098 33099 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 33100 33101 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 33102 33103 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 33104 33105 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 33106 33107 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 33108 33109 6.56.3.51 Splitting vectors 33110 ........................... 33111 33112 * uint32x2_t vget_high_u32 (uint32x4_t) 33113 33114 * uint16x4_t vget_high_u16 (uint16x8_t) 33115 33116 * uint8x8_t vget_high_u8 (uint8x16_t) 33117 33118 * int32x2_t vget_high_s32 (int32x4_t) 33119 33120 * int16x4_t vget_high_s16 (int16x8_t) 33121 33122 * int8x8_t vget_high_s8 (int8x16_t) 33123 33124 * uint64x1_t vget_high_u64 (uint64x2_t) 33125 33126 * int64x1_t vget_high_s64 (int64x2_t) 33127 33128 * float32x2_t vget_high_f32 (float32x4_t) 33129 33130 * poly16x4_t vget_high_p16 (poly16x8_t) 33131 33132 * poly8x8_t vget_high_p8 (poly8x16_t) 33133 33134 * uint32x2_t vget_low_u32 (uint32x4_t) 33135 _Form of expected instruction(s):_ 'vmov D0, D0' 33136 33137 * uint16x4_t vget_low_u16 (uint16x8_t) 33138 _Form of expected instruction(s):_ 'vmov D0, D0' 33139 33140 * uint8x8_t vget_low_u8 (uint8x16_t) 33141 _Form of expected instruction(s):_ 'vmov D0, D0' 33142 33143 * int32x2_t vget_low_s32 (int32x4_t) 33144 _Form of expected instruction(s):_ 'vmov D0, D0' 33145 33146 * int16x4_t vget_low_s16 (int16x8_t) 33147 _Form of expected instruction(s):_ 'vmov D0, D0' 33148 33149 * int8x8_t vget_low_s8 (int8x16_t) 33150 _Form of expected instruction(s):_ 'vmov D0, D0' 33151 33152 * float32x2_t vget_low_f32 (float32x4_t) 33153 _Form of expected instruction(s):_ 'vmov D0, D0' 33154 33155 * poly16x4_t vget_low_p16 (poly16x8_t) 33156 _Form of expected instruction(s):_ 'vmov D0, D0' 33157 33158 * poly8x8_t vget_low_p8 (poly8x16_t) 33159 _Form of expected instruction(s):_ 'vmov D0, D0' 33160 33161 * uint64x1_t vget_low_u64 (uint64x2_t) 33162 33163 * int64x1_t vget_low_s64 (int64x2_t) 33164 33165 6.56.3.52 Conversions 33166 ..................... 33167 33168 * float32x2_t vcvt_f32_u32 (uint32x2_t) 33169 _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0' 33170 33171 * float32x2_t vcvt_f32_s32 (int32x2_t) 33172 _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0' 33173 33174 * uint32x2_t vcvt_u32_f32 (float32x2_t) 33175 _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0' 33176 33177 * int32x2_t vcvt_s32_f32 (float32x2_t) 33178 _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0' 33179 33180 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 33181 _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0' 33182 33183 * float32x4_t vcvtq_f32_s32 (int32x4_t) 33184 _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0' 33185 33186 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 33187 _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0' 33188 33189 * int32x4_t vcvtq_s32_f32 (float32x4_t) 33190 _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0' 33191 33192 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 33193 _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0, #0' 33194 33195 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 33196 _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0, #0' 33197 33198 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 33199 _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0, #0' 33200 33201 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 33202 _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0, #0' 33203 33204 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 33205 _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0, #0' 33206 33207 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 33208 _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0, #0' 33209 33210 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 33211 _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0, #0' 33212 33213 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 33214 _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0, #0' 33215 33216 6.56.3.53 Move, single_opcode narrowing 33217 ....................................... 33218 33219 * uint32x2_t vmovn_u64 (uint64x2_t) 33220 _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0' 33221 33222 * uint16x4_t vmovn_u32 (uint32x4_t) 33223 _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0' 33224 33225 * uint8x8_t vmovn_u16 (uint16x8_t) 33226 _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0' 33227 33228 * int32x2_t vmovn_s64 (int64x2_t) 33229 _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0' 33230 33231 * int16x4_t vmovn_s32 (int32x4_t) 33232 _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0' 33233 33234 * int8x8_t vmovn_s16 (int16x8_t) 33235 _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0' 33236 33237 * uint32x2_t vqmovn_u64 (uint64x2_t) 33238 _Form of expected instruction(s):_ 'vqmovn.u64 D0, Q0' 33239 33240 * uint16x4_t vqmovn_u32 (uint32x4_t) 33241 _Form of expected instruction(s):_ 'vqmovn.u32 D0, Q0' 33242 33243 * uint8x8_t vqmovn_u16 (uint16x8_t) 33244 _Form of expected instruction(s):_ 'vqmovn.u16 D0, Q0' 33245 33246 * int32x2_t vqmovn_s64 (int64x2_t) 33247 _Form of expected instruction(s):_ 'vqmovn.s64 D0, Q0' 33248 33249 * int16x4_t vqmovn_s32 (int32x4_t) 33250 _Form of expected instruction(s):_ 'vqmovn.s32 D0, Q0' 33251 33252 * int8x8_t vqmovn_s16 (int16x8_t) 33253 _Form of expected instruction(s):_ 'vqmovn.s16 D0, Q0' 33254 33255 * uint32x2_t vqmovun_s64 (int64x2_t) 33256 _Form of expected instruction(s):_ 'vqmovun.s64 D0, Q0' 33257 33258 * uint16x4_t vqmovun_s32 (int32x4_t) 33259 _Form of expected instruction(s):_ 'vqmovun.s32 D0, Q0' 33260 33261 * uint8x8_t vqmovun_s16 (int16x8_t) 33262 _Form of expected instruction(s):_ 'vqmovun.s16 D0, Q0' 33263 33264 6.56.3.54 Move, single_opcode long 33265 .................................. 33266 33267 * uint64x2_t vmovl_u32 (uint32x2_t) 33268 _Form of expected instruction(s):_ 'vmovl.u32 Q0, D0' 33269 33270 * uint32x4_t vmovl_u16 (uint16x4_t) 33271 _Form of expected instruction(s):_ 'vmovl.u16 Q0, D0' 33272 33273 * uint16x8_t vmovl_u8 (uint8x8_t) 33274 _Form of expected instruction(s):_ 'vmovl.u8 Q0, D0' 33275 33276 * int64x2_t vmovl_s32 (int32x2_t) 33277 _Form of expected instruction(s):_ 'vmovl.s32 Q0, D0' 33278 33279 * int32x4_t vmovl_s16 (int16x4_t) 33280 _Form of expected instruction(s):_ 'vmovl.s16 Q0, D0' 33281 33282 * int16x8_t vmovl_s8 (int8x8_t) 33283 _Form of expected instruction(s):_ 'vmovl.s8 Q0, D0' 33284 33285 6.56.3.55 Table lookup 33286 ...................... 33287 33288 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 33289 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' 33290 33291 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 33292 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' 33293 33294 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 33295 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' 33296 33297 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 33298 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' 33299 33300 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 33301 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' 33302 33303 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 33304 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' 33305 33306 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 33307 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' 33308 33309 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 33310 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' 33311 33312 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 33313 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' 33314 33315 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 33316 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, 33317 D0' 33318 33319 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 33320 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, 33321 D0' 33322 33323 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 33324 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, 33325 D0' 33326 33327 6.56.3.56 Extended table lookup 33328 ............................... 33329 33330 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 33331 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' 33332 33333 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 33334 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' 33335 33336 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 33337 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' 33338 33339 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 33340 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' 33341 33342 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 33343 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' 33344 33345 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 33346 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' 33347 33348 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 33349 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' 33350 33351 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 33352 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' 33353 33354 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 33355 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' 33356 33357 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 33358 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, 33359 D0' 33360 33361 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 33362 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, 33363 D0' 33364 33365 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 33366 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, 33367 D0' 33368 33369 6.56.3.57 Multiply, lane 33370 ........................ 33371 33372 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 33373 _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]' 33374 33375 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 33376 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' 33377 33378 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 33379 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' 33380 33381 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 33382 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' 33383 33384 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 33385 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' 33386 33387 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 33388 _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]' 33389 33390 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 33391 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' 33392 33393 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 33394 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' 33395 33396 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 33397 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' 33398 33399 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 33400 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' 33401 33402 6.56.3.58 Long multiply, lane 33403 ............................. 33404 33405 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 33406 _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]' 33407 33408 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 33409 _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]' 33410 33411 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 33412 _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]' 33413 33414 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 33415 _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]' 33416 33417 6.56.3.59 Saturating doubling long multiply, lane 33418 ................................................. 33419 33420 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 33421 _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]' 33422 33423 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 33424 _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]' 33425 33426 6.56.3.60 Saturating doubling multiply high, lane 33427 ................................................. 33428 33429 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 33430 _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]' 33431 33432 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 33433 _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]' 33434 33435 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 33436 _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]' 33437 33438 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 33439 _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]' 33440 33441 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 33442 _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]' 33443 33444 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 33445 _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]' 33446 33447 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 33448 _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]' 33449 33450 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 33451 _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]' 33452 33453 6.56.3.61 Multiply-accumulate, lane 33454 ................................... 33455 33456 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 33457 const int) 33458 _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]' 33459 33460 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const 33461 int) 33462 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' 33463 33464 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const 33465 int) 33466 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' 33467 33468 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 33469 int) 33470 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' 33471 33472 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 33473 int) 33474 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' 33475 33476 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 33477 const int) 33478 _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]' 33479 33480 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 33481 const int) 33482 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' 33483 33484 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 33485 const int) 33486 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' 33487 33488 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 33489 int) 33490 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' 33491 33492 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 33493 int) 33494 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' 33495 33496 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 33497 const int) 33498 _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]' 33499 33500 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 33501 const int) 33502 _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]' 33503 33504 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33505 int) 33506 _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]' 33507 33508 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33509 int) 33510 _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]' 33511 33512 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33513 int) 33514 _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]' 33515 33516 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33517 int) 33518 _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]' 33519 33520 6.56.3.62 Multiply-subtract, lane 33521 ................................. 33522 33523 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 33524 const int) 33525 _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]' 33526 33527 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const 33528 int) 33529 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' 33530 33531 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const 33532 int) 33533 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' 33534 33535 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 33536 int) 33537 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' 33538 33539 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 33540 int) 33541 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' 33542 33543 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 33544 const int) 33545 _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]' 33546 33547 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 33548 const int) 33549 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' 33550 33551 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 33552 const int) 33553 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' 33554 33555 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 33556 int) 33557 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' 33558 33559 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 33560 int) 33561 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' 33562 33563 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 33564 const int) 33565 _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]' 33566 33567 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 33568 const int) 33569 _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]' 33570 33571 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33572 int) 33573 _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]' 33574 33575 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33576 int) 33577 _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]' 33578 33579 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 33580 int) 33581 _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]' 33582 33583 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 33584 int) 33585 _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]' 33586 33587 6.56.3.63 Vector multiply by scalar 33588 ................................... 33589 33590 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 33591 _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]' 33592 33593 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 33594 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' 33595 33596 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 33597 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' 33598 33599 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 33600 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' 33601 33602 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 33603 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' 33604 33605 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 33606 _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]' 33607 33608 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 33609 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' 33610 33611 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 33612 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' 33613 33614 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 33615 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' 33616 33617 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 33618 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' 33619 33620 6.56.3.64 Vector long multiply by scalar 33621 ........................................ 33622 33623 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 33624 _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]' 33625 33626 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 33627 _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]' 33628 33629 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 33630 _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]' 33631 33632 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 33633 _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]' 33634 33635 6.56.3.65 Vector saturating doubling long multiply by scalar 33636 ............................................................ 33637 33638 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 33639 _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]' 33640 33641 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 33642 _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]' 33643 33644 6.56.3.66 Vector saturating doubling multiply high by scalar 33645 ............................................................ 33646 33647 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 33648 _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]' 33649 33650 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 33651 _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]' 33652 33653 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 33654 _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]' 33655 33656 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 33657 _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]' 33658 33659 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 33660 _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]' 33661 33662 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 33663 _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]' 33664 33665 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 33666 _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]' 33667 33668 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 33669 _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]' 33670 33671 6.56.3.67 Vector multiply-accumulate by scalar 33672 .............................................. 33673 33674 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 33675 _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]' 33676 33677 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 33678 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' 33679 33680 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 33681 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' 33682 33683 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 33684 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' 33685 33686 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 33687 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' 33688 33689 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 33690 _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]' 33691 33692 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 33693 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' 33694 33695 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 33696 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' 33697 33698 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 33699 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' 33700 33701 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 33702 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' 33703 33704 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 33705 _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]' 33706 33707 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 33708 _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]' 33709 33710 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 33711 _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]' 33712 33713 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 33714 _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]' 33715 33716 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 33717 _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]' 33718 33719 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 33720 _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]' 33721 33722 6.56.3.68 Vector multiply-subtract by scalar 33723 ............................................ 33724 33725 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 33726 _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]' 33727 33728 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 33729 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' 33730 33731 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 33732 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' 33733 33734 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 33735 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' 33736 33737 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 33738 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' 33739 33740 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 33741 _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]' 33742 33743 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 33744 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' 33745 33746 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 33747 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' 33748 33749 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 33750 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' 33751 33752 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 33753 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' 33754 33755 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 33756 _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]' 33757 33758 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 33759 _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]' 33760 33761 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 33762 _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]' 33763 33764 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 33765 _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]' 33766 33767 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 33768 _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]' 33769 33770 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 33771 _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]' 33772 33773 6.56.3.69 Vector extract 33774 ........................ 33775 33776 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 33777 _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' 33778 33779 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 33780 _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' 33781 33782 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 33783 _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' 33784 33785 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 33786 _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' 33787 33788 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 33789 _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' 33790 33791 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 33792 _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' 33793 33794 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 33795 _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0' 33796 33797 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 33798 _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0' 33799 33800 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 33801 _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' 33802 33803 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 33804 _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' 33805 33806 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 33807 _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' 33808 33809 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 33810 _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' 33811 33812 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 33813 _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' 33814 33815 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 33816 _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' 33817 33818 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 33819 _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' 33820 33821 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 33822 _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' 33823 33824 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 33825 _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' 33826 33827 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 33828 _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0' 33829 33830 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 33831 _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0' 33832 33833 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 33834 _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' 33835 33836 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 33837 _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' 33838 33839 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 33840 _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' 33841 33842 6.56.3.70 Reverse elements 33843 .......................... 33844 33845 * uint32x2_t vrev64_u32 (uint32x2_t) 33846 _Form of expected instruction(s):_ 'vrev64.32 D0, D0' 33847 33848 * uint16x4_t vrev64_u16 (uint16x4_t) 33849 _Form of expected instruction(s):_ 'vrev64.16 D0, D0' 33850 33851 * uint8x8_t vrev64_u8 (uint8x8_t) 33852 _Form of expected instruction(s):_ 'vrev64.8 D0, D0' 33853 33854 * int32x2_t vrev64_s32 (int32x2_t) 33855 _Form of expected instruction(s):_ 'vrev64.32 D0, D0' 33856 33857 * int16x4_t vrev64_s16 (int16x4_t) 33858 _Form of expected instruction(s):_ 'vrev64.16 D0, D0' 33859 33860 * int8x8_t vrev64_s8 (int8x8_t) 33861 _Form of expected instruction(s):_ 'vrev64.8 D0, D0' 33862 33863 * float32x2_t vrev64_f32 (float32x2_t) 33864 _Form of expected instruction(s):_ 'vrev64.32 D0, D0' 33865 33866 * poly16x4_t vrev64_p16 (poly16x4_t) 33867 _Form of expected instruction(s):_ 'vrev64.16 D0, D0' 33868 33869 * poly8x8_t vrev64_p8 (poly8x8_t) 33870 _Form of expected instruction(s):_ 'vrev64.8 D0, D0' 33871 33872 * uint32x4_t vrev64q_u32 (uint32x4_t) 33873 _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' 33874 33875 * uint16x8_t vrev64q_u16 (uint16x8_t) 33876 _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' 33877 33878 * uint8x16_t vrev64q_u8 (uint8x16_t) 33879 _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' 33880 33881 * int32x4_t vrev64q_s32 (int32x4_t) 33882 _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' 33883 33884 * int16x8_t vrev64q_s16 (int16x8_t) 33885 _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' 33886 33887 * int8x16_t vrev64q_s8 (int8x16_t) 33888 _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' 33889 33890 * float32x4_t vrev64q_f32 (float32x4_t) 33891 _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' 33892 33893 * poly16x8_t vrev64q_p16 (poly16x8_t) 33894 _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' 33895 33896 * poly8x16_t vrev64q_p8 (poly8x16_t) 33897 _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' 33898 33899 * uint16x4_t vrev32_u16 (uint16x4_t) 33900 _Form of expected instruction(s):_ 'vrev32.16 D0, D0' 33901 33902 * int16x4_t vrev32_s16 (int16x4_t) 33903 _Form of expected instruction(s):_ 'vrev32.16 D0, D0' 33904 33905 * uint8x8_t vrev32_u8 (uint8x8_t) 33906 _Form of expected instruction(s):_ 'vrev32.8 D0, D0' 33907 33908 * int8x8_t vrev32_s8 (int8x8_t) 33909 _Form of expected instruction(s):_ 'vrev32.8 D0, D0' 33910 33911 * poly16x4_t vrev32_p16 (poly16x4_t) 33912 _Form of expected instruction(s):_ 'vrev32.16 D0, D0' 33913 33914 * poly8x8_t vrev32_p8 (poly8x8_t) 33915 _Form of expected instruction(s):_ 'vrev32.8 D0, D0' 33916 33917 * uint16x8_t vrev32q_u16 (uint16x8_t) 33918 _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' 33919 33920 * int16x8_t vrev32q_s16 (int16x8_t) 33921 _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' 33922 33923 * uint8x16_t vrev32q_u8 (uint8x16_t) 33924 _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' 33925 33926 * int8x16_t vrev32q_s8 (int8x16_t) 33927 _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' 33928 33929 * poly16x8_t vrev32q_p16 (poly16x8_t) 33930 _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' 33931 33932 * poly8x16_t vrev32q_p8 (poly8x16_t) 33933 _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' 33934 33935 * uint8x8_t vrev16_u8 (uint8x8_t) 33936 _Form of expected instruction(s):_ 'vrev16.8 D0, D0' 33937 33938 * int8x8_t vrev16_s8 (int8x8_t) 33939 _Form of expected instruction(s):_ 'vrev16.8 D0, D0' 33940 33941 * poly8x8_t vrev16_p8 (poly8x8_t) 33942 _Form of expected instruction(s):_ 'vrev16.8 D0, D0' 33943 33944 * uint8x16_t vrev16q_u8 (uint8x16_t) 33945 _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' 33946 33947 * int8x16_t vrev16q_s8 (int8x16_t) 33948 _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' 33949 33950 * poly8x16_t vrev16q_p8 (poly8x16_t) 33951 _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' 33952 33953 6.56.3.71 Bit selection 33954 ....................... 33955 33956 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 33957 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33958 D0, D0' _or_ 'vbif D0, D0, D0' 33959 33960 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 33961 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33962 D0, D0' _or_ 'vbif D0, D0, D0' 33963 33964 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 33965 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33966 D0, D0' _or_ 'vbif D0, D0, D0' 33967 33968 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 33969 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33970 D0, D0' _or_ 'vbif D0, D0, D0' 33971 33972 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 33973 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33974 D0, D0' _or_ 'vbif D0, D0, D0' 33975 33976 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 33977 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33978 D0, D0' _or_ 'vbif D0, D0, D0' 33979 33980 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 33981 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33982 D0, D0' _or_ 'vbif D0, D0, D0' 33983 33984 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 33985 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33986 D0, D0' _or_ 'vbif D0, D0, D0' 33987 33988 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 33989 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33990 D0, D0' _or_ 'vbif D0, D0, D0' 33991 33992 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 33993 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33994 D0, D0' _or_ 'vbif D0, D0, D0' 33995 33996 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 33997 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 33998 D0, D0' _or_ 'vbif D0, D0, D0' 33999 34000 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 34001 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34002 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34003 34004 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 34005 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34006 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34007 34008 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 34009 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34010 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34011 34012 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 34013 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34014 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34015 34016 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 34017 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34018 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34019 34020 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 34021 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34022 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34023 34024 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 34025 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34026 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34027 34028 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 34029 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34030 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34031 34032 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 34033 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34034 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34035 34036 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 34037 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34038 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34039 34040 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 34041 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 34042 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 34043 34044 6.56.3.72 Transpose elements 34045 ............................ 34046 34047 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 34048 _Form of expected instruction(s):_ 'vtrn.16 D0, D1' 34049 34050 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 34051 _Form of expected instruction(s):_ 'vtrn.8 D0, D1' 34052 34053 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 34054 _Form of expected instruction(s):_ 'vtrn.16 D0, D1' 34055 34056 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 34057 _Form of expected instruction(s):_ 'vtrn.8 D0, D1' 34058 34059 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 34060 _Form of expected instruction(s):_ 'vtrn.16 D0, D1' 34061 34062 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 34063 _Form of expected instruction(s):_ 'vtrn.8 D0, D1' 34064 34065 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 34066 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34067 34068 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 34069 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34070 34071 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 34072 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34073 34074 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 34075 _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' 34076 34077 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 34078 _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' 34079 34080 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 34081 _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' 34082 34083 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 34084 _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' 34085 34086 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 34087 _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' 34088 34089 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 34090 _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' 34091 34092 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 34093 _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' 34094 34095 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 34096 _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' 34097 34098 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 34099 _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' 34100 34101 6.56.3.73 Zip elements 34102 ...................... 34103 34104 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 34105 _Form of expected instruction(s):_ 'vzip.16 D0, D1' 34106 34107 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 34108 _Form of expected instruction(s):_ 'vzip.8 D0, D1' 34109 34110 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 34111 _Form of expected instruction(s):_ 'vzip.16 D0, D1' 34112 34113 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 34114 _Form of expected instruction(s):_ 'vzip.8 D0, D1' 34115 34116 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 34117 _Form of expected instruction(s):_ 'vzip.16 D0, D1' 34118 34119 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 34120 _Form of expected instruction(s):_ 'vzip.8 D0, D1' 34121 34122 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 34123 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34124 34125 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 34126 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34127 34128 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 34129 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34130 34131 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 34132 _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' 34133 34134 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 34135 _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' 34136 34137 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 34138 _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' 34139 34140 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 34141 _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' 34142 34143 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 34144 _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' 34145 34146 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 34147 _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' 34148 34149 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 34150 _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' 34151 34152 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 34153 _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' 34154 34155 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 34156 _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' 34157 34158 6.56.3.74 Unzip elements 34159 ........................ 34160 34161 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 34162 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34163 34164 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 34165 _Form of expected instruction(s):_ 'vuzp.16 D0, D1' 34166 34167 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 34168 _Form of expected instruction(s):_ 'vuzp.8 D0, D1' 34169 34170 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 34171 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34172 34173 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 34174 _Form of expected instruction(s):_ 'vuzp.16 D0, D1' 34175 34176 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 34177 _Form of expected instruction(s):_ 'vuzp.8 D0, D1' 34178 34179 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 34180 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 34181 34182 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 34183 _Form of expected instruction(s):_ 'vuzp.16 D0, D1' 34184 34185 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 34186 _Form of expected instruction(s):_ 'vuzp.8 D0, D1' 34187 34188 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 34189 _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' 34190 34191 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 34192 _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' 34193 34194 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 34195 _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' 34196 34197 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 34198 _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' 34199 34200 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 34201 _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' 34202 34203 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 34204 _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' 34205 34206 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 34207 _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' 34208 34209 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 34210 _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' 34211 34212 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 34213 _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' 34214 34215 6.56.3.75 Element/structure loads, VLD1 variants 34216 ................................................ 34217 34218 * uint32x2_t vld1_u32 (const uint32_t *) 34219 _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' 34220 34221 * uint16x4_t vld1_u16 (const uint16_t *) 34222 _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' 34223 34224 * uint8x8_t vld1_u8 (const uint8_t *) 34225 _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' 34226 34227 * int32x2_t vld1_s32 (const int32_t *) 34228 _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' 34229 34230 * int16x4_t vld1_s16 (const int16_t *) 34231 _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' 34232 34233 * int8x8_t vld1_s8 (const int8_t *) 34234 _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' 34235 34236 * uint64x1_t vld1_u64 (const uint64_t *) 34237 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34238 34239 * int64x1_t vld1_s64 (const int64_t *) 34240 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34241 34242 * float32x2_t vld1_f32 (const float32_t *) 34243 _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' 34244 34245 * poly16x4_t vld1_p16 (const poly16_t *) 34246 _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' 34247 34248 * poly8x8_t vld1_p8 (const poly8_t *) 34249 _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' 34250 34251 * uint32x4_t vld1q_u32 (const uint32_t *) 34252 _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' 34253 34254 * uint16x8_t vld1q_u16 (const uint16_t *) 34255 _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' 34256 34257 * uint8x16_t vld1q_u8 (const uint8_t *) 34258 _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' 34259 34260 * int32x4_t vld1q_s32 (const int32_t *) 34261 _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' 34262 34263 * int16x8_t vld1q_s16 (const int16_t *) 34264 _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' 34265 34266 * int8x16_t vld1q_s8 (const int8_t *) 34267 _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' 34268 34269 * uint64x2_t vld1q_u64 (const uint64_t *) 34270 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 34271 34272 * int64x2_t vld1q_s64 (const int64_t *) 34273 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 34274 34275 * float32x4_t vld1q_f32 (const float32_t *) 34276 _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' 34277 34278 * poly16x8_t vld1q_p16 (const poly16_t *) 34279 _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' 34280 34281 * poly8x16_t vld1q_p8 (const poly8_t *) 34282 _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' 34283 34284 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 34285 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 34286 34287 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 34288 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 34289 34290 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 34291 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 34292 34293 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 34294 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 34295 34296 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 34297 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 34298 34299 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 34300 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 34301 34302 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 34303 int) 34304 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 34305 34306 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 34307 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 34308 34309 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 34310 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 34311 34312 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 34313 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34314 34315 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 34316 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34317 34318 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 34319 34320 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 34321 34322 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 34323 34324 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 34325 34326 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 34327 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 34328 34329 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 34330 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 34331 34332 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 34333 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 34334 34335 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 34336 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 34337 34338 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 34339 int) 34340 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 34341 34342 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 34343 34344 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 34345 34346 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 34347 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 34348 34349 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 34350 34351 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34352 34353 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 34354 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34355 34356 * uint32x2_t vld1_dup_u32 (const uint32_t *) 34357 _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' 34358 34359 * uint16x4_t vld1_dup_u16 (const uint16_t *) 34360 _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' 34361 34362 * uint8x8_t vld1_dup_u8 (const uint8_t *) 34363 _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' 34364 34365 * int32x2_t vld1_dup_s32 (const int32_t *) 34366 _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' 34367 34368 * int16x4_t vld1_dup_s16 (const int16_t *) 34369 _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' 34370 34371 * int8x8_t vld1_dup_s8 (const int8_t *) 34372 _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' 34373 34374 * float32x2_t vld1_dup_f32 (const float32_t *) 34375 _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' 34376 34377 * poly16x4_t vld1_dup_p16 (const poly16_t *) 34378 _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' 34379 34380 * poly8x8_t vld1_dup_p8 (const poly8_t *) 34381 _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' 34382 34383 * uint64x1_t vld1_dup_u64 (const uint64_t *) 34384 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34385 34386 * int64x1_t vld1_dup_s64 (const int64_t *) 34387 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34388 34389 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 34390 _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' 34391 34392 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 34393 _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' 34394 34395 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 34396 _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' 34397 34398 * int32x4_t vld1q_dup_s32 (const int32_t *) 34399 _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' 34400 34401 * int16x8_t vld1q_dup_s16 (const int16_t *) 34402 _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' 34403 34404 * int8x16_t vld1q_dup_s8 (const int8_t *) 34405 _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' 34406 34407 * float32x4_t vld1q_dup_f32 (const float32_t *) 34408 _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' 34409 34410 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 34411 _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' 34412 34413 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 34414 _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' 34415 34416 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 34417 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34418 34419 * int64x2_t vld1q_dup_s64 (const int64_t *) 34420 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 34421 34422 6.56.3.76 Element/structure stores, VST1 variants 34423 ................................................. 34424 34425 * void vst1_u32 (uint32_t *, uint32x2_t) 34426 _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' 34427 34428 * void vst1_u16 (uint16_t *, uint16x4_t) 34429 _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' 34430 34431 * void vst1_u8 (uint8_t *, uint8x8_t) 34432 _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' 34433 34434 * void vst1_s32 (int32_t *, int32x2_t) 34435 _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' 34436 34437 * void vst1_s16 (int16_t *, int16x4_t) 34438 _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' 34439 34440 * void vst1_s8 (int8_t *, int8x8_t) 34441 _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' 34442 34443 * void vst1_u64 (uint64_t *, uint64x1_t) 34444 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 34445 34446 * void vst1_s64 (int64_t *, int64x1_t) 34447 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 34448 34449 * void vst1_f32 (float32_t *, float32x2_t) 34450 _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' 34451 34452 * void vst1_p16 (poly16_t *, poly16x4_t) 34453 _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' 34454 34455 * void vst1_p8 (poly8_t *, poly8x8_t) 34456 _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' 34457 34458 * void vst1q_u32 (uint32_t *, uint32x4_t) 34459 _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' 34460 34461 * void vst1q_u16 (uint16_t *, uint16x8_t) 34462 _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' 34463 34464 * void vst1q_u8 (uint8_t *, uint8x16_t) 34465 _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' 34466 34467 * void vst1q_s32 (int32_t *, int32x4_t) 34468 _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' 34469 34470 * void vst1q_s16 (int16_t *, int16x8_t) 34471 _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' 34472 34473 * void vst1q_s8 (int8_t *, int8x16_t) 34474 _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' 34475 34476 * void vst1q_u64 (uint64_t *, uint64x2_t) 34477 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 34478 34479 * void vst1q_s64 (int64_t *, int64x2_t) 34480 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 34481 34482 * void vst1q_f32 (float32_t *, float32x4_t) 34483 _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' 34484 34485 * void vst1q_p16 (poly16_t *, poly16x8_t) 34486 _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' 34487 34488 * void vst1q_p8 (poly8_t *, poly8x16_t) 34489 _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' 34490 34491 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 34492 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 34493 34494 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 34495 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 34496 34497 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 34498 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 34499 34500 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 34501 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 34502 34503 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 34504 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 34505 34506 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 34507 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 34508 34509 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 34510 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 34511 34512 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 34513 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 34514 34515 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 34516 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 34517 34518 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 34519 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 34520 34521 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 34522 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 34523 34524 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 34525 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 34526 34527 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 34528 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 34529 34530 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 34531 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 34532 34533 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 34534 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 34535 34536 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 34537 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 34538 34539 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 34540 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 34541 34542 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 34543 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 34544 34545 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 34546 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 34547 34548 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 34549 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 34550 34551 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 34552 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 34553 34554 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 34555 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 34556 34557 6.56.3.77 Element/structure loads, VLD2 variants 34558 ................................................ 34559 34560 * uint32x2x2_t vld2_u32 (const uint32_t *) 34561 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 34562 34563 * uint16x4x2_t vld2_u16 (const uint16_t *) 34564 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 34565 34566 * uint8x8x2_t vld2_u8 (const uint8_t *) 34567 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 34568 34569 * int32x2x2_t vld2_s32 (const int32_t *) 34570 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 34571 34572 * int16x4x2_t vld2_s16 (const int16_t *) 34573 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 34574 34575 * int8x8x2_t vld2_s8 (const int8_t *) 34576 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 34577 34578 * float32x2x2_t vld2_f32 (const float32_t *) 34579 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 34580 34581 * poly16x4x2_t vld2_p16 (const poly16_t *) 34582 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 34583 34584 * poly8x8x2_t vld2_p8 (const poly8_t *) 34585 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 34586 34587 * uint64x1x2_t vld2_u64 (const uint64_t *) 34588 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 34589 34590 * int64x1x2_t vld2_s64 (const int64_t *) 34591 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 34592 34593 * uint32x4x2_t vld2q_u32 (const uint32_t *) 34594 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 34595 34596 * uint16x8x2_t vld2q_u16 (const uint16_t *) 34597 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 34598 34599 * uint8x16x2_t vld2q_u8 (const uint8_t *) 34600 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 34601 34602 * int32x4x2_t vld2q_s32 (const int32_t *) 34603 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 34604 34605 * int16x8x2_t vld2q_s16 (const int16_t *) 34606 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 34607 34608 * int8x16x2_t vld2q_s8 (const int8_t *) 34609 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 34610 34611 * float32x4x2_t vld2q_f32 (const float32_t *) 34612 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 34613 34614 * poly16x8x2_t vld2q_p16 (const poly16_t *) 34615 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 34616 34617 * poly8x16x2_t vld2q_p8 (const poly8_t *) 34618 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 34619 34620 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 34621 int) 34622 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 34623 34624 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 34625 int) 34626 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 34627 34628 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 34629 _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' 34630 34631 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 34632 34633 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 34634 34635 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 34636 34637 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 34638 34639 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 34640 _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' 34641 34642 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 34643 const int) 34644 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 34645 34646 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 34647 int) 34648 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 34649 34650 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 34651 _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' 34652 34653 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 34654 int) 34655 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 34656 34657 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 34658 int) 34659 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 34660 34661 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 34662 int) 34663 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 34664 34665 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 34666 int) 34667 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 34668 34669 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 34670 const int) 34671 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 34672 34673 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 34674 int) 34675 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 34676 34677 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 34678 _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' 34679 34680 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 34681 _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' 34682 34683 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 34684 _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' 34685 34686 * int32x2x2_t vld2_dup_s32 (const int32_t *) 34687 _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' 34688 34689 * int16x4x2_t vld2_dup_s16 (const int16_t *) 34690 _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' 34691 34692 * int8x8x2_t vld2_dup_s8 (const int8_t *) 34693 _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' 34694 34695 * float32x2x2_t vld2_dup_f32 (const float32_t *) 34696 _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' 34697 34698 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 34699 _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' 34700 34701 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 34702 _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' 34703 34704 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 34705 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 34706 34707 * int64x1x2_t vld2_dup_s64 (const int64_t *) 34708 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 34709 34710 6.56.3.78 Element/structure stores, VST2 variants 34711 ................................................. 34712 34713 * void vst2_u32 (uint32_t *, uint32x2x2_t) 34714 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 34715 34716 * void vst2_u16 (uint16_t *, uint16x4x2_t) 34717 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 34718 34719 * void vst2_u8 (uint8_t *, uint8x8x2_t) 34720 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 34721 34722 * void vst2_s32 (int32_t *, int32x2x2_t) 34723 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 34724 34725 * void vst2_s16 (int16_t *, int16x4x2_t) 34726 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 34727 34728 * void vst2_s8 (int8_t *, int8x8x2_t) 34729 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 34730 34731 * void vst2_f32 (float32_t *, float32x2x2_t) 34732 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 34733 34734 * void vst2_p16 (poly16_t *, poly16x4x2_t) 34735 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 34736 34737 * void vst2_p8 (poly8_t *, poly8x8x2_t) 34738 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 34739 34740 * void vst2_u64 (uint64_t *, uint64x1x2_t) 34741 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 34742 34743 * void vst2_s64 (int64_t *, int64x1x2_t) 34744 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 34745 34746 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 34747 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 34748 34749 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 34750 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 34751 34752 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 34753 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 34754 34755 * void vst2q_s32 (int32_t *, int32x4x2_t) 34756 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 34757 34758 * void vst2q_s16 (int16_t *, int16x8x2_t) 34759 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 34760 34761 * void vst2q_s8 (int8_t *, int8x16x2_t) 34762 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 34763 34764 * void vst2q_f32 (float32_t *, float32x4x2_t) 34765 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 34766 34767 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 34768 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 34769 34770 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 34771 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 34772 34773 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 34774 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 34775 34776 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 34777 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 34778 34779 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 34780 _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' 34781 34782 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 34783 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 34784 34785 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 34786 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 34787 34788 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 34789 _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' 34790 34791 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 34792 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 34793 34794 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 34795 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 34796 34797 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 34798 _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' 34799 34800 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 34801 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 34802 34803 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 34804 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 34805 34806 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 34807 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 34808 34809 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 34810 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 34811 34812 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 34813 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 34814 34815 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 34816 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 34817 34818 6.56.3.79 Element/structure loads, VLD3 variants 34819 ................................................ 34820 34821 * uint32x2x3_t vld3_u32 (const uint32_t *) 34822 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 34823 34824 * uint16x4x3_t vld3_u16 (const uint16_t *) 34825 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 34826 34827 * uint8x8x3_t vld3_u8 (const uint8_t *) 34828 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 34829 34830 * int32x2x3_t vld3_s32 (const int32_t *) 34831 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 34832 34833 * int16x4x3_t vld3_s16 (const int16_t *) 34834 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 34835 34836 * int8x8x3_t vld3_s8 (const int8_t *) 34837 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 34838 34839 * float32x2x3_t vld3_f32 (const float32_t *) 34840 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 34841 34842 * poly16x4x3_t vld3_p16 (const poly16_t *) 34843 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 34844 34845 * poly8x8x3_t vld3_p8 (const poly8_t *) 34846 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 34847 34848 * uint64x1x3_t vld3_u64 (const uint64_t *) 34849 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 34850 34851 * int64x1x3_t vld3_s64 (const int64_t *) 34852 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 34853 34854 * uint32x4x3_t vld3q_u32 (const uint32_t *) 34855 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 34856 34857 * uint16x8x3_t vld3q_u16 (const uint16_t *) 34858 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 34859 34860 * uint8x16x3_t vld3q_u8 (const uint8_t *) 34861 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 34862 34863 * int32x4x3_t vld3q_s32 (const int32_t *) 34864 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 34865 34866 * int16x8x3_t vld3q_s16 (const int16_t *) 34867 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 34868 34869 * int8x16x3_t vld3q_s8 (const int8_t *) 34870 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 34871 34872 * float32x4x3_t vld3q_f32 (const float32_t *) 34873 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 34874 34875 * poly16x8x3_t vld3q_p16 (const poly16_t *) 34876 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 34877 34878 * poly8x16x3_t vld3q_p8 (const poly8_t *) 34879 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 34880 34881 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 34882 int) 34883 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 34884 [R0]' 34885 34886 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 34887 int) 34888 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 34889 [R0]' 34890 34891 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 34892 _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, 34893 [R0]' 34894 34895 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 34896 34897 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 34898 [R0]' 34899 34900 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 34901 34902 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 34903 [R0]' 34904 34905 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 34906 _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, 34907 [R0]' 34908 34909 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 34910 const int) 34911 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 34912 [R0]' 34913 34914 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 34915 int) 34916 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 34917 [R0]' 34918 34919 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 34920 _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, 34921 [R0]' 34922 34923 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 34924 int) 34925 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 34926 [R0]' 34927 34928 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 34929 int) 34930 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 34931 [R0]' 34932 34933 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 34934 int) 34935 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 34936 [R0]' 34937 34938 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 34939 int) 34940 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 34941 [R0]' 34942 34943 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 34944 const int) 34945 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 34946 [R0]' 34947 34948 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 34949 int) 34950 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 34951 [R0]' 34952 34953 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 34954 _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, 34955 [R0]' 34956 34957 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 34958 _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, 34959 [R0]' 34960 34961 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 34962 _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, 34963 [R0]' 34964 34965 * int32x2x3_t vld3_dup_s32 (const int32_t *) 34966 _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, 34967 [R0]' 34968 34969 * int16x4x3_t vld3_dup_s16 (const int16_t *) 34970 _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, 34971 [R0]' 34972 34973 * int8x8x3_t vld3_dup_s8 (const int8_t *) 34974 _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, 34975 [R0]' 34976 34977 * float32x2x3_t vld3_dup_f32 (const float32_t *) 34978 _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, 34979 [R0]' 34980 34981 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 34982 _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, 34983 [R0]' 34984 34985 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 34986 _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, 34987 [R0]' 34988 34989 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 34990 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 34991 34992 * int64x1x3_t vld3_dup_s64 (const int64_t *) 34993 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 34994 34995 6.56.3.80 Element/structure stores, VST3 variants 34996 ................................................. 34997 34998 * void vst3_u32 (uint32_t *, uint32x2x3_t) 34999 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' 35000 35001 * void vst3_u16 (uint16_t *, uint16x4x3_t) 35002 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' 35003 35004 * void vst3_u8 (uint8_t *, uint8x8x3_t) 35005 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' 35006 35007 * void vst3_s32 (int32_t *, int32x2x3_t) 35008 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' 35009 35010 * void vst3_s16 (int16_t *, int16x4x3_t) 35011 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' 35012 35013 * void vst3_s8 (int8_t *, int8x8x3_t) 35014 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' 35015 35016 * void vst3_f32 (float32_t *, float32x2x3_t) 35017 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' 35018 35019 * void vst3_p16 (poly16_t *, poly16x4x3_t) 35020 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' 35021 35022 * void vst3_p8 (poly8_t *, poly8x8x3_t) 35023 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' 35024 35025 * void vst3_u64 (uint64_t *, uint64x1x3_t) 35026 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 35027 35028 * void vst3_s64 (int64_t *, int64x1x3_t) 35029 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 35030 35031 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 35032 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' 35033 35034 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 35035 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' 35036 35037 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 35038 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' 35039 35040 * void vst3q_s32 (int32_t *, int32x4x3_t) 35041 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' 35042 35043 * void vst3q_s16 (int16_t *, int16x8x3_t) 35044 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' 35045 35046 * void vst3q_s8 (int8_t *, int8x16x3_t) 35047 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' 35048 35049 * void vst3q_f32 (float32_t *, float32x4x3_t) 35050 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' 35051 35052 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 35053 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' 35054 35055 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 35056 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' 35057 35058 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 35059 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 35060 [R0]' 35061 35062 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 35063 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 35064 [R0]' 35065 35066 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 35067 _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, 35068 [R0]' 35069 35070 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 35071 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 35072 [R0]' 35073 35074 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 35075 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 35076 [R0]' 35077 35078 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 35079 _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, 35080 [R0]' 35081 35082 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 35083 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 35084 [R0]' 35085 35086 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 35087 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 35088 [R0]' 35089 35090 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 35091 _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, 35092 [R0]' 35093 35094 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 35095 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 35096 [R0]' 35097 35098 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 35099 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 35100 [R0]' 35101 35102 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 35103 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 35104 [R0]' 35105 35106 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 35107 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 35108 [R0]' 35109 35110 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 35111 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 35112 [R0]' 35113 35114 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 35115 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 35116 [R0]' 35117 35118 6.56.3.81 Element/structure loads, VLD4 variants 35119 ................................................ 35120 35121 * uint32x2x4_t vld4_u32 (const uint32_t *) 35122 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 35123 35124 * uint16x4x4_t vld4_u16 (const uint16_t *) 35125 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 35126 35127 * uint8x8x4_t vld4_u8 (const uint8_t *) 35128 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 35129 35130 * int32x2x4_t vld4_s32 (const int32_t *) 35131 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 35132 35133 * int16x4x4_t vld4_s16 (const int16_t *) 35134 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 35135 35136 * int8x8x4_t vld4_s8 (const int8_t *) 35137 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 35138 35139 * float32x2x4_t vld4_f32 (const float32_t *) 35140 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 35141 35142 * poly16x4x4_t vld4_p16 (const poly16_t *) 35143 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 35144 35145 * poly8x8x4_t vld4_p8 (const poly8_t *) 35146 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 35147 35148 * uint64x1x4_t vld4_u64 (const uint64_t *) 35149 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 35150 35151 * int64x1x4_t vld4_s64 (const int64_t *) 35152 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 35153 35154 * uint32x4x4_t vld4q_u32 (const uint32_t *) 35155 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 35156 35157 * uint16x8x4_t vld4q_u16 (const uint16_t *) 35158 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 35159 35160 * uint8x16x4_t vld4q_u8 (const uint8_t *) 35161 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 35162 35163 * int32x4x4_t vld4q_s32 (const int32_t *) 35164 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 35165 35166 * int16x8x4_t vld4q_s16 (const int16_t *) 35167 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 35168 35169 * int8x16x4_t vld4q_s8 (const int8_t *) 35170 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 35171 35172 * float32x4x4_t vld4q_f32 (const float32_t *) 35173 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 35174 35175 * poly16x8x4_t vld4q_p16 (const poly16_t *) 35176 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 35177 35178 * poly8x16x4_t vld4q_p8 (const poly8_t *) 35179 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 35180 35181 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 35182 int) 35183 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 35184 D3[0]}, [R0]' 35185 35186 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 35187 int) 35188 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 35189 D3[0]}, [R0]' 35190 35191 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 35192 _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], 35193 D3[0]}, [R0]' 35194 35195 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 35196 35197 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 35198 D3[0]}, [R0]' 35199 35200 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 35201 35202 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 35203 D3[0]}, [R0]' 35204 35205 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 35206 _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], 35207 D3[0]}, [R0]' 35208 35209 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 35210 const int) 35211 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 35212 D3[0]}, [R0]' 35213 35214 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 35215 int) 35216 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 35217 D3[0]}, [R0]' 35218 35219 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 35220 _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], 35221 D3[0]}, [R0]' 35222 35223 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 35224 int) 35225 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 35226 D3[0]}, [R0]' 35227 35228 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 35229 int) 35230 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 35231 D3[0]}, [R0]' 35232 35233 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 35234 int) 35235 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 35236 D3[0]}, [R0]' 35237 35238 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 35239 int) 35240 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 35241 D3[0]}, [R0]' 35242 35243 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 35244 const int) 35245 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 35246 D3[0]}, [R0]' 35247 35248 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 35249 int) 35250 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 35251 D3[0]}, [R0]' 35252 35253 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 35254 _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], 35255 D3[]}, [R0]' 35256 35257 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 35258 _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], 35259 D3[]}, [R0]' 35260 35261 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 35262 _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], 35263 D3[]}, [R0]' 35264 35265 * int32x2x4_t vld4_dup_s32 (const int32_t *) 35266 _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], 35267 D3[]}, [R0]' 35268 35269 * int16x4x4_t vld4_dup_s16 (const int16_t *) 35270 _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], 35271 D3[]}, [R0]' 35272 35273 * int8x8x4_t vld4_dup_s8 (const int8_t *) 35274 _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], 35275 D3[]}, [R0]' 35276 35277 * float32x2x4_t vld4_dup_f32 (const float32_t *) 35278 _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], 35279 D3[]}, [R0]' 35280 35281 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 35282 _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], 35283 D3[]}, [R0]' 35284 35285 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 35286 _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], 35287 D3[]}, [R0]' 35288 35289 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 35290 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 35291 35292 * int64x1x4_t vld4_dup_s64 (const int64_t *) 35293 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 35294 35295 6.56.3.82 Element/structure stores, VST4 variants 35296 ................................................. 35297 35298 * void vst4_u32 (uint32_t *, uint32x2x4_t) 35299 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 35300 35301 * void vst4_u16 (uint16_t *, uint16x4x4_t) 35302 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 35303 35304 * void vst4_u8 (uint8_t *, uint8x8x4_t) 35305 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 35306 35307 * void vst4_s32 (int32_t *, int32x2x4_t) 35308 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 35309 35310 * void vst4_s16 (int16_t *, int16x4x4_t) 35311 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 35312 35313 * void vst4_s8 (int8_t *, int8x8x4_t) 35314 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 35315 35316 * void vst4_f32 (float32_t *, float32x2x4_t) 35317 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 35318 35319 * void vst4_p16 (poly16_t *, poly16x4x4_t) 35320 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 35321 35322 * void vst4_p8 (poly8_t *, poly8x8x4_t) 35323 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 35324 35325 * void vst4_u64 (uint64_t *, uint64x1x4_t) 35326 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 35327 35328 * void vst4_s64 (int64_t *, int64x1x4_t) 35329 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 35330 35331 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 35332 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 35333 35334 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 35335 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 35336 35337 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 35338 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 35339 35340 * void vst4q_s32 (int32_t *, int32x4x4_t) 35341 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 35342 35343 * void vst4q_s16 (int16_t *, int16x8x4_t) 35344 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 35345 35346 * void vst4q_s8 (int8_t *, int8x16x4_t) 35347 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 35348 35349 * void vst4q_f32 (float32_t *, float32x4x4_t) 35350 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 35351 35352 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 35353 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 35354 35355 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 35356 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 35357 35358 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 35359 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 35360 D3[0]}, [R0]' 35361 35362 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 35363 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 35364 D3[0]}, [R0]' 35365 35366 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 35367 _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], 35368 D3[0]}, [R0]' 35369 35370 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 35371 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 35372 D3[0]}, [R0]' 35373 35374 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 35375 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 35376 D3[0]}, [R0]' 35377 35378 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 35379 _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], 35380 D3[0]}, [R0]' 35381 35382 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 35383 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 35384 D3[0]}, [R0]' 35385 35386 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 35387 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 35388 D3[0]}, [R0]' 35389 35390 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 35391 _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], 35392 D3[0]}, [R0]' 35393 35394 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 35395 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 35396 D3[0]}, [R0]' 35397 35398 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 35399 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 35400 D3[0]}, [R0]' 35401 35402 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 35403 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 35404 D3[0]}, [R0]' 35405 35406 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 35407 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 35408 D3[0]}, [R0]' 35409 35410 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 35411 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 35412 D3[0]}, [R0]' 35413 35414 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 35415 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 35416 D3[0]}, [R0]' 35417 35418 6.56.3.83 Logical operations (AND) 35419 .................................. 35420 35421 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 35422 _Form of expected instruction(s):_ 'vand D0, D0, D0' 35423 35424 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 35425 _Form of expected instruction(s):_ 'vand D0, D0, D0' 35426 35427 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 35428 _Form of expected instruction(s):_ 'vand D0, D0, D0' 35429 35430 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 35431 _Form of expected instruction(s):_ 'vand D0, D0, D0' 35432 35433 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 35434 _Form of expected instruction(s):_ 'vand D0, D0, D0' 35435 35436 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 35437 _Form of expected instruction(s):_ 'vand D0, D0, D0' 35438 35439 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 35440 35441 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 35442 35443 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 35444 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 35445 35446 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 35447 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 35448 35449 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 35450 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 35451 35452 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 35453 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 35454 35455 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 35456 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 35457 35458 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 35459 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 35460 35461 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 35462 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 35463 35464 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 35465 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 35466 35467 6.56.3.84 Logical operations (OR) 35468 ................................. 35469 35470 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 35471 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 35472 35473 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 35474 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 35475 35476 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 35477 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 35478 35479 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 35480 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 35481 35482 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 35483 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 35484 35485 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 35486 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 35487 35488 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 35489 35490 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 35491 35492 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 35493 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 35494 35495 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 35496 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 35497 35498 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 35499 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 35500 35501 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 35502 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 35503 35504 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 35505 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 35506 35507 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 35508 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 35509 35510 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 35511 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 35512 35513 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 35514 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 35515 35516 6.56.3.85 Logical operations (exclusive OR) 35517 ........................................... 35518 35519 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 35520 _Form of expected instruction(s):_ 'veor D0, D0, D0' 35521 35522 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 35523 _Form of expected instruction(s):_ 'veor D0, D0, D0' 35524 35525 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 35526 _Form of expected instruction(s):_ 'veor D0, D0, D0' 35527 35528 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 35529 _Form of expected instruction(s):_ 'veor D0, D0, D0' 35530 35531 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 35532 _Form of expected instruction(s):_ 'veor D0, D0, D0' 35533 35534 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 35535 _Form of expected instruction(s):_ 'veor D0, D0, D0' 35536 35537 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 35538 35539 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 35540 35541 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 35542 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 35543 35544 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 35545 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 35546 35547 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 35548 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 35549 35550 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 35551 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 35552 35553 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 35554 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 35555 35556 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 35557 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 35558 35559 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 35560 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 35561 35562 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 35563 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 35564 35565 6.56.3.86 Logical operations (AND-NOT) 35566 ...................................... 35567 35568 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 35569 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 35570 35571 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 35572 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 35573 35574 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 35575 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 35576 35577 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 35578 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 35579 35580 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 35581 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 35582 35583 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 35584 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 35585 35586 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 35587 35588 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 35589 35590 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 35591 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 35592 35593 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 35594 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 35595 35596 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 35597 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 35598 35599 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 35600 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 35601 35602 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 35603 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 35604 35605 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 35606 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 35607 35608 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 35609 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 35610 35611 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 35612 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 35613 35614 6.56.3.87 Logical operations (OR-NOT) 35615 ..................................... 35616 35617 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 35618 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 35619 35620 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 35621 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 35622 35623 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 35624 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 35625 35626 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 35627 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 35628 35629 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 35630 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 35631 35632 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 35633 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 35634 35635 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 35636 35637 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 35638 35639 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 35640 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 35641 35642 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 35643 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 35644 35645 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 35646 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 35647 35648 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 35649 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 35650 35651 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 35652 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 35653 35654 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 35655 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 35656 35657 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 35658 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 35659 35660 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 35661 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 35662 35663 6.56.3.88 Reinterpret casts 35664 ........................... 35665 35666 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 35667 35668 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 35669 35670 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 35671 35672 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 35673 35674 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 35675 35676 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 35677 35678 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 35679 35680 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 35681 35682 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 35683 35684 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 35685 35686 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 35687 35688 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 35689 35690 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 35691 35692 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 35693 35694 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 35695 35696 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 35697 35698 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 35699 35700 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 35701 35702 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 35703 35704 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 35705 35706 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 35707 35708 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 35709 35710 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 35711 35712 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 35713 35714 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 35715 35716 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 35717 35718 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 35719 35720 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 35721 35722 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 35723 35724 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 35725 35726 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 35727 35728 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 35729 35730 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 35731 35732 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 35733 35734 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 35735 35736 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 35737 35738 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 35739 35740 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 35741 35742 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 35743 35744 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 35745 35746 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 35747 35748 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 35749 35750 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 35751 35752 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 35753 35754 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 35755 35756 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 35757 35758 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 35759 35760 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 35761 35762 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 35763 35764 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 35765 35766 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 35767 35768 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 35769 35770 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 35771 35772 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 35773 35774 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 35775 35776 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 35777 35778 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 35779 35780 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 35781 35782 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 35783 35784 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 35785 35786 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 35787 35788 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 35789 35790 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 35791 35792 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 35793 35794 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 35795 35796 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 35797 35798 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 35799 35800 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 35801 35802 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 35803 35804 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 35805 35806 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 35807 35808 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 35809 35810 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 35811 35812 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 35813 35814 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 35815 35816 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 35817 35818 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 35819 35820 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 35821 35822 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 35823 35824 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 35825 35826 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 35827 35828 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 35829 35830 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 35831 35832 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 35833 35834 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 35835 35836 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 35837 35838 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 35839 35840 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 35841 35842 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 35843 35844 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 35845 35846 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 35847 35848 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 35849 35850 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 35851 35852 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 35853 35854 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 35855 35856 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 35857 35858 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 35859 35860 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 35861 35862 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 35863 35864 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 35865 35866 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 35867 35868 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 35869 35870 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 35871 35872 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 35873 35874 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 35875 35876 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 35877 35878 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 35879 35880 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 35881 35882 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 35883 35884 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 35885 35886 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 35887 35888 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 35889 35890 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 35891 35892 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 35893 35894 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 35895 35896 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 35897 35898 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 35899 35900 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 35901 35902 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 35903 35904 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 35905 35906 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 35907 35908 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 35909 35910 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 35911 35912 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 35913 35914 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 35915 35916 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 35917 35918 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 35919 35920 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 35921 35922 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 35923 35924 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 35925 35926 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 35927 35928 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 35929 35930 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 35931 35932 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 35933 35934 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 35935 35936 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 35937 35938 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 35939 35940 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 35941 35942 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 35943 35944 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 35945 35946 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 35947 35948 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 35949 35950 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 35951 35952 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 35953 35954 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 35955 35956 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 35957 35958 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 35959 35960 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 35961 35962 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 35963 35964 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 35965 35966 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 35967 35968 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 35969 35970 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 35971 35972 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 35973 35974 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 35975 35976 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 35977 35978 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 35979 35980 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 35981 35982 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 35983 35984 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 35985 35986 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 35987 35988 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 35989 35990 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 35991 35992 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 35993 35994 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 35995 35996 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 35997 35998 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 35999 36000 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 36001 36002 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 36003 36004 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 36005 36006 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 36007 36008 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 36009 36010 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 36011 36012 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 36013 36014 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 36015 36016 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 36017 36018 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 36019 36020 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 36021 36022 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 36023 36024 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 36025 36026 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 36027 36028 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 36029 36030 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 36031 36032 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 36033 36034 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 36035 36036 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 36037 36038 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 36039 36040 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 36041 36042 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 36043 36044 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 36045 36046 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 36047 36048 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 36049 36050 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 36051 36052 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 36053 36054 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 36055 36056 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 36057 36058 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 36059 36060 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 36061 36062 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 36063 36064 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 36065 36066 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 36067 36068 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 36069 36070 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 36071 36072 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 36073 36074 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 36075 36076 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 36077 36078 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 36079 36080 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 36081 36082 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 36083 36084 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 36085 36086 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 36087 36088 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 36089 36090 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 36091 36092 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 36093 36094 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 36095 36096 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 36097 36098 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 36099 36100 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 36101 36102 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 36103 36104 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 36105 36106 36107 File: gcc.info, Node: AVR Built-in Functions, Next: Blackfin Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 36108 36109 6.56.4 AVR Built-in Functions 36110 ----------------------------- 36111 36112 For each built-in function for AVR, there is an equally named, uppercase 36113 built-in macro defined. That way users can easily query if or if not a 36114 specific built-in is implemented or not. For example, if 36115 '__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is 36116 defined to '1' and undefined otherwise. 36117 36118 The following built-in functions map to the respective machine 36119 instruction, i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', 36120 'fmuls' resp. 'fmulsu'. The three 'fmul*' built-ins are implemented as 36121 library call if no hardware multiplier is available. 36122 36123 void __builtin_avr_nop (void) 36124 void __builtin_avr_sei (void) 36125 void __builtin_avr_cli (void) 36126 void __builtin_avr_sleep (void) 36127 void __builtin_avr_wdr (void) 36128 unsigned char __builtin_avr_swap (unsigned char) 36129 unsigned int __builtin_avr_fmul (unsigned char, unsigned char) 36130 int __builtin_avr_fmuls (char, char) 36131 int __builtin_avr_fmulsu (char, unsigned char) 36132 36133 In order to delay execution for a specific number of cycles, GCC 36134 implements 36135 void __builtin_avr_delay_cycles (unsigned long ticks) 36136 36137 'ticks' is the number of ticks to delay execution. Note that this 36138 built-in does not take into account the effect of interrupts that might 36139 increase delay time. 'ticks' must be a compile-time integer constant; 36140 delays with a variable number of cycles are not supported. 36141 36142 char __builtin_avr_flash_segment (const __memx void*) 36143 36144 This built-in takes a byte address to the 24-bit *note address space: 36145 AVR Named Address Spaces. '__memx' and returns the number of the flash 36146 segment (the 64 KiB chunk) where the address points to. Counting starts 36147 at '0'. If the address does not point to flash memory, return '-1'. 36148 36149 unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) 36150 36151 Insert bits from BITS into VAL and return the resulting value. The 36152 nibbles of MAP determine how the insertion is performed: Let X be the 36153 N-th nibble of MAP 36154 1. If X is '0xf', then the N-th bit of VAL is returned unaltered. 36155 36156 2. If X is in the range 0...7, then the N-th result bit is set to the 36157 X-th bit of BITS 36158 36159 3. If X is in the range 8...'0xe', then the N-th result bit is 36160 undefined. 36161 36162 One typical use case for this built-in is adjusting input and output 36163 values to non-contiguous port layouts. Some examples: 36164 36165 // same as val, bits is unused 36166 __builtin_avr_insert_bits (0xffffffff, bits, val) 36167 36168 // same as bits, val is unused 36169 __builtin_avr_insert_bits (0x76543210, bits, val) 36170 36171 // same as rotating bits by 4 36172 __builtin_avr_insert_bits (0x32107654, bits, 0) 36173 36174 // high nibble of result is the high nibble of val 36175 // low nibble of result is the low nibble of bits 36176 __builtin_avr_insert_bits (0xffff3210, bits, val) 36177 36178 // reverse the bit order of bits 36179 __builtin_avr_insert_bits (0x01234567, bits, 0) 36180 36181 36182 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: AVR Built-in Functions, Up: Target Builtins 36183 36184 6.56.5 Blackfin Built-in Functions 36185 ---------------------------------- 36186 36187 Currently, there are two Blackfin-specific built-in functions. These 36188 are used for generating 'CSYNC' and 'SSYNC' machine insns without using 36189 inline assembly; by using these built-in functions the compiler can 36190 automatically add workarounds for hardware errata involving these 36191 instructions. These functions are named as follows: 36192 36193 void __builtin_bfin_csync (void) 36194 void __builtin_bfin_ssync (void) 36195 36196 36197 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 36198 36199 6.56.6 FR-V Built-in Functions 36200 ------------------------------ 36201 36202 GCC provides many FR-V-specific built-in functions. In general, these 36203 functions are intended to be compatible with those described by 'FR-V 36204 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. The 36205 two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which 36206 pass 128-bit values by pointer rather than by value. 36207 36208 Most of the functions are named after specific FR-V instructions. Such 36209 functions are said to be "directly mapped" and are summarized here in 36210 tabular form. 36211 36212 * Menu: 36213 36214 * Argument Types:: 36215 * Directly-mapped Integer Functions:: 36216 * Directly-mapped Media Functions:: 36217 * Raw read/write Functions:: 36218 * Other Built-in Functions:: 36219 36220 36221 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 36222 36223 6.56.6.1 Argument Types 36224 ....................... 36225 36226 The arguments to the built-in functions can be divided into three 36227 groups: register numbers, compile-time constants and run-time values. 36228 In order to make this classification clear at a glance, the arguments 36229 and return values are given the following pseudo types: 36230 36231 Pseudo type Real C type Constant? Description 36232 'uh' 'unsigned short' No an unsigned halfword 36233 'uw1' 'unsigned int' No an unsigned word 36234 'sw1' 'int' No a signed word 36235 'uw2' 'unsigned long long' No an unsigned doubleword 36236 'sw2' 'long long' No a signed doubleword 36237 'const' 'int' Yes an integer constant 36238 'acc' 'int' Yes an ACC register number 36239 'iacc' 'int' Yes an IACC register number 36240 36241 These pseudo types are not defined by GCC, they are simply a notational 36242 convenience used in this manual. 36243 36244 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at 36245 run time. They correspond to register operands in the underlying FR-V 36246 instructions. 36247 36248 'const' arguments represent immediate operands in the underlying FR-V 36249 instructions. They must be compile-time constants. 36250 36251 'acc' arguments are evaluated at compile time and specify the number of 36252 an accumulator register. For example, an 'acc' argument of 2 selects 36253 the ACC2 register. 36254 36255 'iacc' arguments are similar to 'acc' arguments but specify the number 36256 of an IACC register. See *note Other Built-in Functions:: for more 36257 details. 36258 36259 36260 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 36261 36262 6.56.6.2 Directly-mapped Integer Functions 36263 .......................................... 36264 36265 The functions listed below map directly to FR-V I-type instructions. 36266 36267 Function prototype Example usage Assembly output 36268 'sw1 __ADDSS (sw1, sw1)' 'C = __ADDSS (A, B)' 'ADDSS A,B,C' 36269 'sw1 __SCAN (sw1, sw1)' 'C = __SCAN (A, B)' 'SCAN A,B,C' 36270 'sw1 __SCUTSS (sw1)' 'B = __SCUTSS (A)' 'SCUTSS A,B' 36271 'sw1 __SLASS (sw1, sw1)' 'C = __SLASS (A, B)' 'SLASS A,B,C' 36272 'void __SMASS (sw1, sw1)' '__SMASS (A, B)' 'SMASS A,B' 36273 'void __SMSSS (sw1, sw1)' '__SMSSS (A, B)' 'SMSSS A,B' 36274 'void __SMU (sw1, sw1)' '__SMU (A, B)' 'SMU A,B' 36275 'sw2 __SMUL (sw1, sw1)' 'C = __SMUL (A, B)' 'SMUL A,B,C' 36276 'sw1 __SUBSS (sw1, sw1)' 'C = __SUBSS (A, B)' 'SUBSS A,B,C' 36277 'uw2 __UMUL (uw1, uw1)' 'C = __UMUL (A, B)' 'UMUL A,B,C' 36278 36279 36280 File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 36281 36282 6.56.6.3 Directly-mapped Media Functions 36283 ........................................ 36284 36285 The functions listed below map directly to FR-V M-type instructions. 36286 36287 Function prototype Example usage Assembly output 36288 'uw1 __MABSHS (sw1)' 'B = __MABSHS (A)' 'MABSHS A,B' 36289 'void __MADDACCS (acc, acc)' '__MADDACCS (B, A)' 'MADDACCS A,B' 36290 'sw1 __MADDHSS (sw1, sw1)' 'C = __MADDHSS (A, 'MADDHSS A,B,C' 36291 B)' 36292 'uw1 __MADDHUS (uw1, uw1)' 'C = __MADDHUS (A, 'MADDHUS A,B,C' 36293 B)' 36294 'uw1 __MAND (uw1, uw1)' 'C = __MAND (A, B)' 'MAND A,B,C' 36295 'void __MASACCS (acc, acc)' '__MASACCS (B, A)' 'MASACCS A,B' 36296 'uw1 __MAVEH (uw1, uw1)' 'C = __MAVEH (A, B)' 'MAVEH A,B,C' 36297 'uw2 __MBTOH (uw1)' 'B = __MBTOH (A)' 'MBTOH A,B' 36298 'void __MBTOHE (uw1 *, uw1)' '__MBTOHE (&B, A)' 'MBTOHE A,B' 36299 'void __MCLRACC (acc)' '__MCLRACC (A)' 'MCLRACC A' 36300 'void __MCLRACCA (void)' '__MCLRACCA ()' 'MCLRACCA' 36301 'uw1 __Mcop1 (uw1, uw1)' 'C = __Mcop1 (A, B)' 'Mcop1 A,B,C' 36302 'uw1 __Mcop2 (uw1, uw1)' 'C = __Mcop2 (A, B)' 'Mcop2 A,B,C' 36303 'uw1 __MCPLHI (uw2, const)' 'C = __MCPLHI (A, B)' 'MCPLHI A,#B,C' 36304 'uw1 __MCPLI (uw2, const)' 'C = __MCPLI (A, B)' 'MCPLI A,#B,C' 36305 'void __MCPXIS (acc, sw1, '__MCPXIS (C, A, B)' 'MCPXIS A,B,C' 36306 sw1)' 36307 'void __MCPXIU (acc, uw1, '__MCPXIU (C, A, B)' 'MCPXIU A,B,C' 36308 uw1)' 36309 'void __MCPXRS (acc, sw1, '__MCPXRS (C, A, B)' 'MCPXRS A,B,C' 36310 sw1)' 36311 'void __MCPXRU (acc, uw1, '__MCPXRU (C, A, B)' 'MCPXRU A,B,C' 36312 uw1)' 36313 'uw1 __MCUT (acc, uw1)' 'C = __MCUT (A, B)' 'MCUT A,B,C' 36314 'uw1 __MCUTSS (acc, sw1)' 'C = __MCUTSS (A, B)' 'MCUTSS A,B,C' 36315 'void __MDADDACCS (acc, acc)' '__MDADDACCS (B, A)' 'MDADDACCS A,B' 36316 'void __MDASACCS (acc, acc)' '__MDASACCS (B, A)' 'MDASACCS A,B' 36317 'uw2 __MDCUTSSI (acc, const)' 'C = __MDCUTSSI (A, 'MDCUTSSI 36318 B)' A,#B,C' 36319 'uw2 __MDPACKH (uw2, uw2)' 'C = __MDPACKH (A, 'MDPACKH A,B,C' 36320 B)' 36321 'uw2 __MDROTLI (uw2, const)' 'C = __MDROTLI (A, 'MDROTLI 36322 B)' A,#B,C' 36323 'void __MDSUBACCS (acc, acc)' '__MDSUBACCS (B, A)' 'MDSUBACCS A,B' 36324 'void __MDUNPACKH (uw1 *, '__MDUNPACKH (&B, A)' 'MDUNPACKH A,B' 36325 uw2)' 36326 'uw2 __MEXPDHD (uw1, const)' 'C = __MEXPDHD (A, 'MEXPDHD 36327 B)' A,#B,C' 36328 'uw1 __MEXPDHW (uw1, const)' 'C = __MEXPDHW (A, 'MEXPDHW 36329 B)' A,#B,C' 36330 'uw1 __MHDSETH (uw1, const)' 'C = __MHDSETH (A, 'MHDSETH 36331 B)' A,#B,C' 36332 'sw1 __MHDSETS (const)' 'B = __MHDSETS (A)' 'MHDSETS #A,B' 36333 'uw1 __MHSETHIH (uw1, const)' 'B = __MHSETHIH (B, 'MHSETHIH #A,B' 36334 A)' 36335 'sw1 __MHSETHIS (sw1, const)' 'B = __MHSETHIS (B, 'MHSETHIS #A,B' 36336 A)' 36337 'uw1 __MHSETLOH (uw1, const)' 'B = __MHSETLOH (B, 'MHSETLOH #A,B' 36338 A)' 36339 'sw1 __MHSETLOS (sw1, const)' 'B = __MHSETLOS (B, 'MHSETLOS #A,B' 36340 A)' 36341 'uw1 __MHTOB (uw2)' 'B = __MHTOB (A)' 'MHTOB A,B' 36342 'void __MMACHS (acc, sw1, '__MMACHS (C, A, B)' 'MMACHS A,B,C' 36343 sw1)' 36344 'void __MMACHU (acc, uw1, '__MMACHU (C, A, B)' 'MMACHU A,B,C' 36345 uw1)' 36346 'void __MMRDHS (acc, sw1, '__MMRDHS (C, A, B)' 'MMRDHS A,B,C' 36347 sw1)' 36348 'void __MMRDHU (acc, uw1, '__MMRDHU (C, A, B)' 'MMRDHU A,B,C' 36349 uw1)' 36350 'void __MMULHS (acc, sw1, '__MMULHS (C, A, B)' 'MMULHS A,B,C' 36351 sw1)' 36352 'void __MMULHU (acc, uw1, '__MMULHU (C, A, B)' 'MMULHU A,B,C' 36353 uw1)' 36354 'void __MMULXHS (acc, sw1, '__MMULXHS (C, A, B)' 'MMULXHS A,B,C' 36355 sw1)' 36356 'void __MMULXHU (acc, uw1, '__MMULXHU (C, A, B)' 'MMULXHU A,B,C' 36357 uw1)' 36358 'uw1 __MNOT (uw1)' 'B = __MNOT (A)' 'MNOT A,B' 36359 'uw1 __MOR (uw1, uw1)' 'C = __MOR (A, B)' 'MOR A,B,C' 36360 'uw1 __MPACKH (uh, uh)' 'C = __MPACKH (A, B)' 'MPACKH A,B,C' 36361 'sw2 __MQADDHSS (sw2, sw2)' 'C = __MQADDHSS (A, 'MQADDHSS 36362 B)' A,B,C' 36363 'uw2 __MQADDHUS (uw2, uw2)' 'C = __MQADDHUS (A, 'MQADDHUS 36364 B)' A,B,C' 36365 'void __MQCPXIS (acc, sw2, '__MQCPXIS (C, A, B)' 'MQCPXIS A,B,C' 36366 sw2)' 36367 'void __MQCPXIU (acc, uw2, '__MQCPXIU (C, A, B)' 'MQCPXIU A,B,C' 36368 uw2)' 36369 'void __MQCPXRS (acc, sw2, '__MQCPXRS (C, A, B)' 'MQCPXRS A,B,C' 36370 sw2)' 36371 'void __MQCPXRU (acc, uw2, '__MQCPXRU (C, A, B)' 'MQCPXRU A,B,C' 36372 uw2)' 36373 'sw2 __MQLCLRHS (sw2, sw2)' 'C = __MQLCLRHS (A, 'MQLCLRHS 36374 B)' A,B,C' 36375 'sw2 __MQLMTHS (sw2, sw2)' 'C = __MQLMTHS (A, 'MQLMTHS A,B,C' 36376 B)' 36377 'void __MQMACHS (acc, sw2, '__MQMACHS (C, A, B)' 'MQMACHS A,B,C' 36378 sw2)' 36379 'void __MQMACHU (acc, uw2, '__MQMACHU (C, A, B)' 'MQMACHU A,B,C' 36380 uw2)' 36381 'void __MQMACXHS (acc, sw2, '__MQMACXHS (C, A, 'MQMACXHS 36382 sw2)' B)' A,B,C' 36383 'void __MQMULHS (acc, sw2, '__MQMULHS (C, A, B)' 'MQMULHS A,B,C' 36384 sw2)' 36385 'void __MQMULHU (acc, uw2, '__MQMULHU (C, A, B)' 'MQMULHU A,B,C' 36386 uw2)' 36387 'void __MQMULXHS (acc, sw2, '__MQMULXHS (C, A, 'MQMULXHS 36388 sw2)' B)' A,B,C' 36389 'void __MQMULXHU (acc, uw2, '__MQMULXHU (C, A, 'MQMULXHU 36390 uw2)' B)' A,B,C' 36391 'sw2 __MQSATHS (sw2, sw2)' 'C = __MQSATHS (A, 'MQSATHS A,B,C' 36392 B)' 36393 'uw2 __MQSLLHI (uw2, int)' 'C = __MQSLLHI (A, 'MQSLLHI A,B,C' 36394 B)' 36395 'sw2 __MQSRAHI (sw2, int)' 'C = __MQSRAHI (A, 'MQSRAHI A,B,C' 36396 B)' 36397 'sw2 __MQSUBHSS (sw2, sw2)' 'C = __MQSUBHSS (A, 'MQSUBHSS 36398 B)' A,B,C' 36399 'uw2 __MQSUBHUS (uw2, uw2)' 'C = __MQSUBHUS (A, 'MQSUBHUS 36400 B)' A,B,C' 36401 'void __MQXMACHS (acc, sw2, '__MQXMACHS (C, A, 'MQXMACHS 36402 sw2)' B)' A,B,C' 36403 'void __MQXMACXHS (acc, sw2, '__MQXMACXHS (C, A, 'MQXMACXHS 36404 sw2)' B)' A,B,C' 36405 'uw1 __MRDACC (acc)' 'B = __MRDACC (A)' 'MRDACC A,B' 36406 'uw1 __MRDACCG (acc)' 'B = __MRDACCG (A)' 'MRDACCG A,B' 36407 'uw1 __MROTLI (uw1, const)' 'C = __MROTLI (A, B)' 'MROTLI A,#B,C' 36408 'uw1 __MROTRI (uw1, const)' 'C = __MROTRI (A, B)' 'MROTRI A,#B,C' 36409 'sw1 __MSATHS (sw1, sw1)' 'C = __MSATHS (A, B)' 'MSATHS A,B,C' 36410 'uw1 __MSATHU (uw1, uw1)' 'C = __MSATHU (A, B)' 'MSATHU A,B,C' 36411 'uw1 __MSLLHI (uw1, const)' 'C = __MSLLHI (A, B)' 'MSLLHI A,#B,C' 36412 'sw1 __MSRAHI (sw1, const)' 'C = __MSRAHI (A, B)' 'MSRAHI A,#B,C' 36413 'uw1 __MSRLHI (uw1, const)' 'C = __MSRLHI (A, B)' 'MSRLHI A,#B,C' 36414 'void __MSUBACCS (acc, acc)' '__MSUBACCS (B, A)' 'MSUBACCS A,B' 36415 'sw1 __MSUBHSS (sw1, sw1)' 'C = __MSUBHSS (A, 'MSUBHSS A,B,C' 36416 B)' 36417 'uw1 __MSUBHUS (uw1, uw1)' 'C = __MSUBHUS (A, 'MSUBHUS A,B,C' 36418 B)' 36419 'void __MTRAP (void)' '__MTRAP ()' 'MTRAP' 36420 'uw2 __MUNPACKH (uw1)' 'B = __MUNPACKH (A)' 'MUNPACKH A,B' 36421 'uw1 __MWCUT (uw2, uw1)' 'C = __MWCUT (A, B)' 'MWCUT A,B,C' 36422 'void __MWTACC (acc, uw1)' '__MWTACC (B, A)' 'MWTACC A,B' 36423 'void __MWTACCG (acc, uw1)' '__MWTACCG (B, A)' 'MWTACCG A,B' 36424 'uw1 __MXOR (uw1, uw1)' 'C = __MXOR (A, B)' 'MXOR A,B,C' 36425 36426 36427 File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 36428 36429 6.56.6.4 Raw read/write Functions 36430 ................................. 36431 36432 This sections describes built-in functions related to read and write 36433 instructions to access memory. These functions generate 'membar' 36434 instructions to flush the I/O load and stores where appropriate, as 36435 described in Fujitsu's manual described above. 36436 36437 'unsigned char __builtin_read8 (void *DATA)' 36438 'unsigned short __builtin_read16 (void *DATA)' 36439 'unsigned long __builtin_read32 (void *DATA)' 36440 'unsigned long long __builtin_read64 (void *DATA)' 36441 36442 'void __builtin_write8 (void *DATA, unsigned char DATUM)' 36443 'void __builtin_write16 (void *DATA, unsigned short DATUM)' 36444 'void __builtin_write32 (void *DATA, unsigned long DATUM)' 36445 'void __builtin_write64 (void *DATA, unsigned long long DATUM)' 36446 36447 36448 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 36449 36450 6.56.6.5 Other Built-in Functions 36451 ................................. 36452 36453 This section describes built-in functions that are not named after a 36454 specific FR-V instruction. 36455 36456 'sw2 __IACCreadll (iacc REG)' 36457 Return the full 64-bit value of IACC0. The REG argument is 36458 reserved for future expansion and must be 0. 36459 36460 'sw1 __IACCreadl (iacc REG)' 36461 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 36462 Other values of REG are rejected as invalid. 36463 36464 'void __IACCsetll (iacc REG, sw2 X)' 36465 Set the full 64-bit value of IACC0 to X. The REG argument is 36466 reserved for future expansion and must be 0. 36467 36468 'void __IACCsetl (iacc REG, sw1 X)' 36469 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 36470 values of REG are rejected as invalid. 36471 36472 'void __data_prefetch0 (const void *X)' 36473 Use the 'dcpl' instruction to load the contents of address X into 36474 the data cache. 36475 36476 'void __data_prefetch (const void *X)' 36477 Use the 'nldub' instruction to load the contents of address X into 36478 the data cache. The instruction is issued in slot I1. 36479 36480 36481 File: gcc.info, Node: X86 Built-in Functions, Next: X86 transactional memory intrinsics, Prev: FR-V Built-in Functions, Up: Target Builtins 36482 36483 6.56.7 X86 Built-in Functions 36484 ----------------------------- 36485 36486 These built-in functions are available for the i386 and x86-64 family of 36487 computers, depending on the command-line switches used. 36488 36489 If you specify command-line switches such as '-msse', the compiler 36490 could use the extended instruction sets even if the built-ins are not 36491 used explicitly in the program. For this reason, applications that 36492 perform run-time CPU detection must compile separate files for each 36493 supported architecture, using the appropriate flags. In particular, the 36494 file containing the CPU detection code should be compiled without these 36495 options. 36496 36497 The following machine modes are available for use with MMX built-in 36498 functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit 36499 integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a 36500 vector of eight 8-bit integers. Some of the built-in functions operate 36501 on MMX registers as a whole 64-bit entity, these use 'V1DI' as their 36502 mode. 36503 36504 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector 36505 of two 32-bit floating-point values. 36506 36507 If SSE extensions are enabled, 'V4SF' is used for a vector of four 36508 32-bit floating-point values. Some instructions use a vector of four 36509 32-bit integers, these use 'V4SI'. Finally, some instructions operate 36510 on an entire vector register, interpreting it as a 128-bit integer, 36511 these use mode 'TI'. 36512 36513 In 64-bit mode, the x86-64 family of processors uses additional 36514 built-in functions for efficient use of 'TF' ('__float128') 128-bit 36515 floating point and 'TC' 128-bit complex floating-point values. 36516 36517 The following floating-point built-in functions are available in 64-bit 36518 mode. All of them implement the function that is part of the name. 36519 36520 __float128 __builtin_fabsq (__float128) 36521 __float128 __builtin_copysignq (__float128, __float128) 36522 36523 The following built-in function is always available. 36524 36525 'void __builtin_ia32_pause (void)' 36526 Generates the 'pause' machine instruction with a compiler memory 36527 barrier. 36528 36529 The following floating-point built-in functions are made available in 36530 the 64-bit mode. 36531 36532 '__float128 __builtin_infq (void)' 36533 Similar to '__builtin_inf', except the return type is '__float128'. 36534 36535 '__float128 __builtin_huge_valq (void)' 36536 Similar to '__builtin_huge_val', except the return type is 36537 '__float128'. 36538 36539 The following built-in functions are always available and can be used 36540 to check the target platform type. 36541 36542 -- Built-in Function: void __builtin_cpu_init (void) 36543 This function runs the CPU detection code to check the type of CPU 36544 and the features supported. This built-in function needs to be 36545 invoked along with the built-in functions to check CPU type and 36546 features, '__builtin_cpu_is' and '__builtin_cpu_supports', only 36547 when used in a function that is executed before any constructors 36548 are called. The CPU detection code is automatically executed in a 36549 very high priority constructor. 36550 36551 For example, this function has to be used in 'ifunc' resolvers that 36552 check for CPU type using the built-in functions '__builtin_cpu_is' 36553 and '__builtin_cpu_supports', or in constructors on targets that 36554 don't support constructor priority. 36555 36556 static void (*resolve_memcpy (void)) (void) 36557 { 36558 // ifunc resolvers fire before constructors, explicitly call the init 36559 // function. 36560 __builtin_cpu_init (); 36561 if (__builtin_cpu_supports ("ssse3")) 36562 return ssse3_memcpy; // super fast memcpy with ssse3 instructions. 36563 else 36564 return default_memcpy; 36565 } 36566 36567 void *memcpy (void *, const void *, size_t) 36568 __attribute__ ((ifunc ("resolve_memcpy"))); 36569 36570 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME) 36571 This function returns a positive integer if the run-time CPU is of 36572 type CPUNAME and returns '0' otherwise. The following CPU names 36573 can be detected: 36574 36575 'intel' 36576 Intel CPU. 36577 36578 'atom' 36579 Intel Atom CPU. 36580 36581 'core2' 36582 Intel Core 2 CPU. 36583 36584 'corei7' 36585 Intel Core i7 CPU. 36586 36587 'nehalem' 36588 Intel Core i7 Nehalem CPU. 36589 36590 'westmere' 36591 Intel Core i7 Westmere CPU. 36592 36593 'sandybridge' 36594 Intel Core i7 Sandy Bridge CPU. 36595 36596 'amd' 36597 AMD CPU. 36598 36599 'amdfam10h' 36600 AMD Family 10h CPU. 36601 36602 'barcelona' 36603 AMD Family 10h Barcelona CPU. 36604 36605 'shanghai' 36606 AMD Family 10h Shanghai CPU. 36607 36608 'istanbul' 36609 AMD Family 10h Istanbul CPU. 36610 36611 'btver1' 36612 AMD Family 14h CPU. 36613 36614 'amdfam15h' 36615 AMD Family 15h CPU. 36616 36617 'bdver1' 36618 AMD Family 15h Bulldozer version 1. 36619 36620 'bdver2' 36621 AMD Family 15h Bulldozer version 2. 36622 36623 'bdver3' 36624 AMD Family 15h Bulldozer version 3. 36625 36626 'btver2' 36627 AMD Family 16h CPU. 36628 36629 Here is an example: 36630 if (__builtin_cpu_is ("corei7")) 36631 { 36632 do_corei7 (); // Core i7 specific implementation. 36633 } 36634 else 36635 { 36636 do_generic (); // Generic implementation. 36637 } 36638 36639 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE) 36640 This function returns a positive integer if the run-time CPU 36641 supports FEATURE and returns '0' otherwise. The following features 36642 can be detected: 36643 36644 'cmov' 36645 CMOV instruction. 36646 'mmx' 36647 MMX instructions. 36648 'popcnt' 36649 POPCNT instruction. 36650 'sse' 36651 SSE instructions. 36652 'sse2' 36653 SSE2 instructions. 36654 'sse3' 36655 SSE3 instructions. 36656 'ssse3' 36657 SSSE3 instructions. 36658 'sse4.1' 36659 SSE4.1 instructions. 36660 'sse4.2' 36661 SSE4.2 instructions. 36662 'avx' 36663 AVX instructions. 36664 'avx2' 36665 AVX2 instructions. 36666 36667 Here is an example: 36668 if (__builtin_cpu_supports ("popcnt")) 36669 { 36670 asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc"); 36671 } 36672 else 36673 { 36674 count = generic_countbits (n); //generic implementation. 36675 } 36676 36677 The following built-in functions are made available by '-mmmx'. All of 36678 them generate the machine instruction that is part of the name. 36679 36680 v8qi __builtin_ia32_paddb (v8qi, v8qi) 36681 v4hi __builtin_ia32_paddw (v4hi, v4hi) 36682 v2si __builtin_ia32_paddd (v2si, v2si) 36683 v8qi __builtin_ia32_psubb (v8qi, v8qi) 36684 v4hi __builtin_ia32_psubw (v4hi, v4hi) 36685 v2si __builtin_ia32_psubd (v2si, v2si) 36686 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 36687 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 36688 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 36689 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 36690 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 36691 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 36692 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 36693 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 36694 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 36695 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 36696 di __builtin_ia32_pand (di, di) 36697 di __builtin_ia32_pandn (di,di) 36698 di __builtin_ia32_por (di, di) 36699 di __builtin_ia32_pxor (di, di) 36700 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 36701 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 36702 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 36703 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 36704 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 36705 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 36706 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 36707 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 36708 v2si __builtin_ia32_punpckhdq (v2si, v2si) 36709 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 36710 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 36711 v2si __builtin_ia32_punpckldq (v2si, v2si) 36712 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 36713 v4hi __builtin_ia32_packssdw (v2si, v2si) 36714 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 36715 36716 v4hi __builtin_ia32_psllw (v4hi, v4hi) 36717 v2si __builtin_ia32_pslld (v2si, v2si) 36718 v1di __builtin_ia32_psllq (v1di, v1di) 36719 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 36720 v2si __builtin_ia32_psrld (v2si, v2si) 36721 v1di __builtin_ia32_psrlq (v1di, v1di) 36722 v4hi __builtin_ia32_psraw (v4hi, v4hi) 36723 v2si __builtin_ia32_psrad (v2si, v2si) 36724 v4hi __builtin_ia32_psllwi (v4hi, int) 36725 v2si __builtin_ia32_pslldi (v2si, int) 36726 v1di __builtin_ia32_psllqi (v1di, int) 36727 v4hi __builtin_ia32_psrlwi (v4hi, int) 36728 v2si __builtin_ia32_psrldi (v2si, int) 36729 v1di __builtin_ia32_psrlqi (v1di, int) 36730 v4hi __builtin_ia32_psrawi (v4hi, int) 36731 v2si __builtin_ia32_psradi (v2si, int) 36732 36733 36734 The following built-in functions are made available either with 36735 '-msse', or with a combination of '-m3dnow' and '-march=athlon'. All of 36736 them generate the machine instruction that is part of the name. 36737 36738 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 36739 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 36740 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 36741 v1di __builtin_ia32_psadbw (v8qi, v8qi) 36742 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 36743 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 36744 v8qi __builtin_ia32_pminub (v8qi, v8qi) 36745 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 36746 int __builtin_ia32_pextrw (v4hi, int) 36747 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 36748 int __builtin_ia32_pmovmskb (v8qi) 36749 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 36750 void __builtin_ia32_movntq (di *, di) 36751 void __builtin_ia32_sfence (void) 36752 36753 The following built-in functions are available when '-msse' is used. 36754 All of them generate the machine instruction that is part of the name. 36755 36756 int __builtin_ia32_comieq (v4sf, v4sf) 36757 int __builtin_ia32_comineq (v4sf, v4sf) 36758 int __builtin_ia32_comilt (v4sf, v4sf) 36759 int __builtin_ia32_comile (v4sf, v4sf) 36760 int __builtin_ia32_comigt (v4sf, v4sf) 36761 int __builtin_ia32_comige (v4sf, v4sf) 36762 int __builtin_ia32_ucomieq (v4sf, v4sf) 36763 int __builtin_ia32_ucomineq (v4sf, v4sf) 36764 int __builtin_ia32_ucomilt (v4sf, v4sf) 36765 int __builtin_ia32_ucomile (v4sf, v4sf) 36766 int __builtin_ia32_ucomigt (v4sf, v4sf) 36767 int __builtin_ia32_ucomige (v4sf, v4sf) 36768 v4sf __builtin_ia32_addps (v4sf, v4sf) 36769 v4sf __builtin_ia32_subps (v4sf, v4sf) 36770 v4sf __builtin_ia32_mulps (v4sf, v4sf) 36771 v4sf __builtin_ia32_divps (v4sf, v4sf) 36772 v4sf __builtin_ia32_addss (v4sf, v4sf) 36773 v4sf __builtin_ia32_subss (v4sf, v4sf) 36774 v4sf __builtin_ia32_mulss (v4sf, v4sf) 36775 v4sf __builtin_ia32_divss (v4sf, v4sf) 36776 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 36777 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 36778 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 36779 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 36780 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 36781 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 36782 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 36783 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 36784 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 36785 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 36786 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 36787 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 36788 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 36789 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 36790 v4si __builtin_ia32_cmpless (v4sf, v4sf) 36791 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 36792 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 36793 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 36794 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 36795 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 36796 v4sf __builtin_ia32_maxps (v4sf, v4sf) 36797 v4sf __builtin_ia32_maxss (v4sf, v4sf) 36798 v4sf __builtin_ia32_minps (v4sf, v4sf) 36799 v4sf __builtin_ia32_minss (v4sf, v4sf) 36800 v4sf __builtin_ia32_andps (v4sf, v4sf) 36801 v4sf __builtin_ia32_andnps (v4sf, v4sf) 36802 v4sf __builtin_ia32_orps (v4sf, v4sf) 36803 v4sf __builtin_ia32_xorps (v4sf, v4sf) 36804 v4sf __builtin_ia32_movss (v4sf, v4sf) 36805 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 36806 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 36807 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 36808 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 36809 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 36810 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 36811 v2si __builtin_ia32_cvtps2pi (v4sf) 36812 int __builtin_ia32_cvtss2si (v4sf) 36813 v2si __builtin_ia32_cvttps2pi (v4sf) 36814 int __builtin_ia32_cvttss2si (v4sf) 36815 v4sf __builtin_ia32_rcpps (v4sf) 36816 v4sf __builtin_ia32_rsqrtps (v4sf) 36817 v4sf __builtin_ia32_sqrtps (v4sf) 36818 v4sf __builtin_ia32_rcpss (v4sf) 36819 v4sf __builtin_ia32_rsqrtss (v4sf) 36820 v4sf __builtin_ia32_sqrtss (v4sf) 36821 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 36822 void __builtin_ia32_movntps (float *, v4sf) 36823 int __builtin_ia32_movmskps (v4sf) 36824 36825 The following built-in functions are available when '-msse' is used. 36826 36827 'v4sf __builtin_ia32_loadaps (float *)' 36828 Generates the 'movaps' machine instruction as a load from memory. 36829 'void __builtin_ia32_storeaps (float *, v4sf)' 36830 Generates the 'movaps' machine instruction as a store to memory. 36831 'v4sf __builtin_ia32_loadups (float *)' 36832 Generates the 'movups' machine instruction as a load from memory. 36833 'void __builtin_ia32_storeups (float *, v4sf)' 36834 Generates the 'movups' machine instruction as a store to memory. 36835 'v4sf __builtin_ia32_loadsss (float *)' 36836 Generates the 'movss' machine instruction as a load from memory. 36837 'void __builtin_ia32_storess (float *, v4sf)' 36838 Generates the 'movss' machine instruction as a store to memory. 36839 'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 36840 Generates the 'movhps' machine instruction as a load from memory. 36841 'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 36842 Generates the 'movlps' machine instruction as a load from memory 36843 'void __builtin_ia32_storehps (v2sf *, v4sf)' 36844 Generates the 'movhps' machine instruction as a store to memory. 36845 'void __builtin_ia32_storelps (v2sf *, v4sf)' 36846 Generates the 'movlps' machine instruction as a store to memory. 36847 36848 The following built-in functions are available when '-msse2' is used. 36849 All of them generate the machine instruction that is part of the name. 36850 36851 int __builtin_ia32_comisdeq (v2df, v2df) 36852 int __builtin_ia32_comisdlt (v2df, v2df) 36853 int __builtin_ia32_comisdle (v2df, v2df) 36854 int __builtin_ia32_comisdgt (v2df, v2df) 36855 int __builtin_ia32_comisdge (v2df, v2df) 36856 int __builtin_ia32_comisdneq (v2df, v2df) 36857 int __builtin_ia32_ucomisdeq (v2df, v2df) 36858 int __builtin_ia32_ucomisdlt (v2df, v2df) 36859 int __builtin_ia32_ucomisdle (v2df, v2df) 36860 int __builtin_ia32_ucomisdgt (v2df, v2df) 36861 int __builtin_ia32_ucomisdge (v2df, v2df) 36862 int __builtin_ia32_ucomisdneq (v2df, v2df) 36863 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 36864 v2df __builtin_ia32_cmpltpd (v2df, v2df) 36865 v2df __builtin_ia32_cmplepd (v2df, v2df) 36866 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 36867 v2df __builtin_ia32_cmpgepd (v2df, v2df) 36868 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 36869 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 36870 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 36871 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 36872 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 36873 v2df __builtin_ia32_cmpngepd (v2df, v2df) 36874 v2df __builtin_ia32_cmpordpd (v2df, v2df) 36875 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 36876 v2df __builtin_ia32_cmpltsd (v2df, v2df) 36877 v2df __builtin_ia32_cmplesd (v2df, v2df) 36878 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 36879 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 36880 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 36881 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 36882 v2df __builtin_ia32_cmpordsd (v2df, v2df) 36883 v2di __builtin_ia32_paddq (v2di, v2di) 36884 v2di __builtin_ia32_psubq (v2di, v2di) 36885 v2df __builtin_ia32_addpd (v2df, v2df) 36886 v2df __builtin_ia32_subpd (v2df, v2df) 36887 v2df __builtin_ia32_mulpd (v2df, v2df) 36888 v2df __builtin_ia32_divpd (v2df, v2df) 36889 v2df __builtin_ia32_addsd (v2df, v2df) 36890 v2df __builtin_ia32_subsd (v2df, v2df) 36891 v2df __builtin_ia32_mulsd (v2df, v2df) 36892 v2df __builtin_ia32_divsd (v2df, v2df) 36893 v2df __builtin_ia32_minpd (v2df, v2df) 36894 v2df __builtin_ia32_maxpd (v2df, v2df) 36895 v2df __builtin_ia32_minsd (v2df, v2df) 36896 v2df __builtin_ia32_maxsd (v2df, v2df) 36897 v2df __builtin_ia32_andpd (v2df, v2df) 36898 v2df __builtin_ia32_andnpd (v2df, v2df) 36899 v2df __builtin_ia32_orpd (v2df, v2df) 36900 v2df __builtin_ia32_xorpd (v2df, v2df) 36901 v2df __builtin_ia32_movsd (v2df, v2df) 36902 v2df __builtin_ia32_unpckhpd (v2df, v2df) 36903 v2df __builtin_ia32_unpcklpd (v2df, v2df) 36904 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 36905 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 36906 v4si __builtin_ia32_paddd128 (v4si, v4si) 36907 v2di __builtin_ia32_paddq128 (v2di, v2di) 36908 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 36909 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 36910 v4si __builtin_ia32_psubd128 (v4si, v4si) 36911 v2di __builtin_ia32_psubq128 (v2di, v2di) 36912 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 36913 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 36914 v2di __builtin_ia32_pand128 (v2di, v2di) 36915 v2di __builtin_ia32_pandn128 (v2di, v2di) 36916 v2di __builtin_ia32_por128 (v2di, v2di) 36917 v2di __builtin_ia32_pxor128 (v2di, v2di) 36918 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 36919 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 36920 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 36921 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 36922 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 36923 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 36924 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 36925 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 36926 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 36927 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 36928 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 36929 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 36930 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 36931 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 36932 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 36933 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 36934 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 36935 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 36936 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 36937 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 36938 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 36939 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 36940 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 36941 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 36942 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 36943 v2df __builtin_ia32_loadupd (double *) 36944 void __builtin_ia32_storeupd (double *, v2df) 36945 v2df __builtin_ia32_loadhpd (v2df, double const *) 36946 v2df __builtin_ia32_loadlpd (v2df, double const *) 36947 int __builtin_ia32_movmskpd (v2df) 36948 int __builtin_ia32_pmovmskb128 (v16qi) 36949 void __builtin_ia32_movnti (int *, int) 36950 void __builtin_ia32_movnti64 (long long int *, long long int) 36951 void __builtin_ia32_movntpd (double *, v2df) 36952 void __builtin_ia32_movntdq (v2df *, v2df) 36953 v4si __builtin_ia32_pshufd (v4si, int) 36954 v8hi __builtin_ia32_pshuflw (v8hi, int) 36955 v8hi __builtin_ia32_pshufhw (v8hi, int) 36956 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 36957 v2df __builtin_ia32_sqrtpd (v2df) 36958 v2df __builtin_ia32_sqrtsd (v2df) 36959 v2df __builtin_ia32_shufpd (v2df, v2df, int) 36960 v2df __builtin_ia32_cvtdq2pd (v4si) 36961 v4sf __builtin_ia32_cvtdq2ps (v4si) 36962 v4si __builtin_ia32_cvtpd2dq (v2df) 36963 v2si __builtin_ia32_cvtpd2pi (v2df) 36964 v4sf __builtin_ia32_cvtpd2ps (v2df) 36965 v4si __builtin_ia32_cvttpd2dq (v2df) 36966 v2si __builtin_ia32_cvttpd2pi (v2df) 36967 v2df __builtin_ia32_cvtpi2pd (v2si) 36968 int __builtin_ia32_cvtsd2si (v2df) 36969 int __builtin_ia32_cvttsd2si (v2df) 36970 long long __builtin_ia32_cvtsd2si64 (v2df) 36971 long long __builtin_ia32_cvttsd2si64 (v2df) 36972 v4si __builtin_ia32_cvtps2dq (v4sf) 36973 v2df __builtin_ia32_cvtps2pd (v4sf) 36974 v4si __builtin_ia32_cvttps2dq (v4sf) 36975 v2df __builtin_ia32_cvtsi2sd (v2df, int) 36976 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 36977 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 36978 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 36979 void __builtin_ia32_clflush (const void *) 36980 void __builtin_ia32_lfence (void) 36981 void __builtin_ia32_mfence (void) 36982 v16qi __builtin_ia32_loaddqu (const char *) 36983 void __builtin_ia32_storedqu (char *, v16qi) 36984 v1di __builtin_ia32_pmuludq (v2si, v2si) 36985 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 36986 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 36987 v4si __builtin_ia32_pslld128 (v4si, v4si) 36988 v2di __builtin_ia32_psllq128 (v2di, v2di) 36989 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 36990 v4si __builtin_ia32_psrld128 (v4si, v4si) 36991 v2di __builtin_ia32_psrlq128 (v2di, v2di) 36992 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 36993 v4si __builtin_ia32_psrad128 (v4si, v4si) 36994 v2di __builtin_ia32_pslldqi128 (v2di, int) 36995 v8hi __builtin_ia32_psllwi128 (v8hi, int) 36996 v4si __builtin_ia32_pslldi128 (v4si, int) 36997 v2di __builtin_ia32_psllqi128 (v2di, int) 36998 v2di __builtin_ia32_psrldqi128 (v2di, int) 36999 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 37000 v4si __builtin_ia32_psrldi128 (v4si, int) 37001 v2di __builtin_ia32_psrlqi128 (v2di, int) 37002 v8hi __builtin_ia32_psrawi128 (v8hi, int) 37003 v4si __builtin_ia32_psradi128 (v4si, int) 37004 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 37005 v2di __builtin_ia32_movq128 (v2di) 37006 37007 The following built-in functions are available when '-msse3' is used. 37008 All of them generate the machine instruction that is part of the name. 37009 37010 v2df __builtin_ia32_addsubpd (v2df, v2df) 37011 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 37012 v2df __builtin_ia32_haddpd (v2df, v2df) 37013 v4sf __builtin_ia32_haddps (v4sf, v4sf) 37014 v2df __builtin_ia32_hsubpd (v2df, v2df) 37015 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 37016 v16qi __builtin_ia32_lddqu (char const *) 37017 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 37018 v2df __builtin_ia32_movddup (v2df) 37019 v4sf __builtin_ia32_movshdup (v4sf) 37020 v4sf __builtin_ia32_movsldup (v4sf) 37021 void __builtin_ia32_mwait (unsigned int, unsigned int) 37022 37023 The following built-in functions are available when '-msse3' is used. 37024 37025 'v2df __builtin_ia32_loadddup (double const *)' 37026 Generates the 'movddup' machine instruction as a load from memory. 37027 37028 The following built-in functions are available when '-mssse3' is used. 37029 All of them generate the machine instruction that is part of the name 37030 with MMX registers. 37031 37032 v2si __builtin_ia32_phaddd (v2si, v2si) 37033 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 37034 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 37035 v2si __builtin_ia32_phsubd (v2si, v2si) 37036 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 37037 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 37038 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 37039 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 37040 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 37041 v8qi __builtin_ia32_psignb (v8qi, v8qi) 37042 v2si __builtin_ia32_psignd (v2si, v2si) 37043 v4hi __builtin_ia32_psignw (v4hi, v4hi) 37044 v1di __builtin_ia32_palignr (v1di, v1di, int) 37045 v8qi __builtin_ia32_pabsb (v8qi) 37046 v2si __builtin_ia32_pabsd (v2si) 37047 v4hi __builtin_ia32_pabsw (v4hi) 37048 37049 The following built-in functions are available when '-mssse3' is used. 37050 All of them generate the machine instruction that is part of the name 37051 with SSE registers. 37052 37053 v4si __builtin_ia32_phaddd128 (v4si, v4si) 37054 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 37055 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 37056 v4si __builtin_ia32_phsubd128 (v4si, v4si) 37057 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 37058 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 37059 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 37060 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 37061 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 37062 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 37063 v4si __builtin_ia32_psignd128 (v4si, v4si) 37064 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 37065 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 37066 v16qi __builtin_ia32_pabsb128 (v16qi) 37067 v4si __builtin_ia32_pabsd128 (v4si) 37068 v8hi __builtin_ia32_pabsw128 (v8hi) 37069 37070 The following built-in functions are available when '-msse4.1' is used. 37071 All of them generate the machine instruction that is part of the name. 37072 37073 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 37074 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 37075 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 37076 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 37077 v2df __builtin_ia32_dppd (v2df, v2df, const int) 37078 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 37079 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 37080 v2di __builtin_ia32_movntdqa (v2di *); 37081 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 37082 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 37083 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 37084 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 37085 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 37086 v8hi __builtin_ia32_phminposuw128 (v8hi) 37087 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 37088 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 37089 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 37090 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 37091 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 37092 v4si __builtin_ia32_pminsd128 (v4si, v4si) 37093 v4si __builtin_ia32_pminud128 (v4si, v4si) 37094 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 37095 v4si __builtin_ia32_pmovsxbd128 (v16qi) 37096 v2di __builtin_ia32_pmovsxbq128 (v16qi) 37097 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 37098 v2di __builtin_ia32_pmovsxdq128 (v4si) 37099 v4si __builtin_ia32_pmovsxwd128 (v8hi) 37100 v2di __builtin_ia32_pmovsxwq128 (v8hi) 37101 v4si __builtin_ia32_pmovzxbd128 (v16qi) 37102 v2di __builtin_ia32_pmovzxbq128 (v16qi) 37103 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 37104 v2di __builtin_ia32_pmovzxdq128 (v4si) 37105 v4si __builtin_ia32_pmovzxwd128 (v8hi) 37106 v2di __builtin_ia32_pmovzxwq128 (v8hi) 37107 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 37108 v4si __builtin_ia32_pmulld128 (v4si, v4si) 37109 int __builtin_ia32_ptestc128 (v2di, v2di) 37110 int __builtin_ia32_ptestnzc128 (v2di, v2di) 37111 int __builtin_ia32_ptestz128 (v2di, v2di) 37112 v2df __builtin_ia32_roundpd (v2df, const int) 37113 v4sf __builtin_ia32_roundps (v4sf, const int) 37114 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 37115 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 37116 37117 The following built-in functions are available when '-msse4.1' is used. 37118 37119 'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 37120 Generates the 'insertps' machine instruction. 37121 'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 37122 Generates the 'pextrb' machine instruction. 37123 'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 37124 Generates the 'pinsrb' machine instruction. 37125 'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 37126 Generates the 'pinsrd' machine instruction. 37127 'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 37128 Generates the 'pinsrq' machine instruction in 64bit mode. 37129 37130 The following built-in functions are changed to generate new SSE4.1 37131 instructions when '-msse4.1' is used. 37132 37133 'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 37134 Generates the 'extractps' machine instruction. 37135 'int __builtin_ia32_vec_ext_v4si (v4si, const int)' 37136 Generates the 'pextrd' machine instruction. 37137 'long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 37138 Generates the 'pextrq' machine instruction in 64bit mode. 37139 37140 The following built-in functions are available when '-msse4.2' is used. 37141 All of them generate the machine instruction that is part of the name. 37142 37143 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 37144 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 37145 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 37146 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 37147 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 37148 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 37149 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 37150 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 37151 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 37152 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 37153 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 37154 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 37155 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 37156 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 37157 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 37158 37159 The following built-in functions are available when '-msse4.2' is used. 37160 37161 'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 37162 Generates the 'crc32b' machine instruction. 37163 'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 37164 Generates the 'crc32w' machine instruction. 37165 'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 37166 Generates the 'crc32l' machine instruction. 37167 'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 37168 Generates the 'crc32q' machine instruction. 37169 37170 The following built-in functions are changed to generate new SSE4.2 37171 instructions when '-msse4.2' is used. 37172 37173 'int __builtin_popcount (unsigned int)' 37174 Generates the 'popcntl' machine instruction. 37175 'int __builtin_popcountl (unsigned long)' 37176 Generates the 'popcntl' or 'popcntq' machine instruction, depending 37177 on the size of 'unsigned long'. 37178 'int __builtin_popcountll (unsigned long long)' 37179 Generates the 'popcntq' machine instruction. 37180 37181 The following built-in functions are available when '-mavx' is used. 37182 All of them generate the machine instruction that is part of the name. 37183 37184 v4df __builtin_ia32_addpd256 (v4df,v4df) 37185 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 37186 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 37187 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 37188 v4df __builtin_ia32_andnpd256 (v4df,v4df) 37189 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 37190 v4df __builtin_ia32_andpd256 (v4df,v4df) 37191 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 37192 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 37193 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 37194 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 37195 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 37196 v2df __builtin_ia32_cmppd (v2df,v2df,int) 37197 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 37198 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 37199 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 37200 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 37201 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 37202 v4df __builtin_ia32_cvtdq2pd256 (v4si) 37203 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 37204 v4si __builtin_ia32_cvtpd2dq256 (v4df) 37205 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 37206 v8si __builtin_ia32_cvtps2dq256 (v8sf) 37207 v4df __builtin_ia32_cvtps2pd256 (v4sf) 37208 v4si __builtin_ia32_cvttpd2dq256 (v4df) 37209 v8si __builtin_ia32_cvttps2dq256 (v8sf) 37210 v4df __builtin_ia32_divpd256 (v4df,v4df) 37211 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 37212 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 37213 v4df __builtin_ia32_haddpd256 (v4df,v4df) 37214 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 37215 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 37216 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 37217 v32qi __builtin_ia32_lddqu256 (pcchar) 37218 v32qi __builtin_ia32_loaddqu256 (pcchar) 37219 v4df __builtin_ia32_loadupd256 (pcdouble) 37220 v8sf __builtin_ia32_loadups256 (pcfloat) 37221 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 37222 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 37223 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 37224 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 37225 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 37226 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 37227 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 37228 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 37229 v4df __builtin_ia32_maxpd256 (v4df,v4df) 37230 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 37231 v4df __builtin_ia32_minpd256 (v4df,v4df) 37232 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 37233 v4df __builtin_ia32_movddup256 (v4df) 37234 int __builtin_ia32_movmskpd256 (v4df) 37235 int __builtin_ia32_movmskps256 (v8sf) 37236 v8sf __builtin_ia32_movshdup256 (v8sf) 37237 v8sf __builtin_ia32_movsldup256 (v8sf) 37238 v4df __builtin_ia32_mulpd256 (v4df,v4df) 37239 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 37240 v4df __builtin_ia32_orpd256 (v4df,v4df) 37241 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 37242 v2df __builtin_ia32_pd_pd256 (v4df) 37243 v4df __builtin_ia32_pd256_pd (v2df) 37244 v4sf __builtin_ia32_ps_ps256 (v8sf) 37245 v8sf __builtin_ia32_ps256_ps (v4sf) 37246 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 37247 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 37248 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 37249 v8sf __builtin_ia32_rcpps256 (v8sf) 37250 v4df __builtin_ia32_roundpd256 (v4df,int) 37251 v8sf __builtin_ia32_roundps256 (v8sf,int) 37252 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 37253 v8sf __builtin_ia32_rsqrtps256 (v8sf) 37254 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 37255 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 37256 v4si __builtin_ia32_si_si256 (v8si) 37257 v8si __builtin_ia32_si256_si (v4si) 37258 v4df __builtin_ia32_sqrtpd256 (v4df) 37259 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 37260 v8sf __builtin_ia32_sqrtps256 (v8sf) 37261 void __builtin_ia32_storedqu256 (pchar,v32qi) 37262 void __builtin_ia32_storeupd256 (pdouble,v4df) 37263 void __builtin_ia32_storeups256 (pfloat,v8sf) 37264 v4df __builtin_ia32_subpd256 (v4df,v4df) 37265 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 37266 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 37267 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 37268 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 37269 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 37270 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 37271 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 37272 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 37273 v4sf __builtin_ia32_vbroadcastss (pcfloat) 37274 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 37275 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 37276 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 37277 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 37278 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 37279 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 37280 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 37281 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 37282 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 37283 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 37284 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 37285 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 37286 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 37287 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 37288 v2df __builtin_ia32_vpermilpd (v2df,int) 37289 v4df __builtin_ia32_vpermilpd256 (v4df,int) 37290 v4sf __builtin_ia32_vpermilps (v4sf,int) 37291 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 37292 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 37293 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 37294 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 37295 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 37296 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 37297 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 37298 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 37299 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 37300 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 37301 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 37302 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 37303 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 37304 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 37305 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 37306 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 37307 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 37308 void __builtin_ia32_vzeroall (void) 37309 void __builtin_ia32_vzeroupper (void) 37310 v4df __builtin_ia32_xorpd256 (v4df,v4df) 37311 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 37312 37313 The following built-in functions are available when '-mavx2' is used. 37314 All of them generate the machine instruction that is part of the name. 37315 37316 v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int) 37317 v32qi __builtin_ia32_pabsb256 (v32qi) 37318 v16hi __builtin_ia32_pabsw256 (v16hi) 37319 v8si __builtin_ia32_pabsd256 (v8si) 37320 v16hi __builtin_ia32_packssdw256 (v8si,v8si) 37321 v32qi __builtin_ia32_packsswb256 (v16hi,v16hi) 37322 v16hi __builtin_ia32_packusdw256 (v8si,v8si) 37323 v32qi __builtin_ia32_packuswb256 (v16hi,v16hi) 37324 v32qi __builtin_ia32_paddb256 (v32qi,v32qi) 37325 v16hi __builtin_ia32_paddw256 (v16hi,v16hi) 37326 v8si __builtin_ia32_paddd256 (v8si,v8si) 37327 v4di __builtin_ia32_paddq256 (v4di,v4di) 37328 v32qi __builtin_ia32_paddsb256 (v32qi,v32qi) 37329 v16hi __builtin_ia32_paddsw256 (v16hi,v16hi) 37330 v32qi __builtin_ia32_paddusb256 (v32qi,v32qi) 37331 v16hi __builtin_ia32_paddusw256 (v16hi,v16hi) 37332 v4di __builtin_ia32_palignr256 (v4di,v4di,int) 37333 v4di __builtin_ia32_andsi256 (v4di,v4di) 37334 v4di __builtin_ia32_andnotsi256 (v4di,v4di) 37335 v32qi __builtin_ia32_pavgb256 (v32qi,v32qi) 37336 v16hi __builtin_ia32_pavgw256 (v16hi,v16hi) 37337 v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi) 37338 v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int) 37339 v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi) 37340 v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi) 37341 v8si __builtin_ia32_pcmpeqd256 (c8si,v8si) 37342 v4di __builtin_ia32_pcmpeqq256 (v4di,v4di) 37343 v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi) 37344 v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi) 37345 v8si __builtin_ia32_pcmpgtd256 (v8si,v8si) 37346 v4di __builtin_ia32_pcmpgtq256 (v4di,v4di) 37347 v16hi __builtin_ia32_phaddw256 (v16hi,v16hi) 37348 v8si __builtin_ia32_phaddd256 (v8si,v8si) 37349 v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi) 37350 v16hi __builtin_ia32_phsubw256 (v16hi,v16hi) 37351 v8si __builtin_ia32_phsubd256 (v8si,v8si) 37352 v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi) 37353 v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi) 37354 v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi) 37355 v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi) 37356 v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi) 37357 v8si __builtin_ia32_pmaxsd256 (v8si,v8si) 37358 v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi) 37359 v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi) 37360 v8si __builtin_ia32_pmaxud256 (v8si,v8si) 37361 v32qi __builtin_ia32_pminsb256 (v32qi,v32qi) 37362 v16hi __builtin_ia32_pminsw256 (v16hi,v16hi) 37363 v8si __builtin_ia32_pminsd256 (v8si,v8si) 37364 v32qi __builtin_ia32_pminub256 (v32qi,v32qi) 37365 v16hi __builtin_ia32_pminuw256 (v16hi,v16hi) 37366 v8si __builtin_ia32_pminud256 (v8si,v8si) 37367 int __builtin_ia32_pmovmskb256 (v32qi) 37368 v16hi __builtin_ia32_pmovsxbw256 (v16qi) 37369 v8si __builtin_ia32_pmovsxbd256 (v16qi) 37370 v4di __builtin_ia32_pmovsxbq256 (v16qi) 37371 v8si __builtin_ia32_pmovsxwd256 (v8hi) 37372 v4di __builtin_ia32_pmovsxwq256 (v8hi) 37373 v4di __builtin_ia32_pmovsxdq256 (v4si) 37374 v16hi __builtin_ia32_pmovzxbw256 (v16qi) 37375 v8si __builtin_ia32_pmovzxbd256 (v16qi) 37376 v4di __builtin_ia32_pmovzxbq256 (v16qi) 37377 v8si __builtin_ia32_pmovzxwd256 (v8hi) 37378 v4di __builtin_ia32_pmovzxwq256 (v8hi) 37379 v4di __builtin_ia32_pmovzxdq256 (v4si) 37380 v4di __builtin_ia32_pmuldq256 (v8si,v8si) 37381 v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi) 37382 v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi) 37383 v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi) 37384 v16hi __builtin_ia32_pmullw256 (v16hi,v16hi) 37385 v8si __builtin_ia32_pmulld256 (v8si,v8si) 37386 v4di __builtin_ia32_pmuludq256 (v8si,v8si) 37387 v4di __builtin_ia32_por256 (v4di,v4di) 37388 v16hi __builtin_ia32_psadbw256 (v32qi,v32qi) 37389 v32qi __builtin_ia32_pshufb256 (v32qi,v32qi) 37390 v8si __builtin_ia32_pshufd256 (v8si,int) 37391 v16hi __builtin_ia32_pshufhw256 (v16hi,int) 37392 v16hi __builtin_ia32_pshuflw256 (v16hi,int) 37393 v32qi __builtin_ia32_psignb256 (v32qi,v32qi) 37394 v16hi __builtin_ia32_psignw256 (v16hi,v16hi) 37395 v8si __builtin_ia32_psignd256 (v8si,v8si) 37396 v4di __builtin_ia32_pslldqi256 (v4di,int) 37397 v16hi __builtin_ia32_psllwi256 (16hi,int) 37398 v16hi __builtin_ia32_psllw256(v16hi,v8hi) 37399 v8si __builtin_ia32_pslldi256 (v8si,int) 37400 v8si __builtin_ia32_pslld256(v8si,v4si) 37401 v4di __builtin_ia32_psllqi256 (v4di,int) 37402 v4di __builtin_ia32_psllq256(v4di,v2di) 37403 v16hi __builtin_ia32_psrawi256 (v16hi,int) 37404 v16hi __builtin_ia32_psraw256 (v16hi,v8hi) 37405 v8si __builtin_ia32_psradi256 (v8si,int) 37406 v8si __builtin_ia32_psrad256 (v8si,v4si) 37407 v4di __builtin_ia32_psrldqi256 (v4di, int) 37408 v16hi __builtin_ia32_psrlwi256 (v16hi,int) 37409 v16hi __builtin_ia32_psrlw256 (v16hi,v8hi) 37410 v8si __builtin_ia32_psrldi256 (v8si,int) 37411 v8si __builtin_ia32_psrld256 (v8si,v4si) 37412 v4di __builtin_ia32_psrlqi256 (v4di,int) 37413 v4di __builtin_ia32_psrlq256(v4di,v2di) 37414 v32qi __builtin_ia32_psubb256 (v32qi,v32qi) 37415 v32hi __builtin_ia32_psubw256 (v16hi,v16hi) 37416 v8si __builtin_ia32_psubd256 (v8si,v8si) 37417 v4di __builtin_ia32_psubq256 (v4di,v4di) 37418 v32qi __builtin_ia32_psubsb256 (v32qi,v32qi) 37419 v16hi __builtin_ia32_psubsw256 (v16hi,v16hi) 37420 v32qi __builtin_ia32_psubusb256 (v32qi,v32qi) 37421 v16hi __builtin_ia32_psubusw256 (v16hi,v16hi) 37422 v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi) 37423 v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi) 37424 v8si __builtin_ia32_punpckhdq256 (v8si,v8si) 37425 v4di __builtin_ia32_punpckhqdq256 (v4di,v4di) 37426 v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi) 37427 v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi) 37428 v8si __builtin_ia32_punpckldq256 (v8si,v8si) 37429 v4di __builtin_ia32_punpcklqdq256 (v4di,v4di) 37430 v4di __builtin_ia32_pxor256 (v4di,v4di) 37431 v4di __builtin_ia32_movntdqa256 (pv4di) 37432 v4sf __builtin_ia32_vbroadcastss_ps (v4sf) 37433 v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf) 37434 v4df __builtin_ia32_vbroadcastsd_pd256 (v2df) 37435 v4di __builtin_ia32_vbroadcastsi256 (v2di) 37436 v4si __builtin_ia32_pblendd128 (v4si,v4si) 37437 v8si __builtin_ia32_pblendd256 (v8si,v8si) 37438 v32qi __builtin_ia32_pbroadcastb256 (v16qi) 37439 v16hi __builtin_ia32_pbroadcastw256 (v8hi) 37440 v8si __builtin_ia32_pbroadcastd256 (v4si) 37441 v4di __builtin_ia32_pbroadcastq256 (v2di) 37442 v16qi __builtin_ia32_pbroadcastb128 (v16qi) 37443 v8hi __builtin_ia32_pbroadcastw128 (v8hi) 37444 v4si __builtin_ia32_pbroadcastd128 (v4si) 37445 v2di __builtin_ia32_pbroadcastq128 (v2di) 37446 v8si __builtin_ia32_permvarsi256 (v8si,v8si) 37447 v4df __builtin_ia32_permdf256 (v4df,int) 37448 v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf) 37449 v4di __builtin_ia32_permdi256 (v4di,int) 37450 v4di __builtin_ia32_permti256 (v4di,v4di,int) 37451 v4di __builtin_ia32_extract128i256 (v4di,int) 37452 v4di __builtin_ia32_insert128i256 (v4di,v2di,int) 37453 v8si __builtin_ia32_maskloadd256 (pcv8si,v8si) 37454 v4di __builtin_ia32_maskloadq256 (pcv4di,v4di) 37455 v4si __builtin_ia32_maskloadd (pcv4si,v4si) 37456 v2di __builtin_ia32_maskloadq (pcv2di,v2di) 37457 void __builtin_ia32_maskstored256 (pv8si,v8si,v8si) 37458 void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di) 37459 void __builtin_ia32_maskstored (pv4si,v4si,v4si) 37460 void __builtin_ia32_maskstoreq (pv2di,v2di,v2di) 37461 v8si __builtin_ia32_psllv8si (v8si,v8si) 37462 v4si __builtin_ia32_psllv4si (v4si,v4si) 37463 v4di __builtin_ia32_psllv4di (v4di,v4di) 37464 v2di __builtin_ia32_psllv2di (v2di,v2di) 37465 v8si __builtin_ia32_psrav8si (v8si,v8si) 37466 v4si __builtin_ia32_psrav4si (v4si,v4si) 37467 v8si __builtin_ia32_psrlv8si (v8si,v8si) 37468 v4si __builtin_ia32_psrlv4si (v4si,v4si) 37469 v4di __builtin_ia32_psrlv4di (v4di,v4di) 37470 v2di __builtin_ia32_psrlv2di (v2di,v2di) 37471 v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int) 37472 v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int) 37473 v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int) 37474 v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int) 37475 v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int) 37476 v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int) 37477 v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int) 37478 v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int) 37479 v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int) 37480 v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int) 37481 v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int) 37482 v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int) 37483 v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int) 37484 v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int) 37485 v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int) 37486 v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int) 37487 37488 The following built-in functions are available when '-maes' is used. 37489 All of them generate the machine instruction that is part of the name. 37490 37491 v2di __builtin_ia32_aesenc128 (v2di, v2di) 37492 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 37493 v2di __builtin_ia32_aesdec128 (v2di, v2di) 37494 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 37495 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 37496 v2di __builtin_ia32_aesimc128 (v2di) 37497 37498 The following built-in function is available when '-mpclmul' is used. 37499 37500 'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 37501 Generates the 'pclmulqdq' machine instruction. 37502 37503 The following built-in function is available when '-mfsgsbase' is used. 37504 All of them generate the machine instruction that is part of the name. 37505 37506 unsigned int __builtin_ia32_rdfsbase32 (void) 37507 unsigned long long __builtin_ia32_rdfsbase64 (void) 37508 unsigned int __builtin_ia32_rdgsbase32 (void) 37509 unsigned long long __builtin_ia32_rdgsbase64 (void) 37510 void _writefsbase_u32 (unsigned int) 37511 void _writefsbase_u64 (unsigned long long) 37512 void _writegsbase_u32 (unsigned int) 37513 void _writegsbase_u64 (unsigned long long) 37514 37515 The following built-in function is available when '-mrdrnd' is used. 37516 All of them generate the machine instruction that is part of the name. 37517 37518 unsigned int __builtin_ia32_rdrand16_step (unsigned short *) 37519 unsigned int __builtin_ia32_rdrand32_step (unsigned int *) 37520 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) 37521 37522 The following built-in functions are available when '-msse4a' is used. 37523 All of them generate the machine instruction that is part of the name. 37524 37525 void __builtin_ia32_movntsd (double *, v2df) 37526 void __builtin_ia32_movntss (float *, v4sf) 37527 v2di __builtin_ia32_extrq (v2di, v16qi) 37528 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 37529 v2di __builtin_ia32_insertq (v2di, v2di) 37530 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 37531 37532 The following built-in functions are available when '-mxop' is used. 37533 v2df __builtin_ia32_vfrczpd (v2df) 37534 v4sf __builtin_ia32_vfrczps (v4sf) 37535 v2df __builtin_ia32_vfrczsd (v2df, v2df) 37536 v4sf __builtin_ia32_vfrczss (v4sf, v4sf) 37537 v4df __builtin_ia32_vfrczpd256 (v4df) 37538 v8sf __builtin_ia32_vfrczps256 (v8sf) 37539 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 37540 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 37541 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 37542 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 37543 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 37544 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 37545 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 37546 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 37547 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 37548 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 37549 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 37550 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 37551 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 37552 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 37553 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 37554 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 37555 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 37556 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 37557 v4si __builtin_ia32_vpcomequd (v4si, v4si) 37558 v2di __builtin_ia32_vpcomequq (v2di, v2di) 37559 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 37560 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 37561 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 37562 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 37563 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 37564 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 37565 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 37566 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 37567 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 37568 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 37569 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 37570 v4si __builtin_ia32_vpcomged (v4si, v4si) 37571 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 37572 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 37573 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 37574 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 37575 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 37576 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 37577 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 37578 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 37579 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 37580 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 37581 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 37582 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 37583 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 37584 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 37585 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 37586 v4si __builtin_ia32_vpcomled (v4si, v4si) 37587 v2di __builtin_ia32_vpcomleq (v2di, v2di) 37588 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 37589 v4si __builtin_ia32_vpcomleud (v4si, v4si) 37590 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 37591 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 37592 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 37593 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 37594 v4si __builtin_ia32_vpcomltd (v4si, v4si) 37595 v2di __builtin_ia32_vpcomltq (v2di, v2di) 37596 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 37597 v4si __builtin_ia32_vpcomltud (v4si, v4si) 37598 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 37599 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 37600 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 37601 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 37602 v4si __builtin_ia32_vpcomned (v4si, v4si) 37603 v2di __builtin_ia32_vpcomneq (v2di, v2di) 37604 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 37605 v4si __builtin_ia32_vpcomneud (v4si, v4si) 37606 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 37607 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 37608 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 37609 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 37610 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 37611 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 37612 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 37613 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 37614 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 37615 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 37616 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 37617 v4si __builtin_ia32_vphaddbd (v16qi) 37618 v2di __builtin_ia32_vphaddbq (v16qi) 37619 v8hi __builtin_ia32_vphaddbw (v16qi) 37620 v2di __builtin_ia32_vphadddq (v4si) 37621 v4si __builtin_ia32_vphaddubd (v16qi) 37622 v2di __builtin_ia32_vphaddubq (v16qi) 37623 v8hi __builtin_ia32_vphaddubw (v16qi) 37624 v2di __builtin_ia32_vphaddudq (v4si) 37625 v4si __builtin_ia32_vphadduwd (v8hi) 37626 v2di __builtin_ia32_vphadduwq (v8hi) 37627 v4si __builtin_ia32_vphaddwd (v8hi) 37628 v2di __builtin_ia32_vphaddwq (v8hi) 37629 v8hi __builtin_ia32_vphsubbw (v16qi) 37630 v2di __builtin_ia32_vphsubdq (v4si) 37631 v4si __builtin_ia32_vphsubwd (v8hi) 37632 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 37633 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 37634 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 37635 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 37636 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 37637 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 37638 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 37639 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 37640 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 37641 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 37642 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 37643 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 37644 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 37645 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 37646 v4si __builtin_ia32_vprotd (v4si, v4si) 37647 v2di __builtin_ia32_vprotq (v2di, v2di) 37648 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 37649 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 37650 v4si __builtin_ia32_vpshad (v4si, v4si) 37651 v2di __builtin_ia32_vpshaq (v2di, v2di) 37652 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 37653 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 37654 v4si __builtin_ia32_vpshld (v4si, v4si) 37655 v2di __builtin_ia32_vpshlq (v2di, v2di) 37656 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 37657 37658 The following built-in functions are available when '-mfma4' is used. 37659 All of them generate the machine instruction that is part of the name 37660 with MMX registers. 37661 37662 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 37663 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 37664 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 37665 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 37666 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 37667 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 37668 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 37669 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 37670 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 37671 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 37672 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 37673 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 37674 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 37675 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 37676 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 37677 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 37678 v2df __builtin_ia32_fmaddsubpd (v2df, v2df, v2df) 37679 v4sf __builtin_ia32_fmaddsubps (v4sf, v4sf, v4sf) 37680 v2df __builtin_ia32_fmsubaddpd (v2df, v2df, v2df) 37681 v4sf __builtin_ia32_fmsubaddps (v4sf, v4sf, v4sf) 37682 v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df) 37683 v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf) 37684 v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df) 37685 v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf) 37686 v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df) 37687 v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf) 37688 v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df) 37689 v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf) 37690 v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df) 37691 v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf) 37692 v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df) 37693 v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf) 37694 37695 37696 The following built-in functions are available when '-mlwp' is used. 37697 37698 void __builtin_ia32_llwpcb16 (void *); 37699 void __builtin_ia32_llwpcb32 (void *); 37700 void __builtin_ia32_llwpcb64 (void *); 37701 void * __builtin_ia32_llwpcb16 (void); 37702 void * __builtin_ia32_llwpcb32 (void); 37703 void * __builtin_ia32_llwpcb64 (void); 37704 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 37705 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 37706 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 37707 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 37708 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 37709 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 37710 37711 The following built-in functions are available when '-mbmi' is used. 37712 All of them generate the machine instruction that is part of the name. 37713 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); 37714 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); 37715 37716 The following built-in functions are available when '-mbmi2' is used. 37717 All of them generate the machine instruction that is part of the name. 37718 unsigned int _bzhi_u32 (unsigned int, unsigned int) 37719 unsigned int _pdep_u32 (unsigned int, unsigned int) 37720 unsigned int _pext_u32 (unsigned int, unsigned int) 37721 unsigned long long _bzhi_u64 (unsigned long long, unsigned long long) 37722 unsigned long long _pdep_u64 (unsigned long long, unsigned long long) 37723 unsigned long long _pext_u64 (unsigned long long, unsigned long long) 37724 37725 The following built-in functions are available when '-mlzcnt' is used. 37726 All of them generate the machine instruction that is part of the name. 37727 unsigned short __builtin_ia32_lzcnt_16(unsigned short); 37728 unsigned int __builtin_ia32_lzcnt_u32(unsigned int); 37729 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); 37730 37731 The following built-in functions are available when '-mtbm' is used. 37732 Both of them generate the immediate form of the bextr machine 37733 instruction. 37734 unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); 37735 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); 37736 37737 The following built-in functions are available when '-m3dnow' is used. 37738 All of them generate the machine instruction that is part of the name. 37739 37740 void __builtin_ia32_femms (void) 37741 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 37742 v2si __builtin_ia32_pf2id (v2sf) 37743 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 37744 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 37745 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 37746 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 37747 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 37748 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 37749 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 37750 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 37751 v2sf __builtin_ia32_pfrcp (v2sf) 37752 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 37753 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 37754 v2sf __builtin_ia32_pfrsqrt (v2sf) 37755 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 37756 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 37757 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 37758 v2sf __builtin_ia32_pi2fd (v2si) 37759 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 37760 37761 The following built-in functions are available when both '-m3dnow' and 37762 '-march=athlon' are used. All of them generate the machine instruction 37763 that is part of the name. 37764 37765 v2si __builtin_ia32_pf2iw (v2sf) 37766 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 37767 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 37768 v2sf __builtin_ia32_pi2fw (v2si) 37769 v2sf __builtin_ia32_pswapdsf (v2sf) 37770 v2si __builtin_ia32_pswapdsi (v2si) 37771 37772 The following built-in functions are available when '-mrtm' is used 37773 They are used for restricted transactional memory. These are the 37774 internal low level functions. Normally the functions in *note X86 37775 transactional memory intrinsics:: should be used instead. 37776 37777 int __builtin_ia32_xbegin () 37778 void __builtin_ia32_xend () 37779 void __builtin_ia32_xabort (status) 37780 int __builtin_ia32_xtest () 37781 37782 37783 File: gcc.info, Node: X86 transactional memory intrinsics, Next: MIPS DSP Built-in Functions, Prev: X86 Built-in Functions, Up: Target Builtins 37784 37785 6.56.8 X86 transaction memory intrinsics 37786 ---------------------------------------- 37787 37788 Hardware transactional memory intrinsics for i386. These allow to use 37789 memory transactions with RTM (Restricted Transactional Memory). For 37790 using HLE (Hardware Lock Elision) see *note x86 specific memory model 37791 extensions for transactional memory:: instead. This support is enabled 37792 with the '-mrtm' option. 37793 37794 A memory transaction commits all changes to memory in an atomic way, as 37795 visible to other threads. If the transaction fails it is rolled back 37796 and all side effects discarded. 37797 37798 Generally there is no guarantee that a memory transaction ever suceeds 37799 and suitable fallback code always needs to be supplied. 37800 37801 -- RTM Function: unsigned _xbegin () 37802 Start a RTM (Restricted Transactional Memory) transaction. Returns 37803 _XBEGIN_STARTED when the transaction started successfully (note 37804 this is not 0, so the constant has to be explicitely tested). When 37805 the transaction aborts all side effects are undone and an abort 37806 code is returned. There is no guarantee any transaction ever 37807 succeeds, so there always needs to be a valid tested fallback path. 37808 37809 #include <immintrin.h> 37810 37811 if ((status = _xbegin ()) == _XBEGIN_STARTED) { 37812 ... transaction code... 37813 _xend (); 37814 } else { 37815 ... non transactional fallback path... 37816 } 37817 37818 Valid abort status bits (when the value is not '_XBEGIN_STARTED') are: 37819 37820 '_XABORT_EXPLICIT' 37821 Transaction explicitely aborted with '_xabort'. The parameter 37822 passed to '_xabort' is available with '_XABORT_CODE(status)' 37823 '_XABORT_RETRY' 37824 Transaction retry is possible. 37825 '_XABORT_CONFLICT' 37826 Transaction abort due to a memory conflict with another thread 37827 '_XABORT_CAPACITY' 37828 Transaction abort due to the transaction using too much memory 37829 '_XABORT_DEBUG' 37830 Transaction abort due to a debug trap 37831 '_XABORT_NESTED' 37832 Transaction abort in a inner nested transaction 37833 37834 -- RTM Function: void _xend () 37835 Commit the current transaction. When no transaction is active this 37836 will fault. All memory side effects of the transactions will 37837 become visible to other threads in an atomic matter. 37838 37839 -- RTM Function: int _xtest () 37840 Return a value not zero when a transaction is currently active, 37841 otherwise 0. 37842 37843 -- RTM Function: void _xabort (status) 37844 Abort the current transaction. When no transaction is active this 37845 is a no-op. status must be a 8bit constant, that is included in 37846 the status code returned by '_xbegin' 37847 37848 37849 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 transactional memory intrinsics, Up: Target Builtins 37850 37851 6.56.9 MIPS DSP Built-in Functions 37852 ---------------------------------- 37853 37854 The MIPS DSP Application-Specific Extension (ASE) includes new 37855 instructions that are designed to improve the performance of DSP and 37856 media applications. It provides instructions that operate on packed 37857 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 37858 37859 GCC supports MIPS DSP operations using both the generic vector 37860 extensions (*note Vector Extensions::) and a collection of MIPS-specific 37861 built-in functions. Both kinds of support are enabled by the '-mdsp' 37862 command-line option. 37863 37864 Revision 2 of the ASE was introduced in the second half of 2006. This 37865 revision adds extra instructions to the original ASE, but is otherwise 37866 backwards-compatible with it. You can select revision 2 using the 37867 command-line option '-mdspr2'; this option implies '-mdsp'. 37868 37869 The SCOUNT and POS bits of the DSP control register are global. The 37870 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS 37871 bits. During optimization, the compiler does not delete these 37872 instructions and it does not delete calls to functions containing these 37873 instructions. 37874 37875 At present, GCC only provides support for operations on 32-bit vectors. 37876 The vector type associated with 8-bit integer data is usually called 37877 'v4i8', the vector type associated with Q7 is usually called 'v4q7', the 37878 vector type associated with 16-bit integer data is usually called 37879 'v2i16', and the vector type associated with Q15 is usually called 37880 'v2q15'. They can be defined in C as follows: 37881 37882 typedef signed char v4i8 __attribute__ ((vector_size(4))); 37883 typedef signed char v4q7 __attribute__ ((vector_size(4))); 37884 typedef short v2i16 __attribute__ ((vector_size(4))); 37885 typedef short v2q15 __attribute__ ((vector_size(4))); 37886 37887 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same 37888 way as aggregates. For example: 37889 37890 v4i8 a = {1, 2, 3, 4}; 37891 v4i8 b; 37892 b = (v4i8) {5, 6, 7, 8}; 37893 37894 v2q15 c = {0x0fcb, 0x3a75}; 37895 v2q15 d; 37896 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 37897 37898 _Note:_ The CPU's endianness determines the order in which values are 37899 packed. On little-endian targets, the first value is the least 37900 significant and the last value is the most significant. The opposite 37901 order applies to big-endian targets. For example, the code above sets 37902 the lowest byte of 'a' to '1' on little-endian targets and '4' on 37903 big-endian targets. 37904 37905 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 37906 representation. As shown in this example, the integer representation of 37907 a Q7 value can be obtained by multiplying the fractional value by 37908 '0x1.0p7'. The equivalent for Q15 values is to multiply by '0x1.0p15'. 37909 The equivalent for Q31 values is to multiply by '0x1.0p31'. 37910 37911 The table below lists the 'v4i8' and 'v2q15' operations for which 37912 hardware support exists. 'a' and 'b' are 'v4i8' values, and 'c' and 'd' 37913 are 'v2q15' values. 37914 37915 C code MIPS instruction 37916 'a + b' 'addu.qb' 37917 'c + d' 'addq.ph' 37918 'a - b' 'subu.qb' 37919 'c - d' 'subq.ph' 37920 37921 The table below lists the 'v2i16' operation for which hardware support 37922 exists for the DSP ASE REV 2. 'e' and 'f' are 'v2i16' values. 37923 37924 C code MIPS instruction 37925 'e * f' 'mul.ph' 37926 37927 It is easier to describe the DSP built-in functions if we first define 37928 the following types: 37929 37930 typedef int q31; 37931 typedef int i32; 37932 typedef unsigned int ui32; 37933 typedef long long a64; 37934 37935 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to 37936 indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer 37937 value. Similarly, 'a64' is the same as 'long long', but we use 'a64' to 37938 indicate values that are placed in one of the four DSP accumulators 37939 ('$ac0', '$ac1', '$ac2' or '$ac3'). 37940 37941 Also, some built-in functions prefer or require immediate numbers as 37942 parameters, because the corresponding DSP instructions accept both 37943 immediate numbers and register operands, or accept immediate numbers 37944 only. The immediate parameters are listed as follows. 37945 37946 imm0_3: 0 to 3. 37947 imm0_7: 0 to 7. 37948 imm0_15: 0 to 15. 37949 imm0_31: 0 to 31. 37950 imm0_63: 0 to 63. 37951 imm0_255: 0 to 255. 37952 imm_n32_31: -32 to 31. 37953 imm_n512_511: -512 to 511. 37954 37955 The following built-in functions map directly to a particular MIPS DSP 37956 instruction. Please refer to the architecture specification for details 37957 on what each instruction does. 37958 37959 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 37960 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 37961 q31 __builtin_mips_addq_s_w (q31, q31) 37962 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 37963 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 37964 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 37965 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 37966 q31 __builtin_mips_subq_s_w (q31, q31) 37967 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 37968 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 37969 i32 __builtin_mips_addsc (i32, i32) 37970 i32 __builtin_mips_addwc (i32, i32) 37971 i32 __builtin_mips_modsub (i32, i32) 37972 i32 __builtin_mips_raddu_w_qb (v4i8) 37973 v2q15 __builtin_mips_absq_s_ph (v2q15) 37974 q31 __builtin_mips_absq_s_w (q31) 37975 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 37976 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 37977 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 37978 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 37979 q31 __builtin_mips_preceq_w_phl (v2q15) 37980 q31 __builtin_mips_preceq_w_phr (v2q15) 37981 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 37982 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 37983 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 37984 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 37985 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 37986 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 37987 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 37988 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 37989 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 37990 v4i8 __builtin_mips_shll_qb (v4i8, i32) 37991 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 37992 v2q15 __builtin_mips_shll_ph (v2q15, i32) 37993 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 37994 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 37995 q31 __builtin_mips_shll_s_w (q31, imm0_31) 37996 q31 __builtin_mips_shll_s_w (q31, i32) 37997 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 37998 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 37999 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 38000 v2q15 __builtin_mips_shra_ph (v2q15, i32) 38001 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 38002 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 38003 q31 __builtin_mips_shra_r_w (q31, imm0_31) 38004 q31 __builtin_mips_shra_r_w (q31, i32) 38005 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 38006 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 38007 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 38008 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 38009 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 38010 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 38011 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 38012 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 38013 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 38014 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 38015 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 38016 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 38017 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 38018 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 38019 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 38020 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 38021 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 38022 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 38023 i32 __builtin_mips_bitrev (i32) 38024 i32 __builtin_mips_insv (i32, i32) 38025 v4i8 __builtin_mips_repl_qb (imm0_255) 38026 v4i8 __builtin_mips_repl_qb (i32) 38027 v2q15 __builtin_mips_repl_ph (imm_n512_511) 38028 v2q15 __builtin_mips_repl_ph (i32) 38029 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 38030 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 38031 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 38032 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 38033 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 38034 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 38035 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 38036 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 38037 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 38038 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 38039 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 38040 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 38041 i32 __builtin_mips_extr_w (a64, imm0_31) 38042 i32 __builtin_mips_extr_w (a64, i32) 38043 i32 __builtin_mips_extr_r_w (a64, imm0_31) 38044 i32 __builtin_mips_extr_s_h (a64, i32) 38045 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 38046 i32 __builtin_mips_extr_rs_w (a64, i32) 38047 i32 __builtin_mips_extr_s_h (a64, imm0_31) 38048 i32 __builtin_mips_extr_r_w (a64, i32) 38049 i32 __builtin_mips_extp (a64, imm0_31) 38050 i32 __builtin_mips_extp (a64, i32) 38051 i32 __builtin_mips_extpdp (a64, imm0_31) 38052 i32 __builtin_mips_extpdp (a64, i32) 38053 a64 __builtin_mips_shilo (a64, imm_n32_31) 38054 a64 __builtin_mips_shilo (a64, i32) 38055 a64 __builtin_mips_mthlip (a64, i32) 38056 void __builtin_mips_wrdsp (i32, imm0_63) 38057 i32 __builtin_mips_rddsp (imm0_63) 38058 i32 __builtin_mips_lbux (void *, i32) 38059 i32 __builtin_mips_lhx (void *, i32) 38060 i32 __builtin_mips_lwx (void *, i32) 38061 a64 __builtin_mips_ldx (void *, i32) [MIPS64 only] 38062 i32 __builtin_mips_bposge32 (void) 38063 a64 __builtin_mips_madd (a64, i32, i32); 38064 a64 __builtin_mips_maddu (a64, ui32, ui32); 38065 a64 __builtin_mips_msub (a64, i32, i32); 38066 a64 __builtin_mips_msubu (a64, ui32, ui32); 38067 a64 __builtin_mips_mult (i32, i32); 38068 a64 __builtin_mips_multu (ui32, ui32); 38069 38070 The following built-in functions map directly to a particular MIPS DSP 38071 REV 2 instruction. Please refer to the architecture specification for 38072 details on what each instruction does. 38073 38074 v4q7 __builtin_mips_absq_s_qb (v4q7); 38075 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 38076 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 38077 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 38078 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 38079 i32 __builtin_mips_append (i32, i32, imm0_31); 38080 i32 __builtin_mips_balign (i32, i32, imm0_3); 38081 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 38082 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 38083 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 38084 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 38085 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 38086 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 38087 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 38088 q31 __builtin_mips_mulq_rs_w (q31, q31); 38089 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 38090 q31 __builtin_mips_mulq_s_w (q31, q31); 38091 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 38092 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 38093 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 38094 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 38095 i32 __builtin_mips_prepend (i32, i32, imm0_31); 38096 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 38097 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 38098 v4i8 __builtin_mips_shra_qb (v4i8, i32); 38099 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 38100 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 38101 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 38102 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 38103 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 38104 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 38105 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 38106 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 38107 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 38108 q31 __builtin_mips_addqh_w (q31, q31); 38109 q31 __builtin_mips_addqh_r_w (q31, q31); 38110 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 38111 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 38112 q31 __builtin_mips_subqh_w (q31, q31); 38113 q31 __builtin_mips_subqh_r_w (q31, q31); 38114 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 38115 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 38116 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 38117 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 38118 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 38119 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 38120 38121 38122 File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 38123 38124 6.56.10 MIPS Paired-Single Support 38125 ---------------------------------- 38126 38127 The MIPS64 architecture includes a number of instructions that operate 38128 on pairs of single-precision floating-point values. Each pair is packed 38129 into a 64-bit floating-point register, with one element being designated 38130 the "upper half" and the other being designated the "lower half". 38131 38132 GCC supports paired-single operations using both the generic vector 38133 extensions (*note Vector Extensions::) and a collection of MIPS-specific 38134 built-in functions. Both kinds of support are enabled by the 38135 '-mpaired-single' command-line option. 38136 38137 The vector type associated with paired-single values is usually called 38138 'v2sf'. It can be defined in C as follows: 38139 38140 typedef float v2sf __attribute__ ((vector_size (8))); 38141 38142 'v2sf' values are initialized in the same way as aggregates. For 38143 example: 38144 38145 v2sf a = {1.5, 9.1}; 38146 v2sf b; 38147 float e, f; 38148 b = (v2sf) {e, f}; 38149 38150 _Note:_ The CPU's endianness determines which value is stored in the 38151 upper half of a register and which value is stored in the lower half. 38152 On little-endian targets, the first value is the lower one and the 38153 second value is the upper one. The opposite order applies to big-endian 38154 targets. For example, the code above sets the lower half of 'a' to 38155 '1.5' on little-endian targets and '9.1' on big-endian targets. 38156 38157 38158 File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 38159 38160 6.56.11 MIPS Loongson Built-in Functions 38161 ---------------------------------------- 38162 38163 GCC provides intrinsics to access the SIMD instructions provided by the 38164 ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 38165 available after inclusion of the 'loongson.h' header file, operate on 38166 the following 64-bit vector types: 38167 38168 * 'uint8x8_t', a vector of eight unsigned 8-bit integers; 38169 * 'uint16x4_t', a vector of four unsigned 16-bit integers; 38170 * 'uint32x2_t', a vector of two unsigned 32-bit integers; 38171 * 'int8x8_t', a vector of eight signed 8-bit integers; 38172 * 'int16x4_t', a vector of four signed 16-bit integers; 38173 * 'int32x2_t', a vector of two signed 32-bit integers. 38174 38175 The intrinsics provided are listed below; each is named after the 38176 machine instruction to which it corresponds, with suffixes added as 38177 appropriate to distinguish intrinsics that expand to the same machine 38178 instruction yet have different argument types. Refer to the 38179 architecture documentation for a description of the functionality of 38180 each instruction. 38181 38182 int16x4_t packsswh (int32x2_t s, int32x2_t t); 38183 int8x8_t packsshb (int16x4_t s, int16x4_t t); 38184 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 38185 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 38186 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 38187 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 38188 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 38189 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 38190 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 38191 uint64_t paddd_u (uint64_t s, uint64_t t); 38192 int64_t paddd_s (int64_t s, int64_t t); 38193 int16x4_t paddsh (int16x4_t s, int16x4_t t); 38194 int8x8_t paddsb (int8x8_t s, int8x8_t t); 38195 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 38196 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 38197 uint64_t pandn_ud (uint64_t s, uint64_t t); 38198 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 38199 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 38200 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 38201 int64_t pandn_sd (int64_t s, int64_t t); 38202 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 38203 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 38204 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 38205 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 38206 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 38207 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 38208 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 38209 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 38210 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 38211 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 38212 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 38213 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 38214 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 38215 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 38216 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 38217 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 38218 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 38219 uint16x4_t pextrh_u (uint16x4_t s, int field); 38220 int16x4_t pextrh_s (int16x4_t s, int field); 38221 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 38222 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 38223 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 38224 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 38225 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 38226 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 38227 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 38228 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 38229 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 38230 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 38231 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 38232 int16x4_t pminsh (int16x4_t s, int16x4_t t); 38233 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 38234 uint8x8_t pmovmskb_u (uint8x8_t s); 38235 int8x8_t pmovmskb_s (int8x8_t s); 38236 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 38237 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 38238 int16x4_t pmullh (int16x4_t s, int16x4_t t); 38239 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 38240 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 38241 uint16x4_t biadd (uint8x8_t s); 38242 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 38243 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 38244 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 38245 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 38246 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 38247 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 38248 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 38249 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 38250 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 38251 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 38252 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 38253 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 38254 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 38255 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 38256 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 38257 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 38258 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 38259 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 38260 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 38261 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 38262 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 38263 uint64_t psubd_u (uint64_t s, uint64_t t); 38264 int64_t psubd_s (int64_t s, int64_t t); 38265 int16x4_t psubsh (int16x4_t s, int16x4_t t); 38266 int8x8_t psubsb (int8x8_t s, int8x8_t t); 38267 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 38268 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 38269 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 38270 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 38271 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 38272 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 38273 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 38274 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 38275 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 38276 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 38277 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 38278 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 38279 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 38280 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 38281 38282 * Menu: 38283 38284 * Paired-Single Arithmetic:: 38285 * Paired-Single Built-in Functions:: 38286 * MIPS-3D Built-in Functions:: 38287 38288 38289 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 38290 38291 6.56.11.1 Paired-Single Arithmetic 38292 .................................. 38293 38294 The table below lists the 'v2sf' operations for which hardware support 38295 exists. 'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral 38296 value. 38297 38298 C code MIPS instruction 38299 'a + b' 'add.ps' 38300 'a - b' 'sub.ps' 38301 '-a' 'neg.ps' 38302 'a * b' 'mul.ps' 38303 'a * b + c' 'madd.ps' 38304 'a * b - c' 'msub.ps' 38305 '-(a * b + c)' 'nmadd.ps' 38306 '-(a * b - c)' 'nmsub.ps' 38307 'x ? a : b' 'movn.ps'/'movz.ps' 38308 38309 Note that the multiply-accumulate instructions can be disabled using 38310 the command-line option '-mno-fused-madd'. 38311 38312 38313 File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Loongson Built-in Functions 38314 38315 6.56.11.2 Paired-Single Built-in Functions 38316 .......................................... 38317 38318 The following paired-single functions map directly to a particular MIPS 38319 instruction. Please refer to the architecture specification for details 38320 on what each instruction does. 38321 38322 'v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 38323 Pair lower lower ('pll.ps'). 38324 38325 'v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 38326 Pair upper lower ('pul.ps'). 38327 38328 'v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 38329 Pair lower upper ('plu.ps'). 38330 38331 'v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 38332 Pair upper upper ('puu.ps'). 38333 38334 'v2sf __builtin_mips_cvt_ps_s (float, float)' 38335 Convert pair to paired single ('cvt.ps.s'). 38336 38337 'float __builtin_mips_cvt_s_pl (v2sf)' 38338 Convert pair lower to single ('cvt.s.pl'). 38339 38340 'float __builtin_mips_cvt_s_pu (v2sf)' 38341 Convert pair upper to single ('cvt.s.pu'). 38342 38343 'v2sf __builtin_mips_abs_ps (v2sf)' 38344 Absolute value ('abs.ps'). 38345 38346 'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 38347 Align variable ('alnv.ps'). 38348 38349 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 38350 otherwise the result is unpredictable. Please read the instruction 38351 description for details. 38352 38353 The following multi-instruction functions are also available. In each 38354 case, COND can be any of the 16 floating-point conditions: 'f', 'un', 38355 'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl', 38356 'lt', 'nge', 'le' or 'ngt'. 38357 38358 'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38359 'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38360 Conditional move based on floating-point comparison ('c.COND.ps', 38361 'movt.ps'/'movf.ps'). 38362 38363 The 'movt' functions return the value X computed by: 38364 38365 c.COND.ps CC,A,B 38366 mov.ps X,C 38367 movt.ps X,D,CC 38368 38369 The 'movf' functions are similar but use 'movf.ps' instead of 38370 'movt.ps'. 38371 38372 'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 38373 'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 38374 Comparison of two paired-single values ('c.COND.ps', 38375 'bc1t'/'bc1f'). 38376 38377 These functions compare A and B using 'c.COND.ps' and return either 38378 the upper or lower half of the result. For example: 38379 38380 v2sf a, b; 38381 if (__builtin_mips_upper_c_eq_ps (a, b)) 38382 upper_halves_are_equal (); 38383 else 38384 upper_halves_are_unequal (); 38385 38386 if (__builtin_mips_lower_c_eq_ps (a, b)) 38387 lower_halves_are_equal (); 38388 else 38389 lower_halves_are_unequal (); 38390 38391 38392 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 38393 38394 6.56.11.3 MIPS-3D Built-in Functions 38395 .................................... 38396 38397 The MIPS-3D Application-Specific Extension (ASE) includes additional 38398 paired-single instructions that are designed to improve the performance 38399 of 3D graphics operations. Support for these instructions is controlled 38400 by the '-mips3d' command-line option. 38401 38402 The functions listed below map directly to a particular MIPS-3D 38403 instruction. Please refer to the architecture specification for more 38404 details on what each instruction does. 38405 38406 'v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 38407 Reduction add ('addr.ps'). 38408 38409 'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 38410 Reduction multiply ('mulr.ps'). 38411 38412 'v2sf __builtin_mips_cvt_pw_ps (v2sf)' 38413 Convert paired single to paired word ('cvt.pw.ps'). 38414 38415 'v2sf __builtin_mips_cvt_ps_pw (v2sf)' 38416 Convert paired word to paired single ('cvt.ps.pw'). 38417 38418 'float __builtin_mips_recip1_s (float)' 38419 'double __builtin_mips_recip1_d (double)' 38420 'v2sf __builtin_mips_recip1_ps (v2sf)' 38421 Reduced-precision reciprocal (sequence step 1) ('recip1.FMT'). 38422 38423 'float __builtin_mips_recip2_s (float, float)' 38424 'double __builtin_mips_recip2_d (double, double)' 38425 'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 38426 Reduced-precision reciprocal (sequence step 2) ('recip2.FMT'). 38427 38428 'float __builtin_mips_rsqrt1_s (float)' 38429 'double __builtin_mips_rsqrt1_d (double)' 38430 'v2sf __builtin_mips_rsqrt1_ps (v2sf)' 38431 Reduced-precision reciprocal square root (sequence step 1) 38432 ('rsqrt1.FMT'). 38433 38434 'float __builtin_mips_rsqrt2_s (float, float)' 38435 'double __builtin_mips_rsqrt2_d (double, double)' 38436 'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 38437 Reduced-precision reciprocal square root (sequence step 2) 38438 ('rsqrt2.FMT'). 38439 38440 The following multi-instruction functions are also available. In each 38441 case, COND can be any of the 16 floating-point conditions: 'f', 'un', 38442 'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl', 38443 'lt', 'nge', 'le' or 'ngt'. 38444 38445 'int __builtin_mips_cabs_COND_s (float A, float B)' 38446 'int __builtin_mips_cabs_COND_d (double A, double B)' 38447 Absolute comparison of two scalar values ('cabs.COND.FMT', 38448 'bc1t'/'bc1f'). 38449 38450 These functions compare A and B using 'cabs.COND.s' or 38451 'cabs.COND.d' and return the result as a boolean value. For 38452 example: 38453 38454 float a, b; 38455 if (__builtin_mips_cabs_eq_s (a, b)) 38456 true (); 38457 else 38458 false (); 38459 38460 'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 38461 'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 38462 Absolute comparison of two paired-single values ('cabs.COND.ps', 38463 'bc1t'/'bc1f'). 38464 38465 These functions compare A and B using 'cabs.COND.ps' and return 38466 either the upper or lower half of the result. For example: 38467 38468 v2sf a, b; 38469 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 38470 upper_halves_are_equal (); 38471 else 38472 upper_halves_are_unequal (); 38473 38474 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 38475 lower_halves_are_equal (); 38476 else 38477 lower_halves_are_unequal (); 38478 38479 'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38480 'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 38481 Conditional move based on absolute comparison ('cabs.COND.ps', 38482 'movt.ps'/'movf.ps'). 38483 38484 The 'movt' functions return the value X computed by: 38485 38486 cabs.COND.ps CC,A,B 38487 mov.ps X,C 38488 movt.ps X,D,CC 38489 38490 The 'movf' functions are similar but use 'movf.ps' instead of 38491 'movt.ps'. 38492 38493 'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 38494 'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 38495 'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 38496 'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 38497 Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps', 38498 'bc1any2t'/'bc1any2f'). 38499 38500 These functions compare A and B using 'c.COND.ps' or 38501 'cabs.COND.ps'. The 'any' forms return true if either result is 38502 true and the 'all' forms return true if both results are true. For 38503 example: 38504 38505 v2sf a, b; 38506 if (__builtin_mips_any_c_eq_ps (a, b)) 38507 one_is_true (); 38508 else 38509 both_are_false (); 38510 38511 if (__builtin_mips_all_c_eq_ps (a, b)) 38512 both_are_true (); 38513 else 38514 one_is_false (); 38515 38516 'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38517 'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38518 'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38519 'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 38520 Comparison of four paired-single values 38521 ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f'). 38522 38523 These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with 38524 B and to compare C with D. The 'any' forms return true if any of 38525 the four results are true and the 'all' forms return true if all 38526 four results are true. For example: 38527 38528 v2sf a, b, c, d; 38529 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 38530 some_are_true (); 38531 else 38532 all_are_false (); 38533 38534 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 38535 all_are_true (); 38536 else 38537 some_are_false (); 38538 38539 38540 File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 38541 38542 6.56.12 Other MIPS Built-in Functions 38543 ------------------------------------- 38544 38545 GCC provides other MIPS-specific built-in functions: 38546 38547 'void __builtin_mips_cache (int OP, const volatile void *ADDR)' 38548 Insert a 'cache' instruction with operands OP and ADDR. GCC 38549 defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE' 38550 when this function is available. 38551 38552 38553 File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 38554 38555 6.56.13 picoChip Built-in Functions 38556 ----------------------------------- 38557 38558 GCC provides an interface to selected machine instructions from the 38559 picoChip instruction set. 38560 38561 'int __builtin_sbc (int VALUE)' 38562 Sign bit count. Return the number of consecutive bits in VALUE 38563 that have the same value as the sign bit. The result is the number 38564 of leading sign bits minus one, giving the number of redundant sign 38565 bits in VALUE. 38566 38567 'int __builtin_byteswap (int VALUE)' 38568 Byte swap. Return the result of swapping the upper and lower bytes 38569 of VALUE. 38570 38571 'int __builtin_brev (int VALUE)' 38572 Bit reversal. Return the result of reversing the bits in VALUE. 38573 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 38574 on. 38575 38576 'int __builtin_adds (int X, int Y)' 38577 Saturating addition. Return the result of adding X and Y, storing 38578 the value 32767 if the result overflows. 38579 38580 'int __builtin_subs (int X, int Y)' 38581 Saturating subtraction. Return the result of subtracting Y from X, 38582 storing the value -32768 if the result overflows. 38583 38584 'void __builtin_halt (void)' 38585 Halt. The processor stops execution. This built-in is useful for 38586 implementing assertions. 38587 38588 38589 File: gcc.info, Node: PowerPC Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 38590 38591 6.56.14 PowerPC Built-in Functions 38592 ---------------------------------- 38593 38594 These built-in functions are available for the PowerPC family of 38595 processors: 38596 float __builtin_recipdivf (float, float); 38597 float __builtin_rsqrtf (float); 38598 double __builtin_recipdiv (double, double); 38599 double __builtin_rsqrt (double); 38600 uint64_t __builtin_ppc_get_timebase (); 38601 unsigned long __builtin_ppc_mftb (); 38602 double __builtin_unpack_longdouble (long double, int); 38603 double __builtin_longdouble_dw0 (long double); 38604 double __builtin_longdouble_dw1 (long double); 38605 long double __builtin_pack_longdouble (double, double); 38606 38607 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions 38608 generate multiple instructions to implement the reciprocal sqrt 38609 functionality using reciprocal sqrt estimate instructions. 38610 38611 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate 38612 multiple instructions to implement division using the reciprocal 38613 estimate instructions. 38614 38615 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions 38616 generate instructions to read the Time Base Register. The 38617 '__builtin_ppc_get_timebase' function may generate multiple instructions 38618 and always returns the 64 bits of the Time Base Register. The 38619 '__builtin_ppc_mftb' function always generates one instruction and 38620 returns the Time Base Register value as an unsigned long, throwing away 38621 the most significant word on 32-bit environments. 38622 38623 The following built-in functions are available for the PowerPC family 38624 of processors, starting with ISA 2.06 or later ('-mcpu=power7' or 38625 '-mpopcntd'): 38626 long __builtin_bpermd (long, long); 38627 int __builtin_divwe (int, int); 38628 int __builtin_divweo (int, int); 38629 unsigned int __builtin_divweu (unsigned int, unsigned int); 38630 unsigned int __builtin_divweuo (unsigned int, unsigned int); 38631 long __builtin_divde (long, long); 38632 long __builtin_divdeo (long, long); 38633 unsigned long __builtin_divdeu (unsigned long, unsigned long); 38634 unsigned long __builtin_divdeuo (unsigned long, unsigned long); 38635 unsigned int cdtbcd (unsigned int); 38636 unsigned int cbcdtd (unsigned int); 38637 unsigned int addg6s (unsigned int, unsigned int); 38638 38639 The '__builtin_divde', '__builtin_divdeo', '__builitin_divdeu', 38640 '__builtin_divdeou' functions require a 64-bit environment support ISA 38641 2.06 or later. 38642 38643 The following built-in functions are available for the PowerPC family 38644 of processors when hardware decimal floating point ('-mhard-dfp') is 38645 available: 38646 _Decimal64 __builtin_dxex (_Decimal64); 38647 _Decimal128 __builtin_dxexq (_Decimal128); 38648 _Decimal64 __builtin_ddedpd (int, _Decimal64); 38649 _Decimal128 __builtin_ddedpdq (int, _Decimal128); 38650 _Decimal64 __builtin_denbcd (int, _Decimal64); 38651 _Decimal128 __builtin_denbcdq (int, _Decimal128); 38652 _Decimal64 __builtin_diex (_Decimal64, _Decimal64); 38653 _Decimal128 _builtin_diexq (_Decimal128, _Decimal128); 38654 _Decimal64 __builtin_dscli (_Decimal64, int); 38655 _Decimal128 __builitn_dscliq (_Decimal128, int); 38656 _Decimal64 __builtin_dscri (_Decimal64, int); 38657 _Decimal128 __builitn_dscriq (_Decimal128, int); 38658 unsigned long long __builtin_unpack_dec128 (_Decimal128, int); 38659 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long); 38660 38661 The following built-in functions are available for the PowerPC family 38662 of processors when the Vector Scalar (vsx) instruction set is available: 38663 unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int); 38664 vector __int128_t __builtin_pack_vector_int128 (unsigned long long, 38665 unsigned long long); 38666 38667 38668 File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: PowerPC Hardware Transactional Memory Built-in Functions, Prev: PowerPC Built-in Functions, Up: Target Builtins 38669 38670 6.56.15 PowerPC AltiVec Built-in Functions 38671 ------------------------------------------ 38672 38673 GCC provides an interface for the PowerPC family of processors to access 38674 the AltiVec operations described in Motorola's AltiVec Programming 38675 Interface Manual. The interface is made available by including 38676 '<altivec.h>' and using '-maltivec' and '-mabi=altivec'. The interface 38677 supports the following vector types. 38678 38679 vector unsigned char 38680 vector signed char 38681 vector bool char 38682 38683 vector unsigned short 38684 vector signed short 38685 vector bool short 38686 vector pixel 38687 38688 vector unsigned int 38689 vector signed int 38690 vector bool int 38691 vector float 38692 38693 If '-mvsx' is used the following additional vector types are 38694 implemented. 38695 38696 vector unsigned long 38697 vector signed long 38698 vector double 38699 38700 The long types are only implemented for 64-bit code generation, and the 38701 long type is only used in the floating point/integer conversion 38702 instructions. 38703 38704 GCC's implementation of the high-level language interface available 38705 from C and C++ code differs from Motorola's documentation in several 38706 ways. 38707 38708 * A vector constant is a list of constant expressions within curly 38709 braces. 38710 38711 * A vector initializer requires no cast if the vector constant is of 38712 the same type as the variable it is initializing. 38713 38714 * If 'signed' or 'unsigned' is omitted, the signedness of the vector 38715 type is the default signedness of the base type. The default 38716 varies depending on the operating system, so a portable program 38717 should always specify the signedness. 38718 38719 * Compiling with '-maltivec' adds keywords '__vector', 'vector', 38720 '__pixel', 'pixel', '__bool' and 'bool'. When compiling ISO C, the 38721 context-sensitive substitution of the keywords 'vector', 'pixel' 38722 and 'bool' is disabled. To use them, you must include 38723 '<altivec.h>' instead. 38724 38725 * GCC allows using a 'typedef' name as the type specifier for a 38726 vector type. 38727 38728 * For C, overloaded functions are implemented with macros so the 38729 following does not work: 38730 38731 vec_add ((vector signed int){1, 2, 3, 4}, foo); 38732 38733 Since 'vec_add' is a macro, the vector constant in the example is 38734 treated as four separate arguments. Wrap the entire argument in 38735 parentheses for this to work. 38736 38737 _Note:_ Only the '<altivec.h>' interface is supported. Internally, GCC 38738 uses built-in functions to achieve the functionality in the 38739 aforementioned header file, but they are not supported and are subject 38740 to change without notice. 38741 38742 The following interfaces are supported for the generic and specific 38743 AltiVec operations and the AltiVec predicates. In cases where there is 38744 a direct mapping between generic and specific operations, only the 38745 generic names are shown here, although the specific operations can also 38746 be used. 38747 38748 Arguments that are documented as 'const int' require literal integral 38749 values within the range required for that operation. 38750 38751 vector signed char vec_abs (vector signed char); 38752 vector signed short vec_abs (vector signed short); 38753 vector signed int vec_abs (vector signed int); 38754 vector float vec_abs (vector float); 38755 38756 vector signed char vec_abss (vector signed char); 38757 vector signed short vec_abss (vector signed short); 38758 vector signed int vec_abss (vector signed int); 38759 38760 vector signed char vec_add (vector bool char, vector signed char); 38761 vector signed char vec_add (vector signed char, vector bool char); 38762 vector signed char vec_add (vector signed char, vector signed char); 38763 vector unsigned char vec_add (vector bool char, vector unsigned char); 38764 vector unsigned char vec_add (vector unsigned char, vector bool char); 38765 vector unsigned char vec_add (vector unsigned char, 38766 vector unsigned char); 38767 vector signed short vec_add (vector bool short, vector signed short); 38768 vector signed short vec_add (vector signed short, vector bool short); 38769 vector signed short vec_add (vector signed short, vector signed short); 38770 vector unsigned short vec_add (vector bool short, 38771 vector unsigned short); 38772 vector unsigned short vec_add (vector unsigned short, 38773 vector bool short); 38774 vector unsigned short vec_add (vector unsigned short, 38775 vector unsigned short); 38776 vector signed int vec_add (vector bool int, vector signed int); 38777 vector signed int vec_add (vector signed int, vector bool int); 38778 vector signed int vec_add (vector signed int, vector signed int); 38779 vector unsigned int vec_add (vector bool int, vector unsigned int); 38780 vector unsigned int vec_add (vector unsigned int, vector bool int); 38781 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 38782 vector float vec_add (vector float, vector float); 38783 38784 vector float vec_vaddfp (vector float, vector float); 38785 38786 vector signed int vec_vadduwm (vector bool int, vector signed int); 38787 vector signed int vec_vadduwm (vector signed int, vector bool int); 38788 vector signed int vec_vadduwm (vector signed int, vector signed int); 38789 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 38790 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 38791 vector unsigned int vec_vadduwm (vector unsigned int, 38792 vector unsigned int); 38793 38794 vector signed short vec_vadduhm (vector bool short, 38795 vector signed short); 38796 vector signed short vec_vadduhm (vector signed short, 38797 vector bool short); 38798 vector signed short vec_vadduhm (vector signed short, 38799 vector signed short); 38800 vector unsigned short vec_vadduhm (vector bool short, 38801 vector unsigned short); 38802 vector unsigned short vec_vadduhm (vector unsigned short, 38803 vector bool short); 38804 vector unsigned short vec_vadduhm (vector unsigned short, 38805 vector unsigned short); 38806 38807 vector signed char vec_vaddubm (vector bool char, vector signed char); 38808 vector signed char vec_vaddubm (vector signed char, vector bool char); 38809 vector signed char vec_vaddubm (vector signed char, vector signed char); 38810 vector unsigned char vec_vaddubm (vector bool char, 38811 vector unsigned char); 38812 vector unsigned char vec_vaddubm (vector unsigned char, 38813 vector bool char); 38814 vector unsigned char vec_vaddubm (vector unsigned char, 38815 vector unsigned char); 38816 38817 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 38818 38819 vector unsigned char vec_adds (vector bool char, vector unsigned char); 38820 vector unsigned char vec_adds (vector unsigned char, vector bool char); 38821 vector unsigned char vec_adds (vector unsigned char, 38822 vector unsigned char); 38823 vector signed char vec_adds (vector bool char, vector signed char); 38824 vector signed char vec_adds (vector signed char, vector bool char); 38825 vector signed char vec_adds (vector signed char, vector signed char); 38826 vector unsigned short vec_adds (vector bool short, 38827 vector unsigned short); 38828 vector unsigned short vec_adds (vector unsigned short, 38829 vector bool short); 38830 vector unsigned short vec_adds (vector unsigned short, 38831 vector unsigned short); 38832 vector signed short vec_adds (vector bool short, vector signed short); 38833 vector signed short vec_adds (vector signed short, vector bool short); 38834 vector signed short vec_adds (vector signed short, vector signed short); 38835 vector unsigned int vec_adds (vector bool int, vector unsigned int); 38836 vector unsigned int vec_adds (vector unsigned int, vector bool int); 38837 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 38838 vector signed int vec_adds (vector bool int, vector signed int); 38839 vector signed int vec_adds (vector signed int, vector bool int); 38840 vector signed int vec_adds (vector signed int, vector signed int); 38841 38842 vector signed int vec_vaddsws (vector bool int, vector signed int); 38843 vector signed int vec_vaddsws (vector signed int, vector bool int); 38844 vector signed int vec_vaddsws (vector signed int, vector signed int); 38845 38846 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 38847 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 38848 vector unsigned int vec_vadduws (vector unsigned int, 38849 vector unsigned int); 38850 38851 vector signed short vec_vaddshs (vector bool short, 38852 vector signed short); 38853 vector signed short vec_vaddshs (vector signed short, 38854 vector bool short); 38855 vector signed short vec_vaddshs (vector signed short, 38856 vector signed short); 38857 38858 vector unsigned short vec_vadduhs (vector bool short, 38859 vector unsigned short); 38860 vector unsigned short vec_vadduhs (vector unsigned short, 38861 vector bool short); 38862 vector unsigned short vec_vadduhs (vector unsigned short, 38863 vector unsigned short); 38864 38865 vector signed char vec_vaddsbs (vector bool char, vector signed char); 38866 vector signed char vec_vaddsbs (vector signed char, vector bool char); 38867 vector signed char vec_vaddsbs (vector signed char, vector signed char); 38868 38869 vector unsigned char vec_vaddubs (vector bool char, 38870 vector unsigned char); 38871 vector unsigned char vec_vaddubs (vector unsigned char, 38872 vector bool char); 38873 vector unsigned char vec_vaddubs (vector unsigned char, 38874 vector unsigned char); 38875 38876 vector float vec_and (vector float, vector float); 38877 vector float vec_and (vector float, vector bool int); 38878 vector float vec_and (vector bool int, vector float); 38879 vector bool int vec_and (vector bool int, vector bool int); 38880 vector signed int vec_and (vector bool int, vector signed int); 38881 vector signed int vec_and (vector signed int, vector bool int); 38882 vector signed int vec_and (vector signed int, vector signed int); 38883 vector unsigned int vec_and (vector bool int, vector unsigned int); 38884 vector unsigned int vec_and (vector unsigned int, vector bool int); 38885 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 38886 vector bool short vec_and (vector bool short, vector bool short); 38887 vector signed short vec_and (vector bool short, vector signed short); 38888 vector signed short vec_and (vector signed short, vector bool short); 38889 vector signed short vec_and (vector signed short, vector signed short); 38890 vector unsigned short vec_and (vector bool short, 38891 vector unsigned short); 38892 vector unsigned short vec_and (vector unsigned short, 38893 vector bool short); 38894 vector unsigned short vec_and (vector unsigned short, 38895 vector unsigned short); 38896 vector signed char vec_and (vector bool char, vector signed char); 38897 vector bool char vec_and (vector bool char, vector bool char); 38898 vector signed char vec_and (vector signed char, vector bool char); 38899 vector signed char vec_and (vector signed char, vector signed char); 38900 vector unsigned char vec_and (vector bool char, vector unsigned char); 38901 vector unsigned char vec_and (vector unsigned char, vector bool char); 38902 vector unsigned char vec_and (vector unsigned char, 38903 vector unsigned char); 38904 38905 vector float vec_andc (vector float, vector float); 38906 vector float vec_andc (vector float, vector bool int); 38907 vector float vec_andc (vector bool int, vector float); 38908 vector bool int vec_andc (vector bool int, vector bool int); 38909 vector signed int vec_andc (vector bool int, vector signed int); 38910 vector signed int vec_andc (vector signed int, vector bool int); 38911 vector signed int vec_andc (vector signed int, vector signed int); 38912 vector unsigned int vec_andc (vector bool int, vector unsigned int); 38913 vector unsigned int vec_andc (vector unsigned int, vector bool int); 38914 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 38915 vector bool short vec_andc (vector bool short, vector bool short); 38916 vector signed short vec_andc (vector bool short, vector signed short); 38917 vector signed short vec_andc (vector signed short, vector bool short); 38918 vector signed short vec_andc (vector signed short, vector signed short); 38919 vector unsigned short vec_andc (vector bool short, 38920 vector unsigned short); 38921 vector unsigned short vec_andc (vector unsigned short, 38922 vector bool short); 38923 vector unsigned short vec_andc (vector unsigned short, 38924 vector unsigned short); 38925 vector signed char vec_andc (vector bool char, vector signed char); 38926 vector bool char vec_andc (vector bool char, vector bool char); 38927 vector signed char vec_andc (vector signed char, vector bool char); 38928 vector signed char vec_andc (vector signed char, vector signed char); 38929 vector unsigned char vec_andc (vector bool char, vector unsigned char); 38930 vector unsigned char vec_andc (vector unsigned char, vector bool char); 38931 vector unsigned char vec_andc (vector unsigned char, 38932 vector unsigned char); 38933 38934 vector unsigned char vec_avg (vector unsigned char, 38935 vector unsigned char); 38936 vector signed char vec_avg (vector signed char, vector signed char); 38937 vector unsigned short vec_avg (vector unsigned short, 38938 vector unsigned short); 38939 vector signed short vec_avg (vector signed short, vector signed short); 38940 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 38941 vector signed int vec_avg (vector signed int, vector signed int); 38942 38943 vector signed int vec_vavgsw (vector signed int, vector signed int); 38944 38945 vector unsigned int vec_vavguw (vector unsigned int, 38946 vector unsigned int); 38947 38948 vector signed short vec_vavgsh (vector signed short, 38949 vector signed short); 38950 38951 vector unsigned short vec_vavguh (vector unsigned short, 38952 vector unsigned short); 38953 38954 vector signed char vec_vavgsb (vector signed char, vector signed char); 38955 38956 vector unsigned char vec_vavgub (vector unsigned char, 38957 vector unsigned char); 38958 38959 vector float vec_copysign (vector float); 38960 38961 vector float vec_ceil (vector float); 38962 38963 vector signed int vec_cmpb (vector float, vector float); 38964 38965 vector bool char vec_cmpeq (vector signed char, vector signed char); 38966 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 38967 vector bool short vec_cmpeq (vector signed short, vector signed short); 38968 vector bool short vec_cmpeq (vector unsigned short, 38969 vector unsigned short); 38970 vector bool int vec_cmpeq (vector signed int, vector signed int); 38971 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 38972 vector bool int vec_cmpeq (vector float, vector float); 38973 38974 vector bool int vec_vcmpeqfp (vector float, vector float); 38975 38976 vector bool int vec_vcmpequw (vector signed int, vector signed int); 38977 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 38978 38979 vector bool short vec_vcmpequh (vector signed short, 38980 vector signed short); 38981 vector bool short vec_vcmpequh (vector unsigned short, 38982 vector unsigned short); 38983 38984 vector bool char vec_vcmpequb (vector signed char, vector signed char); 38985 vector bool char vec_vcmpequb (vector unsigned char, 38986 vector unsigned char); 38987 38988 vector bool int vec_cmpge (vector float, vector float); 38989 38990 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 38991 vector bool char vec_cmpgt (vector signed char, vector signed char); 38992 vector bool short vec_cmpgt (vector unsigned short, 38993 vector unsigned short); 38994 vector bool short vec_cmpgt (vector signed short, vector signed short); 38995 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 38996 vector bool int vec_cmpgt (vector signed int, vector signed int); 38997 vector bool int vec_cmpgt (vector float, vector float); 38998 38999 vector bool int vec_vcmpgtfp (vector float, vector float); 39000 39001 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 39002 39003 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 39004 39005 vector bool short vec_vcmpgtsh (vector signed short, 39006 vector signed short); 39007 39008 vector bool short vec_vcmpgtuh (vector unsigned short, 39009 vector unsigned short); 39010 39011 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 39012 39013 vector bool char vec_vcmpgtub (vector unsigned char, 39014 vector unsigned char); 39015 39016 vector bool int vec_cmple (vector float, vector float); 39017 39018 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 39019 vector bool char vec_cmplt (vector signed char, vector signed char); 39020 vector bool short vec_cmplt (vector unsigned short, 39021 vector unsigned short); 39022 vector bool short vec_cmplt (vector signed short, vector signed short); 39023 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 39024 vector bool int vec_cmplt (vector signed int, vector signed int); 39025 vector bool int vec_cmplt (vector float, vector float); 39026 39027 vector float vec_ctf (vector unsigned int, const int); 39028 vector float vec_ctf (vector signed int, const int); 39029 39030 vector float vec_vcfsx (vector signed int, const int); 39031 39032 vector float vec_vcfux (vector unsigned int, const int); 39033 39034 vector signed int vec_cts (vector float, const int); 39035 39036 vector unsigned int vec_ctu (vector float, const int); 39037 39038 void vec_dss (const int); 39039 39040 void vec_dssall (void); 39041 39042 void vec_dst (const vector unsigned char *, int, const int); 39043 void vec_dst (const vector signed char *, int, const int); 39044 void vec_dst (const vector bool char *, int, const int); 39045 void vec_dst (const vector unsigned short *, int, const int); 39046 void vec_dst (const vector signed short *, int, const int); 39047 void vec_dst (const vector bool short *, int, const int); 39048 void vec_dst (const vector pixel *, int, const int); 39049 void vec_dst (const vector unsigned int *, int, const int); 39050 void vec_dst (const vector signed int *, int, const int); 39051 void vec_dst (const vector bool int *, int, const int); 39052 void vec_dst (const vector float *, int, const int); 39053 void vec_dst (const unsigned char *, int, const int); 39054 void vec_dst (const signed char *, int, const int); 39055 void vec_dst (const unsigned short *, int, const int); 39056 void vec_dst (const short *, int, const int); 39057 void vec_dst (const unsigned int *, int, const int); 39058 void vec_dst (const int *, int, const int); 39059 void vec_dst (const unsigned long *, int, const int); 39060 void vec_dst (const long *, int, const int); 39061 void vec_dst (const float *, int, const int); 39062 39063 void vec_dstst (const vector unsigned char *, int, const int); 39064 void vec_dstst (const vector signed char *, int, const int); 39065 void vec_dstst (const vector bool char *, int, const int); 39066 void vec_dstst (const vector unsigned short *, int, const int); 39067 void vec_dstst (const vector signed short *, int, const int); 39068 void vec_dstst (const vector bool short *, int, const int); 39069 void vec_dstst (const vector pixel *, int, const int); 39070 void vec_dstst (const vector unsigned int *, int, const int); 39071 void vec_dstst (const vector signed int *, int, const int); 39072 void vec_dstst (const vector bool int *, int, const int); 39073 void vec_dstst (const vector float *, int, const int); 39074 void vec_dstst (const unsigned char *, int, const int); 39075 void vec_dstst (const signed char *, int, const int); 39076 void vec_dstst (const unsigned short *, int, const int); 39077 void vec_dstst (const short *, int, const int); 39078 void vec_dstst (const unsigned int *, int, const int); 39079 void vec_dstst (const int *, int, const int); 39080 void vec_dstst (const unsigned long *, int, const int); 39081 void vec_dstst (const long *, int, const int); 39082 void vec_dstst (const float *, int, const int); 39083 39084 void vec_dststt (const vector unsigned char *, int, const int); 39085 void vec_dststt (const vector signed char *, int, const int); 39086 void vec_dststt (const vector bool char *, int, const int); 39087 void vec_dststt (const vector unsigned short *, int, const int); 39088 void vec_dststt (const vector signed short *, int, const int); 39089 void vec_dststt (const vector bool short *, int, const int); 39090 void vec_dststt (const vector pixel *, int, const int); 39091 void vec_dststt (const vector unsigned int *, int, const int); 39092 void vec_dststt (const vector signed int *, int, const int); 39093 void vec_dststt (const vector bool int *, int, const int); 39094 void vec_dststt (const vector float *, int, const int); 39095 void vec_dststt (const unsigned char *, int, const int); 39096 void vec_dststt (const signed char *, int, const int); 39097 void vec_dststt (const unsigned short *, int, const int); 39098 void vec_dststt (const short *, int, const int); 39099 void vec_dststt (const unsigned int *, int, const int); 39100 void vec_dststt (const int *, int, const int); 39101 void vec_dststt (const unsigned long *, int, const int); 39102 void vec_dststt (const long *, int, const int); 39103 void vec_dststt (const float *, int, const int); 39104 39105 void vec_dstt (const vector unsigned char *, int, const int); 39106 void vec_dstt (const vector signed char *, int, const int); 39107 void vec_dstt (const vector bool char *, int, const int); 39108 void vec_dstt (const vector unsigned short *, int, const int); 39109 void vec_dstt (const vector signed short *, int, const int); 39110 void vec_dstt (const vector bool short *, int, const int); 39111 void vec_dstt (const vector pixel *, int, const int); 39112 void vec_dstt (const vector unsigned int *, int, const int); 39113 void vec_dstt (const vector signed int *, int, const int); 39114 void vec_dstt (const vector bool int *, int, const int); 39115 void vec_dstt (const vector float *, int, const int); 39116 void vec_dstt (const unsigned char *, int, const int); 39117 void vec_dstt (const signed char *, int, const int); 39118 void vec_dstt (const unsigned short *, int, const int); 39119 void vec_dstt (const short *, int, const int); 39120 void vec_dstt (const unsigned int *, int, const int); 39121 void vec_dstt (const int *, int, const int); 39122 void vec_dstt (const unsigned long *, int, const int); 39123 void vec_dstt (const long *, int, const int); 39124 void vec_dstt (const float *, int, const int); 39125 39126 vector float vec_expte (vector float); 39127 39128 vector float vec_floor (vector float); 39129 39130 vector float vec_ld (int, const vector float *); 39131 vector float vec_ld (int, const float *); 39132 vector bool int vec_ld (int, const vector bool int *); 39133 vector signed int vec_ld (int, const vector signed int *); 39134 vector signed int vec_ld (int, const int *); 39135 vector signed int vec_ld (int, const long *); 39136 vector unsigned int vec_ld (int, const vector unsigned int *); 39137 vector unsigned int vec_ld (int, const unsigned int *); 39138 vector unsigned int vec_ld (int, const unsigned long *); 39139 vector bool short vec_ld (int, const vector bool short *); 39140 vector pixel vec_ld (int, const vector pixel *); 39141 vector signed short vec_ld (int, const vector signed short *); 39142 vector signed short vec_ld (int, const short *); 39143 vector unsigned short vec_ld (int, const vector unsigned short *); 39144 vector unsigned short vec_ld (int, const unsigned short *); 39145 vector bool char vec_ld (int, const vector bool char *); 39146 vector signed char vec_ld (int, const vector signed char *); 39147 vector signed char vec_ld (int, const signed char *); 39148 vector unsigned char vec_ld (int, const vector unsigned char *); 39149 vector unsigned char vec_ld (int, const unsigned char *); 39150 39151 vector signed char vec_lde (int, const signed char *); 39152 vector unsigned char vec_lde (int, const unsigned char *); 39153 vector signed short vec_lde (int, const short *); 39154 vector unsigned short vec_lde (int, const unsigned short *); 39155 vector float vec_lde (int, const float *); 39156 vector signed int vec_lde (int, const int *); 39157 vector unsigned int vec_lde (int, const unsigned int *); 39158 vector signed int vec_lde (int, const long *); 39159 vector unsigned int vec_lde (int, const unsigned long *); 39160 39161 vector float vec_lvewx (int, float *); 39162 vector signed int vec_lvewx (int, int *); 39163 vector unsigned int vec_lvewx (int, unsigned int *); 39164 vector signed int vec_lvewx (int, long *); 39165 vector unsigned int vec_lvewx (int, unsigned long *); 39166 39167 vector signed short vec_lvehx (int, short *); 39168 vector unsigned short vec_lvehx (int, unsigned short *); 39169 39170 vector signed char vec_lvebx (int, char *); 39171 vector unsigned char vec_lvebx (int, unsigned char *); 39172 39173 vector float vec_ldl (int, const vector float *); 39174 vector float vec_ldl (int, const float *); 39175 vector bool int vec_ldl (int, const vector bool int *); 39176 vector signed int vec_ldl (int, const vector signed int *); 39177 vector signed int vec_ldl (int, const int *); 39178 vector signed int vec_ldl (int, const long *); 39179 vector unsigned int vec_ldl (int, const vector unsigned int *); 39180 vector unsigned int vec_ldl (int, const unsigned int *); 39181 vector unsigned int vec_ldl (int, const unsigned long *); 39182 vector bool short vec_ldl (int, const vector bool short *); 39183 vector pixel vec_ldl (int, const vector pixel *); 39184 vector signed short vec_ldl (int, const vector signed short *); 39185 vector signed short vec_ldl (int, const short *); 39186 vector unsigned short vec_ldl (int, const vector unsigned short *); 39187 vector unsigned short vec_ldl (int, const unsigned short *); 39188 vector bool char vec_ldl (int, const vector bool char *); 39189 vector signed char vec_ldl (int, const vector signed char *); 39190 vector signed char vec_ldl (int, const signed char *); 39191 vector unsigned char vec_ldl (int, const vector unsigned char *); 39192 vector unsigned char vec_ldl (int, const unsigned char *); 39193 39194 vector float vec_loge (vector float); 39195 39196 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 39197 vector unsigned char vec_lvsl (int, const volatile signed char *); 39198 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 39199 vector unsigned char vec_lvsl (int, const volatile short *); 39200 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 39201 vector unsigned char vec_lvsl (int, const volatile int *); 39202 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 39203 vector unsigned char vec_lvsl (int, const volatile long *); 39204 vector unsigned char vec_lvsl (int, const volatile float *); 39205 39206 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 39207 vector unsigned char vec_lvsr (int, const volatile signed char *); 39208 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 39209 vector unsigned char vec_lvsr (int, const volatile short *); 39210 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 39211 vector unsigned char vec_lvsr (int, const volatile int *); 39212 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 39213 vector unsigned char vec_lvsr (int, const volatile long *); 39214 vector unsigned char vec_lvsr (int, const volatile float *); 39215 39216 vector float vec_madd (vector float, vector float, vector float); 39217 39218 vector signed short vec_madds (vector signed short, 39219 vector signed short, 39220 vector signed short); 39221 39222 vector unsigned char vec_max (vector bool char, vector unsigned char); 39223 vector unsigned char vec_max (vector unsigned char, vector bool char); 39224 vector unsigned char vec_max (vector unsigned char, 39225 vector unsigned char); 39226 vector signed char vec_max (vector bool char, vector signed char); 39227 vector signed char vec_max (vector signed char, vector bool char); 39228 vector signed char vec_max (vector signed char, vector signed char); 39229 vector unsigned short vec_max (vector bool short, 39230 vector unsigned short); 39231 vector unsigned short vec_max (vector unsigned short, 39232 vector bool short); 39233 vector unsigned short vec_max (vector unsigned short, 39234 vector unsigned short); 39235 vector signed short vec_max (vector bool short, vector signed short); 39236 vector signed short vec_max (vector signed short, vector bool short); 39237 vector signed short vec_max (vector signed short, vector signed short); 39238 vector unsigned int vec_max (vector bool int, vector unsigned int); 39239 vector unsigned int vec_max (vector unsigned int, vector bool int); 39240 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 39241 vector signed int vec_max (vector bool int, vector signed int); 39242 vector signed int vec_max (vector signed int, vector bool int); 39243 vector signed int vec_max (vector signed int, vector signed int); 39244 vector float vec_max (vector float, vector float); 39245 39246 vector float vec_vmaxfp (vector float, vector float); 39247 39248 vector signed int vec_vmaxsw (vector bool int, vector signed int); 39249 vector signed int vec_vmaxsw (vector signed int, vector bool int); 39250 vector signed int vec_vmaxsw (vector signed int, vector signed int); 39251 39252 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 39253 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 39254 vector unsigned int vec_vmaxuw (vector unsigned int, 39255 vector unsigned int); 39256 39257 vector signed short vec_vmaxsh (vector bool short, vector signed short); 39258 vector signed short vec_vmaxsh (vector signed short, vector bool short); 39259 vector signed short vec_vmaxsh (vector signed short, 39260 vector signed short); 39261 39262 vector unsigned short vec_vmaxuh (vector bool short, 39263 vector unsigned short); 39264 vector unsigned short vec_vmaxuh (vector unsigned short, 39265 vector bool short); 39266 vector unsigned short vec_vmaxuh (vector unsigned short, 39267 vector unsigned short); 39268 39269 vector signed char vec_vmaxsb (vector bool char, vector signed char); 39270 vector signed char vec_vmaxsb (vector signed char, vector bool char); 39271 vector signed char vec_vmaxsb (vector signed char, vector signed char); 39272 39273 vector unsigned char vec_vmaxub (vector bool char, 39274 vector unsigned char); 39275 vector unsigned char vec_vmaxub (vector unsigned char, 39276 vector bool char); 39277 vector unsigned char vec_vmaxub (vector unsigned char, 39278 vector unsigned char); 39279 39280 vector bool char vec_mergeh (vector bool char, vector bool char); 39281 vector signed char vec_mergeh (vector signed char, vector signed char); 39282 vector unsigned char vec_mergeh (vector unsigned char, 39283 vector unsigned char); 39284 vector bool short vec_mergeh (vector bool short, vector bool short); 39285 vector pixel vec_mergeh (vector pixel, vector pixel); 39286 vector signed short vec_mergeh (vector signed short, 39287 vector signed short); 39288 vector unsigned short vec_mergeh (vector unsigned short, 39289 vector unsigned short); 39290 vector float vec_mergeh (vector float, vector float); 39291 vector bool int vec_mergeh (vector bool int, vector bool int); 39292 vector signed int vec_mergeh (vector signed int, vector signed int); 39293 vector unsigned int vec_mergeh (vector unsigned int, 39294 vector unsigned int); 39295 39296 vector float vec_vmrghw (vector float, vector float); 39297 vector bool int vec_vmrghw (vector bool int, vector bool int); 39298 vector signed int vec_vmrghw (vector signed int, vector signed int); 39299 vector unsigned int vec_vmrghw (vector unsigned int, 39300 vector unsigned int); 39301 39302 vector bool short vec_vmrghh (vector bool short, vector bool short); 39303 vector signed short vec_vmrghh (vector signed short, 39304 vector signed short); 39305 vector unsigned short vec_vmrghh (vector unsigned short, 39306 vector unsigned short); 39307 vector pixel vec_vmrghh (vector pixel, vector pixel); 39308 39309 vector bool char vec_vmrghb (vector bool char, vector bool char); 39310 vector signed char vec_vmrghb (vector signed char, vector signed char); 39311 vector unsigned char vec_vmrghb (vector unsigned char, 39312 vector unsigned char); 39313 39314 vector bool char vec_mergel (vector bool char, vector bool char); 39315 vector signed char vec_mergel (vector signed char, vector signed char); 39316 vector unsigned char vec_mergel (vector unsigned char, 39317 vector unsigned char); 39318 vector bool short vec_mergel (vector bool short, vector bool short); 39319 vector pixel vec_mergel (vector pixel, vector pixel); 39320 vector signed short vec_mergel (vector signed short, 39321 vector signed short); 39322 vector unsigned short vec_mergel (vector unsigned short, 39323 vector unsigned short); 39324 vector float vec_mergel (vector float, vector float); 39325 vector bool int vec_mergel (vector bool int, vector bool int); 39326 vector signed int vec_mergel (vector signed int, vector signed int); 39327 vector unsigned int vec_mergel (vector unsigned int, 39328 vector unsigned int); 39329 39330 vector float vec_vmrglw (vector float, vector float); 39331 vector signed int vec_vmrglw (vector signed int, vector signed int); 39332 vector unsigned int vec_vmrglw (vector unsigned int, 39333 vector unsigned int); 39334 vector bool int vec_vmrglw (vector bool int, vector bool int); 39335 39336 vector bool short vec_vmrglh (vector bool short, vector bool short); 39337 vector signed short vec_vmrglh (vector signed short, 39338 vector signed short); 39339 vector unsigned short vec_vmrglh (vector unsigned short, 39340 vector unsigned short); 39341 vector pixel vec_vmrglh (vector pixel, vector pixel); 39342 39343 vector bool char vec_vmrglb (vector bool char, vector bool char); 39344 vector signed char vec_vmrglb (vector signed char, vector signed char); 39345 vector unsigned char vec_vmrglb (vector unsigned char, 39346 vector unsigned char); 39347 39348 vector unsigned short vec_mfvscr (void); 39349 39350 vector unsigned char vec_min (vector bool char, vector unsigned char); 39351 vector unsigned char vec_min (vector unsigned char, vector bool char); 39352 vector unsigned char vec_min (vector unsigned char, 39353 vector unsigned char); 39354 vector signed char vec_min (vector bool char, vector signed char); 39355 vector signed char vec_min (vector signed char, vector bool char); 39356 vector signed char vec_min (vector signed char, vector signed char); 39357 vector unsigned short vec_min (vector bool short, 39358 vector unsigned short); 39359 vector unsigned short vec_min (vector unsigned short, 39360 vector bool short); 39361 vector unsigned short vec_min (vector unsigned short, 39362 vector unsigned short); 39363 vector signed short vec_min (vector bool short, vector signed short); 39364 vector signed short vec_min (vector signed short, vector bool short); 39365 vector signed short vec_min (vector signed short, vector signed short); 39366 vector unsigned int vec_min (vector bool int, vector unsigned int); 39367 vector unsigned int vec_min (vector unsigned int, vector bool int); 39368 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 39369 vector signed int vec_min (vector bool int, vector signed int); 39370 vector signed int vec_min (vector signed int, vector bool int); 39371 vector signed int vec_min (vector signed int, vector signed int); 39372 vector float vec_min (vector float, vector float); 39373 39374 vector float vec_vminfp (vector float, vector float); 39375 39376 vector signed int vec_vminsw (vector bool int, vector signed int); 39377 vector signed int vec_vminsw (vector signed int, vector bool int); 39378 vector signed int vec_vminsw (vector signed int, vector signed int); 39379 39380 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 39381 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 39382 vector unsigned int vec_vminuw (vector unsigned int, 39383 vector unsigned int); 39384 39385 vector signed short vec_vminsh (vector bool short, vector signed short); 39386 vector signed short vec_vminsh (vector signed short, vector bool short); 39387 vector signed short vec_vminsh (vector signed short, 39388 vector signed short); 39389 39390 vector unsigned short vec_vminuh (vector bool short, 39391 vector unsigned short); 39392 vector unsigned short vec_vminuh (vector unsigned short, 39393 vector bool short); 39394 vector unsigned short vec_vminuh (vector unsigned short, 39395 vector unsigned short); 39396 39397 vector signed char vec_vminsb (vector bool char, vector signed char); 39398 vector signed char vec_vminsb (vector signed char, vector bool char); 39399 vector signed char vec_vminsb (vector signed char, vector signed char); 39400 39401 vector unsigned char vec_vminub (vector bool char, 39402 vector unsigned char); 39403 vector unsigned char vec_vminub (vector unsigned char, 39404 vector bool char); 39405 vector unsigned char vec_vminub (vector unsigned char, 39406 vector unsigned char); 39407 39408 vector signed short vec_mladd (vector signed short, 39409 vector signed short, 39410 vector signed short); 39411 vector signed short vec_mladd (vector signed short, 39412 vector unsigned short, 39413 vector unsigned short); 39414 vector signed short vec_mladd (vector unsigned short, 39415 vector signed short, 39416 vector signed short); 39417 vector unsigned short vec_mladd (vector unsigned short, 39418 vector unsigned short, 39419 vector unsigned short); 39420 39421 vector signed short vec_mradds (vector signed short, 39422 vector signed short, 39423 vector signed short); 39424 39425 vector unsigned int vec_msum (vector unsigned char, 39426 vector unsigned char, 39427 vector unsigned int); 39428 vector signed int vec_msum (vector signed char, 39429 vector unsigned char, 39430 vector signed int); 39431 vector unsigned int vec_msum (vector unsigned short, 39432 vector unsigned short, 39433 vector unsigned int); 39434 vector signed int vec_msum (vector signed short, 39435 vector signed short, 39436 vector signed int); 39437 39438 vector signed int vec_vmsumshm (vector signed short, 39439 vector signed short, 39440 vector signed int); 39441 39442 vector unsigned int vec_vmsumuhm (vector unsigned short, 39443 vector unsigned short, 39444 vector unsigned int); 39445 39446 vector signed int vec_vmsummbm (vector signed char, 39447 vector unsigned char, 39448 vector signed int); 39449 39450 vector unsigned int vec_vmsumubm (vector unsigned char, 39451 vector unsigned char, 39452 vector unsigned int); 39453 39454 vector unsigned int vec_msums (vector unsigned short, 39455 vector unsigned short, 39456 vector unsigned int); 39457 vector signed int vec_msums (vector signed short, 39458 vector signed short, 39459 vector signed int); 39460 39461 vector signed int vec_vmsumshs (vector signed short, 39462 vector signed short, 39463 vector signed int); 39464 39465 vector unsigned int vec_vmsumuhs (vector unsigned short, 39466 vector unsigned short, 39467 vector unsigned int); 39468 39469 void vec_mtvscr (vector signed int); 39470 void vec_mtvscr (vector unsigned int); 39471 void vec_mtvscr (vector bool int); 39472 void vec_mtvscr (vector signed short); 39473 void vec_mtvscr (vector unsigned short); 39474 void vec_mtvscr (vector bool short); 39475 void vec_mtvscr (vector pixel); 39476 void vec_mtvscr (vector signed char); 39477 void vec_mtvscr (vector unsigned char); 39478 void vec_mtvscr (vector bool char); 39479 39480 vector unsigned short vec_mule (vector unsigned char, 39481 vector unsigned char); 39482 vector signed short vec_mule (vector signed char, 39483 vector signed char); 39484 vector unsigned int vec_mule (vector unsigned short, 39485 vector unsigned short); 39486 vector signed int vec_mule (vector signed short, vector signed short); 39487 39488 vector signed int vec_vmulesh (vector signed short, 39489 vector signed short); 39490 39491 vector unsigned int vec_vmuleuh (vector unsigned short, 39492 vector unsigned short); 39493 39494 vector signed short vec_vmulesb (vector signed char, 39495 vector signed char); 39496 39497 vector unsigned short vec_vmuleub (vector unsigned char, 39498 vector unsigned char); 39499 39500 vector unsigned short vec_mulo (vector unsigned char, 39501 vector unsigned char); 39502 vector signed short vec_mulo (vector signed char, vector signed char); 39503 vector unsigned int vec_mulo (vector unsigned short, 39504 vector unsigned short); 39505 vector signed int vec_mulo (vector signed short, vector signed short); 39506 39507 vector signed int vec_vmulosh (vector signed short, 39508 vector signed short); 39509 39510 vector unsigned int vec_vmulouh (vector unsigned short, 39511 vector unsigned short); 39512 39513 vector signed short vec_vmulosb (vector signed char, 39514 vector signed char); 39515 39516 vector unsigned short vec_vmuloub (vector unsigned char, 39517 vector unsigned char); 39518 39519 vector float vec_nmsub (vector float, vector float, vector float); 39520 39521 vector float vec_nor (vector float, vector float); 39522 vector signed int vec_nor (vector signed int, vector signed int); 39523 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 39524 vector bool int vec_nor (vector bool int, vector bool int); 39525 vector signed short vec_nor (vector signed short, vector signed short); 39526 vector unsigned short vec_nor (vector unsigned short, 39527 vector unsigned short); 39528 vector bool short vec_nor (vector bool short, vector bool short); 39529 vector signed char vec_nor (vector signed char, vector signed char); 39530 vector unsigned char vec_nor (vector unsigned char, 39531 vector unsigned char); 39532 vector bool char vec_nor (vector bool char, vector bool char); 39533 39534 vector float vec_or (vector float, vector float); 39535 vector float vec_or (vector float, vector bool int); 39536 vector float vec_or (vector bool int, vector float); 39537 vector bool int vec_or (vector bool int, vector bool int); 39538 vector signed int vec_or (vector bool int, vector signed int); 39539 vector signed int vec_or (vector signed int, vector bool int); 39540 vector signed int vec_or (vector signed int, vector signed int); 39541 vector unsigned int vec_or (vector bool int, vector unsigned int); 39542 vector unsigned int vec_or (vector unsigned int, vector bool int); 39543 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 39544 vector bool short vec_or (vector bool short, vector bool short); 39545 vector signed short vec_or (vector bool short, vector signed short); 39546 vector signed short vec_or (vector signed short, vector bool short); 39547 vector signed short vec_or (vector signed short, vector signed short); 39548 vector unsigned short vec_or (vector bool short, vector unsigned short); 39549 vector unsigned short vec_or (vector unsigned short, vector bool short); 39550 vector unsigned short vec_or (vector unsigned short, 39551 vector unsigned short); 39552 vector signed char vec_or (vector bool char, vector signed char); 39553 vector bool char vec_or (vector bool char, vector bool char); 39554 vector signed char vec_or (vector signed char, vector bool char); 39555 vector signed char vec_or (vector signed char, vector signed char); 39556 vector unsigned char vec_or (vector bool char, vector unsigned char); 39557 vector unsigned char vec_or (vector unsigned char, vector bool char); 39558 vector unsigned char vec_or (vector unsigned char, 39559 vector unsigned char); 39560 39561 vector signed char vec_pack (vector signed short, vector signed short); 39562 vector unsigned char vec_pack (vector unsigned short, 39563 vector unsigned short); 39564 vector bool char vec_pack (vector bool short, vector bool short); 39565 vector signed short vec_pack (vector signed int, vector signed int); 39566 vector unsigned short vec_pack (vector unsigned int, 39567 vector unsigned int); 39568 vector bool short vec_pack (vector bool int, vector bool int); 39569 39570 vector bool short vec_vpkuwum (vector bool int, vector bool int); 39571 vector signed short vec_vpkuwum (vector signed int, vector signed int); 39572 vector unsigned short vec_vpkuwum (vector unsigned int, 39573 vector unsigned int); 39574 39575 vector bool char vec_vpkuhum (vector bool short, vector bool short); 39576 vector signed char vec_vpkuhum (vector signed short, 39577 vector signed short); 39578 vector unsigned char vec_vpkuhum (vector unsigned short, 39579 vector unsigned short); 39580 39581 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 39582 39583 vector unsigned char vec_packs (vector unsigned short, 39584 vector unsigned short); 39585 vector signed char vec_packs (vector signed short, vector signed short); 39586 vector unsigned short vec_packs (vector unsigned int, 39587 vector unsigned int); 39588 vector signed short vec_packs (vector signed int, vector signed int); 39589 39590 vector signed short vec_vpkswss (vector signed int, vector signed int); 39591 39592 vector unsigned short vec_vpkuwus (vector unsigned int, 39593 vector unsigned int); 39594 39595 vector signed char vec_vpkshss (vector signed short, 39596 vector signed short); 39597 39598 vector unsigned char vec_vpkuhus (vector unsigned short, 39599 vector unsigned short); 39600 39601 vector unsigned char vec_packsu (vector unsigned short, 39602 vector unsigned short); 39603 vector unsigned char vec_packsu (vector signed short, 39604 vector signed short); 39605 vector unsigned short vec_packsu (vector unsigned int, 39606 vector unsigned int); 39607 vector unsigned short vec_packsu (vector signed int, vector signed int); 39608 39609 vector unsigned short vec_vpkswus (vector signed int, 39610 vector signed int); 39611 39612 vector unsigned char vec_vpkshus (vector signed short, 39613 vector signed short); 39614 39615 vector float vec_perm (vector float, 39616 vector float, 39617 vector unsigned char); 39618 vector signed int vec_perm (vector signed int, 39619 vector signed int, 39620 vector unsigned char); 39621 vector unsigned int vec_perm (vector unsigned int, 39622 vector unsigned int, 39623 vector unsigned char); 39624 vector bool int vec_perm (vector bool int, 39625 vector bool int, 39626 vector unsigned char); 39627 vector signed short vec_perm (vector signed short, 39628 vector signed short, 39629 vector unsigned char); 39630 vector unsigned short vec_perm (vector unsigned short, 39631 vector unsigned short, 39632 vector unsigned char); 39633 vector bool short vec_perm (vector bool short, 39634 vector bool short, 39635 vector unsigned char); 39636 vector pixel vec_perm (vector pixel, 39637 vector pixel, 39638 vector unsigned char); 39639 vector signed char vec_perm (vector signed char, 39640 vector signed char, 39641 vector unsigned char); 39642 vector unsigned char vec_perm (vector unsigned char, 39643 vector unsigned char, 39644 vector unsigned char); 39645 vector bool char vec_perm (vector bool char, 39646 vector bool char, 39647 vector unsigned char); 39648 39649 vector float vec_re (vector float); 39650 39651 vector signed char vec_rl (vector signed char, 39652 vector unsigned char); 39653 vector unsigned char vec_rl (vector unsigned char, 39654 vector unsigned char); 39655 vector signed short vec_rl (vector signed short, vector unsigned short); 39656 vector unsigned short vec_rl (vector unsigned short, 39657 vector unsigned short); 39658 vector signed int vec_rl (vector signed int, vector unsigned int); 39659 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 39660 39661 vector signed int vec_vrlw (vector signed int, vector unsigned int); 39662 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 39663 39664 vector signed short vec_vrlh (vector signed short, 39665 vector unsigned short); 39666 vector unsigned short vec_vrlh (vector unsigned short, 39667 vector unsigned short); 39668 39669 vector signed char vec_vrlb (vector signed char, vector unsigned char); 39670 vector unsigned char vec_vrlb (vector unsigned char, 39671 vector unsigned char); 39672 39673 vector float vec_round (vector float); 39674 39675 vector float vec_recip (vector float, vector float); 39676 39677 vector float vec_rsqrt (vector float); 39678 39679 vector float vec_rsqrte (vector float); 39680 39681 vector float vec_sel (vector float, vector float, vector bool int); 39682 vector float vec_sel (vector float, vector float, vector unsigned int); 39683 vector signed int vec_sel (vector signed int, 39684 vector signed int, 39685 vector bool int); 39686 vector signed int vec_sel (vector signed int, 39687 vector signed int, 39688 vector unsigned int); 39689 vector unsigned int vec_sel (vector unsigned int, 39690 vector unsigned int, 39691 vector bool int); 39692 vector unsigned int vec_sel (vector unsigned int, 39693 vector unsigned int, 39694 vector unsigned int); 39695 vector bool int vec_sel (vector bool int, 39696 vector bool int, 39697 vector bool int); 39698 vector bool int vec_sel (vector bool int, 39699 vector bool int, 39700 vector unsigned int); 39701 vector signed short vec_sel (vector signed short, 39702 vector signed short, 39703 vector bool short); 39704 vector signed short vec_sel (vector signed short, 39705 vector signed short, 39706 vector unsigned short); 39707 vector unsigned short vec_sel (vector unsigned short, 39708 vector unsigned short, 39709 vector bool short); 39710 vector unsigned short vec_sel (vector unsigned short, 39711 vector unsigned short, 39712 vector unsigned short); 39713 vector bool short vec_sel (vector bool short, 39714 vector bool short, 39715 vector bool short); 39716 vector bool short vec_sel (vector bool short, 39717 vector bool short, 39718 vector unsigned short); 39719 vector signed char vec_sel (vector signed char, 39720 vector signed char, 39721 vector bool char); 39722 vector signed char vec_sel (vector signed char, 39723 vector signed char, 39724 vector unsigned char); 39725 vector unsigned char vec_sel (vector unsigned char, 39726 vector unsigned char, 39727 vector bool char); 39728 vector unsigned char vec_sel (vector unsigned char, 39729 vector unsigned char, 39730 vector unsigned char); 39731 vector bool char vec_sel (vector bool char, 39732 vector bool char, 39733 vector bool char); 39734 vector bool char vec_sel (vector bool char, 39735 vector bool char, 39736 vector unsigned char); 39737 39738 vector signed char vec_sl (vector signed char, 39739 vector unsigned char); 39740 vector unsigned char vec_sl (vector unsigned char, 39741 vector unsigned char); 39742 vector signed short vec_sl (vector signed short, vector unsigned short); 39743 vector unsigned short vec_sl (vector unsigned short, 39744 vector unsigned short); 39745 vector signed int vec_sl (vector signed int, vector unsigned int); 39746 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 39747 39748 vector signed int vec_vslw (vector signed int, vector unsigned int); 39749 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 39750 39751 vector signed short vec_vslh (vector signed short, 39752 vector unsigned short); 39753 vector unsigned short vec_vslh (vector unsigned short, 39754 vector unsigned short); 39755 39756 vector signed char vec_vslb (vector signed char, vector unsigned char); 39757 vector unsigned char vec_vslb (vector unsigned char, 39758 vector unsigned char); 39759 39760 vector float vec_sld (vector float, vector float, const int); 39761 vector signed int vec_sld (vector signed int, 39762 vector signed int, 39763 const int); 39764 vector unsigned int vec_sld (vector unsigned int, 39765 vector unsigned int, 39766 const int); 39767 vector bool int vec_sld (vector bool int, 39768 vector bool int, 39769 const int); 39770 vector signed short vec_sld (vector signed short, 39771 vector signed short, 39772 const int); 39773 vector unsigned short vec_sld (vector unsigned short, 39774 vector unsigned short, 39775 const int); 39776 vector bool short vec_sld (vector bool short, 39777 vector bool short, 39778 const int); 39779 vector pixel vec_sld (vector pixel, 39780 vector pixel, 39781 const int); 39782 vector signed char vec_sld (vector signed char, 39783 vector signed char, 39784 const int); 39785 vector unsigned char vec_sld (vector unsigned char, 39786 vector unsigned char, 39787 const int); 39788 vector bool char vec_sld (vector bool char, 39789 vector bool char, 39790 const int); 39791 39792 vector signed int vec_sll (vector signed int, 39793 vector unsigned int); 39794 vector signed int vec_sll (vector signed int, 39795 vector unsigned short); 39796 vector signed int vec_sll (vector signed int, 39797 vector unsigned char); 39798 vector unsigned int vec_sll (vector unsigned int, 39799 vector unsigned int); 39800 vector unsigned int vec_sll (vector unsigned int, 39801 vector unsigned short); 39802 vector unsigned int vec_sll (vector unsigned int, 39803 vector unsigned char); 39804 vector bool int vec_sll (vector bool int, 39805 vector unsigned int); 39806 vector bool int vec_sll (vector bool int, 39807 vector unsigned short); 39808 vector bool int vec_sll (vector bool int, 39809 vector unsigned char); 39810 vector signed short vec_sll (vector signed short, 39811 vector unsigned int); 39812 vector signed short vec_sll (vector signed short, 39813 vector unsigned short); 39814 vector signed short vec_sll (vector signed short, 39815 vector unsigned char); 39816 vector unsigned short vec_sll (vector unsigned short, 39817 vector unsigned int); 39818 vector unsigned short vec_sll (vector unsigned short, 39819 vector unsigned short); 39820 vector unsigned short vec_sll (vector unsigned short, 39821 vector unsigned char); 39822 vector bool short vec_sll (vector bool short, vector unsigned int); 39823 vector bool short vec_sll (vector bool short, vector unsigned short); 39824 vector bool short vec_sll (vector bool short, vector unsigned char); 39825 vector pixel vec_sll (vector pixel, vector unsigned int); 39826 vector pixel vec_sll (vector pixel, vector unsigned short); 39827 vector pixel vec_sll (vector pixel, vector unsigned char); 39828 vector signed char vec_sll (vector signed char, vector unsigned int); 39829 vector signed char vec_sll (vector signed char, vector unsigned short); 39830 vector signed char vec_sll (vector signed char, vector unsigned char); 39831 vector unsigned char vec_sll (vector unsigned char, 39832 vector unsigned int); 39833 vector unsigned char vec_sll (vector unsigned char, 39834 vector unsigned short); 39835 vector unsigned char vec_sll (vector unsigned char, 39836 vector unsigned char); 39837 vector bool char vec_sll (vector bool char, vector unsigned int); 39838 vector bool char vec_sll (vector bool char, vector unsigned short); 39839 vector bool char vec_sll (vector bool char, vector unsigned char); 39840 39841 vector float vec_slo (vector float, vector signed char); 39842 vector float vec_slo (vector float, vector unsigned char); 39843 vector signed int vec_slo (vector signed int, vector signed char); 39844 vector signed int vec_slo (vector signed int, vector unsigned char); 39845 vector unsigned int vec_slo (vector unsigned int, vector signed char); 39846 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 39847 vector signed short vec_slo (vector signed short, vector signed char); 39848 vector signed short vec_slo (vector signed short, vector unsigned char); 39849 vector unsigned short vec_slo (vector unsigned short, 39850 vector signed char); 39851 vector unsigned short vec_slo (vector unsigned short, 39852 vector unsigned char); 39853 vector pixel vec_slo (vector pixel, vector signed char); 39854 vector pixel vec_slo (vector pixel, vector unsigned char); 39855 vector signed char vec_slo (vector signed char, vector signed char); 39856 vector signed char vec_slo (vector signed char, vector unsigned char); 39857 vector unsigned char vec_slo (vector unsigned char, vector signed char); 39858 vector unsigned char vec_slo (vector unsigned char, 39859 vector unsigned char); 39860 39861 vector signed char vec_splat (vector signed char, const int); 39862 vector unsigned char vec_splat (vector unsigned char, const int); 39863 vector bool char vec_splat (vector bool char, const int); 39864 vector signed short vec_splat (vector signed short, const int); 39865 vector unsigned short vec_splat (vector unsigned short, const int); 39866 vector bool short vec_splat (vector bool short, const int); 39867 vector pixel vec_splat (vector pixel, const int); 39868 vector float vec_splat (vector float, const int); 39869 vector signed int vec_splat (vector signed int, const int); 39870 vector unsigned int vec_splat (vector unsigned int, const int); 39871 vector bool int vec_splat (vector bool int, const int); 39872 39873 vector float vec_vspltw (vector float, const int); 39874 vector signed int vec_vspltw (vector signed int, const int); 39875 vector unsigned int vec_vspltw (vector unsigned int, const int); 39876 vector bool int vec_vspltw (vector bool int, const int); 39877 39878 vector bool short vec_vsplth (vector bool short, const int); 39879 vector signed short vec_vsplth (vector signed short, const int); 39880 vector unsigned short vec_vsplth (vector unsigned short, const int); 39881 vector pixel vec_vsplth (vector pixel, const int); 39882 39883 vector signed char vec_vspltb (vector signed char, const int); 39884 vector unsigned char vec_vspltb (vector unsigned char, const int); 39885 vector bool char vec_vspltb (vector bool char, const int); 39886 39887 vector signed char vec_splat_s8 (const int); 39888 39889 vector signed short vec_splat_s16 (const int); 39890 39891 vector signed int vec_splat_s32 (const int); 39892 39893 vector unsigned char vec_splat_u8 (const int); 39894 39895 vector unsigned short vec_splat_u16 (const int); 39896 39897 vector unsigned int vec_splat_u32 (const int); 39898 39899 vector signed char vec_sr (vector signed char, vector unsigned char); 39900 vector unsigned char vec_sr (vector unsigned char, 39901 vector unsigned char); 39902 vector signed short vec_sr (vector signed short, 39903 vector unsigned short); 39904 vector unsigned short vec_sr (vector unsigned short, 39905 vector unsigned short); 39906 vector signed int vec_sr (vector signed int, vector unsigned int); 39907 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 39908 39909 vector signed int vec_vsrw (vector signed int, vector unsigned int); 39910 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 39911 39912 vector signed short vec_vsrh (vector signed short, 39913 vector unsigned short); 39914 vector unsigned short vec_vsrh (vector unsigned short, 39915 vector unsigned short); 39916 39917 vector signed char vec_vsrb (vector signed char, vector unsigned char); 39918 vector unsigned char vec_vsrb (vector unsigned char, 39919 vector unsigned char); 39920 39921 vector signed char vec_sra (vector signed char, vector unsigned char); 39922 vector unsigned char vec_sra (vector unsigned char, 39923 vector unsigned char); 39924 vector signed short vec_sra (vector signed short, 39925 vector unsigned short); 39926 vector unsigned short vec_sra (vector unsigned short, 39927 vector unsigned short); 39928 vector signed int vec_sra (vector signed int, vector unsigned int); 39929 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 39930 39931 vector signed int vec_vsraw (vector signed int, vector unsigned int); 39932 vector unsigned int vec_vsraw (vector unsigned int, 39933 vector unsigned int); 39934 39935 vector signed short vec_vsrah (vector signed short, 39936 vector unsigned short); 39937 vector unsigned short vec_vsrah (vector unsigned short, 39938 vector unsigned short); 39939 39940 vector signed char vec_vsrab (vector signed char, vector unsigned char); 39941 vector unsigned char vec_vsrab (vector unsigned char, 39942 vector unsigned char); 39943 39944 vector signed int vec_srl (vector signed int, vector unsigned int); 39945 vector signed int vec_srl (vector signed int, vector unsigned short); 39946 vector signed int vec_srl (vector signed int, vector unsigned char); 39947 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 39948 vector unsigned int vec_srl (vector unsigned int, 39949 vector unsigned short); 39950 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 39951 vector bool int vec_srl (vector bool int, vector unsigned int); 39952 vector bool int vec_srl (vector bool int, vector unsigned short); 39953 vector bool int vec_srl (vector bool int, vector unsigned char); 39954 vector signed short vec_srl (vector signed short, vector unsigned int); 39955 vector signed short vec_srl (vector signed short, 39956 vector unsigned short); 39957 vector signed short vec_srl (vector signed short, vector unsigned char); 39958 vector unsigned short vec_srl (vector unsigned short, 39959 vector unsigned int); 39960 vector unsigned short vec_srl (vector unsigned short, 39961 vector unsigned short); 39962 vector unsigned short vec_srl (vector unsigned short, 39963 vector unsigned char); 39964 vector bool short vec_srl (vector bool short, vector unsigned int); 39965 vector bool short vec_srl (vector bool short, vector unsigned short); 39966 vector bool short vec_srl (vector bool short, vector unsigned char); 39967 vector pixel vec_srl (vector pixel, vector unsigned int); 39968 vector pixel vec_srl (vector pixel, vector unsigned short); 39969 vector pixel vec_srl (vector pixel, vector unsigned char); 39970 vector signed char vec_srl (vector signed char, vector unsigned int); 39971 vector signed char vec_srl (vector signed char, vector unsigned short); 39972 vector signed char vec_srl (vector signed char, vector unsigned char); 39973 vector unsigned char vec_srl (vector unsigned char, 39974 vector unsigned int); 39975 vector unsigned char vec_srl (vector unsigned char, 39976 vector unsigned short); 39977 vector unsigned char vec_srl (vector unsigned char, 39978 vector unsigned char); 39979 vector bool char vec_srl (vector bool char, vector unsigned int); 39980 vector bool char vec_srl (vector bool char, vector unsigned short); 39981 vector bool char vec_srl (vector bool char, vector unsigned char); 39982 39983 vector float vec_sro (vector float, vector signed char); 39984 vector float vec_sro (vector float, vector unsigned char); 39985 vector signed int vec_sro (vector signed int, vector signed char); 39986 vector signed int vec_sro (vector signed int, vector unsigned char); 39987 vector unsigned int vec_sro (vector unsigned int, vector signed char); 39988 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 39989 vector signed short vec_sro (vector signed short, vector signed char); 39990 vector signed short vec_sro (vector signed short, vector unsigned char); 39991 vector unsigned short vec_sro (vector unsigned short, 39992 vector signed char); 39993 vector unsigned short vec_sro (vector unsigned short, 39994 vector unsigned char); 39995 vector pixel vec_sro (vector pixel, vector signed char); 39996 vector pixel vec_sro (vector pixel, vector unsigned char); 39997 vector signed char vec_sro (vector signed char, vector signed char); 39998 vector signed char vec_sro (vector signed char, vector unsigned char); 39999 vector unsigned char vec_sro (vector unsigned char, vector signed char); 40000 vector unsigned char vec_sro (vector unsigned char, 40001 vector unsigned char); 40002 40003 void vec_st (vector float, int, vector float *); 40004 void vec_st (vector float, int, float *); 40005 void vec_st (vector signed int, int, vector signed int *); 40006 void vec_st (vector signed int, int, int *); 40007 void vec_st (vector unsigned int, int, vector unsigned int *); 40008 void vec_st (vector unsigned int, int, unsigned int *); 40009 void vec_st (vector bool int, int, vector bool int *); 40010 void vec_st (vector bool int, int, unsigned int *); 40011 void vec_st (vector bool int, int, int *); 40012 void vec_st (vector signed short, int, vector signed short *); 40013 void vec_st (vector signed short, int, short *); 40014 void vec_st (vector unsigned short, int, vector unsigned short *); 40015 void vec_st (vector unsigned short, int, unsigned short *); 40016 void vec_st (vector bool short, int, vector bool short *); 40017 void vec_st (vector bool short, int, unsigned short *); 40018 void vec_st (vector pixel, int, vector pixel *); 40019 void vec_st (vector pixel, int, unsigned short *); 40020 void vec_st (vector pixel, int, short *); 40021 void vec_st (vector bool short, int, short *); 40022 void vec_st (vector signed char, int, vector signed char *); 40023 void vec_st (vector signed char, int, signed char *); 40024 void vec_st (vector unsigned char, int, vector unsigned char *); 40025 void vec_st (vector unsigned char, int, unsigned char *); 40026 void vec_st (vector bool char, int, vector bool char *); 40027 void vec_st (vector bool char, int, unsigned char *); 40028 void vec_st (vector bool char, int, signed char *); 40029 40030 void vec_ste (vector signed char, int, signed char *); 40031 void vec_ste (vector unsigned char, int, unsigned char *); 40032 void vec_ste (vector bool char, int, signed char *); 40033 void vec_ste (vector bool char, int, unsigned char *); 40034 void vec_ste (vector signed short, int, short *); 40035 void vec_ste (vector unsigned short, int, unsigned short *); 40036 void vec_ste (vector bool short, int, short *); 40037 void vec_ste (vector bool short, int, unsigned short *); 40038 void vec_ste (vector pixel, int, short *); 40039 void vec_ste (vector pixel, int, unsigned short *); 40040 void vec_ste (vector float, int, float *); 40041 void vec_ste (vector signed int, int, int *); 40042 void vec_ste (vector unsigned int, int, unsigned int *); 40043 void vec_ste (vector bool int, int, int *); 40044 void vec_ste (vector bool int, int, unsigned int *); 40045 40046 void vec_stvewx (vector float, int, float *); 40047 void vec_stvewx (vector signed int, int, int *); 40048 void vec_stvewx (vector unsigned int, int, unsigned int *); 40049 void vec_stvewx (vector bool int, int, int *); 40050 void vec_stvewx (vector bool int, int, unsigned int *); 40051 40052 void vec_stvehx (vector signed short, int, short *); 40053 void vec_stvehx (vector unsigned short, int, unsigned short *); 40054 void vec_stvehx (vector bool short, int, short *); 40055 void vec_stvehx (vector bool short, int, unsigned short *); 40056 void vec_stvehx (vector pixel, int, short *); 40057 void vec_stvehx (vector pixel, int, unsigned short *); 40058 40059 void vec_stvebx (vector signed char, int, signed char *); 40060 void vec_stvebx (vector unsigned char, int, unsigned char *); 40061 void vec_stvebx (vector bool char, int, signed char *); 40062 void vec_stvebx (vector bool char, int, unsigned char *); 40063 40064 void vec_stl (vector float, int, vector float *); 40065 void vec_stl (vector float, int, float *); 40066 void vec_stl (vector signed int, int, vector signed int *); 40067 void vec_stl (vector signed int, int, int *); 40068 void vec_stl (vector unsigned int, int, vector unsigned int *); 40069 void vec_stl (vector unsigned int, int, unsigned int *); 40070 void vec_stl (vector bool int, int, vector bool int *); 40071 void vec_stl (vector bool int, int, unsigned int *); 40072 void vec_stl (vector bool int, int, int *); 40073 void vec_stl (vector signed short, int, vector signed short *); 40074 void vec_stl (vector signed short, int, short *); 40075 void vec_stl (vector unsigned short, int, vector unsigned short *); 40076 void vec_stl (vector unsigned short, int, unsigned short *); 40077 void vec_stl (vector bool short, int, vector bool short *); 40078 void vec_stl (vector bool short, int, unsigned short *); 40079 void vec_stl (vector bool short, int, short *); 40080 void vec_stl (vector pixel, int, vector pixel *); 40081 void vec_stl (vector pixel, int, unsigned short *); 40082 void vec_stl (vector pixel, int, short *); 40083 void vec_stl (vector signed char, int, vector signed char *); 40084 void vec_stl (vector signed char, int, signed char *); 40085 void vec_stl (vector unsigned char, int, vector unsigned char *); 40086 void vec_stl (vector unsigned char, int, unsigned char *); 40087 void vec_stl (vector bool char, int, vector bool char *); 40088 void vec_stl (vector bool char, int, unsigned char *); 40089 void vec_stl (vector bool char, int, signed char *); 40090 40091 vector signed char vec_sub (vector bool char, vector signed char); 40092 vector signed char vec_sub (vector signed char, vector bool char); 40093 vector signed char vec_sub (vector signed char, vector signed char); 40094 vector unsigned char vec_sub (vector bool char, vector unsigned char); 40095 vector unsigned char vec_sub (vector unsigned char, vector bool char); 40096 vector unsigned char vec_sub (vector unsigned char, 40097 vector unsigned char); 40098 vector signed short vec_sub (vector bool short, vector signed short); 40099 vector signed short vec_sub (vector signed short, vector bool short); 40100 vector signed short vec_sub (vector signed short, vector signed short); 40101 vector unsigned short vec_sub (vector bool short, 40102 vector unsigned short); 40103 vector unsigned short vec_sub (vector unsigned short, 40104 vector bool short); 40105 vector unsigned short vec_sub (vector unsigned short, 40106 vector unsigned short); 40107 vector signed int vec_sub (vector bool int, vector signed int); 40108 vector signed int vec_sub (vector signed int, vector bool int); 40109 vector signed int vec_sub (vector signed int, vector signed int); 40110 vector unsigned int vec_sub (vector bool int, vector unsigned int); 40111 vector unsigned int vec_sub (vector unsigned int, vector bool int); 40112 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 40113 vector float vec_sub (vector float, vector float); 40114 40115 vector float vec_vsubfp (vector float, vector float); 40116 40117 vector signed int vec_vsubuwm (vector bool int, vector signed int); 40118 vector signed int vec_vsubuwm (vector signed int, vector bool int); 40119 vector signed int vec_vsubuwm (vector signed int, vector signed int); 40120 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 40121 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 40122 vector unsigned int vec_vsubuwm (vector unsigned int, 40123 vector unsigned int); 40124 40125 vector signed short vec_vsubuhm (vector bool short, 40126 vector signed short); 40127 vector signed short vec_vsubuhm (vector signed short, 40128 vector bool short); 40129 vector signed short vec_vsubuhm (vector signed short, 40130 vector signed short); 40131 vector unsigned short vec_vsubuhm (vector bool short, 40132 vector unsigned short); 40133 vector unsigned short vec_vsubuhm (vector unsigned short, 40134 vector bool short); 40135 vector unsigned short vec_vsubuhm (vector unsigned short, 40136 vector unsigned short); 40137 40138 vector signed char vec_vsububm (vector bool char, vector signed char); 40139 vector signed char vec_vsububm (vector signed char, vector bool char); 40140 vector signed char vec_vsububm (vector signed char, vector signed char); 40141 vector unsigned char vec_vsububm (vector bool char, 40142 vector unsigned char); 40143 vector unsigned char vec_vsububm (vector unsigned char, 40144 vector bool char); 40145 vector unsigned char vec_vsububm (vector unsigned char, 40146 vector unsigned char); 40147 40148 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 40149 40150 vector unsigned char vec_subs (vector bool char, vector unsigned char); 40151 vector unsigned char vec_subs (vector unsigned char, vector bool char); 40152 vector unsigned char vec_subs (vector unsigned char, 40153 vector unsigned char); 40154 vector signed char vec_subs (vector bool char, vector signed char); 40155 vector signed char vec_subs (vector signed char, vector bool char); 40156 vector signed char vec_subs (vector signed char, vector signed char); 40157 vector unsigned short vec_subs (vector bool short, 40158 vector unsigned short); 40159 vector unsigned short vec_subs (vector unsigned short, 40160 vector bool short); 40161 vector unsigned short vec_subs (vector unsigned short, 40162 vector unsigned short); 40163 vector signed short vec_subs (vector bool short, vector signed short); 40164 vector signed short vec_subs (vector signed short, vector bool short); 40165 vector signed short vec_subs (vector signed short, vector signed short); 40166 vector unsigned int vec_subs (vector bool int, vector unsigned int); 40167 vector unsigned int vec_subs (vector unsigned int, vector bool int); 40168 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 40169 vector signed int vec_subs (vector bool int, vector signed int); 40170 vector signed int vec_subs (vector signed int, vector bool int); 40171 vector signed int vec_subs (vector signed int, vector signed int); 40172 40173 vector signed int vec_vsubsws (vector bool int, vector signed int); 40174 vector signed int vec_vsubsws (vector signed int, vector bool int); 40175 vector signed int vec_vsubsws (vector signed int, vector signed int); 40176 40177 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 40178 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 40179 vector unsigned int vec_vsubuws (vector unsigned int, 40180 vector unsigned int); 40181 40182 vector signed short vec_vsubshs (vector bool short, 40183 vector signed short); 40184 vector signed short vec_vsubshs (vector signed short, 40185 vector bool short); 40186 vector signed short vec_vsubshs (vector signed short, 40187 vector signed short); 40188 40189 vector unsigned short vec_vsubuhs (vector bool short, 40190 vector unsigned short); 40191 vector unsigned short vec_vsubuhs (vector unsigned short, 40192 vector bool short); 40193 vector unsigned short vec_vsubuhs (vector unsigned short, 40194 vector unsigned short); 40195 40196 vector signed char vec_vsubsbs (vector bool char, vector signed char); 40197 vector signed char vec_vsubsbs (vector signed char, vector bool char); 40198 vector signed char vec_vsubsbs (vector signed char, vector signed char); 40199 40200 vector unsigned char vec_vsububs (vector bool char, 40201 vector unsigned char); 40202 vector unsigned char vec_vsububs (vector unsigned char, 40203 vector bool char); 40204 vector unsigned char vec_vsububs (vector unsigned char, 40205 vector unsigned char); 40206 40207 vector unsigned int vec_sum4s (vector unsigned char, 40208 vector unsigned int); 40209 vector signed int vec_sum4s (vector signed char, vector signed int); 40210 vector signed int vec_sum4s (vector signed short, vector signed int); 40211 40212 vector signed int vec_vsum4shs (vector signed short, vector signed int); 40213 40214 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 40215 40216 vector unsigned int vec_vsum4ubs (vector unsigned char, 40217 vector unsigned int); 40218 40219 vector signed int vec_sum2s (vector signed int, vector signed int); 40220 40221 vector signed int vec_sums (vector signed int, vector signed int); 40222 40223 vector float vec_trunc (vector float); 40224 40225 vector signed short vec_unpackh (vector signed char); 40226 vector bool short vec_unpackh (vector bool char); 40227 vector signed int vec_unpackh (vector signed short); 40228 vector bool int vec_unpackh (vector bool short); 40229 vector unsigned int vec_unpackh (vector pixel); 40230 40231 vector bool int vec_vupkhsh (vector bool short); 40232 vector signed int vec_vupkhsh (vector signed short); 40233 40234 vector unsigned int vec_vupkhpx (vector pixel); 40235 40236 vector bool short vec_vupkhsb (vector bool char); 40237 vector signed short vec_vupkhsb (vector signed char); 40238 40239 vector signed short vec_unpackl (vector signed char); 40240 vector bool short vec_unpackl (vector bool char); 40241 vector unsigned int vec_unpackl (vector pixel); 40242 vector signed int vec_unpackl (vector signed short); 40243 vector bool int vec_unpackl (vector bool short); 40244 40245 vector unsigned int vec_vupklpx (vector pixel); 40246 40247 vector bool int vec_vupklsh (vector bool short); 40248 vector signed int vec_vupklsh (vector signed short); 40249 40250 vector bool short vec_vupklsb (vector bool char); 40251 vector signed short vec_vupklsb (vector signed char); 40252 40253 vector float vec_xor (vector float, vector float); 40254 vector float vec_xor (vector float, vector bool int); 40255 vector float vec_xor (vector bool int, vector float); 40256 vector bool int vec_xor (vector bool int, vector bool int); 40257 vector signed int vec_xor (vector bool int, vector signed int); 40258 vector signed int vec_xor (vector signed int, vector bool int); 40259 vector signed int vec_xor (vector signed int, vector signed int); 40260 vector unsigned int vec_xor (vector bool int, vector unsigned int); 40261 vector unsigned int vec_xor (vector unsigned int, vector bool int); 40262 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 40263 vector bool short vec_xor (vector bool short, vector bool short); 40264 vector signed short vec_xor (vector bool short, vector signed short); 40265 vector signed short vec_xor (vector signed short, vector bool short); 40266 vector signed short vec_xor (vector signed short, vector signed short); 40267 vector unsigned short vec_xor (vector bool short, 40268 vector unsigned short); 40269 vector unsigned short vec_xor (vector unsigned short, 40270 vector bool short); 40271 vector unsigned short vec_xor (vector unsigned short, 40272 vector unsigned short); 40273 vector signed char vec_xor (vector bool char, vector signed char); 40274 vector bool char vec_xor (vector bool char, vector bool char); 40275 vector signed char vec_xor (vector signed char, vector bool char); 40276 vector signed char vec_xor (vector signed char, vector signed char); 40277 vector unsigned char vec_xor (vector bool char, vector unsigned char); 40278 vector unsigned char vec_xor (vector unsigned char, vector bool char); 40279 vector unsigned char vec_xor (vector unsigned char, 40280 vector unsigned char); 40281 40282 int vec_all_eq (vector signed char, vector bool char); 40283 int vec_all_eq (vector signed char, vector signed char); 40284 int vec_all_eq (vector unsigned char, vector bool char); 40285 int vec_all_eq (vector unsigned char, vector unsigned char); 40286 int vec_all_eq (vector bool char, vector bool char); 40287 int vec_all_eq (vector bool char, vector unsigned char); 40288 int vec_all_eq (vector bool char, vector signed char); 40289 int vec_all_eq (vector signed short, vector bool short); 40290 int vec_all_eq (vector signed short, vector signed short); 40291 int vec_all_eq (vector unsigned short, vector bool short); 40292 int vec_all_eq (vector unsigned short, vector unsigned short); 40293 int vec_all_eq (vector bool short, vector bool short); 40294 int vec_all_eq (vector bool short, vector unsigned short); 40295 int vec_all_eq (vector bool short, vector signed short); 40296 int vec_all_eq (vector pixel, vector pixel); 40297 int vec_all_eq (vector signed int, vector bool int); 40298 int vec_all_eq (vector signed int, vector signed int); 40299 int vec_all_eq (vector unsigned int, vector bool int); 40300 int vec_all_eq (vector unsigned int, vector unsigned int); 40301 int vec_all_eq (vector bool int, vector bool int); 40302 int vec_all_eq (vector bool int, vector unsigned int); 40303 int vec_all_eq (vector bool int, vector signed int); 40304 int vec_all_eq (vector float, vector float); 40305 40306 int vec_all_ge (vector bool char, vector unsigned char); 40307 int vec_all_ge (vector unsigned char, vector bool char); 40308 int vec_all_ge (vector unsigned char, vector unsigned char); 40309 int vec_all_ge (vector bool char, vector signed char); 40310 int vec_all_ge (vector signed char, vector bool char); 40311 int vec_all_ge (vector signed char, vector signed char); 40312 int vec_all_ge (vector bool short, vector unsigned short); 40313 int vec_all_ge (vector unsigned short, vector bool short); 40314 int vec_all_ge (vector unsigned short, vector unsigned short); 40315 int vec_all_ge (vector signed short, vector signed short); 40316 int vec_all_ge (vector bool short, vector signed short); 40317 int vec_all_ge (vector signed short, vector bool short); 40318 int vec_all_ge (vector bool int, vector unsigned int); 40319 int vec_all_ge (vector unsigned int, vector bool int); 40320 int vec_all_ge (vector unsigned int, vector unsigned int); 40321 int vec_all_ge (vector bool int, vector signed int); 40322 int vec_all_ge (vector signed int, vector bool int); 40323 int vec_all_ge (vector signed int, vector signed int); 40324 int vec_all_ge (vector float, vector float); 40325 40326 int vec_all_gt (vector bool char, vector unsigned char); 40327 int vec_all_gt (vector unsigned char, vector bool char); 40328 int vec_all_gt (vector unsigned char, vector unsigned char); 40329 int vec_all_gt (vector bool char, vector signed char); 40330 int vec_all_gt (vector signed char, vector bool char); 40331 int vec_all_gt (vector signed char, vector signed char); 40332 int vec_all_gt (vector bool short, vector unsigned short); 40333 int vec_all_gt (vector unsigned short, vector bool short); 40334 int vec_all_gt (vector unsigned short, vector unsigned short); 40335 int vec_all_gt (vector bool short, vector signed short); 40336 int vec_all_gt (vector signed short, vector bool short); 40337 int vec_all_gt (vector signed short, vector signed short); 40338 int vec_all_gt (vector bool int, vector unsigned int); 40339 int vec_all_gt (vector unsigned int, vector bool int); 40340 int vec_all_gt (vector unsigned int, vector unsigned int); 40341 int vec_all_gt (vector bool int, vector signed int); 40342 int vec_all_gt (vector signed int, vector bool int); 40343 int vec_all_gt (vector signed int, vector signed int); 40344 int vec_all_gt (vector float, vector float); 40345 40346 int vec_all_in (vector float, vector float); 40347 40348 int vec_all_le (vector bool char, vector unsigned char); 40349 int vec_all_le (vector unsigned char, vector bool char); 40350 int vec_all_le (vector unsigned char, vector unsigned char); 40351 int vec_all_le (vector bool char, vector signed char); 40352 int vec_all_le (vector signed char, vector bool char); 40353 int vec_all_le (vector signed char, vector signed char); 40354 int vec_all_le (vector bool short, vector unsigned short); 40355 int vec_all_le (vector unsigned short, vector bool short); 40356 int vec_all_le (vector unsigned short, vector unsigned short); 40357 int vec_all_le (vector bool short, vector signed short); 40358 int vec_all_le (vector signed short, vector bool short); 40359 int vec_all_le (vector signed short, vector signed short); 40360 int vec_all_le (vector bool int, vector unsigned int); 40361 int vec_all_le (vector unsigned int, vector bool int); 40362 int vec_all_le (vector unsigned int, vector unsigned int); 40363 int vec_all_le (vector bool int, vector signed int); 40364 int vec_all_le (vector signed int, vector bool int); 40365 int vec_all_le (vector signed int, vector signed int); 40366 int vec_all_le (vector float, vector float); 40367 40368 int vec_all_lt (vector bool char, vector unsigned char); 40369 int vec_all_lt (vector unsigned char, vector bool char); 40370 int vec_all_lt (vector unsigned char, vector unsigned char); 40371 int vec_all_lt (vector bool char, vector signed char); 40372 int vec_all_lt (vector signed char, vector bool char); 40373 int vec_all_lt (vector signed char, vector signed char); 40374 int vec_all_lt (vector bool short, vector unsigned short); 40375 int vec_all_lt (vector unsigned short, vector bool short); 40376 int vec_all_lt (vector unsigned short, vector unsigned short); 40377 int vec_all_lt (vector bool short, vector signed short); 40378 int vec_all_lt (vector signed short, vector bool short); 40379 int vec_all_lt (vector signed short, vector signed short); 40380 int vec_all_lt (vector bool int, vector unsigned int); 40381 int vec_all_lt (vector unsigned int, vector bool int); 40382 int vec_all_lt (vector unsigned int, vector unsigned int); 40383 int vec_all_lt (vector bool int, vector signed int); 40384 int vec_all_lt (vector signed int, vector bool int); 40385 int vec_all_lt (vector signed int, vector signed int); 40386 int vec_all_lt (vector float, vector float); 40387 40388 int vec_all_nan (vector float); 40389 40390 int vec_all_ne (vector signed char, vector bool char); 40391 int vec_all_ne (vector signed char, vector signed char); 40392 int vec_all_ne (vector unsigned char, vector bool char); 40393 int vec_all_ne (vector unsigned char, vector unsigned char); 40394 int vec_all_ne (vector bool char, vector bool char); 40395 int vec_all_ne (vector bool char, vector unsigned char); 40396 int vec_all_ne (vector bool char, vector signed char); 40397 int vec_all_ne (vector signed short, vector bool short); 40398 int vec_all_ne (vector signed short, vector signed short); 40399 int vec_all_ne (vector unsigned short, vector bool short); 40400 int vec_all_ne (vector unsigned short, vector unsigned short); 40401 int vec_all_ne (vector bool short, vector bool short); 40402 int vec_all_ne (vector bool short, vector unsigned short); 40403 int vec_all_ne (vector bool short, vector signed short); 40404 int vec_all_ne (vector pixel, vector pixel); 40405 int vec_all_ne (vector signed int, vector bool int); 40406 int vec_all_ne (vector signed int, vector signed int); 40407 int vec_all_ne (vector unsigned int, vector bool int); 40408 int vec_all_ne (vector unsigned int, vector unsigned int); 40409 int vec_all_ne (vector bool int, vector bool int); 40410 int vec_all_ne (vector bool int, vector unsigned int); 40411 int vec_all_ne (vector bool int, vector signed int); 40412 int vec_all_ne (vector float, vector float); 40413 40414 int vec_all_nge (vector float, vector float); 40415 40416 int vec_all_ngt (vector float, vector float); 40417 40418 int vec_all_nle (vector float, vector float); 40419 40420 int vec_all_nlt (vector float, vector float); 40421 40422 int vec_all_numeric (vector float); 40423 40424 int vec_any_eq (vector signed char, vector bool char); 40425 int vec_any_eq (vector signed char, vector signed char); 40426 int vec_any_eq (vector unsigned char, vector bool char); 40427 int vec_any_eq (vector unsigned char, vector unsigned char); 40428 int vec_any_eq (vector bool char, vector bool char); 40429 int vec_any_eq (vector bool char, vector unsigned char); 40430 int vec_any_eq (vector bool char, vector signed char); 40431 int vec_any_eq (vector signed short, vector bool short); 40432 int vec_any_eq (vector signed short, vector signed short); 40433 int vec_any_eq (vector unsigned short, vector bool short); 40434 int vec_any_eq (vector unsigned short, vector unsigned short); 40435 int vec_any_eq (vector bool short, vector bool short); 40436 int vec_any_eq (vector bool short, vector unsigned short); 40437 int vec_any_eq (vector bool short, vector signed short); 40438 int vec_any_eq (vector pixel, vector pixel); 40439 int vec_any_eq (vector signed int, vector bool int); 40440 int vec_any_eq (vector signed int, vector signed int); 40441 int vec_any_eq (vector unsigned int, vector bool int); 40442 int vec_any_eq (vector unsigned int, vector unsigned int); 40443 int vec_any_eq (vector bool int, vector bool int); 40444 int vec_any_eq (vector bool int, vector unsigned int); 40445 int vec_any_eq (vector bool int, vector signed int); 40446 int vec_any_eq (vector float, vector float); 40447 40448 int vec_any_ge (vector signed char, vector bool char); 40449 int vec_any_ge (vector unsigned char, vector bool char); 40450 int vec_any_ge (vector unsigned char, vector unsigned char); 40451 int vec_any_ge (vector signed char, vector signed char); 40452 int vec_any_ge (vector bool char, vector unsigned char); 40453 int vec_any_ge (vector bool char, vector signed char); 40454 int vec_any_ge (vector unsigned short, vector bool short); 40455 int vec_any_ge (vector unsigned short, vector unsigned short); 40456 int vec_any_ge (vector signed short, vector signed short); 40457 int vec_any_ge (vector signed short, vector bool short); 40458 int vec_any_ge (vector bool short, vector unsigned short); 40459 int vec_any_ge (vector bool short, vector signed short); 40460 int vec_any_ge (vector signed int, vector bool int); 40461 int vec_any_ge (vector unsigned int, vector bool int); 40462 int vec_any_ge (vector unsigned int, vector unsigned int); 40463 int vec_any_ge (vector signed int, vector signed int); 40464 int vec_any_ge (vector bool int, vector unsigned int); 40465 int vec_any_ge (vector bool int, vector signed int); 40466 int vec_any_ge (vector float, vector float); 40467 40468 int vec_any_gt (vector bool char, vector unsigned char); 40469 int vec_any_gt (vector unsigned char, vector bool char); 40470 int vec_any_gt (vector unsigned char, vector unsigned char); 40471 int vec_any_gt (vector bool char, vector signed char); 40472 int vec_any_gt (vector signed char, vector bool char); 40473 int vec_any_gt (vector signed char, vector signed char); 40474 int vec_any_gt (vector bool short, vector unsigned short); 40475 int vec_any_gt (vector unsigned short, vector bool short); 40476 int vec_any_gt (vector unsigned short, vector unsigned short); 40477 int vec_any_gt (vector bool short, vector signed short); 40478 int vec_any_gt (vector signed short, vector bool short); 40479 int vec_any_gt (vector signed short, vector signed short); 40480 int vec_any_gt (vector bool int, vector unsigned int); 40481 int vec_any_gt (vector unsigned int, vector bool int); 40482 int vec_any_gt (vector unsigned int, vector unsigned int); 40483 int vec_any_gt (vector bool int, vector signed int); 40484 int vec_any_gt (vector signed int, vector bool int); 40485 int vec_any_gt (vector signed int, vector signed int); 40486 int vec_any_gt (vector float, vector float); 40487 40488 int vec_any_le (vector bool char, vector unsigned char); 40489 int vec_any_le (vector unsigned char, vector bool char); 40490 int vec_any_le (vector unsigned char, vector unsigned char); 40491 int vec_any_le (vector bool char, vector signed char); 40492 int vec_any_le (vector signed char, vector bool char); 40493 int vec_any_le (vector signed char, vector signed char); 40494 int vec_any_le (vector bool short, vector unsigned short); 40495 int vec_any_le (vector unsigned short, vector bool short); 40496 int vec_any_le (vector unsigned short, vector unsigned short); 40497 int vec_any_le (vector bool short, vector signed short); 40498 int vec_any_le (vector signed short, vector bool short); 40499 int vec_any_le (vector signed short, vector signed short); 40500 int vec_any_le (vector bool int, vector unsigned int); 40501 int vec_any_le (vector unsigned int, vector bool int); 40502 int vec_any_le (vector unsigned int, vector unsigned int); 40503 int vec_any_le (vector bool int, vector signed int); 40504 int vec_any_le (vector signed int, vector bool int); 40505 int vec_any_le (vector signed int, vector signed int); 40506 int vec_any_le (vector float, vector float); 40507 40508 int vec_any_lt (vector bool char, vector unsigned char); 40509 int vec_any_lt (vector unsigned char, vector bool char); 40510 int vec_any_lt (vector unsigned char, vector unsigned char); 40511 int vec_any_lt (vector bool char, vector signed char); 40512 int vec_any_lt (vector signed char, vector bool char); 40513 int vec_any_lt (vector signed char, vector signed char); 40514 int vec_any_lt (vector bool short, vector unsigned short); 40515 int vec_any_lt (vector unsigned short, vector bool short); 40516 int vec_any_lt (vector unsigned short, vector unsigned short); 40517 int vec_any_lt (vector bool short, vector signed short); 40518 int vec_any_lt (vector signed short, vector bool short); 40519 int vec_any_lt (vector signed short, vector signed short); 40520 int vec_any_lt (vector bool int, vector unsigned int); 40521 int vec_any_lt (vector unsigned int, vector bool int); 40522 int vec_any_lt (vector unsigned int, vector unsigned int); 40523 int vec_any_lt (vector bool int, vector signed int); 40524 int vec_any_lt (vector signed int, vector bool int); 40525 int vec_any_lt (vector signed int, vector signed int); 40526 int vec_any_lt (vector float, vector float); 40527 40528 int vec_any_nan (vector float); 40529 40530 int vec_any_ne (vector signed char, vector bool char); 40531 int vec_any_ne (vector signed char, vector signed char); 40532 int vec_any_ne (vector unsigned char, vector bool char); 40533 int vec_any_ne (vector unsigned char, vector unsigned char); 40534 int vec_any_ne (vector bool char, vector bool char); 40535 int vec_any_ne (vector bool char, vector unsigned char); 40536 int vec_any_ne (vector bool char, vector signed char); 40537 int vec_any_ne (vector signed short, vector bool short); 40538 int vec_any_ne (vector signed short, vector signed short); 40539 int vec_any_ne (vector unsigned short, vector bool short); 40540 int vec_any_ne (vector unsigned short, vector unsigned short); 40541 int vec_any_ne (vector bool short, vector bool short); 40542 int vec_any_ne (vector bool short, vector unsigned short); 40543 int vec_any_ne (vector bool short, vector signed short); 40544 int vec_any_ne (vector pixel, vector pixel); 40545 int vec_any_ne (vector signed int, vector bool int); 40546 int vec_any_ne (vector signed int, vector signed int); 40547 int vec_any_ne (vector unsigned int, vector bool int); 40548 int vec_any_ne (vector unsigned int, vector unsigned int); 40549 int vec_any_ne (vector bool int, vector bool int); 40550 int vec_any_ne (vector bool int, vector unsigned int); 40551 int vec_any_ne (vector bool int, vector signed int); 40552 int vec_any_ne (vector float, vector float); 40553 40554 int vec_any_nge (vector float, vector float); 40555 40556 int vec_any_ngt (vector float, vector float); 40557 40558 int vec_any_nle (vector float, vector float); 40559 40560 int vec_any_nlt (vector float, vector float); 40561 40562 int vec_any_numeric (vector float); 40563 40564 int vec_any_out (vector float, vector float); 40565 40566 If the vector/scalar (VSX) instruction set is available, the following 40567 additional functions are available: 40568 40569 vector double vec_abs (vector double); 40570 vector double vec_add (vector double, vector double); 40571 vector double vec_and (vector double, vector double); 40572 vector double vec_and (vector double, vector bool long); 40573 vector double vec_and (vector bool long, vector double); 40574 vector double vec_andc (vector double, vector double); 40575 vector double vec_andc (vector double, vector bool long); 40576 vector double vec_andc (vector bool long, vector double); 40577 vector double vec_ceil (vector double); 40578 vector bool long vec_cmpeq (vector double, vector double); 40579 vector bool long vec_cmpge (vector double, vector double); 40580 vector bool long vec_cmpgt (vector double, vector double); 40581 vector bool long vec_cmple (vector double, vector double); 40582 vector bool long vec_cmplt (vector double, vector double); 40583 vector float vec_div (vector float, vector float); 40584 vector double vec_div (vector double, vector double); 40585 vector double vec_floor (vector double); 40586 vector double vec_ld (int, const vector double *); 40587 vector double vec_ld (int, const double *); 40588 vector double vec_ldl (int, const vector double *); 40589 vector double vec_ldl (int, const double *); 40590 vector unsigned char vec_lvsl (int, const volatile double *); 40591 vector unsigned char vec_lvsr (int, const volatile double *); 40592 vector double vec_madd (vector double, vector double, vector double); 40593 vector double vec_max (vector double, vector double); 40594 vector double vec_min (vector double, vector double); 40595 vector float vec_msub (vector float, vector float, vector float); 40596 vector double vec_msub (vector double, vector double, vector double); 40597 vector float vec_mul (vector float, vector float); 40598 vector double vec_mul (vector double, vector double); 40599 vector float vec_nearbyint (vector float); 40600 vector double vec_nearbyint (vector double); 40601 vector float vec_nmadd (vector float, vector float, vector float); 40602 vector double vec_nmadd (vector double, vector double, vector double); 40603 vector double vec_nmsub (vector double, vector double, vector double); 40604 vector double vec_nor (vector double, vector double); 40605 vector double vec_or (vector double, vector double); 40606 vector double vec_or (vector double, vector bool long); 40607 vector double vec_or (vector bool long, vector double); 40608 vector double vec_perm (vector double, 40609 vector double, 40610 vector unsigned char); 40611 vector double vec_rint (vector double); 40612 vector double vec_recip (vector double, vector double); 40613 vector double vec_rsqrt (vector double); 40614 vector double vec_rsqrte (vector double); 40615 vector double vec_sel (vector double, vector double, vector bool long); 40616 vector double vec_sel (vector double, vector double, vector unsigned long); 40617 vector double vec_sub (vector double, vector double); 40618 vector float vec_sqrt (vector float); 40619 vector double vec_sqrt (vector double); 40620 void vec_st (vector double, int, vector double *); 40621 void vec_st (vector double, int, double *); 40622 vector double vec_trunc (vector double); 40623 vector double vec_xor (vector double, vector double); 40624 vector double vec_xor (vector double, vector bool long); 40625 vector double vec_xor (vector bool long, vector double); 40626 int vec_all_eq (vector double, vector double); 40627 int vec_all_ge (vector double, vector double); 40628 int vec_all_gt (vector double, vector double); 40629 int vec_all_le (vector double, vector double); 40630 int vec_all_lt (vector double, vector double); 40631 int vec_all_nan (vector double); 40632 int vec_all_ne (vector double, vector double); 40633 int vec_all_nge (vector double, vector double); 40634 int vec_all_ngt (vector double, vector double); 40635 int vec_all_nle (vector double, vector double); 40636 int vec_all_nlt (vector double, vector double); 40637 int vec_all_numeric (vector double); 40638 int vec_any_eq (vector double, vector double); 40639 int vec_any_ge (vector double, vector double); 40640 int vec_any_gt (vector double, vector double); 40641 int vec_any_le (vector double, vector double); 40642 int vec_any_lt (vector double, vector double); 40643 int vec_any_nan (vector double); 40644 int vec_any_ne (vector double, vector double); 40645 int vec_any_nge (vector double, vector double); 40646 int vec_any_ngt (vector double, vector double); 40647 int vec_any_nle (vector double, vector double); 40648 int vec_any_nlt (vector double, vector double); 40649 int vec_any_numeric (vector double); 40650 40651 vector double vec_vsx_ld (int, const vector double *); 40652 vector double vec_vsx_ld (int, const double *); 40653 vector float vec_vsx_ld (int, const vector float *); 40654 vector float vec_vsx_ld (int, const float *); 40655 vector bool int vec_vsx_ld (int, const vector bool int *); 40656 vector signed int vec_vsx_ld (int, const vector signed int *); 40657 vector signed int vec_vsx_ld (int, const int *); 40658 vector signed int vec_vsx_ld (int, const long *); 40659 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 40660 vector unsigned int vec_vsx_ld (int, const unsigned int *); 40661 vector unsigned int vec_vsx_ld (int, const unsigned long *); 40662 vector bool short vec_vsx_ld (int, const vector bool short *); 40663 vector pixel vec_vsx_ld (int, const vector pixel *); 40664 vector signed short vec_vsx_ld (int, const vector signed short *); 40665 vector signed short vec_vsx_ld (int, const short *); 40666 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 40667 vector unsigned short vec_vsx_ld (int, const unsigned short *); 40668 vector bool char vec_vsx_ld (int, const vector bool char *); 40669 vector signed char vec_vsx_ld (int, const vector signed char *); 40670 vector signed char vec_vsx_ld (int, const signed char *); 40671 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 40672 vector unsigned char vec_vsx_ld (int, const unsigned char *); 40673 40674 void vec_vsx_st (vector double, int, vector double *); 40675 void vec_vsx_st (vector double, int, double *); 40676 void vec_vsx_st (vector float, int, vector float *); 40677 void vec_vsx_st (vector float, int, float *); 40678 void vec_vsx_st (vector signed int, int, vector signed int *); 40679 void vec_vsx_st (vector signed int, int, int *); 40680 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 40681 void vec_vsx_st (vector unsigned int, int, unsigned int *); 40682 void vec_vsx_st (vector bool int, int, vector bool int *); 40683 void vec_vsx_st (vector bool int, int, unsigned int *); 40684 void vec_vsx_st (vector bool int, int, int *); 40685 void vec_vsx_st (vector signed short, int, vector signed short *); 40686 void vec_vsx_st (vector signed short, int, short *); 40687 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 40688 void vec_vsx_st (vector unsigned short, int, unsigned short *); 40689 void vec_vsx_st (vector bool short, int, vector bool short *); 40690 void vec_vsx_st (vector bool short, int, unsigned short *); 40691 void vec_vsx_st (vector pixel, int, vector pixel *); 40692 void vec_vsx_st (vector pixel, int, unsigned short *); 40693 void vec_vsx_st (vector pixel, int, short *); 40694 void vec_vsx_st (vector bool short, int, short *); 40695 void vec_vsx_st (vector signed char, int, vector signed char *); 40696 void vec_vsx_st (vector signed char, int, signed char *); 40697 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 40698 void vec_vsx_st (vector unsigned char, int, unsigned char *); 40699 void vec_vsx_st (vector bool char, int, vector bool char *); 40700 void vec_vsx_st (vector bool char, int, unsigned char *); 40701 void vec_vsx_st (vector bool char, int, signed char *); 40702 40703 vector double vec_xxpermdi (vector double, vector double, int); 40704 vector float vec_xxpermdi (vector float, vector float, int); 40705 vector long long vec_xxpermdi (vector long long, vector long long, int); 40706 vector unsigned long long vec_xxpermdi (vector unsigned long long, 40707 vector unsigned long long, int); 40708 vector int vec_xxpermdi (vector int, vector int, int); 40709 vector unsigned int vec_xxpermdi (vector unsigned int, 40710 vector unsigned int, int); 40711 vector short vec_xxpermdi (vector short, vector short, int); 40712 vector unsigned short vec_xxpermdi (vector unsigned short, 40713 vector unsigned short, int); 40714 vector signed char vec_xxpermdi (vector signed char, vector signed char, int); 40715 vector unsigned char vec_xxpermdi (vector unsigned char, 40716 vector unsigned char, int); 40717 40718 vector double vec_xxsldi (vector double, vector double, int); 40719 vector float vec_xxsldi (vector float, vector float, int); 40720 vector long long vec_xxsldi (vector long long, vector long long, int); 40721 vector unsigned long long vec_xxsldi (vector unsigned long long, 40722 vector unsigned long long, int); 40723 vector int vec_xxsldi (vector int, vector int, int); 40724 vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int); 40725 vector short vec_xxsldi (vector short, vector short, int); 40726 vector unsigned short vec_xxsldi (vector unsigned short, 40727 vector unsigned short, int); 40728 vector signed char vec_xxsldi (vector signed char, vector signed char, int); 40729 vector unsigned char vec_xxsldi (vector unsigned char, 40730 vector unsigned char, int); 40731 40732 Note that the 'vec_ld' and 'vec_st' built-in functions always generate 40733 the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction 40734 set is available. The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions 40735 always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X' 40736 instructions. 40737 40738 If the ISA 2.07 additions to the vector/scalar (power8-vector) 40739 instruction set is available, the following additional functions are 40740 available for both 32-bit and 64-bit targets. For 64-bit targets, you 40741 can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG 40742 instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of 40743 VECTOR UNSIGNED LONG LONG. 40744 40745 vector long long vec_abs (vector long long); 40746 40747 vector long long vec_add (vector long long, vector long long); 40748 vector unsigned long long vec_add (vector unsigned long long, 40749 vector unsigned long long); 40750 40751 int vec_all_eq (vector long long, vector long long); 40752 int vec_all_ge (vector long long, vector long long); 40753 int vec_all_gt (vector long long, vector long long); 40754 int vec_all_le (vector long long, vector long long); 40755 int vec_all_lt (vector long long, vector long long); 40756 int vec_all_ne (vector long long, vector long long); 40757 int vec_any_eq (vector long long, vector long long); 40758 int vec_any_ge (vector long long, vector long long); 40759 int vec_any_gt (vector long long, vector long long); 40760 int vec_any_le (vector long long, vector long long); 40761 int vec_any_lt (vector long long, vector long long); 40762 int vec_any_ne (vector long long, vector long long); 40763 40764 vector long long vec_eqv (vector long long, vector long long); 40765 vector long long vec_eqv (vector bool long long, vector long long); 40766 vector long long vec_eqv (vector long long, vector bool long long); 40767 vector unsigned long long vec_eqv (vector unsigned long long, 40768 vector unsigned long long); 40769 vector unsigned long long vec_eqv (vector bool long long, 40770 vector unsigned long long); 40771 vector unsigned long long vec_eqv (vector unsigned long long, 40772 vector bool long long); 40773 vector int vec_eqv (vector int, vector int); 40774 vector int vec_eqv (vector bool int, vector int); 40775 vector int vec_eqv (vector int, vector bool int); 40776 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); 40777 vector unsigned int vec_eqv (vector bool unsigned int, 40778 vector unsigned int); 40779 vector unsigned int vec_eqv (vector unsigned int, 40780 vector bool unsigned int); 40781 vector short vec_eqv (vector short, vector short); 40782 vector short vec_eqv (vector bool short, vector short); 40783 vector short vec_eqv (vector short, vector bool short); 40784 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); 40785 vector unsigned short vec_eqv (vector bool unsigned short, 40786 vector unsigned short); 40787 vector unsigned short vec_eqv (vector unsigned short, 40788 vector bool unsigned short); 40789 vector signed char vec_eqv (vector signed char, vector signed char); 40790 vector signed char vec_eqv (vector bool signed char, vector signed char); 40791 vector signed char vec_eqv (vector signed char, vector bool signed char); 40792 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); 40793 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char); 40794 vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char); 40795 40796 vector long long vec_max (vector long long, vector long long); 40797 vector unsigned long long vec_max (vector unsigned long long, 40798 vector unsigned long long); 40799 40800 vector long long vec_min (vector long long, vector long long); 40801 vector unsigned long long vec_min (vector unsigned long long, 40802 vector unsigned long long); 40803 40804 vector long long vec_nand (vector long long, vector long long); 40805 vector long long vec_nand (vector bool long long, vector long long); 40806 vector long long vec_nand (vector long long, vector bool long long); 40807 vector unsigned long long vec_nand (vector unsigned long long, 40808 vector unsigned long long); 40809 vector unsigned long long vec_nand (vector bool long long, 40810 vector unsigned long long); 40811 vector unsigned long long vec_nand (vector unsigned long long, 40812 vector bool long long); 40813 vector int vec_nand (vector int, vector int); 40814 vector int vec_nand (vector bool int, vector int); 40815 vector int vec_nand (vector int, vector bool int); 40816 vector unsigned int vec_nand (vector unsigned int, vector unsigned int); 40817 vector unsigned int vec_nand (vector bool unsigned int, 40818 vector unsigned int); 40819 vector unsigned int vec_nand (vector unsigned int, 40820 vector bool unsigned int); 40821 vector short vec_nand (vector short, vector short); 40822 vector short vec_nand (vector bool short, vector short); 40823 vector short vec_nand (vector short, vector bool short); 40824 vector unsigned short vec_nand (vector unsigned short, vector unsigned short); 40825 vector unsigned short vec_nand (vector bool unsigned short, 40826 vector unsigned short); 40827 vector unsigned short vec_nand (vector unsigned short, 40828 vector bool unsigned short); 40829 vector signed char vec_nand (vector signed char, vector signed char); 40830 vector signed char vec_nand (vector bool signed char, vector signed char); 40831 vector signed char vec_nand (vector signed char, vector bool signed char); 40832 vector unsigned char vec_nand (vector unsigned char, vector unsigned char); 40833 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char); 40834 vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char); 40835 40836 vector long long vec_orc (vector long long, vector long long); 40837 vector long long vec_orc (vector bool long long, vector long long); 40838 vector long long vec_orc (vector long long, vector bool long long); 40839 vector unsigned long long vec_orc (vector unsigned long long, 40840 vector unsigned long long); 40841 vector unsigned long long vec_orc (vector bool long long, 40842 vector unsigned long long); 40843 vector unsigned long long vec_orc (vector unsigned long long, 40844 vector bool long long); 40845 vector int vec_orc (vector int, vector int); 40846 vector int vec_orc (vector bool int, vector int); 40847 vector int vec_orc (vector int, vector bool int); 40848 vector unsigned int vec_orc (vector unsigned int, vector unsigned int); 40849 vector unsigned int vec_orc (vector bool unsigned int, 40850 vector unsigned int); 40851 vector unsigned int vec_orc (vector unsigned int, 40852 vector bool unsigned int); 40853 vector short vec_orc (vector short, vector short); 40854 vector short vec_orc (vector bool short, vector short); 40855 vector short vec_orc (vector short, vector bool short); 40856 vector unsigned short vec_orc (vector unsigned short, vector unsigned short); 40857 vector unsigned short vec_orc (vector bool unsigned short, 40858 vector unsigned short); 40859 vector unsigned short vec_orc (vector unsigned short, 40860 vector bool unsigned short); 40861 vector signed char vec_orc (vector signed char, vector signed char); 40862 vector signed char vec_orc (vector bool signed char, vector signed char); 40863 vector signed char vec_orc (vector signed char, vector bool signed char); 40864 vector unsigned char vec_orc (vector unsigned char, vector unsigned char); 40865 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char); 40866 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char); 40867 40868 vector int vec_pack (vector long long, vector long long); 40869 vector unsigned int vec_pack (vector unsigned long long, 40870 vector unsigned long long); 40871 vector bool int vec_pack (vector bool long long, vector bool long long); 40872 40873 vector int vec_packs (vector long long, vector long long); 40874 vector unsigned int vec_packs (vector unsigned long long, 40875 vector unsigned long long); 40876 40877 vector unsigned int vec_packsu (vector long long, vector long long); 40878 40879 vector long long vec_rl (vector long long, 40880 vector unsigned long long); 40881 vector long long vec_rl (vector unsigned long long, 40882 vector unsigned long long); 40883 40884 vector long long vec_sl (vector long long, vector unsigned long long); 40885 vector long long vec_sl (vector unsigned long long, 40886 vector unsigned long long); 40887 40888 vector long long vec_sr (vector long long, vector unsigned long long); 40889 vector unsigned long long char vec_sr (vector unsigned long long, 40890 vector unsigned long long); 40891 40892 vector long long vec_sra (vector long long, vector unsigned long long); 40893 vector unsigned long long vec_sra (vector unsigned long long, 40894 vector unsigned long long); 40895 40896 vector long long vec_sub (vector long long, vector long long); 40897 vector unsigned long long vec_sub (vector unsigned long long, 40898 vector unsigned long long); 40899 40900 vector long long vec_unpackh (vector int); 40901 vector unsigned long long vec_unpackh (vector unsigned int); 40902 40903 vector long long vec_unpackl (vector int); 40904 vector unsigned long long vec_unpackl (vector unsigned int); 40905 40906 vector long long vec_vaddudm (vector long long, vector long long); 40907 vector long long vec_vaddudm (vector bool long long, vector long long); 40908 vector long long vec_vaddudm (vector long long, vector bool long long); 40909 vector unsigned long long vec_vaddudm (vector unsigned long long, 40910 vector unsigned long long); 40911 vector unsigned long long vec_vaddudm (vector bool unsigned long long, 40912 vector unsigned long long); 40913 vector unsigned long long vec_vaddudm (vector unsigned long long, 40914 vector bool unsigned long long); 40915 40916 vector long long vec_vbpermq (vector signed char, vector signed char); 40917 vector long long vec_vbpermq (vector unsigned char, vector unsigned char); 40918 40919 vector long long vec_vclz (vector long long); 40920 vector unsigned long long vec_vclz (vector unsigned long long); 40921 vector int vec_vclz (vector int); 40922 vector unsigned int vec_vclz (vector int); 40923 vector short vec_vclz (vector short); 40924 vector unsigned short vec_vclz (vector unsigned short); 40925 vector signed char vec_vclz (vector signed char); 40926 vector unsigned char vec_vclz (vector unsigned char); 40927 40928 vector signed char vec_vclzb (vector signed char); 40929 vector unsigned char vec_vclzb (vector unsigned char); 40930 40931 vector long long vec_vclzd (vector long long); 40932 vector unsigned long long vec_vclzd (vector unsigned long long); 40933 40934 vector short vec_vclzh (vector short); 40935 vector unsigned short vec_vclzh (vector unsigned short); 40936 40937 vector int vec_vclzw (vector int); 40938 vector unsigned int vec_vclzw (vector int); 40939 40940 vector signed char vec_vgbbd (vector signed char); 40941 vector unsigned char vec_vgbbd (vector unsigned char); 40942 40943 vector long long vec_vmaxsd (vector long long, vector long long); 40944 40945 vector unsigned long long vec_vmaxud (vector unsigned long long, 40946 unsigned vector long long); 40947 40948 vector long long vec_vminsd (vector long long, vector long long); 40949 40950 vector unsigned long long vec_vminud (vector long long, 40951 vector long long); 40952 40953 vector int vec_vpksdss (vector long long, vector long long); 40954 vector unsigned int vec_vpksdss (vector long long, vector long long); 40955 40956 vector unsigned int vec_vpkudus (vector unsigned long long, 40957 vector unsigned long long); 40958 40959 vector int vec_vpkudum (vector long long, vector long long); 40960 vector unsigned int vec_vpkudum (vector unsigned long long, 40961 vector unsigned long long); 40962 vector bool int vec_vpkudum (vector bool long long, vector bool long long); 40963 40964 vector long long vec_vpopcnt (vector long long); 40965 vector unsigned long long vec_vpopcnt (vector unsigned long long); 40966 vector int vec_vpopcnt (vector int); 40967 vector unsigned int vec_vpopcnt (vector int); 40968 vector short vec_vpopcnt (vector short); 40969 vector unsigned short vec_vpopcnt (vector unsigned short); 40970 vector signed char vec_vpopcnt (vector signed char); 40971 vector unsigned char vec_vpopcnt (vector unsigned char); 40972 40973 vector signed char vec_vpopcntb (vector signed char); 40974 vector unsigned char vec_vpopcntb (vector unsigned char); 40975 40976 vector long long vec_vpopcntd (vector long long); 40977 vector unsigned long long vec_vpopcntd (vector unsigned long long); 40978 40979 vector short vec_vpopcnth (vector short); 40980 vector unsigned short vec_vpopcnth (vector unsigned short); 40981 40982 vector int vec_vpopcntw (vector int); 40983 vector unsigned int vec_vpopcntw (vector int); 40984 40985 vector long long vec_vrld (vector long long, vector unsigned long long); 40986 vector unsigned long long vec_vrld (vector unsigned long long, 40987 vector unsigned long long); 40988 40989 vector long long vec_vsld (vector long long, vector unsigned long long); 40990 vector long long vec_vsld (vector unsigned long long, 40991 vector unsigned long long); 40992 40993 vector long long vec_vsrad (vector long long, vector unsigned long long); 40994 vector unsigned long long vec_vsrad (vector unsigned long long, 40995 vector unsigned long long); 40996 40997 vector long long vec_vsrd (vector long long, vector unsigned long long); 40998 vector unsigned long long char vec_vsrd (vector unsigned long long, 40999 vector unsigned long long); 41000 41001 vector long long vec_vsubudm (vector long long, vector long long); 41002 vector long long vec_vsubudm (vector bool long long, vector long long); 41003 vector long long vec_vsubudm (vector long long, vector bool long long); 41004 vector unsigned long long vec_vsubudm (vector unsigned long long, 41005 vector unsigned long long); 41006 vector unsigned long long vec_vsubudm (vector bool long long, 41007 vector unsigned long long); 41008 vector unsigned long long vec_vsubudm (vector unsigned long long, 41009 vector bool long long); 41010 41011 vector long long vec_vupkhsw (vector int); 41012 vector unsigned long long vec_vupkhsw (vector unsigned int); 41013 41014 vector long long vec_vupklsw (vector int); 41015 vector unsigned long long vec_vupklsw (vector int); 41016 41017 If the ISA 2.07 additions to the vector/scalar (power8-vector) 41018 instruction set is available, the following additional functions are 41019 available for 64-bit targets. New vector types (VECTOR __INT128_T and 41020 VECTOR __UINT128_T) are available to hold the __INT128_T and __UINT128_T 41021 types to use these builtins. 41022 41023 The normal vector extract, and set operations work on VECTOR __INT128_T 41024 and VECTOR __UINT128_T types, but the index value must be 0. 41025 41026 vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t); 41027 vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t); 41028 41029 vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t); 41030 vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t); 41031 41032 vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t, 41033 vector __int128_t); 41034 vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t, 41035 vector __uint128_t); 41036 41037 vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t, 41038 vector __int128_t); 41039 vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t, 41040 vector __uint128_t); 41041 41042 vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t, 41043 vector __int128_t); 41044 vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t, 41045 vector __uint128_t); 41046 41047 vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t, 41048 vector __int128_t); 41049 vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t, 41050 vector __uint128_t); 41051 41052 vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t); 41053 vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t); 41054 41055 __int128_t vec_vsubuqm (__int128_t, __int128_t); 41056 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t); 41057 41058 vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t); 41059 int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t); 41060 int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t); 41061 int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t); 41062 int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t); 41063 vector __int128_t bcdsub (vector __int128_t, vector__int128_t); 41064 int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t); 41065 int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t); 41066 int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t); 41067 int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t); 41068 41069 If the cryptographic instructions are enabled ('-mcrypto' or 41070 '-mcpu=power8'), the following builtins are enabled. 41071 41072 vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long); 41073 41074 vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long, 41075 vector unsigned long long); 41076 41077 vector unsigned long long __builtin_crypto_vcipherlast 41078 (vector unsigned long long, 41079 vector unsigned long long); 41080 41081 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long, 41082 vector unsigned long long); 41083 41084 vector unsigned long long __builtin_crypto_vncipherlast 41085 (vector unsigned long long, 41086 vector unsigned long long); 41087 41088 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char, 41089 vector unsigned char, 41090 vector unsigned char); 41091 41092 vector unsigned short __builtin_crypto_vpermxor (vector unsigned short, 41093 vector unsigned short, 41094 vector unsigned short); 41095 41096 vector unsigned int __builtin_crypto_vpermxor (vector unsigned int, 41097 vector unsigned int, 41098 vector unsigned int); 41099 41100 vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long, 41101 vector unsigned long long, 41102 vector unsigned long long); 41103 41104 vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char, 41105 vector unsigned char); 41106 41107 vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short, 41108 vector unsigned short); 41109 41110 vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int, 41111 vector unsigned int); 41112 41113 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long, 41114 vector unsigned long long); 41115 41116 vector unsigned long long __builtin_crypto_vshasigmad 41117 (vector unsigned long long, int, int); 41118 41119 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, 41120 int, int); 41121 41122 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and 41123 __BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant integer 41124 that is 0 or 1. The third argument to these builtin functions must be a 41125 constant integer in the range of 0 to 15. 41126 41127 41128 File: gcc.info, Node: PowerPC Hardware Transactional Memory Built-in Functions, Next: RX Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins 41129 41130 6.56.16 PowerPC Hardware Transactional Memory Built-in Functions 41131 ---------------------------------------------------------------- 41132 41133 GCC provides two interfaces for accessing the Hardware Transactional 41134 Memory (HTM) instructions available on some of the PowerPC family of 41135 prcoessors (eg, POWER8). The two interfaces come in a low level 41136 interface, consisting of built-in functions specific to PowerPC and a 41137 higher level interface consisting of inline functions that are common 41138 between PowerPC and S/390. 41139 41140 6.56.16.1 PowerPC HTM Low Level Built-in Functions 41141 .................................................. 41142 41143 The following low level built-in functions are available with '-mhtm' or 41144 '-mcpu=CPU' where CPU is 'power8' or later. They all generate the 41145 machine instruction that is part of the name. 41146 41147 The HTM built-ins return true or false depending on their success and 41148 their arguments match exactly the type and order of the associated 41149 hardware instruction's operands. Refer to the ISA manual for a 41150 description of each instruction's operands. 41151 41152 unsigned int __builtin_tbegin (unsigned int) 41153 unsigned int __builtin_tend (unsigned int) 41154 41155 unsigned int __builtin_tabort (unsigned int) 41156 unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int) 41157 unsigned int __builtin_tabortdci (unsigned int, unsigned int, int) 41158 unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int) 41159 unsigned int __builtin_tabortwci (unsigned int, unsigned int, int) 41160 41161 unsigned int __builtin_tcheck (unsigned int) 41162 unsigned int __builtin_treclaim (unsigned int) 41163 unsigned int __builtin_trechkpt (void) 41164 unsigned int __builtin_tsr (unsigned int) 41165 41166 In addition to the above HTM built-ins, we have added built-ins for 41167 some common extended mnemonics of the HTM instructions: 41168 41169 unsigned int __builtin_tendall (void) 41170 unsigned int __builtin_tresume (void) 41171 unsigned int __builtin_tsuspend (void) 41172 41173 The following set of built-in functions are available to gain access to 41174 the HTM specific special purpose registers. 41175 41176 unsigned long __builtin_get_texasr (void) 41177 unsigned long __builtin_get_texasru (void) 41178 unsigned long __builtin_get_tfhar (void) 41179 unsigned long __builtin_get_tfiar (void) 41180 41181 void __builtin_set_texasr (unsigned long); 41182 void __builtin_set_texasru (unsigned long); 41183 void __builtin_set_tfhar (unsigned long); 41184 void __builtin_set_tfiar (unsigned long); 41185 41186 Example usage of these low level built-in functions may look like: 41187 41188 #include <htmintrin.h> 41189 41190 int num_retries = 10; 41191 41192 while (1) 41193 { 41194 if (__builtin_tbegin (0)) 41195 { 41196 /* Transaction State Initiated. */ 41197 if (is_locked (lock)) 41198 __builtin_tabort (0); 41199 ... transaction code... 41200 __builtin_tend (0); 41201 break; 41202 } 41203 else 41204 { 41205 /* Transaction State Failed. Use locks if the transaction 41206 failure is "persistent" or we've tried too many times. */ 41207 if (num_retries-- <= 0 41208 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) 41209 { 41210 acquire_lock (lock); 41211 ... non transactional fallback path... 41212 release_lock (lock); 41213 break; 41214 } 41215 } 41216 } 41217 41218 One final built-in function has been added that returns the value of 41219 the 2-bit Transaction State field of the Machine Status Register (MSR) 41220 as stored in 'CR0'. 41221 41222 unsigned long __builtin_ttest (void) 41223 41224 This built-in can be used to determine the current transaction state 41225 using the following code example: 41226 41227 #include <htmintrin.h> 41228 41229 unsigned char tx_state = _HTM_STATE (__builtin_ttest ()); 41230 41231 if (tx_state == _HTM_TRANSACTIONAL) 41232 { 41233 /* Code to use in transactional state. */ 41234 } 41235 else if (tx_state == _HTM_NONTRANSACTIONAL) 41236 { 41237 /* Code to use in non-transactional state. */ 41238 } 41239 else if (tx_state == _HTM_SUSPENDED) 41240 { 41241 /* Code to use in transaction suspended state. */ 41242 } 41243 41244 6.56.16.2 PowerPC HTM High Level Inline Functions 41245 ................................................. 41246 41247 The following high level HTM interface is made available by including 41248 '<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8' 41249 or later. This interface is common between PowerPC and S/390, allowing 41250 users to write one HTM source implementation that can be compiled and 41251 executed on either system. 41252 41253 long __TM_simple_begin (void) 41254 long __TM_begin (void* const TM_buff) 41255 long __TM_end (void) 41256 void __TM_abort (void) 41257 void __TM_named_abort (unsigned char const code) 41258 void __TM_resume (void) 41259 void __TM_suspend (void) 41260 41261 long __TM_is_user_abort (void* const TM_buff) 41262 long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code) 41263 long __TM_is_illegal (void* const TM_buff) 41264 long __TM_is_footprint_exceeded (void* const TM_buff) 41265 long __TM_nesting_depth (void* const TM_buff) 41266 long __TM_is_nested_too_deep(void* const TM_buff) 41267 long __TM_is_conflict(void* const TM_buff) 41268 long __TM_is_failure_persistent(void* const TM_buff) 41269 long __TM_failure_address(void* const TM_buff) 41270 long long __TM_failure_code(void* const TM_buff) 41271 41272 Using these common set of HTM inline functions, we can create a more 41273 portable version of the HTM example in the previous section that will 41274 work on either PowerPC or S/390: 41275 41276 #include <htmxlintrin.h> 41277 41278 int num_retries = 10; 41279 TM_buff_type TM_buff; 41280 41281 while (1) 41282 { 41283 if (__TM_begin (TM_buff)) 41284 { 41285 /* Transaction State Initiated. */ 41286 if (is_locked (lock)) 41287 __TM_abort (); 41288 ... transaction code... 41289 __TM_end (); 41290 break; 41291 } 41292 else 41293 { 41294 /* Transaction State Failed. Use locks if the transaction 41295 failure is "persistent" or we've tried too many times. */ 41296 if (num_retries-- <= 0 41297 || __TM_is_failure_persistent (TM_buff)) 41298 { 41299 acquire_lock (lock); 41300 ... non transactional fallback path... 41301 release_lock (lock); 41302 break; 41303 } 41304 } 41305 } 41306 41307 41308 File: gcc.info, Node: RX Built-in Functions, Next: S/390 System z Built-in Functions, Prev: PowerPC Hardware Transactional Memory Built-in Functions, Up: Target Builtins 41309 41310 6.56.17 RX Built-in Functions 41311 ----------------------------- 41312 41313 GCC supports some of the RX instructions which cannot be expressed in 41314 the C programming language via the use of built-in functions. The 41315 following functions are supported: 41316 41317 -- Built-in Function: void __builtin_rx_brk (void) 41318 Generates the 'brk' machine instruction. 41319 41320 -- Built-in Function: void __builtin_rx_clrpsw (int) 41321 Generates the 'clrpsw' machine instruction to clear the specified 41322 bit in the processor status word. 41323 41324 -- Built-in Function: void __builtin_rx_int (int) 41325 Generates the 'int' machine instruction to generate an interrupt 41326 with the specified value. 41327 41328 -- Built-in Function: void __builtin_rx_machi (int, int) 41329 Generates the 'machi' machine instruction to add the result of 41330 multiplying the top 16 bits of the two arguments into the 41331 accumulator. 41332 41333 -- Built-in Function: void __builtin_rx_maclo (int, int) 41334 Generates the 'maclo' machine instruction to add the result of 41335 multiplying the bottom 16 bits of the two arguments into the 41336 accumulator. 41337 41338 -- Built-in Function: void __builtin_rx_mulhi (int, int) 41339 Generates the 'mulhi' machine instruction to place the result of 41340 multiplying the top 16 bits of the two arguments into the 41341 accumulator. 41342 41343 -- Built-in Function: void __builtin_rx_mullo (int, int) 41344 Generates the 'mullo' machine instruction to place the result of 41345 multiplying the bottom 16 bits of the two arguments into the 41346 accumulator. 41347 41348 -- Built-in Function: int __builtin_rx_mvfachi (void) 41349 Generates the 'mvfachi' machine instruction to read the top 32 bits 41350 of the accumulator. 41351 41352 -- Built-in Function: int __builtin_rx_mvfacmi (void) 41353 Generates the 'mvfacmi' machine instruction to read the middle 32 41354 bits of the accumulator. 41355 41356 -- Built-in Function: int __builtin_rx_mvfc (int) 41357 Generates the 'mvfc' machine instruction which reads the control 41358 register specified in its argument and returns its value. 41359 41360 -- Built-in Function: void __builtin_rx_mvtachi (int) 41361 Generates the 'mvtachi' machine instruction to set the top 32 bits 41362 of the accumulator. 41363 41364 -- Built-in Function: void __builtin_rx_mvtaclo (int) 41365 Generates the 'mvtaclo' machine instruction to set the bottom 32 41366 bits of the accumulator. 41367 41368 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 41369 Generates the 'mvtc' machine instruction which sets control 41370 register number 'reg' to 'val'. 41371 41372 -- Built-in Function: void __builtin_rx_mvtipl (int) 41373 Generates the 'mvtipl' machine instruction set the interrupt 41374 priority level. 41375 41376 -- Built-in Function: void __builtin_rx_racw (int) 41377 Generates the 'racw' machine instruction to round the accumulator 41378 according to the specified mode. 41379 41380 -- Built-in Function: int __builtin_rx_revw (int) 41381 Generates the 'revw' machine instruction which swaps the bytes in 41382 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 41383 and also bits 16-23 occupy bits 24-31 and vice versa. 41384 41385 -- Built-in Function: void __builtin_rx_rmpa (void) 41386 Generates the 'rmpa' machine instruction which initiates a repeated 41387 multiply and accumulate sequence. 41388 41389 -- Built-in Function: void __builtin_rx_round (float) 41390 Generates the 'round' machine instruction which returns the 41391 floating-point argument rounded according to the current rounding 41392 mode set in the floating-point status word register. 41393 41394 -- Built-in Function: int __builtin_rx_sat (int) 41395 Generates the 'sat' machine instruction which returns the saturated 41396 value of the argument. 41397 41398 -- Built-in Function: void __builtin_rx_setpsw (int) 41399 Generates the 'setpsw' machine instruction to set the specified bit 41400 in the processor status word. 41401 41402 -- Built-in Function: void __builtin_rx_wait (void) 41403 Generates the 'wait' machine instruction. 41404 41405 41406 File: gcc.info, Node: S/390 System z Built-in Functions, Next: SH Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 41407 41408 6.56.18 S/390 System z Built-in Functions 41409 ----------------------------------------- 41410 41411 -- Built-in Function: int __builtin_tbegin (void*) 41412 Generates the 'tbegin' machine instruction starting a 41413 non-constraint hardware transaction. If the parameter is non-NULL 41414 the memory area is used to store the transaction diagnostic buffer 41415 and will be passed as first operand to 'tbegin'. This buffer can 41416 be defined using the 'struct __htm_tdb' C struct defined in 41417 'htmintrin.h' and must reside on a double-word boundary. The 41418 second tbegin operand is set to '0xff0c'. This enables 41419 save/restore of all GPRs and disables aborts for FPR and AR 41420 manipulations inside the transaction body. The condition code set 41421 by the tbegin instruction is returned as integer value. The tbegin 41422 instruction by definition overwrites the content of all FPRs. The 41423 compiler will generate code which saves and restores the FPRs. For 41424 soft-float code it is recommended to used the '*_nofloat' variant. 41425 In order to prevent a TDB from being written it is required to pass 41426 an constant zero value as parameter. Passing the zero value 41427 through a variable is not sufficient. Although modifications of 41428 access registers inside the transaction will not trigger an 41429 transaction abort it is not supported to actually modify them. 41430 Access registers do not get saved when entering a transaction. 41431 They will have undefined state when reaching the abort code. 41432 41433 Macros for the possible return codes of tbegin are defined in the 41434 'htmintrin.h' header file: 41435 41436 '_HTM_TBEGIN_STARTED' 41437 'tbegin' has been executed as part of normal processing. The 41438 transaction body is supposed to be executed. 41439 '_HTM_TBEGIN_INDETERMINATE' 41440 The transaction was aborted due to an indeterminate condition which 41441 might be persistent. 41442 '_HTM_TBEGIN_TRANSIENT' 41443 The transaction aborted due to a transient failure. The 41444 transaction should be re-executed in that case. 41445 '_HTM_TBEGIN_PERSISTENT' 41446 The transaction aborted due to a persistent failure. Re-execution 41447 under same circumstances will not be productive. 41448 41449 -- Macro: _HTM_FIRST_USER_ABORT_CODE 41450 The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies 41451 the first abort code which can be used for '__builtin_tabort'. 41452 Values below this threshold are reserved for machine use. 41453 41454 -- Data type: struct __htm_tdb 41455 The 'struct __htm_tdb' defined in 'htmintrin.h' describes the 41456 structure of the transaction diagnostic block as specified in the 41457 Principles of Operation manual chapter 5-91. 41458 41459 -- Built-in Function: int __builtin_tbegin_nofloat (void*) 41460 Same as '__builtin_tbegin' but without FPR saves and restores. 41461 Using this variant in code making use of FPRs will leave the FPRs 41462 in undefined state when entering the transaction abort handler 41463 code. 41464 41465 -- Built-in Function: int __builtin_tbegin_retry (void*, int) 41466 In addition to '__builtin_tbegin' a loop for transient failures is 41467 generated. If tbegin returns a condition code of 2 the transaction 41468 will be retried as often as specified in the second argument. The 41469 perform processor assist instruction is used to tell the CPU about 41470 the number of fails so far. 41471 41472 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int) 41473 Same as '__builtin_tbegin_retry' but without FPR saves and 41474 restores. Using this variant in code making use of FPRs will leave 41475 the FPRs in undefined state when entering the transaction abort 41476 handler code. 41477 41478 -- Built-in Function: void __builtin_tbeginc (void) 41479 Generates the 'tbeginc' machine instruction starting a constraint 41480 hardware transaction. The second operand is set to '0xff08'. 41481 41482 -- Built-in Function: int __builtin_tend (void) 41483 Generates the 'tend' machine instruction finishing a transaction 41484 and making the changes visible to other threads. The condition 41485 code generated by tend is returned as integer value. 41486 41487 -- Built-in Function: void __builtin_tabort (int) 41488 Generates the 'tabort' machine instruction with the specified abort 41489 code. Abort codes from 0 through 255 are reserved and will result 41490 in an error message. 41491 41492 -- Built-in Function: void __builtin_tx_assist (int) 41493 Generates the 'ppa rX,rY,1' machine instruction. Where the integer 41494 parameter is loaded into rX and a value of zero is loaded into rY. 41495 The integer parameter specifies the number of times the transaction 41496 repeatedly aborted. 41497 41498 -- Built-in Function: int __builtin_tx_nesting_depth (void) 41499 Generates the 'etnd' machine instruction. The current nesting 41500 depth is returned as integer value. For a nesting depth of 0 the 41501 code is not executed as part of an transaction. 41502 41503 -- Built-in Function: void __builtin_non_tx_store (uint64_t *, 41504 uint64_t) 41505 41506 Generates the 'ntstg' machine instruction. The second argument is 41507 written to the first arguments location. The store operation will 41508 not be rolled-back in case of an transaction abort. 41509 41510 41511 File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: S/390 System z Built-in Functions, Up: Target Builtins 41512 41513 6.56.19 SH Built-in Functions 41514 ----------------------------- 41515 41516 The following built-in functions are supported on the SH1, SH2, SH3 and 41517 SH4 families of processors: 41518 41519 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR) 41520 Sets the 'GBR' register to the specified value PTR. This is 41521 usually used by system code that manages threads and execution 41522 contexts. The compiler normally does not generate code that 41523 modifies the contents of 'GBR' and thus the value is preserved 41524 across function calls. Changing the 'GBR' value in user code must 41525 be done with caution, since the compiler might use 'GBR' in order 41526 to access thread local variables. 41527 41528 -- Built-in Function: void * __builtin_thread_pointer (void) 41529 Returns the value that is currently set in the 'GBR' register. 41530 Memory loads and stores that use the thread pointer as a base 41531 address are turned into 'GBR' based displacement loads and stores, 41532 if possible. For example: 41533 struct my_tcb 41534 { 41535 int a, b, c, d, e; 41536 }; 41537 41538 int get_tcb_value (void) 41539 { 41540 // Generate 'mov.l @(8,gbr),r0' instruction 41541 return ((my_tcb*)__builtin_thread_pointer ())->c; 41542 } 41543 41544 41545 41546 File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins 41547 41548 6.56.20 SPARC VIS Built-in Functions 41549 ------------------------------------ 41550 41551 GCC supports SIMD operations on the SPARC using both the generic vector 41552 extensions (*note Vector Extensions::) as well as built-in functions for 41553 the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch, 41554 the VIS extension is exposed as the following built-in functions: 41555 41556 typedef int v1si __attribute__ ((vector_size (4))); 41557 typedef int v2si __attribute__ ((vector_size (8))); 41558 typedef short v4hi __attribute__ ((vector_size (8))); 41559 typedef short v2hi __attribute__ ((vector_size (4))); 41560 typedef unsigned char v8qi __attribute__ ((vector_size (8))); 41561 typedef unsigned char v4qi __attribute__ ((vector_size (4))); 41562 41563 void __builtin_vis_write_gsr (int64_t); 41564 int64_t __builtin_vis_read_gsr (void); 41565 41566 void * __builtin_vis_alignaddr (void *, long); 41567 void * __builtin_vis_alignaddrl (void *, long); 41568 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 41569 v2si __builtin_vis_faligndatav2si (v2si, v2si); 41570 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 41571 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 41572 41573 v4hi __builtin_vis_fexpand (v4qi); 41574 41575 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 41576 v4hi __builtin_vis_fmul8x16au (v4qi, v2hi); 41577 v4hi __builtin_vis_fmul8x16al (v4qi, v2hi); 41578 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 41579 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 41580 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 41581 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 41582 41583 v4qi __builtin_vis_fpack16 (v4hi); 41584 v8qi __builtin_vis_fpack32 (v2si, v8qi); 41585 v2hi __builtin_vis_fpackfix (v2si); 41586 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 41587 41588 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 41589 41590 long __builtin_vis_edge8 (void *, void *); 41591 long __builtin_vis_edge8l (void *, void *); 41592 long __builtin_vis_edge16 (void *, void *); 41593 long __builtin_vis_edge16l (void *, void *); 41594 long __builtin_vis_edge32 (void *, void *); 41595 long __builtin_vis_edge32l (void *, void *); 41596 41597 long __builtin_vis_fcmple16 (v4hi, v4hi); 41598 long __builtin_vis_fcmple32 (v2si, v2si); 41599 long __builtin_vis_fcmpne16 (v4hi, v4hi); 41600 long __builtin_vis_fcmpne32 (v2si, v2si); 41601 long __builtin_vis_fcmpgt16 (v4hi, v4hi); 41602 long __builtin_vis_fcmpgt32 (v2si, v2si); 41603 long __builtin_vis_fcmpeq16 (v4hi, v4hi); 41604 long __builtin_vis_fcmpeq32 (v2si, v2si); 41605 41606 v4hi __builtin_vis_fpadd16 (v4hi, v4hi); 41607 v2hi __builtin_vis_fpadd16s (v2hi, v2hi); 41608 v2si __builtin_vis_fpadd32 (v2si, v2si); 41609 v1si __builtin_vis_fpadd32s (v1si, v1si); 41610 v4hi __builtin_vis_fpsub16 (v4hi, v4hi); 41611 v2hi __builtin_vis_fpsub16s (v2hi, v2hi); 41612 v2si __builtin_vis_fpsub32 (v2si, v2si); 41613 v1si __builtin_vis_fpsub32s (v1si, v1si); 41614 41615 long __builtin_vis_array8 (long, long); 41616 long __builtin_vis_array16 (long, long); 41617 long __builtin_vis_array32 (long, long); 41618 41619 When you use the '-mvis2' switch, the VIS version 2.0 built-in 41620 functions also become available: 41621 41622 long __builtin_vis_bmask (long, long); 41623 int64_t __builtin_vis_bshuffledi (int64_t, int64_t); 41624 v2si __builtin_vis_bshufflev2si (v2si, v2si); 41625 v4hi __builtin_vis_bshufflev2si (v4hi, v4hi); 41626 v8qi __builtin_vis_bshufflev2si (v8qi, v8qi); 41627 41628 long __builtin_vis_edge8n (void *, void *); 41629 long __builtin_vis_edge8ln (void *, void *); 41630 long __builtin_vis_edge16n (void *, void *); 41631 long __builtin_vis_edge16ln (void *, void *); 41632 long __builtin_vis_edge32n (void *, void *); 41633 long __builtin_vis_edge32ln (void *, void *); 41634 41635 When you use the '-mvis3' switch, the VIS version 3.0 built-in 41636 functions also become available: 41637 41638 void __builtin_vis_cmask8 (long); 41639 void __builtin_vis_cmask16 (long); 41640 void __builtin_vis_cmask32 (long); 41641 41642 v4hi __builtin_vis_fchksm16 (v4hi, v4hi); 41643 41644 v4hi __builtin_vis_fsll16 (v4hi, v4hi); 41645 v4hi __builtin_vis_fslas16 (v4hi, v4hi); 41646 v4hi __builtin_vis_fsrl16 (v4hi, v4hi); 41647 v4hi __builtin_vis_fsra16 (v4hi, v4hi); 41648 v2si __builtin_vis_fsll16 (v2si, v2si); 41649 v2si __builtin_vis_fslas16 (v2si, v2si); 41650 v2si __builtin_vis_fsrl16 (v2si, v2si); 41651 v2si __builtin_vis_fsra16 (v2si, v2si); 41652 41653 long __builtin_vis_pdistn (v8qi, v8qi); 41654 41655 v4hi __builtin_vis_fmean16 (v4hi, v4hi); 41656 41657 int64_t __builtin_vis_fpadd64 (int64_t, int64_t); 41658 int64_t __builtin_vis_fpsub64 (int64_t, int64_t); 41659 41660 v4hi __builtin_vis_fpadds16 (v4hi, v4hi); 41661 v2hi __builtin_vis_fpadds16s (v2hi, v2hi); 41662 v4hi __builtin_vis_fpsubs16 (v4hi, v4hi); 41663 v2hi __builtin_vis_fpsubs16s (v2hi, v2hi); 41664 v2si __builtin_vis_fpadds32 (v2si, v2si); 41665 v1si __builtin_vis_fpadds32s (v1si, v1si); 41666 v2si __builtin_vis_fpsubs32 (v2si, v2si); 41667 v1si __builtin_vis_fpsubs32s (v1si, v1si); 41668 41669 long __builtin_vis_fucmple8 (v8qi, v8qi); 41670 long __builtin_vis_fucmpne8 (v8qi, v8qi); 41671 long __builtin_vis_fucmpgt8 (v8qi, v8qi); 41672 long __builtin_vis_fucmpeq8 (v8qi, v8qi); 41673 41674 float __builtin_vis_fhadds (float, float); 41675 double __builtin_vis_fhaddd (double, double); 41676 float __builtin_vis_fhsubs (float, float); 41677 double __builtin_vis_fhsubd (double, double); 41678 float __builtin_vis_fnhadds (float, float); 41679 double __builtin_vis_fnhaddd (double, double); 41680 41681 int64_t __builtin_vis_umulxhi (int64_t, int64_t); 41682 int64_t __builtin_vis_xmulx (int64_t, int64_t); 41683 int64_t __builtin_vis_xmulxhi (int64_t, int64_t); 41684 41685 41686 File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 41687 41688 6.56.21 SPU Built-in Functions 41689 ------------------------------ 41690 41691 GCC provides extensions for the SPU processor as described in the 41692 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 41693 found at <http://cell.scei.co.jp/> or 41694 <http://www.ibm.com/developerworks/power/cell/>. GCC's implementation 41695 differs in several ways. 41696 41697 * The optional extension of specifying vector constants in 41698 parentheses is not supported. 41699 41700 * A vector initializer requires no cast if the vector constant is of 41701 the same type as the variable it is initializing. 41702 41703 * If 'signed' or 'unsigned' is omitted, the signedness of the vector 41704 type is the default signedness of the base type. The default 41705 varies depending on the operating system, so a portable program 41706 should always specify the signedness. 41707 41708 * By default, the keyword '__vector' is added. The macro 'vector' is 41709 defined in '<spu_intrinsics.h>' and can be undefined. 41710 41711 * GCC allows using a 'typedef' name as the type specifier for a 41712 vector type. 41713 41714 * For C, overloaded functions are implemented with macros so the 41715 following does not work: 41716 41717 spu_add ((vector signed int){1, 2, 3, 4}, foo); 41718 41719 Since 'spu_add' is a macro, the vector constant in the example is 41720 treated as four separate arguments. Wrap the entire argument in 41721 parentheses for this to work. 41722 41723 * The extended version of '__builtin_expect' is not supported. 41724 41725 _Note:_ Only the interface described in the aforementioned 41726 specification is supported. Internally, GCC uses built-in functions to 41727 implement the required functionality, but these are not supported and 41728 are subject to change without notice. 41729 41730 41731 File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins 41732 41733 6.56.22 TI C6X Built-in Functions 41734 --------------------------------- 41735 41736 GCC provides intrinsics to access certain instructions of the TI C6X 41737 processors. These intrinsics, listed below, are available after 41738 inclusion of the 'c6x_intrinsics.h' header file. They map directly to 41739 C6X instructions. 41740 41741 41742 int _sadd (int, int) 41743 int _ssub (int, int) 41744 int _sadd2 (int, int) 41745 int _ssub2 (int, int) 41746 long long _mpy2 (int, int) 41747 long long _smpy2 (int, int) 41748 int _add4 (int, int) 41749 int _sub4 (int, int) 41750 int _saddu4 (int, int) 41751 41752 int _smpy (int, int) 41753 int _smpyh (int, int) 41754 int _smpyhl (int, int) 41755 int _smpylh (int, int) 41756 41757 int _sshl (int, int) 41758 int _subc (int, int) 41759 41760 int _avg2 (int, int) 41761 int _avgu4 (int, int) 41762 41763 int _clrr (int, int) 41764 int _extr (int, int) 41765 int _extru (int, int) 41766 int _abs (int) 41767 int _abs2 (int) 41768 41769 41770 41771 File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins 41772 41773 6.56.23 TILE-Gx Built-in Functions 41774 ---------------------------------- 41775 41776 GCC provides intrinsics to access every instruction of the TILE-Gx 41777 processor. The intrinsics are of the form: 41778 41779 41780 unsigned long long __insn_OP (...) 41781 41782 41783 Where OP is the name of the instruction. Refer to the ISA manual for 41784 the complete list of instructions. 41785 41786 GCC also provides intrinsics to directly access the network registers. 41787 The intrinsics are: 41788 41789 41790 unsigned long long __tile_idn0_receive (void) 41791 unsigned long long __tile_idn1_receive (void) 41792 unsigned long long __tile_udn0_receive (void) 41793 unsigned long long __tile_udn1_receive (void) 41794 unsigned long long __tile_udn2_receive (void) 41795 unsigned long long __tile_udn3_receive (void) 41796 void __tile_idn_send (unsigned long long) 41797 void __tile_udn_send (unsigned long long) 41798 41799 41800 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee 41801 that no network operations before it are reordered with those after it. 41802 41803 41804 File: gcc.info, Node: TILEPro Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins 41805 41806 6.56.24 TILEPro Built-in Functions 41807 ---------------------------------- 41808 41809 GCC provides intrinsics to access every instruction of the TILEPro 41810 processor. The intrinsics are of the form: 41811 41812 41813 unsigned __insn_OP (...) 41814 41815 41816 where OP is the name of the instruction. Refer to the ISA manual for 41817 the complete list of instructions. 41818 41819 GCC also provides intrinsics to directly access the network registers. 41820 The intrinsics are: 41821 41822 41823 unsigned __tile_idn0_receive (void) 41824 unsigned __tile_idn1_receive (void) 41825 unsigned __tile_sn_receive (void) 41826 unsigned __tile_udn0_receive (void) 41827 unsigned __tile_udn1_receive (void) 41828 unsigned __tile_udn2_receive (void) 41829 unsigned __tile_udn3_receive (void) 41830 void __tile_idn_send (unsigned) 41831 void __tile_sn_send (unsigned) 41832 void __tile_udn_send (unsigned) 41833 41834 41835 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee 41836 that no network operations before it are reordered with those after it. 41837 41838 41839 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 41840 41841 6.57 Format Checks Specific to Particular Target Machines 41842 ========================================================= 41843 41844 For some target machines, GCC supports additional options to the format 41845 attribute (*note Declaring Attributes of Functions: Function 41846 Attributes.). 41847 41848 * Menu: 41849 41850 * Solaris Format Checks:: 41851 * Darwin Format Checks:: 41852 41853 41854 File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks 41855 41856 6.57.1 Solaris Format Checks 41857 ---------------------------- 41858 41859 Solaris targets support the 'cmn_err' (or '__cmn_err__') format check. 41860 'cmn_err' accepts a subset of the standard 'printf' conversions, and the 41861 two-argument '%b' conversion for displaying bit-fields. See the Solaris 41862 man page for 'cmn_err' for more information. 41863 41864 41865 File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks 41866 41867 6.57.2 Darwin Format Checks 41868 --------------------------- 41869 41870 Darwin targets support the 'CFString' (or '__CFString__') in the format 41871 attribute context. Declarations made with such attribution are parsed 41872 for correct syntax and format argument types. However, parsing of the 41873 format string itself is currently undefined and is not carried out by 41874 this version of the compiler. 41875 41876 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers) 41877 may also be used as format arguments. Note that the relevant headers 41878 are only likely to be available on Darwin (OSX) installations. On such 41879 installations, the XCode and system documentation provide descriptions 41880 of 'CFString', 'CFStringRefs' and associated functions. 41881 41882 41883 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 41884 41885 6.58 Pragmas Accepted by GCC 41886 ============================ 41887 41888 GCC supports several types of pragmas, primarily in order to compile 41889 code originally written for other compilers. Note that in general we do 41890 not recommend the use of pragmas; *Note Function Attributes::, for 41891 further explanation. 41892 41893 * Menu: 41894 41895 * ARM Pragmas:: 41896 * M32C Pragmas:: 41897 * MeP Pragmas:: 41898 * RS/6000 and PowerPC Pragmas:: 41899 * Darwin Pragmas:: 41900 * Solaris Pragmas:: 41901 * Symbol-Renaming Pragmas:: 41902 * Structure-Packing Pragmas:: 41903 * Weak Pragmas:: 41904 * Diagnostic Pragmas:: 41905 * Visibility Pragmas:: 41906 * Push/Pop Macro Pragmas:: 41907 * Function Specific Option Pragmas:: 41908 41909 41910 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 41911 41912 6.58.1 ARM Pragmas 41913 ------------------ 41914 41915 The ARM target defines pragmas for controlling the default addition of 41916 'long_call' and 'short_call' attributes to functions. *Note Function 41917 Attributes::, for information about the effects of these attributes. 41918 41919 'long_calls' 41920 Set all subsequent functions to have the 'long_call' attribute. 41921 41922 'no_long_calls' 41923 Set all subsequent functions to have the 'short_call' attribute. 41924 41925 'long_calls_off' 41926 Do not affect the 'long_call' or 'short_call' attributes of 41927 subsequent functions. 41928 41929 41930 File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 41931 41932 6.58.2 M32C Pragmas 41933 ------------------- 41934 41935 'GCC memregs NUMBER' 41936 Overrides the command-line option '-memregs=' for the current file. 41937 Use with care! This pragma must be before any function in the 41938 file, and mixing different memregs values in different objects may 41939 make them incompatible. This pragma is useful when a 41940 performance-critical function uses a memreg for temporary values, 41941 as it may allow you to reduce the number of memregs used. 41942 41943 'ADDRESS NAME ADDRESS' 41944 For any declared symbols matching NAME, this does three things to 41945 that symbol: it forces the symbol to be located at the given 41946 address (a number), it forces the symbol to be volatile, and it 41947 changes the symbol's scope to be static. This pragma exists for 41948 compatibility with other compilers, but note that the common 41949 '1234H' numeric syntax is not supported (use '0x1234' instead). 41950 Example: 41951 41952 #pragma ADDRESS port3 0x103 41953 char port3; 41954 41955 41956 File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 41957 41958 6.58.3 MeP Pragmas 41959 ------------------ 41960 41961 'custom io_volatile (on|off)' 41962 Overrides the command-line option '-mio-volatile' for the current 41963 file. Note that for compatibility with future GCC releases, this 41964 option should only be used once before any 'io' variables in each 41965 file. 41966 41967 'GCC coprocessor available REGISTERS' 41968 Specifies which coprocessor registers are available to the register 41969 allocator. REGISTERS may be a single register, register range 41970 separated by ellipses, or comma-separated list of those. Example: 41971 41972 #pragma GCC coprocessor available $c0...$c10, $c28 41973 41974 'GCC coprocessor call_saved REGISTERS' 41975 Specifies which coprocessor registers are to be saved and restored 41976 by any function using them. REGISTERS may be a single register, 41977 register range separated by ellipses, or comma-separated list of 41978 those. Example: 41979 41980 #pragma GCC coprocessor call_saved $c4...$c6, $c31 41981 41982 'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 41983 Creates and defines a register class. These register classes can 41984 be used by inline 'asm' constructs. REGISTERS may be a single 41985 register, register range separated by ellipses, or comma-separated 41986 list of those. Example: 41987 41988 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 41989 41990 asm ("cpfoo %0" : "=B" (x)); 41991 41992 'GCC disinterrupt NAME , NAME ...' 41993 For the named functions, the compiler adds code to disable 41994 interrupts for the duration of those functions. If any functions 41995 so named are not encountered in the source, a warning is emitted 41996 that the pragma is not used. Examples: 41997 41998 #pragma disinterrupt foo 41999 #pragma disinterrupt bar, grill 42000 int foo () { ... } 42001 42002 'GCC call NAME , NAME ...' 42003 For the named functions, the compiler always uses a 42004 register-indirect call model when calling the named functions. 42005 Examples: 42006 42007 extern int foo (); 42008 #pragma call foo 42009 42010 42011 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 42012 42013 6.58.4 RS/6000 and PowerPC Pragmas 42014 ---------------------------------- 42015 42016 The RS/6000 and PowerPC targets define one pragma for controlling 42017 whether or not the 'longcall' attribute is added to function 42018 declarations by default. This pragma overrides the '-mlongcall' option, 42019 but not the 'longcall' and 'shortcall' attributes. *Note RS/6000 and 42020 PowerPC Options::, for more information about when long calls are and 42021 are not necessary. 42022 42023 'longcall (1)' 42024 Apply the 'longcall' attribute to all subsequent function 42025 declarations. 42026 42027 'longcall (0)' 42028 Do not apply the 'longcall' attribute to subsequent function 42029 declarations. 42030 42031 42032 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 42033 42034 6.58.5 Darwin Pragmas 42035 --------------------- 42036 42037 The following pragmas are available for all architectures running the 42038 Darwin operating system. These are useful for compatibility with other 42039 Mac OS compilers. 42040 42041 'mark TOKENS...' 42042 This pragma is accepted, but has no effect. 42043 42044 'options align=ALIGNMENT' 42045 This pragma sets the alignment of fields in structures. The values 42046 of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or 42047 'power', to emulate PowerPC alignment. Uses of this pragma nest 42048 properly; to restore the previous setting, use 'reset' for the 42049 ALIGNMENT. 42050 42051 'segment TOKENS...' 42052 This pragma is accepted, but has no effect. 42053 42054 'unused (VAR [, VAR]...)' 42055 This pragma declares variables to be possibly unused. GCC does not 42056 produce warnings for the listed variables. The effect is similar 42057 to that of the 'unused' attribute, except that this pragma may 42058 appear anywhere within the variables' scopes. 42059 42060 42061 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 42062 42063 6.58.6 Solaris Pragmas 42064 ---------------------- 42065 42066 The Solaris target supports '#pragma redefine_extname' (*note 42067 Symbol-Renaming Pragmas::). It also supports additional '#pragma' 42068 directives for compatibility with the system compiler. 42069 42070 'align ALIGNMENT (VARIABLE [, VARIABLE]...)' 42071 42072 Increase the minimum alignment of each VARIABLE to ALIGNMENT. This 42073 is the same as GCC's 'aligned' attribute *note Variable 42074 Attributes::). Macro expansion occurs on the arguments to this 42075 pragma when compiling C and Objective-C. It does not currently 42076 occur when compiling C++, but this is a bug which may be fixed in a 42077 future release. 42078 42079 'fini (FUNCTION [, FUNCTION]...)' 42080 42081 This pragma causes each listed FUNCTION to be called after main, or 42082 during shared module unloading, by adding a call to the '.fini' 42083 section. 42084 42085 'init (FUNCTION [, FUNCTION]...)' 42086 42087 This pragma causes each listed FUNCTION to be called during 42088 initialization (before 'main') or during shared module loading, by 42089 adding a call to the '.init' section. 42090 42091 42092 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 42093 42094 6.58.7 Symbol-Renaming Pragmas 42095 ------------------------------ 42096 42097 For compatibility with the Solaris system headers, GCC supports two 42098 '#pragma' directives that change the name used in assembly for a given 42099 declaration. To get this effect on all platforms supported by GCC, use 42100 the asm labels extension (*note Asm Labels::). 42101 42102 'redefine_extname OLDNAME NEWNAME' 42103 42104 This pragma gives the C function OLDNAME the assembly symbol 42105 NEWNAME. The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is 42106 defined if this pragma is available (currently on all platforms). 42107 42108 This pragma and the asm labels extension interact in a complicated 42109 manner. Here are some corner cases you may want to be aware of. 42110 42111 1. Both pragmas silently apply only to declarations with external 42112 linkage. Asm labels do not have this restriction. 42113 42114 2. In C++, both pragmas silently apply only to declarations with "C" 42115 linkage. Again, asm labels do not have this restriction. 42116 42117 3. If any of the three ways of changing the assembly name of a 42118 declaration is applied to a declaration whose assembly name has 42119 already been determined (either by a previous use of one of these 42120 features, or because the compiler needed the assembly name in order 42121 to generate code), and the new name is different, a warning issues 42122 and the name does not change. 42123 42124 4. The OLDNAME used by '#pragma redefine_extname' is always the 42125 C-language name. 42126 42127 42128 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 42129 42130 6.58.8 Structure-Packing Pragmas 42131 -------------------------------- 42132 42133 For compatibility with Microsoft Windows compilers, GCC supports a set 42134 of '#pragma' directives that change the maximum alignment of members of 42135 structures (other than zero-width bit-fields), unions, and classes 42136 subsequently defined. The N value below always is required to be a 42137 small power of two and specifies the new alignment in bytes. 42138 42139 1. '#pragma pack(N)' simply sets the new alignment. 42140 2. '#pragma pack()' sets the alignment to the one that was in effect 42141 when compilation started (see also command-line option 42142 '-fpack-struct[=N]' *note Code Gen Options::). 42143 3. '#pragma pack(push[,N])' pushes the current alignment setting on an 42144 internal stack and then optionally sets the new alignment. 42145 4. '#pragma pack(pop)' restores the alignment setting to the one saved 42146 at the top of the internal stack (and removes that stack entry). 42147 Note that '#pragma pack([N])' does not influence this internal 42148 stack; thus it is possible to have '#pragma pack(push)' followed by 42149 multiple '#pragma pack(N)' instances and finalized by a single 42150 '#pragma pack(pop)'. 42151 42152 Some targets, e.g. i386 and PowerPC, support the 'ms_struct' '#pragma' 42153 which lays out a structure as the documented '__attribute__ 42154 ((ms_struct))'. 42155 1. '#pragma ms_struct on' turns on the layout for structures declared. 42156 2. '#pragma ms_struct off' turns off the layout for structures 42157 declared. 42158 3. '#pragma ms_struct reset' goes back to the default layout. 42159 42160 42161 File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 42162 42163 6.58.9 Weak Pragmas 42164 ------------------- 42165 42166 For compatibility with SVR4, GCC supports a set of '#pragma' directives 42167 for declaring symbols to be weak, and defining weak aliases. 42168 42169 '#pragma weak SYMBOL' 42170 This pragma declares SYMBOL to be weak, as if the declaration had 42171 the attribute of the same name. The pragma may appear before or 42172 after the declaration of SYMBOL. It is not an error for SYMBOL to 42173 never be defined at all. 42174 42175 '#pragma weak SYMBOL1 = SYMBOL2' 42176 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 42177 an error if SYMBOL2 is not defined in the current translation unit. 42178 42179 42180 File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 42181 42182 6.58.10 Diagnostic Pragmas 42183 -------------------------- 42184 42185 GCC allows the user to selectively enable or disable certain types of 42186 diagnostics, and change the kind of the diagnostic. For example, a 42187 project's policy might require that all sources compile with '-Werror' 42188 but certain files might have exceptions allowing specific types of 42189 warnings. Or, a project might selectively enable diagnostics and treat 42190 them as errors depending on which preprocessor macros are defined. 42191 42192 '#pragma GCC diagnostic KIND OPTION' 42193 42194 Modifies the disposition of a diagnostic. Note that not all 42195 diagnostics are modifiable; at the moment only warnings (normally 42196 controlled by '-W...') can be controlled, and not all of them. Use 42197 '-fdiagnostics-show-option' to determine which diagnostics are 42198 controllable and which option controls them. 42199 42200 KIND is 'error' to treat this diagnostic as an error, 'warning' to 42201 treat it like a warning (even if '-Werror' is in effect), or 42202 'ignored' if the diagnostic is to be ignored. OPTION is a double 42203 quoted string that matches the command-line option. 42204 42205 #pragma GCC diagnostic warning "-Wformat" 42206 #pragma GCC diagnostic error "-Wformat" 42207 #pragma GCC diagnostic ignored "-Wformat" 42208 42209 Note that these pragmas override any command-line options. GCC 42210 keeps track of the location of each pragma, and issues diagnostics 42211 according to the state as of that point in the source file. Thus, 42212 pragmas occurring after a line do not affect diagnostics caused by 42213 that line. 42214 42215 '#pragma GCC diagnostic push' 42216 '#pragma GCC diagnostic pop' 42217 42218 Causes GCC to remember the state of the diagnostics as of each 42219 'push', and restore to that point at each 'pop'. If a 'pop' has no 42220 matching 'push', the command-line options are restored. 42221 42222 #pragma GCC diagnostic error "-Wuninitialized" 42223 foo(a); /* error is given for this one */ 42224 #pragma GCC diagnostic push 42225 #pragma GCC diagnostic ignored "-Wuninitialized" 42226 foo(b); /* no diagnostic for this one */ 42227 #pragma GCC diagnostic pop 42228 foo(c); /* error is given for this one */ 42229 #pragma GCC diagnostic pop 42230 foo(d); /* depends on command-line options */ 42231 42232 GCC also offers a simple mechanism for printing messages during 42233 compilation. 42234 42235 '#pragma message STRING' 42236 42237 Prints STRING as a compiler message on compilation. The message is 42238 informational only, and is neither a compilation warning nor an 42239 error. 42240 42241 #pragma message "Compiling " __FILE__ "..." 42242 42243 STRING may be parenthesized, and is printed with location 42244 information. For example, 42245 42246 #define DO_PRAGMA(x) _Pragma (#x) 42247 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 42248 42249 TODO(Remember to fix this) 42250 42251 prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to 42252 fix this'. 42253 42254 42255 File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 42256 42257 6.58.11 Visibility Pragmas 42258 -------------------------- 42259 42260 '#pragma GCC visibility push(VISIBILITY)' 42261 '#pragma GCC visibility pop' 42262 42263 This pragma allows the user to set the visibility for multiple 42264 declarations without having to give each a visibility attribute 42265 *Note Function Attributes::, for more information about visibility 42266 and the attribute syntax. 42267 42268 In C++, '#pragma GCC visibility' affects only namespace-scope 42269 declarations. Class members and template specializations are not 42270 affected; if you want to override the visibility for a particular 42271 member or instantiation, you must use an attribute. 42272 42273 42274 File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 42275 42276 6.58.12 Push/Pop Macro Pragmas 42277 ------------------------------ 42278 42279 For compatibility with Microsoft Windows compilers, GCC supports 42280 '#pragma push_macro("MACRO_NAME")' and '#pragma 42281 pop_macro("MACRO_NAME")'. 42282 42283 '#pragma push_macro("MACRO_NAME")' 42284 This pragma saves the value of the macro named as MACRO_NAME to the 42285 top of the stack for this macro. 42286 42287 '#pragma pop_macro("MACRO_NAME")' 42288 This pragma sets the value of the macro named as MACRO_NAME to the 42289 value on top of the stack for this macro. If the stack for 42290 MACRO_NAME is empty, the value of the macro remains unchanged. 42291 42292 For example: 42293 42294 #define X 1 42295 #pragma push_macro("X") 42296 #undef X 42297 #define X -1 42298 #pragma pop_macro("X") 42299 int x [X]; 42300 42301 In this example, the definition of X as 1 is saved by '#pragma 42302 push_macro' and restored by '#pragma pop_macro'. 42303 42304 42305 File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 42306 42307 6.58.13 Function Specific Option Pragmas 42308 ---------------------------------------- 42309 42310 '#pragma GCC target ("STRING"...)' 42311 42312 This pragma allows you to set target specific options for functions 42313 defined later in the source file. One or more strings can be 42314 specified. Each function that is defined after this point is as if 42315 'attribute((target("STRING")))' was specified for that function. 42316 The parenthesis around the options is optional. *Note Function 42317 Attributes::, for more information about the 'target' attribute and 42318 the attribute syntax. 42319 42320 The '#pragma GCC target' attribute is not implemented in GCC 42321 versions earlier than 4.4 for the i386/x86_64 and 4.6 for the 42322 PowerPC back ends. At present, it is not implemented for other 42323 back ends. 42324 42325 '#pragma GCC optimize ("STRING"...)' 42326 42327 This pragma allows you to set global optimization options for 42328 functions defined later in the source file. One or more strings 42329 can be specified. Each function that is defined after this point 42330 is as if 'attribute((optimize("STRING")))' was specified for that 42331 function. The parenthesis around the options is optional. *Note 42332 Function Attributes::, for more information about the 'optimize' 42333 attribute and the attribute syntax. 42334 42335 The '#pragma GCC optimize' pragma is not implemented in GCC 42336 versions earlier than 4.4. 42337 42338 '#pragma GCC push_options' 42339 '#pragma GCC pop_options' 42340 42341 These pragmas maintain a stack of the current target and 42342 optimization options. It is intended for include files where you 42343 temporarily want to switch to using a different '#pragma GCC 42344 target' or '#pragma GCC optimize' and then to pop back to the 42345 previous options. 42346 42347 The '#pragma GCC push_options' and '#pragma GCC pop_options' 42348 pragmas are not implemented in GCC versions earlier than 4.4. 42349 42350 '#pragma GCC reset_options' 42351 42352 This pragma clears the current '#pragma GCC target' and '#pragma 42353 GCC optimize' to use the default switches as specified on the 42354 command line. 42355 42356 The '#pragma GCC reset_options' pragma is not implemented in GCC 42357 versions earlier than 4.4. 42358 42359 42360 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 42361 42362 6.59 Unnamed struct/union fields within structs/unions 42363 ====================================================== 42364 42365 As permitted by ISO C11 and for compatibility with other compilers, GCC 42366 allows you to define a structure or union that contains, as fields, 42367 structures and unions without names. For example: 42368 42369 struct { 42370 int a; 42371 union { 42372 int b; 42373 float c; 42374 }; 42375 int d; 42376 } foo; 42377 42378 In this example, you are able to access members of the unnamed union 42379 with code like 'foo.b'. Note that only unnamed structs and unions are 42380 allowed, you may not have, for example, an unnamed 'int'. 42381 42382 You must never create such structures that cause ambiguous field 42383 definitions. For example, in this structure: 42384 42385 struct { 42386 int a; 42387 struct { 42388 int a; 42389 }; 42390 } foo; 42391 42392 it is ambiguous which 'a' is being referred to with 'foo.a'. The 42393 compiler gives errors for such constructs. 42394 42395 Unless '-fms-extensions' is used, the unnamed field must be a structure 42396 or union definition without a tag (for example, 'struct { int a; };'). 42397 If '-fms-extensions' is used, the field may also be a definition with a 42398 tag such as 'struct foo { int a; };', a reference to a previously 42399 defined structure or union such as 'struct foo;', or a reference to a 42400 'typedef' name for a previously defined structure or union type. 42401 42402 The option '-fplan9-extensions' enables '-fms-extensions' as well as 42403 two other extensions. First, a pointer to a structure is automatically 42404 converted to a pointer to an anonymous field for assignments and 42405 function calls. For example: 42406 42407 struct s1 { int a; }; 42408 struct s2 { struct s1; }; 42409 extern void f1 (struct s1 *); 42410 void f2 (struct s2 *p) { f1 (p); } 42411 42412 In the call to 'f1' inside 'f2', the pointer 'p' is converted into a 42413 pointer to the anonymous field. 42414 42415 Second, when the type of an anonymous field is a 'typedef' for a 42416 'struct' or 'union', code may refer to the field using the name of the 42417 'typedef'. 42418 42419 typedef struct { int a; } s1; 42420 struct s2 { s1; }; 42421 s1 f1 (struct s2 *p) { return p->s1; } 42422 42423 These usages are only permitted when they are not ambiguous. 42424 42425 42426 File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 42427 42428 6.60 Thread-Local Storage 42429 ========================= 42430 42431 Thread-local storage (TLS) is a mechanism by which variables are 42432 allocated such that there is one instance of the variable per extant 42433 thread. The runtime model GCC uses to implement this originates in the 42434 IA-64 processor-specific ABI, but has since been migrated to other 42435 processors as well. It requires significant support from the linker 42436 ('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and 42437 'libpthread.so'), so it is not available everywhere. 42438 42439 At the user level, the extension is visible with a new storage class 42440 keyword: '__thread'. For example: 42441 42442 __thread int i; 42443 extern __thread struct state s; 42444 static __thread char *p; 42445 42446 The '__thread' specifier may be used alone, with the 'extern' or 42447 'static' specifiers, but with no other storage class specifier. When 42448 used with 'extern' or 'static', '__thread' must appear immediately after 42449 the other storage class specifier. 42450 42451 The '__thread' specifier may be applied to any global, file-scoped 42452 static, function-scoped static, or static data member of a class. It 42453 may not be applied to block-scoped automatic or non-static data member. 42454 42455 When the address-of operator is applied to a thread-local variable, it 42456 is evaluated at run time and returns the address of the current thread's 42457 instance of that variable. An address so obtained may be used by any 42458 thread. When a thread terminates, any pointers to thread-local 42459 variables in that thread become invalid. 42460 42461 No static initialization may refer to the address of a thread-local 42462 variable. 42463 42464 In C++, if an initializer is present for a thread-local variable, it 42465 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 42466 standard. 42467 42468 See ELF Handling For Thread-Local Storage 42469 (http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 42470 the four thread-local storage addressing models, and how the runtime is 42471 expected to function. 42472 42473 * Menu: 42474 42475 * C99 Thread-Local Edits:: 42476 * C++98 Thread-Local Edits:: 42477 42478 42479 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 42480 42481 6.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 42482 ------------------------------------------------------- 42483 42484 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 42485 document the exact semantics of the language extension. 42486 42487 * '5.1.2 Execution environments' 42488 42489 Add new text after paragraph 1 42490 42491 Within either execution environment, a "thread" is a flow of 42492 control within a program. It is implementation defined 42493 whether or not there may be more than one thread associated 42494 with a program. It is implementation defined how threads 42495 beyond the first are created, the name and type of the 42496 function called at thread startup, and how threads may be 42497 terminated. However, objects with thread storage duration 42498 shall be initialized before thread startup. 42499 42500 * '6.2.4 Storage durations of objects' 42501 42502 Add new text before paragraph 3 42503 42504 An object whose identifier is declared with the storage-class 42505 specifier '__thread' has "thread storage duration". Its 42506 lifetime is the entire execution of the thread, and its stored 42507 value is initialized only once, prior to thread startup. 42508 42509 * '6.4.1 Keywords' 42510 42511 Add '__thread'. 42512 42513 * '6.7.1 Storage-class specifiers' 42514 42515 Add '__thread' to the list of storage class specifiers in paragraph 42516 1. 42517 42518 Change paragraph 2 to 42519 42520 With the exception of '__thread', at most one storage-class 42521 specifier may be given [...]. The '__thread' specifier may be 42522 used alone, or immediately following 'extern' or 'static'. 42523 42524 Add new text after paragraph 6 42525 42526 The declaration of an identifier for a variable that has block 42527 scope that specifies '__thread' shall also specify either 42528 'extern' or 'static'. 42529 42530 The '__thread' specifier shall be used only with variables. 42531 42532 42533 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 42534 42535 6.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 42536 -------------------------------------------------------- 42537 42538 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 42539 that document the exact semantics of the language extension. 42540 42541 * [intro.execution] 42542 42543 New text after paragraph 4 42544 42545 A "thread" is a flow of control within the abstract machine. 42546 It is implementation defined whether or not there may be more 42547 than one thread. 42548 42549 New text after paragraph 7 42550 42551 It is unspecified whether additional action must be taken to 42552 ensure when and whether side effects are visible to other 42553 threads. 42554 42555 * [lex.key] 42556 42557 Add '__thread'. 42558 42559 * [basic.start.main] 42560 42561 Add after paragraph 5 42562 42563 The thread that begins execution at the 'main' function is 42564 called the "main thread". It is implementation defined how 42565 functions beginning threads other than the main thread are 42566 designated or typed. A function so designated, as well as the 42567 'main' function, is called a "thread startup function". It is 42568 implementation defined what happens if a thread startup 42569 function returns. It is implementation defined what happens 42570 to other threads when any thread calls 'exit'. 42571 42572 * [basic.start.init] 42573 42574 Add after paragraph 4 42575 42576 The storage for an object of thread storage duration shall be 42577 statically initialized before the first statement of the 42578 thread startup function. An object of thread storage duration 42579 shall not require dynamic initialization. 42580 42581 * [basic.start.term] 42582 42583 Add after paragraph 3 42584 42585 The type of an object with thread storage duration shall not 42586 have a non-trivial destructor, nor shall it be an array type 42587 whose elements (directly or indirectly) have non-trivial 42588 destructors. 42589 42590 * [basic.stc] 42591 42592 Add "thread storage duration" to the list in paragraph 1. 42593 42594 Change paragraph 2 42595 42596 Thread, static, and automatic storage durations are associated 42597 with objects introduced by declarations [...]. 42598 42599 Add '__thread' to the list of specifiers in paragraph 3. 42600 42601 * [basic.stc.thread] 42602 42603 New section before [basic.stc.static] 42604 42605 The keyword '__thread' applied to a non-local object gives the 42606 object thread storage duration. 42607 42608 A local variable or class data member declared both 'static' 42609 and '__thread' gives the variable or member thread storage 42610 duration. 42611 42612 * [basic.stc.static] 42613 42614 Change paragraph 1 42615 42616 All objects that have neither thread storage duration, dynamic 42617 storage duration nor are local [...]. 42618 42619 * [dcl.stc] 42620 42621 Add '__thread' to the list in paragraph 1. 42622 42623 Change paragraph 1 42624 42625 With the exception of '__thread', at most one 42626 STORAGE-CLASS-SPECIFIER shall appear in a given 42627 DECL-SPECIFIER-SEQ. The '__thread' specifier may be used 42628 alone, or immediately following the 'extern' or 'static' 42629 specifiers. [...] 42630 42631 Add after paragraph 5 42632 42633 The '__thread' specifier can be applied only to the names of 42634 objects and to anonymous unions. 42635 42636 * [class.mem] 42637 42638 Add after paragraph 6 42639 42640 Non-'static' members shall not be '__thread'. 42641 42642 42643 File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 42644 42645 6.61 Binary constants using the '0b' prefix 42646 =========================================== 42647 42648 Integer constants can be written as binary constants, consisting of a 42649 sequence of '0' and '1' digits, prefixed by '0b' or '0B'. This is 42650 particularly useful in environments that operate a lot on the bit level 42651 (like microcontrollers). 42652 42653 The following statements are identical: 42654 42655 i = 42; 42656 i = 0x2a; 42657 i = 052; 42658 i = 0b101010; 42659 42660 The type of these constants follows the same rules as for octal or 42661 hexadecimal integer constants, so suffixes like 'L' or 'UL' can be 42662 applied. 42663 42664 42665 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 42666 42667 7 Extensions to the C++ Language 42668 ******************************** 42669 42670 The GNU compiler provides these extensions to the C++ language (and you 42671 can also use most of the C language extensions in your C++ programs). 42672 If you want to write code that checks whether these features are 42673 available, you can test for the GNU compiler the same way as for C 42674 programs: check for a predefined macro '__GNUC__'. You can also use 42675 '__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 42676 (cpp)Common Predefined Macros.). 42677 42678 * Menu: 42679 42680 * C++ Volatiles:: What constitutes an access to a volatile object. 42681 * Restricted Pointers:: C99 restricted pointers and references. 42682 * Vague Linkage:: Where G++ puts inlines, vtables and such. 42683 * C++ Interface:: You can use a single C++ header file for both 42684 declarations and definitions. 42685 * Template Instantiation:: Methods for ensuring that exactly one copy of 42686 each needed template instantiation is emitted. 42687 * Bound member functions:: You can extract a function pointer to the 42688 method denoted by a '->*' or '.*' expression. 42689 * C++ Attributes:: Variable, function, and type attributes for C++ only. 42690 * Function Multiversioning:: Declaring multiple function versions. 42691 * Namespace Association:: Strong using-directives for namespace association. 42692 * Type Traits:: Compiler support for type traits 42693 * Java Exceptions:: Tweaking exception handling to work with Java. 42694 * Deprecated Features:: Things will disappear from G++. 42695 * Backwards Compatibility:: Compatibilities with earlier definitions of C++. 42696 42697 42698 File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions 42699 42700 7.1 When is a Volatile C++ Object Accessed? 42701 =========================================== 42702 42703 The C++ standard differs from the C standard in its treatment of 42704 volatile objects. It fails to specify what constitutes a volatile 42705 access, except to say that C++ should behave in a similar manner to C 42706 with respect to volatiles, where possible. However, the different 42707 lvalueness of expressions between C and C++ complicate the behavior. 42708 G++ behaves the same as GCC for volatile access, *Note Volatiles: C 42709 Extensions, for a description of GCC's behavior. 42710 42711 The C and C++ language specifications differ when an object is accessed 42712 in a void context: 42713 42714 volatile int *src = SOMEVALUE; 42715 *src; 42716 42717 The C++ standard specifies that such expressions do not undergo lvalue 42718 to rvalue conversion, and that the type of the dereferenced object may 42719 be incomplete. The C++ standard does not specify explicitly that it is 42720 lvalue to rvalue conversion that is responsible for causing an access. 42721 There is reason to believe that it is, because otherwise certain simple 42722 expressions become undefined. However, because it would surprise most 42723 programmers, G++ treats dereferencing a pointer to volatile object of 42724 complete type as GCC would do for an equivalent type in C. When the 42725 object has incomplete type, G++ issues a warning; if you wish to force 42726 an error, you must force a conversion to rvalue with, for instance, a 42727 static cast. 42728 42729 When using a reference to volatile, G++ does not treat equivalent 42730 expressions as accesses to volatiles, but instead issues a warning that 42731 no volatile is accessed. The rationale for this is that otherwise it 42732 becomes difficult to determine where volatile access occur, and not 42733 possible to ignore the return value from functions returning volatile 42734 references. Again, if you wish to force a read, cast the reference to 42735 an rvalue. 42736 42737 G++ implements the same behavior as GCC does when assigning to a 42738 volatile object--there is no reread of the assigned-to object, the 42739 assigned rvalue is reused. Note that in C++ assignment expressions are 42740 lvalues, and if used as an lvalue, the volatile object is referred to. 42741 For instance, VREF refers to VOBJ, as expected, in the following 42742 example: 42743 42744 volatile int vobj; 42745 volatile int &vref = vobj = SOMETHING; 42746 42747 42748 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions 42749 42750 7.2 Restricting Pointer Aliasing 42751 ================================ 42752 42753 As with the C front end, G++ understands the C99 feature of restricted 42754 pointers, specified with the '__restrict__', or '__restrict' type 42755 qualifier. Because you cannot compile C++ by specifying the '-std=c99' 42756 language flag, 'restrict' is not a keyword in C++. 42757 42758 In addition to allowing restricted pointers, you can specify restricted 42759 references, which indicate that the reference is not aliased in the 42760 local context. 42761 42762 void fn (int *__restrict__ rptr, int &__restrict__ rref) 42763 { 42764 /* ... */ 42765 } 42766 42767 In the body of 'fn', RPTR points to an unaliased integer and RREF refers 42768 to a (different) unaliased integer. 42769 42770 You may also specify whether a member function's THIS pointer is 42771 unaliased by using '__restrict__' as a member function qualifier. 42772 42773 void T::fn () __restrict__ 42774 { 42775 /* ... */ 42776 } 42777 42778 Within the body of 'T::fn', THIS has the effective definition 'T 42779 *__restrict__ const this'. Notice that the interpretation of a 42780 '__restrict__' member function qualifier is different to that of 'const' 42781 or 'volatile' qualifier, in that it is applied to the pointer rather 42782 than the object. This is consistent with other compilers that implement 42783 restricted pointers. 42784 42785 As with all outermost parameter qualifiers, '__restrict__' is ignored 42786 in function definition matching. This means you only need to specify 42787 '__restrict__' in a function definition, rather than in a function 42788 prototype as well. 42789 42790 42791 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 42792 42793 7.3 Vague Linkage 42794 ================= 42795 42796 There are several constructs in C++ that require space in the object 42797 file but are not clearly tied to a single translation unit. We say that 42798 these constructs have "vague linkage". Typically such constructs are 42799 emitted wherever they are needed, though sometimes we can be more 42800 clever. 42801 42802 Inline Functions 42803 Inline functions are typically defined in a header file which can 42804 be included in many different compilations. Hopefully they can 42805 usually be inlined, but sometimes an out-of-line copy is necessary, 42806 if the address of the function is taken or if inlining fails. In 42807 general, we emit an out-of-line copy in all translation units where 42808 one is needed. As an exception, we only emit inline virtual 42809 functions with the vtable, since it always requires a copy. 42810 42811 Local static variables and string constants used in an inline 42812 function are also considered to have vague linkage, since they must 42813 be shared between all inlined and out-of-line instances of the 42814 function. 42815 42816 VTables 42817 C++ virtual functions are implemented in most compilers using a 42818 lookup table, known as a vtable. The vtable contains pointers to 42819 the virtual functions provided by a class, and each object of the 42820 class contains a pointer to its vtable (or vtables, in some 42821 multiple-inheritance situations). If the class declares any 42822 non-inline, non-pure virtual functions, the first one is chosen as 42823 the "key method" for the class, and the vtable is only emitted in 42824 the translation unit where the key method is defined. 42825 42826 _Note:_ If the chosen key method is later defined as inline, the 42827 vtable is still emitted in every translation unit that defines it. 42828 Make sure that any inline virtuals are declared inline in the class 42829 body, even if they are not defined there. 42830 42831 'type_info' objects 42832 C++ requires information about types to be written out in order to 42833 implement 'dynamic_cast', 'typeid' and exception handling. For 42834 polymorphic classes (classes with virtual functions), the 42835 'type_info' object is written out along with the vtable so that 42836 'dynamic_cast' can determine the dynamic type of a class object at 42837 run time. For all other types, we write out the 'type_info' object 42838 when it is used: when applying 'typeid' to an expression, throwing 42839 an object, or referring to a type in a catch clause or exception 42840 specification. 42841 42842 Template Instantiations 42843 Most everything in this section also applies to template 42844 instantiations, but there are other options as well. *Note Where's 42845 the Template?: Template Instantiation. 42846 42847 When used with GNU ld version 2.8 or later on an ELF system such as 42848 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 42849 these constructs will be discarded at link time. This is known as 42850 COMDAT support. 42851 42852 On targets that don't support COMDAT, but do support weak symbols, GCC 42853 uses them. This way one copy overrides all the others, but the unused 42854 copies still take up space in the executable. 42855 42856 For targets that do not support either COMDAT or weak symbols, most 42857 entities with vague linkage are emitted as local symbols to avoid 42858 duplicate definition errors from the linker. This does not happen for 42859 local statics in inlines, however, as having multiple copies almost 42860 certainly breaks things. 42861 42862 *Note Declarations and Definitions in One Header: C++ Interface, for 42863 another way to control placement of these constructs. 42864 42865 42866 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 42867 42868 7.4 #pragma interface and implementation 42869 ======================================== 42870 42871 '#pragma interface' and '#pragma implementation' provide the user with a 42872 way of explicitly directing the compiler to emit entities with vague 42873 linkage (and debugging information) in a particular translation unit. 42874 42875 _Note:_ As of GCC 2.7.2, these '#pragma's are not useful in most cases, 42876 because of COMDAT support and the "key method" heuristic mentioned in 42877 *note Vague Linkage::. Using them can actually cause your program to 42878 grow due to unnecessary out-of-line copies of inline functions. 42879 Currently (3.4) the only benefit of these '#pragma's is reduced 42880 duplication of debugging information, and that should be addressed soon 42881 on DWARF 2 targets with the use of COMDAT groups. 42882 42883 '#pragma interface' 42884 '#pragma interface "SUBDIR/OBJECTS.h"' 42885 Use this directive in _header files_ that define object classes, to 42886 save space in most of the object files that use those classes. 42887 Normally, local copies of certain information (backup copies of 42888 inline member functions, debugging information, and the internal 42889 tables that implement virtual functions) must be kept in each 42890 object file that includes class definitions. You can use this 42891 pragma to avoid such duplication. When a header file containing 42892 '#pragma interface' is included in a compilation, this auxiliary 42893 information is not generated (unless the main input source file 42894 itself uses '#pragma implementation'). Instead, the object files 42895 contain references to be resolved at link time. 42896 42897 The second form of this directive is useful for the case where you 42898 have multiple headers with the same name in different directories. 42899 If you use this form, you must specify the same string to '#pragma 42900 implementation'. 42901 42902 '#pragma implementation' 42903 '#pragma implementation "OBJECTS.h"' 42904 Use this pragma in a _main input file_, when you want full output 42905 from included header files to be generated (and made globally 42906 visible). The included header file, in turn, should use '#pragma 42907 interface'. Backup copies of inline member functions, debugging 42908 information, and the internal tables used to implement virtual 42909 functions are all generated in implementation files. 42910 42911 If you use '#pragma implementation' with no argument, it applies to 42912 an include file with the same basename(1) as your source file. For 42913 example, in 'allclass.cc', giving just '#pragma implementation' by 42914 itself is equivalent to '#pragma implementation "allclass.h"'. 42915 42916 In versions of GNU C++ prior to 2.6.0 'allclass.h' was treated as 42917 an implementation file whenever you would include it from 42918 'allclass.cc' even if you never specified '#pragma implementation'. 42919 This was deemed to be more trouble than it was worth, however, and 42920 disabled. 42921 42922 Use the string argument if you want a single implementation file to 42923 include code from multiple header files. (You must also use 42924 '#include' to include the header file; '#pragma implementation' 42925 only specifies how to use the file--it doesn't actually include 42926 it.) 42927 42928 There is no way to split up the contents of a single header file 42929 into multiple implementation files. 42930 42931 '#pragma implementation' and '#pragma interface' also have an effect on 42932 function inlining. 42933 42934 If you define a class in a header file marked with '#pragma interface', 42935 the effect on an inline function defined in that class is similar to an 42936 explicit 'extern' declaration--the compiler emits no code at all to 42937 define an independent version of the function. Its definition is used 42938 only for inlining with its callers. 42939 42940 Conversely, when you include the same header file in a main source file 42941 that declares it as '#pragma implementation', the compiler emits code 42942 for the function itself; this defines a version of the function that can 42943 be found via pointers (or by callers compiled without inlining). If all 42944 calls to the function can be inlined, you can avoid emitting the 42945 function by compiling with '-fno-implement-inlines'. If any calls are 42946 not inlined, you will get linker errors. 42947 42948 ---------- Footnotes ---------- 42949 42950 (1) A file's "basename" is the name stripped of all leading path 42951 information and of trailing suffixes, such as '.h' or '.C' or '.cc'. 42952 42953 42954 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 42955 42956 7.5 Where's the Template? 42957 ========================= 42958 42959 C++ templates are the first language feature to require more 42960 intelligence from the environment than one usually finds on a UNIX 42961 system. Somehow the compiler and linker have to make sure that each 42962 template instance occurs exactly once in the executable if it is needed, 42963 and not at all otherwise. There are two basic approaches to this 42964 problem, which are referred to as the Borland model and the Cfront 42965 model. 42966 42967 Borland model 42968 Borland C++ solved the template instantiation problem by adding the 42969 code equivalent of common blocks to their linker; the compiler 42970 emits template instances in each translation unit that uses them, 42971 and the linker collapses them together. The advantage of this 42972 model is that the linker only has to consider the object files 42973 themselves; there is no external complexity to worry about. This 42974 disadvantage is that compilation time is increased because the 42975 template code is being compiled repeatedly. Code written for this 42976 model tends to include definitions of all templates in the header 42977 file, since they must be seen to be instantiated. 42978 42979 Cfront model 42980 The AT&T C++ translator, Cfront, solved the template instantiation 42981 problem by creating the notion of a template repository, an 42982 automatically maintained place where template instances are stored. 42983 A more modern version of the repository works as follows: As 42984 individual object files are built, the compiler places any template 42985 definitions and instantiations encountered in the repository. At 42986 link time, the link wrapper adds in the objects in the repository 42987 and compiles any needed instances that were not previously emitted. 42988 The advantages of this model are more optimal compilation speed and 42989 the ability to use the system linker; to implement the Borland 42990 model a compiler vendor also needs to replace the linker. The 42991 disadvantages are vastly increased complexity, and thus potential 42992 for error; for some code this can be just as transparent, but in 42993 practice it can been very difficult to build multiple programs in 42994 one directory and one program in multiple directories. Code 42995 written for this model tends to separate definitions of non-inline 42996 member templates into a separate file, which should be compiled 42997 separately. 42998 42999 When used with GNU ld version 2.8 or later on an ELF system such as 43000 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 43001 Borland model. On other systems, G++ implements neither automatic 43002 model. 43003 43004 You have the following options for dealing with template 43005 instantiations: 43006 43007 1. Compile your template-using code with '-frepo'. The compiler 43008 generates files with the extension '.rpo' listing all of the 43009 template instantiations used in the corresponding object files that 43010 could be instantiated there; the link wrapper, 'collect2', then 43011 updates the '.rpo' files to tell the compiler where to place those 43012 instantiations and rebuild any affected object files. The 43013 link-time overhead is negligible after the first pass, as the 43014 compiler continues to place the instantiations in the same files. 43015 43016 This is your best option for application code written for the 43017 Borland model, as it just works. Code written for the Cfront model 43018 needs to be modified so that the template definitions are available 43019 at one or more points of instantiation; usually this is as simple 43020 as adding '#include <tmethods.cc>' to the end of each template 43021 header. 43022 43023 For library code, if you want the library to provide all of the 43024 template instantiations it needs, just try to link all of its 43025 object files together; the link will fail, but cause the 43026 instantiations to be generated as a side effect. Be warned, 43027 however, that this may cause conflicts if multiple libraries try to 43028 provide the same instantiations. For greater control, use explicit 43029 instantiation as described in the next option. 43030 43031 2. Compile your code with '-fno-implicit-templates' to disable the 43032 implicit generation of template instances, and explicitly 43033 instantiate all the ones you use. This approach requires more 43034 knowledge of exactly which instances you need than do the others, 43035 but it's less mysterious and allows greater control. You can 43036 scatter the explicit instantiations throughout your program, 43037 perhaps putting them in the translation units where the instances 43038 are used or the translation units that define the templates 43039 themselves; you can put all of the explicit instantiations you need 43040 into one big file; or you can create small files like 43041 43042 #include "Foo.h" 43043 #include "Foo.cc" 43044 43045 template class Foo<int>; 43046 template ostream& operator << 43047 (ostream&, const Foo<int>&); 43048 43049 for each of the instances you need, and create a template 43050 instantiation library from those. 43051 43052 If you are using Cfront-model code, you can probably get away with 43053 not using '-fno-implicit-templates' when compiling files that don't 43054 '#include' the member template definitions. 43055 43056 If you use one big file to do the instantiations, you may want to 43057 compile it without '-fno-implicit-templates' so you get all of the 43058 instances required by your explicit instantiations (but not by any 43059 other files) without having to specify them as well. 43060 43061 The ISO C++ 2011 standard allows forward declaration of explicit 43062 instantiations (with 'extern'). G++ supports explicit 43063 instantiation declarations in C++98 mode and has extended the 43064 template instantiation syntax to support instantiation of the 43065 compiler support data for a template class (i.e. the vtable) 43066 without instantiating any of its members (with 'inline'), and 43067 instantiation of only the static data members of a template class, 43068 without the support data or member functions (with ('static'): 43069 43070 extern template int max (int, int); 43071 inline template class Foo<int>; 43072 static template class Foo<int>; 43073 43074 3. Do nothing. Pretend G++ does implement automatic instantiation 43075 management. Code written for the Borland model works fine, but 43076 each translation unit contains instances of each of the templates 43077 it uses. In a large program, this can lead to an unacceptable 43078 amount of code duplication. 43079 43080 43081 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 43082 43083 7.6 Extracting the function pointer from a bound pointer to member function 43084 =========================================================================== 43085 43086 In C++, pointer to member functions (PMFs) are implemented using a wide 43087 pointer of sorts to handle all the possible call mechanisms; the PMF 43088 needs to store information about how to adjust the 'this' pointer, and 43089 if the function pointed to is virtual, where to find the vtable, and 43090 where in the vtable to look for the member function. If you are using 43091 PMFs in an inner loop, you should really reconsider that decision. If 43092 that is not an option, you can extract the pointer to the function that 43093 would be called for a given object/PMF pair and call it directly inside 43094 the inner loop, to save a bit of time. 43095 43096 Note that you still pay the penalty for the call through a function 43097 pointer; on most modern architectures, such a call defeats the branch 43098 prediction features of the CPU. This is also true of normal virtual 43099 function calls. 43100 43101 The syntax for this extension is 43102 43103 extern A a; 43104 extern int (A::*fp)(); 43105 typedef int (*fptr)(A *); 43106 43107 fptr p = (fptr)(a.*fp); 43108 43109 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no 43110 object is needed to obtain the address of the function. They can be 43111 converted to function pointers directly: 43112 43113 fptr p1 = (fptr)(&A::foo); 43114 43115 You must specify '-Wno-pmf-conversions' to use this extension. 43116 43117 43118 File: gcc.info, Node: C++ Attributes, Next: Function Multiversioning, Prev: Bound member functions, Up: C++ Extensions 43119 43120 7.7 C++-Specific Variable, Function, and Type Attributes 43121 ======================================================== 43122 43123 Some attributes only make sense for C++ programs. 43124 43125 'abi_tag ("TAG", ...)' 43126 The 'abi_tag' attribute can be applied to a function or class 43127 declaration. It modifies the mangled name of the function or class 43128 to incorporate the tag name, in order to distinguish the function 43129 or class from an earlier version with a different ABI; perhaps the 43130 class has changed size, or the function has a different return type 43131 that is not encoded in the mangled name. 43132 43133 The argument can be a list of strings of arbitrary length. The 43134 strings are sorted on output, so the order of the list is 43135 unimportant. 43136 43137 A redeclaration of a function or class must not add new ABI tags, 43138 since doing so would change the mangled name. 43139 43140 The '-Wabi-tag' flag enables a warning about a class which does not 43141 have all the ABI tags used by its subobjects and virtual functions; 43142 for users with code that needs to coexist with an earlier ABI, 43143 using this option can help to find all affected types that need to 43144 be tagged. 43145 43146 'init_priority (PRIORITY)' 43147 43148 In Standard C++, objects defined at namespace scope are guaranteed 43149 to be initialized in an order in strict accordance with that of 43150 their definitions _in a given translation unit_. No guarantee is 43151 made for initializations across translation units. However, GNU 43152 C++ allows users to control the order of initialization of objects 43153 defined at namespace scope with the 'init_priority' attribute by 43154 specifying a relative PRIORITY, a constant integral expression 43155 currently bounded between 101 and 65535 inclusive. Lower numbers 43156 indicate a higher priority. 43157 43158 In the following example, 'A' would normally be created before 'B', 43159 but the 'init_priority' attribute reverses that order: 43160 43161 Some_Class A __attribute__ ((init_priority (2000))); 43162 Some_Class B __attribute__ ((init_priority (543))); 43163 43164 Note that the particular values of PRIORITY do not matter; only 43165 their relative ordering. 43166 43167 'java_interface' 43168 43169 This type attribute informs C++ that the class is a Java interface. 43170 It may only be applied to classes declared within an 'extern 43171 "Java"' block. Calls to methods declared in this interface are 43172 dispatched using GCJ's interface table mechanism, instead of 43173 regular virtual table dispatch. 43174 43175 See also *note Namespace Association::. 43176 43177 43178 File: gcc.info, Node: Function Multiversioning, Next: Namespace Association, Prev: C++ Attributes, Up: C++ Extensions 43179 43180 7.8 Function Multiversioning 43181 ============================ 43182 43183 With the GNU C++ front end, for target i386, you may specify multiple 43184 versions of a function, where each function is specialized for a 43185 specific target feature. At runtime, the appropriate version of the 43186 function is automatically executed depending on the characteristics of 43187 the execution platform. Here is an example. 43188 43189 __attribute__ ((target ("default"))) 43190 int foo () 43191 { 43192 // The default version of foo. 43193 return 0; 43194 } 43195 43196 __attribute__ ((target ("sse4.2"))) 43197 int foo () 43198 { 43199 // foo version for SSE4.2 43200 return 1; 43201 } 43202 43203 __attribute__ ((target ("arch=atom"))) 43204 int foo () 43205 { 43206 // foo version for the Intel ATOM processor 43207 return 2; 43208 } 43209 43210 __attribute__ ((target ("arch=amdfam10"))) 43211 int foo () 43212 { 43213 // foo version for the AMD Family 0x10 processors. 43214 return 3; 43215 } 43216 43217 int main () 43218 { 43219 int (*p)() = &foo; 43220 assert ((*p) () == foo ()); 43221 return 0; 43222 } 43223 43224 In the above example, four versions of function foo are created. The 43225 first version of foo with the target attribute "default" is the default 43226 version. This version gets executed when no other target specific 43227 version qualifies for execution on a particular platform. A new version 43228 of foo is created by using the same function signature but with a 43229 different target string. Function foo is called or a pointer to it is 43230 taken just like a regular function. GCC takes care of doing the 43231 dispatching to call the right version at runtime. Refer to the GCC wiki 43232 on Function Multiversioning 43233 (http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details. 43234 43235 43236 File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: Function Multiversioning, Up: C++ Extensions 43237 43238 7.9 Namespace Association 43239 ========================= 43240 43241 *Caution:* The semantics of this extension are equivalent to C++ 2011 43242 inline namespaces. Users should use inline namespaces instead as this 43243 extension will be removed in future versions of G++. 43244 43245 A using-directive with '__attribute ((strong))' is stronger than a 43246 normal using-directive in two ways: 43247 43248 * Templates from the used namespace can be specialized and explicitly 43249 instantiated as though they were members of the using namespace. 43250 43251 * The using namespace is considered an associated namespace of all 43252 templates in the used namespace for purposes of argument-dependent 43253 name lookup. 43254 43255 The used namespace must be nested within the using namespace so that 43256 normal unqualified lookup works properly. 43257 43258 This is useful for composing a namespace transparently from 43259 implementation namespaces. For example: 43260 43261 namespace std { 43262 namespace debug { 43263 template <class T> struct A { }; 43264 } 43265 using namespace debug __attribute ((__strong__)); 43266 template <> struct A<int> { }; // ok to specialize 43267 43268 template <class T> void f (A<T>); 43269 } 43270 43271 int main() 43272 { 43273 f (std::A<float>()); // lookup finds std::f 43274 f (std::A<int>()); 43275 } 43276 43277 43278 File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 43279 43280 7.10 Type Traits 43281 ================ 43282 43283 The C++ front end implements syntactic extensions that allow 43284 compile-time determination of various characteristics of a type (or of a 43285 pair of types). 43286 43287 '__has_nothrow_assign (type)' 43288 If 'type' is const qualified or is a reference type then the trait 43289 is false. Otherwise if '__has_trivial_assign (type)' is true then 43290 the trait is true, else if 'type' is a cv class or union type with 43291 copy assignment operators that are known not to throw an exception 43292 then the trait is true, else it is false. Requires: 'type' shall 43293 be a complete type, (possibly cv-qualified) 'void', or an array of 43294 unknown bound. 43295 43296 '__has_nothrow_copy (type)' 43297 If '__has_trivial_copy (type)' is true then the trait is true, else 43298 if 'type' is a cv class or union type with copy constructors that 43299 are known not to throw an exception then the trait is true, else it 43300 is false. Requires: 'type' shall be a complete type, (possibly 43301 cv-qualified) 'void', or an array of unknown bound. 43302 43303 '__has_nothrow_constructor (type)' 43304 If '__has_trivial_constructor (type)' is true then the trait is 43305 true, else if 'type' is a cv class or union type (or array thereof) 43306 with a default constructor that is known not to throw an exception 43307 then the trait is true, else it is false. Requires: 'type' shall 43308 be a complete type, (possibly cv-qualified) 'void', or an array of 43309 unknown bound. 43310 43311 '__has_trivial_assign (type)' 43312 If 'type' is const qualified or is a reference type then the trait 43313 is false. Otherwise if '__is_pod (type)' is true then the trait is 43314 true, else if 'type' is a cv class or union type with a trivial 43315 copy assignment ([class.copy]) then the trait is true, else it is 43316 false. Requires: 'type' shall be a complete type, (possibly 43317 cv-qualified) 'void', or an array of unknown bound. 43318 43319 '__has_trivial_copy (type)' 43320 If '__is_pod (type)' is true or 'type' is a reference type then the 43321 trait is true, else if 'type' is a cv class or union type with a 43322 trivial copy constructor ([class.copy]) then the trait is true, 43323 else it is false. Requires: 'type' shall be a complete type, 43324 (possibly cv-qualified) 'void', or an array of unknown bound. 43325 43326 '__has_trivial_constructor (type)' 43327 If '__is_pod (type)' is true then the trait is true, else if 'type' 43328 is a cv class or union type (or array thereof) with a trivial 43329 default constructor ([class.ctor]) then the trait is true, else it 43330 is false. Requires: 'type' shall be a complete type, (possibly 43331 cv-qualified) 'void', or an array of unknown bound. 43332 43333 '__has_trivial_destructor (type)' 43334 If '__is_pod (type)' is true or 'type' is a reference type then the 43335 trait is true, else if 'type' is a cv class or union type (or array 43336 thereof) with a trivial destructor ([class.dtor]) then the trait is 43337 true, else it is false. Requires: 'type' shall be a complete type, 43338 (possibly cv-qualified) 'void', or an array of unknown bound. 43339 43340 '__has_virtual_destructor (type)' 43341 If 'type' is a class type with a virtual destructor ([class.dtor]) 43342 then the trait is true, else it is false. Requires: 'type' shall 43343 be a complete type, (possibly cv-qualified) 'void', or an array of 43344 unknown bound. 43345 43346 '__is_abstract (type)' 43347 If 'type' is an abstract class ([class.abstract]) then the trait is 43348 true, else it is false. Requires: 'type' shall be a complete type, 43349 (possibly cv-qualified) 'void', or an array of unknown bound. 43350 43351 '__is_base_of (base_type, derived_type)' 43352 If 'base_type' is a base class of 'derived_type' ([class.derived]) 43353 then the trait is true, otherwise it is false. Top-level cv 43354 qualifications of 'base_type' and 'derived_type' are ignored. For 43355 the purposes of this trait, a class type is considered is own base. 43356 Requires: if '__is_class (base_type)' and '__is_class 43357 (derived_type)' are true and 'base_type' and 'derived_type' are not 43358 the same type (disregarding cv-qualifiers), 'derived_type' shall be 43359 a complete type. Diagnostic is produced if this requirement is not 43360 met. 43361 43362 '__is_class (type)' 43363 If 'type' is a cv class type, and not a union type 43364 ([basic.compound]) the trait is true, else it is false. 43365 43366 '__is_empty (type)' 43367 If '__is_class (type)' is false then the trait is false. Otherwise 43368 'type' is considered empty if and only if: 'type' has no non-static 43369 data members, or all non-static data members, if any, are 43370 bit-fields of length 0, and 'type' has no virtual members, and 43371 'type' has no virtual base classes, and 'type' has no base classes 43372 'base_type' for which '__is_empty (base_type)' is false. Requires: 43373 'type' shall be a complete type, (possibly cv-qualified) 'void', or 43374 an array of unknown bound. 43375 43376 '__is_enum (type)' 43377 If 'type' is a cv enumeration type ([basic.compound]) the trait is 43378 true, else it is false. 43379 43380 '__is_literal_type (type)' 43381 If 'type' is a literal type ([basic.types]) the trait is true, else 43382 it is false. Requires: 'type' shall be a complete type, (possibly 43383 cv-qualified) 'void', or an array of unknown bound. 43384 43385 '__is_pod (type)' 43386 If 'type' is a cv POD type ([basic.types]) then the trait is true, 43387 else it is false. Requires: 'type' shall be a complete type, 43388 (possibly cv-qualified) 'void', or an array of unknown bound. 43389 43390 '__is_polymorphic (type)' 43391 If 'type' is a polymorphic class ([class.virtual]) then the trait 43392 is true, else it is false. Requires: 'type' shall be a complete 43393 type, (possibly cv-qualified) 'void', or an array of unknown bound. 43394 43395 '__is_standard_layout (type)' 43396 If 'type' is a standard-layout type ([basic.types]) the trait is 43397 true, else it is false. Requires: 'type' shall be a complete type, 43398 (possibly cv-qualified) 'void', or an array of unknown bound. 43399 43400 '__is_trivial (type)' 43401 If 'type' is a trivial type ([basic.types]) the trait is true, else 43402 it is false. Requires: 'type' shall be a complete type, (possibly 43403 cv-qualified) 'void', or an array of unknown bound. 43404 43405 '__is_union (type)' 43406 If 'type' is a cv union type ([basic.compound]) the trait is true, 43407 else it is false. 43408 43409 '__underlying_type (type)' 43410 The underlying type of 'type'. Requires: 'type' shall be an 43411 enumeration type ([dcl.enum]). 43412 43413 43414 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 43415 43416 7.11 Java Exceptions 43417 ==================== 43418 43419 The Java language uses a slightly different exception handling model 43420 from C++. Normally, GNU C++ automatically detects when you are writing 43421 C++ code that uses Java exceptions, and handle them appropriately. 43422 However, if C++ code only needs to execute destructors when Java 43423 exceptions are thrown through it, GCC guesses incorrectly. Sample 43424 problematic code is: 43425 43426 struct S { ~S(); }; 43427 extern void bar(); // is written in Java, and may throw exceptions 43428 void foo() 43429 { 43430 S s; 43431 bar(); 43432 } 43433 43434 The usual effect of an incorrect guess is a link failure, complaining of 43435 a missing routine called '__gxx_personality_v0'. 43436 43437 You can inform the compiler that Java exceptions are to be used in a 43438 translation unit, irrespective of what it might think, by writing 43439 '#pragma GCC java_exceptions' at the head of the file. This '#pragma' 43440 must appear before any functions that throw or catch exceptions, or run 43441 destructors when exceptions are thrown through them. 43442 43443 You cannot mix Java and C++ exceptions in the same translation unit. 43444 It is believed to be safe to throw a C++ exception from one file through 43445 another file compiled for the Java exception model, or vice versa, but 43446 there may be bugs in this area. 43447 43448 43449 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 43450 43451 7.12 Deprecated Features 43452 ======================== 43453 43454 In the past, the GNU C++ compiler was extended to experiment with new 43455 features, at a time when the C++ language was still evolving. Now that 43456 the C++ standard is complete, some of those features are superseded by 43457 superior alternatives. Using the old features might cause a warning in 43458 some cases that the feature will be dropped in the future. In other 43459 cases, the feature might be gone already. 43460 43461 While the list below is not exhaustive, it documents some of the 43462 options that are now deprecated: 43463 43464 '-fexternal-templates' 43465 '-falt-external-templates' 43466 These are two of the many ways for G++ to implement template 43467 instantiation. *Note Template Instantiation::. The C++ standard 43468 clearly defines how template definitions have to be organized 43469 across implementation units. G++ has an implicit instantiation 43470 mechanism that should work just fine for standard-conforming code. 43471 43472 '-fstrict-prototype' 43473 '-fno-strict-prototype' 43474 Previously it was possible to use an empty prototype parameter list 43475 to indicate an unspecified number of parameters (like C), rather 43476 than no parameters, as C++ demands. This feature has been removed, 43477 except where it is required for backwards compatibility. *Note 43478 Backwards Compatibility::. 43479 43480 G++ allows a virtual function returning 'void *' to be overridden by 43481 one returning a different pointer type. This extension to the covariant 43482 return type rules is now deprecated and will be removed from a future 43483 version. 43484 43485 The G++ minimum and maximum operators ('<?' and '>?') and their 43486 compound forms ('<?=') and '>?=') have been deprecated and are now 43487 removed from G++. Code using these operators should be modified to use 43488 'std::min' and 'std::max' instead. 43489 43490 The named return value extension has been deprecated, and is now 43491 removed from G++. 43492 43493 The use of initializer lists with new expressions has been deprecated, 43494 and is now removed from G++. 43495 43496 Floating and complex non-type template parameters have been deprecated, 43497 and are now removed from G++. 43498 43499 The implicit typename extension has been deprecated and is now removed 43500 from G++. 43501 43502 The use of default arguments in function pointers, function typedefs 43503 and other places where they are not permitted by the standard is 43504 deprecated and will be removed from a future version of G++. 43505 43506 G++ allows floating-point literals to appear in integral constant 43507 expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is 43508 deprecated and will be removed from a future version. 43509 43510 G++ allows static data members of const floating-point type to be 43511 declared with an initializer in a class definition. The standard only 43512 allows initializers for static members of const integral types and const 43513 enumeration types so this extension has been deprecated and will be 43514 removed from a future version. 43515 43516 43517 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 43518 43519 7.13 Backwards Compatibility 43520 ============================ 43521 43522 Now that there is a definitive ISO standard C++, G++ has a specification 43523 to adhere to. The C++ language evolved over time, and features that 43524 used to be acceptable in previous drafts of the standard, such as the 43525 ARM [Annotated C++ Reference Manual], are no longer accepted. In order 43526 to allow compilation of C++ written to such drafts, G++ contains some 43527 backwards compatibilities. _All such backwards compatibility features 43528 are liable to disappear in future versions of G++._ They should be 43529 considered deprecated. *Note Deprecated Features::. 43530 43531 'For scope' 43532 If a variable is declared at for scope, it used to remain in scope 43533 until the end of the scope that contained the for statement (rather 43534 than just within the for scope). G++ retains this, but issues a 43535 warning, if such a variable is accessed outside the for scope. 43536 43537 'Implicit C language' 43538 Old C system header files did not contain an 'extern "C" {...}' 43539 scope to set the language. On such systems, all header files are 43540 implicitly scoped inside a C language scope. Also, an empty 43541 prototype '()' is treated as an unspecified number of arguments, 43542 rather than no arguments, as C++ demands. 43543 43544 43545 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 43546 43547 8 GNU Objective-C features 43548 ************************** 43549 43550 This document is meant to describe some of the GNU Objective-C features. 43551 It is not intended to teach you Objective-C. There are several resources 43552 on the Internet that present the language. 43553 43554 * Menu: 43555 43556 * GNU Objective-C runtime API:: 43557 * Executing code before main:: 43558 * Type encoding:: 43559 * Garbage Collection:: 43560 * Constant string objects:: 43561 * compatibility_alias:: 43562 * Exceptions:: 43563 * Synchronization:: 43564 * Fast enumeration:: 43565 * Messaging with the GNU Objective-C runtime:: 43566 43567 43568 File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C 43569 43570 8.1 GNU Objective-C runtime API 43571 =============================== 43572 43573 This section is specific for the GNU Objective-C runtime. If you are 43574 using a different runtime, you can skip it. 43575 43576 The GNU Objective-C runtime provides an API that allows you to interact 43577 with the Objective-C runtime system, querying the live runtime 43578 structures and even manipulating them. This allows you for example to 43579 inspect and navigate classes, methods and protocols; to define new 43580 classes or new methods, and even to modify existing classes or 43581 protocols. 43582 43583 If you are using a "Foundation" library such as GNUstep-Base, this 43584 library will provide you with a rich set of functionality to do most of 43585 the inspection tasks, and you probably will only need direct access to 43586 the GNU Objective-C runtime API to define new classes or methods. 43587 43588 * Menu: 43589 43590 * Modern GNU Objective-C runtime API:: 43591 * Traditional GNU Objective-C runtime API:: 43592 43593 43594 File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API 43595 43596 8.1.1 Modern GNU Objective-C runtime API 43597 ---------------------------------------- 43598 43599 The GNU Objective-C runtime provides an API which is similar to the one 43600 provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The 43601 API is documented in the public header files of the GNU Objective-C 43602 runtime: 43603 43604 * 'objc/objc.h': this is the basic Objective-C header file, defining 43605 the basic Objective-C types such as 'id', 'Class' and 'BOOL'. You 43606 have to include this header to do almost anything with Objective-C. 43607 43608 * 'objc/runtime.h': this header declares most of the public runtime 43609 API functions allowing you to inspect and manipulate the 43610 Objective-C runtime data structures. These functions are fairly 43611 standardized across Objective-C runtimes and are almost identical 43612 to the Apple/NeXT Objective-C runtime ones. It does not declare 43613 functions in some specialized areas (constructing and forwarding 43614 message invocations, threading) which are in the other headers 43615 below. You have to include 'objc/objc.h' and 'objc/runtime.h' to 43616 use any of the functions, such as 'class_getName()', declared in 43617 'objc/runtime.h'. 43618 43619 * 'objc/message.h': this header declares public functions used to 43620 construct, deconstruct and forward message invocations. Because 43621 messaging is done in quite a different way on different runtimes, 43622 functions in this header are specific to the GNU Objective-C 43623 runtime implementation. 43624 43625 * 'objc/objc-exception.h': this header declares some public functions 43626 related to Objective-C exceptions. For example functions in this 43627 header allow you to throw an Objective-C exception from plain C/C++ 43628 code. 43629 43630 * 'objc/objc-sync.h': this header declares some public functions 43631 related to the Objective-C '@synchronized()' syntax, allowing you 43632 to emulate an Objective-C '@synchronized()' block in plain C/C++ 43633 code. 43634 43635 * 'objc/thr.h': this header declares a public runtime API threading 43636 layer that is only provided by the GNU Objective-C runtime. It 43637 declares functions such as 'objc_mutex_lock()', which provide a 43638 platform-independent set of threading functions. 43639 43640 The header files contain detailed documentation for each function in 43641 the GNU Objective-C runtime API. 43642 43643 43644 File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API 43645 43646 8.1.2 Traditional GNU Objective-C runtime API 43647 --------------------------------------------- 43648 43649 The GNU Objective-C runtime used to provide a different API, which we 43650 call the "traditional" GNU Objective-C runtime API. Functions belonging 43651 to this API are easy to recognize because they use a different naming 43652 convention, such as 'class_get_super_class()' (traditional API) instead 43653 of 'class_getSuperclass()' (modern API). Software using this API 43654 includes the file 'objc/objc-api.h' where it is declared. 43655 43656 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer 43657 available. 43658 43659 43660 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C 43661 43662 8.2 '+load': Executing code before main 43663 ======================================= 43664 43665 This section is specific for the GNU Objective-C runtime. If you are 43666 using a different runtime, you can skip it. 43667 43668 The GNU Objective-C runtime provides a way that allows you to execute 43669 code before the execution of the program enters the 'main' function. 43670 The code is executed on a per-class and a per-category basis, through a 43671 special class method '+load'. 43672 43673 This facility is very useful if you want to initialize global variables 43674 which can be accessed by the program directly, without sending a message 43675 to the class first. The usual way to initialize global variables, in 43676 the '+initialize' method, might not be useful because '+initialize' is 43677 only called when the first message is sent to a class object, which in 43678 some cases could be too late. 43679 43680 Suppose for example you have a 'FileStream' class that declares 43681 'Stdin', 'Stdout' and 'Stderr' as global variables, like below: 43682 43683 43684 FileStream *Stdin = nil; 43685 FileStream *Stdout = nil; 43686 FileStream *Stderr = nil; 43687 43688 @implementation FileStream 43689 43690 + (void)initialize 43691 { 43692 Stdin = [[FileStream new] initWithFd:0]; 43693 Stdout = [[FileStream new] initWithFd:1]; 43694 Stderr = [[FileStream new] initWithFd:2]; 43695 } 43696 43697 /* Other methods here */ 43698 @end 43699 43700 43701 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr' 43702 in '+initialize' occurs too late. The programmer can send a message to 43703 one of these objects before the variables are actually initialized, thus 43704 sending messages to the 'nil' object. The '+initialize' method which 43705 actually initializes the global variables is not invoked until the first 43706 message is sent to the class object. The solution would require these 43707 variables to be initialized just before entering 'main'. 43708 43709 The correct solution of the above problem is to use the '+load' method 43710 instead of '+initialize': 43711 43712 43713 @implementation FileStream 43714 43715 + (void)load 43716 { 43717 Stdin = [[FileStream new] initWithFd:0]; 43718 Stdout = [[FileStream new] initWithFd:1]; 43719 Stderr = [[FileStream new] initWithFd:2]; 43720 } 43721 43722 /* Other methods here */ 43723 @end 43724 43725 43726 The '+load' is a method that is not overridden by categories. If a 43727 class and a category of it both implement '+load', both methods are 43728 invoked. This allows some additional initializations to be performed in 43729 a category. 43730 43731 This mechanism is not intended to be a replacement for '+initialize'. 43732 You should be aware of its limitations when you decide to use it instead 43733 of '+initialize'. 43734 43735 * Menu: 43736 43737 * What you can and what you cannot do in +load:: 43738 43739 43740 File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main 43741 43742 8.2.1 What you can and what you cannot do in '+load' 43743 ---------------------------------------------------- 43744 43745 '+load' is to be used only as a last resort. Because it is executed 43746 very early, most of the Objective-C runtime machinery will not be ready 43747 when '+load' is executed; hence '+load' works best for executing C code 43748 that is independent on the Objective-C runtime. 43749 43750 The '+load' implementation in the GNU runtime guarantees you the 43751 following things: 43752 43753 * you can write whatever C code you like; 43754 43755 * you can allocate and send messages to objects whose class is 43756 implemented in the same file; 43757 43758 * the '+load' implementation of all super classes of a class are 43759 executed before the '+load' of that class is executed; 43760 43761 * the '+load' implementation of a class is executed before the 43762 '+load' implementation of any category. 43763 43764 In particular, the following things, even if they can work in a 43765 particular case, are not guaranteed: 43766 43767 * allocation of or sending messages to arbitrary objects; 43768 43769 * allocation of or sending messages to objects whose classes have a 43770 category implemented in the same file; 43771 43772 * sending messages to Objective-C constant strings ('@"this is a 43773 constant string"'); 43774 43775 You should make no assumptions about receiving '+load' in sibling 43776 classes when you write '+load' of a class. The order in which sibling 43777 classes receive '+load' is not guaranteed. 43778 43779 The order in which '+load' and '+initialize' are called could be 43780 problematic if this matters. If you don't allocate objects inside 43781 '+load', it is guaranteed that '+load' is called before '+initialize'. 43782 If you create an object inside '+load' the '+initialize' method of 43783 object's class is invoked even if '+load' was not invoked. Note if you 43784 explicitly call '+load' on a class, '+initialize' will be called first. 43785 To avoid possible problems try to implement only one of these methods. 43786 43787 The '+load' method is also invoked when a bundle is dynamically loaded 43788 into your running program. This happens automatically without any 43789 intervening operation from you. When you write bundles and you need to 43790 write '+load' you can safely create and send messages to objects whose 43791 classes already exist in the running program. The same restrictions as 43792 above apply to classes defined in bundle. 43793 43794 43795 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 43796 43797 8.3 Type encoding 43798 ================= 43799 43800 This is an advanced section. Type encodings are used extensively by the 43801 compiler and by the runtime, but you generally do not need to know about 43802 them to use Objective-C. 43803 43804 The Objective-C compiler generates type encodings for all the types. 43805 These type encodings are used at runtime to find out information about 43806 selectors and methods and about objects and classes. 43807 43808 The types are encoded in the following way: 43809 43810 '_Bool' 'B' 43811 'char' 'c' 43812 'unsigned char' 'C' 43813 'short' 's' 43814 'unsigned short' 'S' 43815 'int' 'i' 43816 'unsigned int' 'I' 43817 'long' 'l' 43818 'unsigned long' 'L' 43819 'long long' 'q' 43820 'unsigned long 'Q' 43821 long' 43822 'float' 'f' 43823 'double' 'd' 43824 'long double' 'D' 43825 'void' 'v' 43826 'id' '@' 43827 'Class' '#' 43828 'SEL' ':' 43829 'char*' '*' 43830 'enum' an 'enum' is encoded exactly as the integer type 43831 that the compiler uses for it, which depends on the 43832 enumeration values. Often the compiler users 43833 'unsigned int', which is then encoded as 'I'. 43834 unknown type '?' 43835 Complex types 'j' followed by the inner type. For example 43836 '_Complex double' is encoded as "jd". 43837 bit-fields 'b' followed by the starting position of the 43838 bit-field, the type of the bit-field and the size of 43839 the bit-field (the bit-fields encoding was changed 43840 from the NeXT's compiler encoding, see below) 43841 43842 The encoding of bit-fields has changed to allow bit-fields to be 43843 properly handled by the runtime functions that compute sizes and 43844 alignments of types that contain bit-fields. The previous encoding 43845 contained only the size of the bit-field. Using only this information 43846 it is not possible to reliably compute the size occupied by the 43847 bit-field. This is very important in the presence of the Boehm's 43848 garbage collector because the objects are allocated using the typed 43849 memory facility available in this collector. The typed memory 43850 allocation requires information about where the pointers are located 43851 inside the object. 43852 43853 The position in the bit-field is the position, counting in bits, of the 43854 bit closest to the beginning of the structure. 43855 43856 The non-atomic types are encoded as follows: 43857 43858 pointers '^' followed by the pointed type. 43859 arrays '[' followed by the number of elements in the array 43860 followed by the type of the elements followed by ']' 43861 structures '{' followed by the name of the structure (or '?' if the 43862 structure is unnamed), the '=' sign, the type of the 43863 members and by '}' 43864 unions '(' followed by the name of the structure (or '?' if the 43865 union is unnamed), the '=' sign, the type of the members 43866 followed by ')' 43867 vectors '![' followed by the vector_size (the number of bytes 43868 composing the vector) followed by a comma, followed by 43869 the alignment (in bytes) of the vector, followed by the 43870 type of the elements followed by ']' 43871 43872 Here are some types and their encodings, as they are generated by the 43873 compiler on an i386 machine: 43874 43875 43876 Objective-C type Compiler encoding 43877 int a[10]; '[10i]' 43878 struct { '{?=i[3f]b128i3b131i2c}' 43879 int i; 43880 float f[3]; 43881 int a:3; 43882 int b:2; 43883 char c; 43884 } 43885 int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment would depend on the machine) 43886 43887 43888 In addition to the types the compiler also encodes the type specifiers. 43889 The table below describes the encoding of the current Objective-C type 43890 specifiers: 43891 43892 43893 Specifier Encoding 43894 'const' 'r' 43895 'in' 'n' 43896 'inout' 'N' 43897 'out' 'o' 43898 'bycopy' 'O' 43899 'byref' 'R' 43900 'oneway' 'V' 43901 43902 43903 The type specifiers are encoded just before the type. Unlike types 43904 however, the type specifiers are only encoded when they appear in method 43905 argument types. 43906 43907 Note how 'const' interacts with pointers: 43908 43909 43910 Objective-C type Compiler encoding 43911 const int 'ri' 43912 const int* '^ri' 43913 int *const 'r^i' 43914 43915 43916 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'. 43917 'int* const', instead, is a 'const' pointer to an 'int', and so is 43918 encoded as 'r^i'. 43919 43920 Finally, there is a complication when encoding 'const char *' versus 43921 'char * const'. Because 'char *' is encoded as '*' and not as '^c', 43922 there is no way to express the fact that 'r' applies to the pointer or 43923 to the pointee. 43924 43925 Hence, it is assumed as a convention that 'r*' means 'const char *' 43926 (since it is what is most often meant), and there is no way to encode 43927 'char *const'. 'char *const' would simply be encoded as '*', and the 43928 'const' is lost. 43929 43930 * Menu: 43931 43932 * Legacy type encoding:: 43933 * @encode:: 43934 * Method signatures:: 43935 43936 43937 File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding 43938 43939 8.3.1 Legacy type encoding 43940 -------------------------- 43941 43942 Unfortunately, historically GCC used to have a number of bugs in its 43943 encoding code. The NeXT runtime expects GCC to emit type encodings in 43944 this historical format (compatible with GCC-3.3), so when using the NeXT 43945 runtime, GCC will introduce on purpose a number of incorrect encodings: 43946 43947 * the read-only qualifier of the pointee gets emitted before the '^'. 43948 The read-only qualifier of the pointer itself gets ignored, unless 43949 it is a typedef. Also, the 'r' is only emitted for the outermost 43950 type. 43951 43952 * 32-bit longs are encoded as 'l' or 'L', but not always. For 43953 typedefs, the compiler uses 'i' or 'I' instead if encoding a struct 43954 field or a pointer. 43955 43956 * 'enum's are always encoded as 'i' (int) even if they are actually 43957 unsigned or long. 43958 43959 In addition to that, the NeXT runtime uses a different encoding for 43960 bitfields. It encodes them as 'b' followed by the size, without a bit 43961 offset or the underlying field type. 43962 43963 43964 File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding 43965 43966 8.3.2 @encode 43967 ------------- 43968 43969 GNU Objective-C supports the '@encode' syntax that allows you to create 43970 a type encoding from a C/Objective-C type. For example, '@encode(int)' 43971 is compiled by the compiler into '"i"'. 43972 43973 '@encode' does not support type qualifiers other than 'const'. For 43974 example, '@encode(const char*)' is valid and is compiled into '"r*"', 43975 while '@encode(bycopy char *)' is invalid and will cause a compilation 43976 error. 43977 43978 43979 File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding 43980 43981 8.3.3 Method signatures 43982 ----------------------- 43983 43984 This section documents the encoding of method types, which is rarely 43985 needed to use Objective-C. You should skip it at a first reading; the 43986 runtime provides functions that will work on methods and can walk 43987 through the list of parameters and interpret them for you. These 43988 functions are part of the public "API" and are the preferred way to 43989 interact with method signatures from user code. 43990 43991 But if you need to debug a problem with method signatures and need to 43992 know how they are implemented (i.e., the "ABI"), read on. 43993 43994 Methods have their "signature" encoded and made available to the 43995 runtime. The "signature" encodes all the information required to 43996 dynamically build invocations of the method at runtime: return type and 43997 arguments. 43998 43999 The "signature" is a null-terminated string, composed of the following: 44000 44001 * The return type, including type qualifiers. For example, a method 44002 returning 'int' would have 'i' here. 44003 44004 * The total size (in bytes) required to pass all the parameters. 44005 This includes the two hidden parameters (the object 'self' and the 44006 method selector '_cmd'). 44007 44008 * Each argument, with the type encoding, followed by the offset (in 44009 bytes) of the argument in the list of parameters. 44010 44011 For example, a method with no arguments and returning 'int' would have 44012 the signature 'i8@0:4' if the size of a pointer is 4. The signature is 44013 interpreted as follows: the 'i' is the return type (an 'int'), the '8' 44014 is the total size of the parameters in bytes (two pointers each of size 44015 4), the '@0' is the first parameter (an object at byte offset '0') and 44016 ':4' is the second parameter (a 'SEL' at byte offset '4'). 44017 44018 You can easily find more examples by running the "strings" program on 44019 an Objective-C object file compiled by GCC. You'll see a lot of strings 44020 that look very much like 'i8@0:4'. They are signatures of Objective-C 44021 methods. 44022 44023 44024 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 44025 44026 8.4 Garbage Collection 44027 ====================== 44028 44029 This section is specific for the GNU Objective-C runtime. If you are 44030 using a different runtime, you can skip it. 44031 44032 Support for garbage collection with the GNU runtime has been added by 44033 using a powerful conservative garbage collector, known as the 44034 Boehm-Demers-Weiser conservative garbage collector. 44035 44036 To enable the support for it you have to configure the compiler using 44037 an additional argument, '--enable-objc-gc'. This will build the 44038 boehm-gc library, and build an additional runtime library which has 44039 several enhancements to support the garbage collector. The new library 44040 has a new name, 'libobjc_gc.a' to not conflict with the 44041 non-garbage-collected library. 44042 44043 When the garbage collector is used, the objects are allocated using the 44044 so-called typed memory allocation mechanism available in the 44045 Boehm-Demers-Weiser collector. This mode requires precise information 44046 on where pointers are located inside objects. This information is 44047 computed once per class, immediately after the class has been 44048 initialized. 44049 44050 There is a new runtime function 'class_ivar_set_gcinvisible()' which 44051 can be used to declare a so-called "weak pointer" reference. Such a 44052 pointer is basically hidden for the garbage collector; this can be 44053 useful in certain situations, especially when you want to keep track of 44054 the allocated objects, yet allow them to be collected. This kind of 44055 pointers can only be members of objects, you cannot declare a global 44056 pointer as a weak reference. Every type which is a pointer type can be 44057 declared a weak pointer, including 'id', 'Class' and 'SEL'. 44058 44059 Here is an example of how to use this feature. Suppose you want to 44060 implement a class whose instances hold a weak pointer reference; the 44061 following class does this: 44062 44063 44064 @interface WeakPointer : Object 44065 { 44066 const void* weakPointer; 44067 } 44068 44069 - initWithPointer:(const void*)p; 44070 - (const void*)weakPointer; 44071 @end 44072 44073 44074 @implementation WeakPointer 44075 44076 + (void)initialize 44077 { 44078 if (self == objc_lookUpClass ("WeakPointer")) 44079 class_ivar_set_gcinvisible (self, "weakPointer", YES); 44080 } 44081 44082 - initWithPointer:(const void*)p 44083 { 44084 weakPointer = p; 44085 return self; 44086 } 44087 44088 - (const void*)weakPointer 44089 { 44090 return weakPointer; 44091 } 44092 44093 @end 44094 44095 44096 Weak pointers are supported through a new type character specifier 44097 represented by the '!' character. The 'class_ivar_set_gcinvisible()' 44098 function adds or removes this specifier to the string type description 44099 of the instance variable named as argument. 44100 44101 44102 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 44103 44104 8.5 Constant string objects 44105 =========================== 44106 44107 GNU Objective-C provides constant string objects that are generated 44108 directly by the compiler. You declare a constant string object by 44109 prefixing a C constant string with the character '@': 44110 44111 id myString = @"this is a constant string object"; 44112 44113 The constant string objects are by default instances of the 44114 'NXConstantString' class which is provided by the GNU Objective-C 44115 runtime. To get the definition of this class you must include the 44116 'objc/NXConstStr.h' header file. 44117 44118 User defined libraries may want to implement their own constant string 44119 class. To be able to support them, the GNU Objective-C compiler 44120 provides a new command line options 44121 '-fconstant-string-class=CLASS-NAME'. The provided class should adhere 44122 to a strict structure, the same as 'NXConstantString''s structure: 44123 44124 44125 @interface MyConstantStringClass 44126 { 44127 Class isa; 44128 char *c_string; 44129 unsigned int len; 44130 } 44131 @end 44132 44133 44134 'NXConstantString' inherits from 'Object'; user class libraries may 44135 choose to inherit the customized constant string class from a different 44136 class than 'Object'. There is no requirement in the methods the 44137 constant string class has to implement, but the final ivar layout of the 44138 class must be the compatible with the given structure. 44139 44140 When the compiler creates the statically allocated constant string 44141 object, the 'c_string' field will be filled by the compiler with the 44142 string; the 'length' field will be filled by the compiler with the 44143 string length; the 'isa' pointer will be filled with 'NULL' by the 44144 compiler, and it will later be fixed up automatically at runtime by the 44145 GNU Objective-C runtime library to point to the class which was set by 44146 the '-fconstant-string-class' option when the object file is loaded (if 44147 you wonder how it works behind the scenes, the name of the class to use, 44148 and the list of static objects to fixup, are stored by the compiler in 44149 the object file in a place where the GNU runtime library will find them 44150 at runtime). 44151 44152 As a result, when a file is compiled with the '-fconstant-string-class' 44153 option, all the constant string objects will be instances of the class 44154 specified as argument to this option. It is possible to have multiple 44155 compilation units referring to different constant string classes, 44156 neither the compiler nor the linker impose any restrictions in doing 44157 this. 44158 44159 44160 File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C 44161 44162 8.6 compatibility_alias 44163 ======================= 44164 44165 The keyword '@compatibility_alias' allows you to define a class name as 44166 equivalent to another class name. For example: 44167 44168 @compatibility_alias WOApplication GSWApplication; 44169 44170 tells the compiler that each time it encounters 'WOApplication' as a 44171 class name, it should replace it with 'GSWApplication' (that is, 44172 'WOApplication' is just an alias for 'GSWApplication'). 44173 44174 There are some constraints on how this can be used-- 44175 44176 * 'WOApplication' (the alias) must not be an existing class; 44177 44178 * 'GSWApplication' (the real class) must be an existing class. 44179 44180 44181 File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C 44182 44183 8.7 Exceptions 44184 ============== 44185 44186 GNU Objective-C provides exception support built into the language, as 44187 in the following example: 44188 44189 @try { 44190 ... 44191 @throw expr; 44192 ... 44193 } 44194 @catch (AnObjCClass *exc) { 44195 ... 44196 @throw expr; 44197 ... 44198 @throw; 44199 ... 44200 } 44201 @catch (AnotherClass *exc) { 44202 ... 44203 } 44204 @catch (id allOthers) { 44205 ... 44206 } 44207 @finally { 44208 ... 44209 @throw expr; 44210 ... 44211 } 44212 44213 The '@throw' statement may appear anywhere in an Objective-C or 44214 Objective-C++ program; when used inside of a '@catch' block, the 44215 '@throw' may appear without an argument (as shown above), in which case 44216 the object caught by the '@catch' will be rethrown. 44217 44218 Note that only (pointers to) Objective-C objects may be thrown and 44219 caught using this scheme. When an object is thrown, it will be caught 44220 by the nearest '@catch' clause capable of handling objects of that type, 44221 analogously to how 'catch' blocks work in C++ and Java. A '@catch(id 44222 ...)' clause (as shown above) may also be provided to catch any and all 44223 Objective-C exceptions not caught by previous '@catch' clauses (if any). 44224 44225 The '@finally' clause, if present, will be executed upon exit from the 44226 immediately preceding '@try ... @catch' section. This will happen 44227 regardless of whether any exceptions are thrown, caught or rethrown 44228 inside the '@try ... @catch' section, analogously to the behavior of the 44229 'finally' clause in Java. 44230 44231 There are several caveats to using the new exception mechanism: 44232 44233 * The '-fobjc-exceptions' command line option must be used when 44234 compiling Objective-C files that use exceptions. 44235 44236 * With the GNU runtime, exceptions are always implemented as "native" 44237 exceptions and it is recommended that the '-fexceptions' and 44238 '-shared-libgcc' options are used when linking. 44239 44240 * With the NeXT runtime, although currently designed to be binary 44241 compatible with 'NS_HANDLER'-style idioms provided by the 44242 'NSException' class, the new exceptions can only be used on Mac OS 44243 X 10.3 (Panther) and later systems, due to additional functionality 44244 needed in the NeXT Objective-C runtime. 44245 44246 * As mentioned above, the new exceptions do not support handling 44247 types other than Objective-C objects. Furthermore, when used from 44248 Objective-C++, the Objective-C exception model does not 44249 interoperate with C++ exceptions at this time. This means you 44250 cannot '@throw' an exception from Objective-C and 'catch' it in 44251 C++, or vice versa (i.e., 'throw ... @catch'). 44252 44253 44254 File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C 44255 44256 8.8 Synchronization 44257 =================== 44258 44259 GNU Objective-C provides support for synchronized blocks: 44260 44261 @synchronized (ObjCClass *guard) { 44262 ... 44263 } 44264 44265 Upon entering the '@synchronized' block, a thread of execution shall 44266 first check whether a lock has been placed on the corresponding 'guard' 44267 object by another thread. If it has, the current thread shall wait 44268 until the other thread relinquishes its lock. Once 'guard' becomes 44269 available, the current thread will place its own lock on it, execute the 44270 code contained in the '@synchronized' block, and finally relinquish the 44271 lock (thereby making 'guard' available to other threads). 44272 44273 Unlike Java, Objective-C does not allow for entire methods to be marked 44274 '@synchronized'. Note that throwing exceptions out of '@synchronized' 44275 blocks is allowed, and will cause the guarding object to be unlocked 44276 properly. 44277 44278 Because of the interactions between synchronization and exception 44279 handling, you can only use '@synchronized' when compiling with 44280 exceptions enabled, that is with the command line option 44281 '-fobjc-exceptions'. 44282 44283 44284 File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C 44285 44286 8.9 Fast enumeration 44287 ==================== 44288 44289 * Menu: 44290 44291 * Using fast enumeration:: 44292 * c99-like fast enumeration syntax:: 44293 * Fast enumeration details:: 44294 * Fast enumeration protocol:: 44295 44296 44297 File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration 44298 44299 8.9.1 Using fast enumeration 44300 ---------------------------- 44301 44302 GNU Objective-C provides support for the fast enumeration syntax: 44303 44304 id array = ...; 44305 id object; 44306 44307 for (object in array) 44308 { 44309 /* Do something with 'object' */ 44310 } 44311 44312 'array' needs to be an Objective-C object (usually a collection object, 44313 for example an array, a dictionary or a set) which implements the "Fast 44314 Enumeration Protocol" (see below). If you are using a Foundation 44315 library such as GNUstep Base or Apple Cocoa Foundation, all collection 44316 objects in the library implement this protocol and can be used in this 44317 way. 44318 44319 The code above would iterate over all objects in 'array'. For each of 44320 them, it assigns it to 'object', then executes the 'Do something with 44321 'object'' statements. 44322 44323 Here is a fully worked-out example using a Foundation library (which 44324 provides the implementation of 'NSArray', 'NSString' and 'NSLog'): 44325 44326 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; 44327 NSString *object; 44328 44329 for (object in array) 44330 NSLog (@"Iterating over %@", object); 44331 44332 44333 File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration 44334 44335 8.9.2 c99-like fast enumeration syntax 44336 -------------------------------------- 44337 44338 A c99-like declaration syntax is also allowed: 44339 44340 id array = ...; 44341 44342 for (id object in array) 44343 { 44344 /* Do something with 'object' */ 44345 } 44346 44347 this is completely equivalent to: 44348 44349 id array = ...; 44350 44351 { 44352 id object; 44353 for (object in array) 44354 { 44355 /* Do something with 'object' */ 44356 } 44357 } 44358 44359 but can save some typing. 44360 44361 Note that the option '-std=c99' is not required to allow this syntax in 44362 Objective-C. 44363 44364 44365 File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration 44366 44367 8.9.3 Fast enumeration details 44368 ------------------------------ 44369 44370 Here is a more technical description with the gory details. Consider 44371 the code 44372 44373 for (OBJECT EXPRESSION in COLLECTION EXPRESSION) 44374 { 44375 STATEMENTS 44376 } 44377 44378 here is what happens when you run it: 44379 44380 * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is 44381 used as the collection object to iterate over. This means it is 44382 safe to write code such as 'for (object in [NSDictionary 44383 keyEnumerator]) ...'. 44384 44385 * the iteration is implemented by the compiler by repeatedly getting 44386 batches of objects from the collection object using the fast 44387 enumeration protocol (see below), then iterating over all objects 44388 in the batch. This is faster than a normal enumeration where 44389 objects are retrieved one by one (hence the name "fast 44390 enumeration"). 44391 44392 * if there are no objects in the collection, then 'OBJECT EXPRESSION' 44393 is set to 'nil' and the loop immediately terminates. 44394 44395 * if there are objects in the collection, then for each object in the 44396 collection (in the order they are returned) 'OBJECT EXPRESSION' is 44397 set to the object, then 'STATEMENTS' are executed. 44398 44399 * 'STATEMENTS' can contain 'break' and 'continue' commands, which 44400 will abort the iteration or skip to the next loop iteration as 44401 expected. 44402 44403 * when the iteration ends because there are no more objects to 44404 iterate over, 'OBJECT EXPRESSION' is set to 'nil'. This allows you 44405 to determine whether the iteration finished because a 'break' 44406 command was used (in which case 'OBJECT EXPRESSION' will remain set 44407 to the last object that was iterated over) or because it iterated 44408 over all the objects (in which case 'OBJECT EXPRESSION' will be set 44409 to 'nil'). 44410 44411 * 'STATEMENTS' must not make any changes to the collection object; if 44412 they do, it is a hard error and the fast enumeration terminates by 44413 invoking 'objc_enumerationMutation', a runtime function that 44414 normally aborts the program but which can be customized by 44415 Foundation libraries via 'objc_set_mutation_handler' to do 44416 something different, such as raising an exception. 44417 44418 44419 File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration 44420 44421 8.9.4 Fast enumeration protocol 44422 ------------------------------- 44423 44424 If you want your own collection object to be usable with fast 44425 enumeration, you need to have it implement the method 44426 44427 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state 44428 objects: (id *)objects 44429 count: (unsigned long)len; 44430 44431 where 'NSFastEnumerationState' must be defined in your code as follows: 44432 44433 typedef struct 44434 { 44435 unsigned long state; 44436 id *itemsPtr; 44437 unsigned long *mutationsPtr; 44438 unsigned long extra[5]; 44439 } NSFastEnumerationState; 44440 44441 If no 'NSFastEnumerationState' is defined in your code, the compiler 44442 will automatically replace 'NSFastEnumerationState *' with 'struct 44443 __objcFastEnumerationState *', where that type is silently defined by 44444 the compiler in an identical way. This can be confusing and we 44445 recommend that you define 'NSFastEnumerationState' (as shown above) 44446 instead. 44447 44448 The method is called repeatedly during a fast enumeration to retrieve 44449 batches of objects. Each invocation of the method should retrieve the 44450 next batch of objects. 44451 44452 The return value of the method is the number of objects in the current 44453 batch; this should not exceed 'len', which is the maximum size of a 44454 batch as requested by the caller. The batch itself is returned in the 44455 'itemsPtr' field of the 'NSFastEnumerationState' struct. 44456 44457 To help with returning the objects, the 'objects' array is a C array 44458 preallocated by the caller (on the stack) of size 'len'. In many cases 44459 you can put the objects you want to return in that 'objects' array, then 44460 do 'itemsPtr = objects'. But you don't have to; if your collection 44461 already has the objects to return in some form of C array, it could 44462 return them from there instead. 44463 44464 The 'state' and 'extra' fields of the 'NSFastEnumerationState' 44465 structure allows your collection object to keep track of the state of 44466 the enumeration. In a simple array implementation, 'state' may keep 44467 track of the index of the last object that was returned, and 'extra' may 44468 be unused. 44469 44470 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to 44471 keep track of mutations. It should point to a number; before working on 44472 each object, the fast enumeration loop will check that this number has 44473 not changed. If it has, a mutation has happened and the fast 44474 enumeration will abort. So, 'mutationsPtr' could be set to point to 44475 some sort of version number of your collection, which is increased by 44476 one every time there is a change (for example when an object is added or 44477 removed). Or, if you are content with less strict mutation checks, it 44478 could point to the number of objects in your collection or some other 44479 value that can be checked to perform an approximate check that the 44480 collection has not been mutated. 44481 44482 Finally, note how we declared the 'len' argument and the return value 44483 to be of type 'unsigned long'. They could also be declared to be of 44484 type 'unsigned int' and everything would still work. 44485 44486 44487 File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C 44488 44489 8.10 Messaging with the GNU Objective-C runtime 44490 =============================================== 44491 44492 This section is specific for the GNU Objective-C runtime. If you are 44493 using a different runtime, you can skip it. 44494 44495 The implementation of messaging in the GNU Objective-C runtime is 44496 designed to be portable, and so is based on standard C. 44497 44498 Sending a message in the GNU Objective-C runtime is composed of two 44499 separate steps. First, there is a call to the lookup function, 44500 'objc_msg_lookup ()' (or, in the case of messages to super, 44501 'objc_msg_lookup_super ()'). This runtime function takes as argument 44502 the receiver and the selector of the method to be called; it returns the 44503 'IMP', that is a pointer to the function implementing the method. The 44504 second step of method invocation consists of casting this pointer 44505 function to the appropriate function pointer type, and calling the 44506 function pointed to it with the right arguments. 44507 44508 For example, when the compiler encounters a method invocation such as 44509 '[object init]', it compiles it into a call to 'objc_msg_lookup (object, 44510 @selector(init))' followed by a cast of the returned value to the 44511 appropriate function pointer type, and then it calls it. 44512 44513 * Menu: 44514 44515 * Dynamically registering methods:: 44516 * Forwarding hook:: 44517 44518 44519 File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime 44520 44521 8.10.1 Dynamically registering methods 44522 -------------------------------------- 44523 44524 If 'objc_msg_lookup()' does not find a suitable method implementation, 44525 because the receiver does not implement the required method, it tries to 44526 see if the class can dynamically register the method. 44527 44528 To do so, the runtime checks if the class of the receiver implements 44529 the method 44530 44531 + (BOOL) resolveInstanceMethod: (SEL)selector; 44532 44533 in the case of an instance method, or 44534 44535 + (BOOL) resolveClassMethod: (SEL)selector; 44536 44537 in the case of a class method. If the class implements it, the runtime 44538 invokes it, passing as argument the selector of the original method, and 44539 if it returns 'YES', the runtime tries the lookup again, which could now 44540 succeed if a matching method was added dynamically by 44541 '+resolveInstanceMethod:' or '+resolveClassMethod:'. 44542 44543 This allows classes to dynamically register methods (by adding them to 44544 the class using 'class_addMethod') when they are first called. To do 44545 so, a class should implement '+resolveInstanceMethod:' (or, depending on 44546 the case, '+resolveClassMethod:') and have it recognize the selectors of 44547 methods that can be registered dynamically at runtime, register them, 44548 and return 'YES'. It should return 'NO' for methods that it does not 44549 dynamically registered at runtime. 44550 44551 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not 44552 implemented or returns 'NO', the runtime then tries the forwarding hook. 44553 44554 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was 44555 added to the GNU Objective-C runtime in GCC version 4.6. 44556 44557 44558 File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime 44559 44560 8.10.2 Forwarding hook 44561 ---------------------- 44562 44563 The GNU Objective-C runtime provides a hook, called 44564 '__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it 44565 can't find a method implementation in the runtime tables and after 44566 calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been 44567 attempted and did not succeed in dynamically registering the method. 44568 44569 To configure the hook, you set the global variable 44570 '__objc_msg_forward2' to a function with the same argument and return 44571 types of 'objc_msg_lookup()'. When 'objc_msg_lookup()' can not find a 44572 method implementation, it invokes the hook function you provided to get 44573 a method implementation to return. So, in practice 44574 '__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding 44575 some custom code that is called to do a further lookup when no standard 44576 method implementation can be found using the normal lookup. 44577 44578 This hook is generally reserved for "Foundation" libraries such as 44579 GNUstep Base, which use it to implement their high-level method 44580 forwarding API, typically based around the 'forwardInvocation:' method. 44581 So, unless you are implementing your own "Foundation" library, you 44582 should not set this hook. 44583 44584 In a typical forwarding implementation, the '__objc_msg_forward2' hook 44585 function determines the argument and return type of the method that is 44586 being looked up, and then creates a function that takes these arguments 44587 and has that return type, and returns it to the caller. Creating this 44588 function is non-trivial and is typically performed using a dedicated 44589 library such as 'libffi'. 44590 44591 The forwarding method implementation thus created is returned by 44592 'objc_msg_lookup()' and is executed as if it was a normal method 44593 implementation. When the forwarding method implementation is called, it 44594 is usually expected to pack all arguments into some sort of object 44595 (typically, an 'NSInvocation' in a "Foundation" library), and hand it 44596 over to the programmer ('forwardInvocation:') who is then allowed to 44597 manipulate the method invocation using a high-level API provided by the 44598 "Foundation" library. For example, the programmer may want to examine 44599 the method invocation arguments and name and potentially change them 44600 before forwarding the method invocation to one or more local objects 44601 ('performInvocation:') or even to remote objects (by using Distributed 44602 Objects or some other mechanism). When all this completes, the return 44603 value is passed back and must be returned correctly to the original 44604 caller. 44605 44606 Note that the GNU Objective-C runtime currently provides no support for 44607 method forwarding or method invocations other than the 44608 '__objc_msg_forward2' hook. 44609 44610 If the forwarding hook does not exist or returns 'NULL', the runtime 44611 currently attempts forwarding using an older, deprecated API, and if 44612 that fails, it aborts the program. In future versions of the GNU 44613 Objective-C runtime, the runtime will immediately abort. 44614 44615 44616 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 44617 44618 9 Binary Compatibility 44619 ********************** 44620 44621 Binary compatibility encompasses several related concepts: 44622 44623 "application binary interface (ABI)" 44624 The set of runtime conventions followed by all of the tools that 44625 deal with binary representations of a program, including compilers, 44626 assemblers, linkers, and language runtime support. Some ABIs are 44627 formal with a written specification, possibly designed by multiple 44628 interested parties. Others are simply the way things are actually 44629 done by a particular set of tools. 44630 44631 "ABI conformance" 44632 A compiler conforms to an ABI if it generates code that follows all 44633 of the specifications enumerated by that ABI. A library conforms 44634 to an ABI if it is implemented according to that ABI. An 44635 application conforms to an ABI if it is built using tools that 44636 conform to that ABI and does not contain source code that 44637 specifically changes behavior specified by the ABI. 44638 44639 "calling conventions" 44640 Calling conventions are a subset of an ABI that specify of how 44641 arguments are passed and function results are returned. 44642 44643 "interoperability" 44644 Different sets of tools are interoperable if they generate files 44645 that can be used in the same program. The set of tools includes 44646 compilers, assemblers, linkers, libraries, header files, startup 44647 files, and debuggers. Binaries produced by different sets of tools 44648 are not interoperable unless they implement the same ABI. This 44649 applies to different versions of the same tools as well as tools 44650 from different vendors. 44651 44652 "intercallability" 44653 Whether a function in a binary built by one set of tools can call a 44654 function in a binary built by a different set of tools is a subset 44655 of interoperability. 44656 44657 "implementation-defined features" 44658 Language standards include lists of implementation-defined features 44659 whose behavior can vary from one implementation to another. Some 44660 of these features are normally covered by a platform's ABI and 44661 others are not. The features that are not covered by an ABI 44662 generally affect how a program behaves, but not intercallability. 44663 44664 "compatibility" 44665 Conformance to the same ABI and the same behavior of 44666 implementation-defined features are both relevant for 44667 compatibility. 44668 44669 The application binary interface implemented by a C or C++ compiler 44670 affects code generation and runtime support for: 44671 44672 * size and alignment of data types 44673 * layout of structured types 44674 * calling conventions 44675 * register usage conventions 44676 * interfaces for runtime arithmetic support 44677 * object file formats 44678 44679 In addition, the application binary interface implemented by a C++ 44680 compiler affects code generation and runtime support for: 44681 * name mangling 44682 * exception handling 44683 * invoking constructors and destructors 44684 * layout, alignment, and padding of classes 44685 * layout and alignment of virtual tables 44686 44687 Some GCC compilation options cause the compiler to generate code that 44688 does not conform to the platform's default ABI. Other options cause 44689 different program behavior for implementation-defined features that are 44690 not covered by an ABI. These options are provided for consistency with 44691 other compilers that do not follow the platform's default ABI or the 44692 usual behavior of implementation-defined features for the platform. Be 44693 very careful about using such options. 44694 44695 Most platforms have a well-defined ABI that covers C code, but ABIs 44696 that cover C++ functionality are not yet common. 44697 44698 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 44699 written, vendor-neutral C++ ABI that was designed to be specific to 44700 64-bit Itanium but also includes generic specifications that apply to 44701 any platform. This C++ ABI is also implemented by other compiler 44702 vendors on some platforms, notably GNU/Linux and BSD systems. We have 44703 tried hard to provide a stable ABI that will be compatible with future 44704 GCC releases, but it is possible that we will encounter problems that 44705 make this difficult. Such problems could include different 44706 interpretations of the C++ ABI by different vendors, bugs in the ABI, or 44707 bugs in the implementation of the ABI in different compilers. GCC's 44708 '-Wabi' switch warns when G++ generates code that is probably not 44709 compatible with the C++ ABI. 44710 44711 The C++ library used with a C++ compiler includes the Standard C++ 44712 Library, with functionality defined in the C++ Standard, plus language 44713 runtime support. The runtime support is included in a C++ ABI, but 44714 there is no formal ABI for the Standard C++ Library. Two 44715 implementations of that library are interoperable if one follows the 44716 de-facto ABI of the other and if they are both built with the same 44717 compiler, or with compilers that conform to the same ABI for C++ 44718 compiler and runtime support. 44719 44720 When G++ and another C++ compiler conform to the same C++ ABI, but the 44721 implementations of the Standard C++ Library that they normally use do 44722 not follow the same ABI for the Standard C++ Library, object files built 44723 with those compilers can be used in the same program only if they use 44724 the same C++ library. This requires specifying the location of the C++ 44725 library header files when invoking the compiler whose usual library is 44726 not being used. The location of GCC's C++ header files depends on how 44727 the GCC build was configured, but can be seen by using the G++ '-v' 44728 option. With default configuration options for G++ 3.3 the compile line 44729 for a different C++ compiler needs to include 44730 44731 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 44732 44733 Similarly, compiling code with G++ that must use a C++ library other 44734 than the GNU C++ library requires specifying the location of the header 44735 files for that other library. 44736 44737 The most straightforward way to link a program to use a particular C++ 44738 library is to use a C++ driver that specifies that C++ library by 44739 default. The 'g++' driver, for example, tells the linker where to find 44740 GCC's C++ library ('libstdc++') plus the other libraries and startup 44741 files it needs, in the proper order. 44742 44743 If a program must use a different C++ library and it's not possible to 44744 do the final link using a C++ driver that uses that library by default, 44745 it is necessary to tell 'g++' the location and name of that library. It 44746 might also be necessary to specify different startup files and other 44747 runtime support libraries, and to suppress the use of GCC's support 44748 libraries with one or more of the options '-nostdlib', '-nostartfiles', 44749 and '-nodefaultlibs'. 44750 44751 44752 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 44753 44754 10 'gcov'--a Test Coverage Program 44755 ********************************** 44756 44757 'gcov' is a tool you can use in conjunction with GCC to test code 44758 coverage in your programs. 44759 44760 * Menu: 44761 44762 * Gcov Intro:: Introduction to gcov. 44763 * Invoking Gcov:: How to use gcov. 44764 * Gcov and Optimization:: Using gcov with GCC optimization. 44765 * Gcov Data Files:: The files used by gcov. 44766 * Cross-profiling:: Data file relocation. 44767 44768 44769 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 44770 44771 10.1 Introduction to 'gcov' 44772 =========================== 44773 44774 'gcov' is a test coverage program. Use it in concert with GCC to 44775 analyze your programs to help create more efficient, faster running code 44776 and to discover untested parts of your program. You can use 'gcov' as a 44777 profiling tool to help discover where your optimization efforts will 44778 best affect your code. You can also use 'gcov' along with the other 44779 profiling tool, 'gprof', to assess which parts of your code use the 44780 greatest amount of computing time. 44781 44782 Profiling tools help you analyze your code's performance. Using a 44783 profiler such as 'gcov' or 'gprof', you can find out some basic 44784 performance statistics, such as: 44785 44786 * how often each line of code executes 44787 44788 * what lines of code are actually executed 44789 44790 * how much computing time each section of code uses 44791 44792 Once you know these things about how your code works when compiled, you 44793 can look at each module to see which modules should be optimized. 44794 'gcov' helps you determine where to work on optimization. 44795 44796 Software developers also use coverage testing in concert with 44797 testsuites, to make sure software is actually good enough for a release. 44798 Testsuites can verify that a program works as expected; a coverage 44799 program tests to see how much of the program is exercised by the 44800 testsuite. Developers can then determine what kinds of test cases need 44801 to be added to the testsuites to create both better testing and a better 44802 final product. 44803 44804 You should compile your code without optimization if you plan to use 44805 'gcov' because the optimization, by combining some lines of code into 44806 one function, may not give you as much information as you need to look 44807 for 'hot spots' where the code is using a great deal of computer time. 44808 Likewise, because 'gcov' accumulates statistics by line (at the lowest 44809 resolution), it works best with a programming style that places only one 44810 statement on each line. If you use complicated macros that expand to 44811 loops or to other control structures, the statistics are less 44812 helpful--they only report on the line where the macro call appears. If 44813 your complex macros behave like functions, you can replace them with 44814 inline functions to solve this problem. 44815 44816 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how 44817 many times each line of a source file 'SOURCEFILE.c' has executed. You 44818 can use these logfiles along with 'gprof' to aid in fine-tuning the 44819 performance of your programs. 'gprof' gives timing information you can 44820 use along with the information you get from 'gcov'. 44821 44822 'gcov' works only on code compiled with GCC. It is not compatible with 44823 any other profiling or test coverage mechanism. 44824 44825 44826 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 44827 44828 10.2 Invoking 'gcov' 44829 ==================== 44830 44831 gcov [OPTIONS] FILES 44832 44833 'gcov' accepts the following options: 44834 44835 '-h' 44836 '--help' 44837 Display help about using 'gcov' (on the standard output), and exit 44838 without doing any further processing. 44839 44840 '-v' 44841 '--version' 44842 Display the 'gcov' version number (on the standard output), and 44843 exit without doing any further processing. 44844 44845 '-a' 44846 '--all-blocks' 44847 Write individual execution counts for every basic block. Normally 44848 gcov outputs execution counts only for the main blocks of a line. 44849 With this option you can determine if blocks within a single line 44850 are not being executed. 44851 44852 '-b' 44853 '--branch-probabilities' 44854 Write branch frequencies to the output file, and write branch 44855 summary info to the standard output. This option allows you to see 44856 how often each branch in your program was taken. Unconditional 44857 branches will not be shown, unless the '-u' option is given. 44858 44859 '-c' 44860 '--branch-counts' 44861 Write branch frequencies as the number of branches taken, rather 44862 than the percentage of branches taken. 44863 44864 '-n' 44865 '--no-output' 44866 Do not create the 'gcov' output file. 44867 44868 '-l' 44869 '--long-file-names' 44870 Create long file names for included source files. For example, if 44871 the header file 'x.h' contains code, and was included in the file 44872 'a.c', then running 'gcov' on the file 'a.c' will produce an output 44873 file called 'a.c##x.h.gcov' instead of 'x.h.gcov'. This can be 44874 useful if 'x.h' is included in multiple source files and you want 44875 to see the individual contributions. If you use the '-p' option, 44876 both the including and included file names will be complete path 44877 names. 44878 44879 '-p' 44880 '--preserve-paths' 44881 Preserve complete path information in the names of generated 44882 '.gcov' files. Without this option, just the filename component is 44883 used. With this option, all directories are used, with '/' 44884 characters translated to '#' characters, '.' directory components 44885 removed and unremoveable '..' components renamed to '^'. This is 44886 useful if sourcefiles are in several different directories. 44887 44888 '-r' 44889 '--relative-only' 44890 Only output information about source files with a relative pathname 44891 (after source prefix elision). Absolute paths are usually system 44892 header files and coverage of any inline functions therein is 44893 normally uninteresting. 44894 44895 '-f' 44896 '--function-summaries' 44897 Output summaries for each function in addition to the file level 44898 summary. 44899 44900 '-o DIRECTORY|FILE' 44901 '--object-directory DIRECTORY' 44902 '--object-file FILE' 44903 Specify either the directory containing the gcov data files, or the 44904 object path name. The '.gcno', and '.gcda' data files are searched 44905 for using this option. If a directory is specified, the data files 44906 are in that directory and named after the input file name, without 44907 its extension. If a file is specified here, the data files are 44908 named after that file, without its extension. 44909 44910 '-s DIRECTORY' 44911 '--source-prefix DIRECTORY' 44912 A prefix for source file names to remove when generating the output 44913 coverage files. This option is useful when building in a separate 44914 directory, and the pathname to the source directory is not wanted 44915 when determining the output file names. Note that this prefix 44916 detection is applied before determining whether the source file is 44917 absolute. 44918 44919 '-u' 44920 '--unconditional-branches' 44921 When branch probabilities are given, include those of unconditional 44922 branches. Unconditional branches are normally not interesting. 44923 44924 '-d' 44925 '--display-progress' 44926 Display the progress on the standard output. 44927 44928 'gcov' should be run with the current directory the same as that when 44929 you invoked the compiler. Otherwise it will not be able to locate the 44930 source files. 'gcov' produces files called 'MANGLEDNAME.gcov' in the 44931 current directory. These contain the coverage information of the source 44932 file they correspond to. One '.gcov' file is produced for each source 44933 (or header) file containing code, which was compiled to produce the data 44934 files. The MANGLEDNAME part of the output file name is usually simply 44935 the source file name, but can be something more complicated if the '-l' 44936 or '-p' options are given. Refer to those options for details. 44937 44938 If you invoke 'gcov' with multiple input files, the contributions from 44939 each input file are summed. Typically you would invoke it with the same 44940 list of files as the final link of your executable. 44941 44942 The '.gcov' files contain the ':' separated fields along with program 44943 source code. The format is 44944 44945 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 44946 44947 Additional block information may succeed each line, when requested by 44948 command line option. The EXECUTION_COUNT is '-' for lines containing no 44949 code. Unexecuted lines are marked '#####' or '====', depending on 44950 whether they are reachable by non-exceptional paths or only exceptional 44951 paths such as C++ exception handlers, respectively. 44952 44953 Some lines of information at the start have LINE_NUMBER of zero. These 44954 preamble lines are of the form 44955 44956 -:0:TAG:VALUE 44957 44958 The ordering and number of these preamble lines will be augmented as 44959 'gcov' development progresses -- do not rely on them remaining 44960 unchanged. Use TAG to locate a particular preamble line. 44961 44962 The additional block information is of the form 44963 44964 TAG INFORMATION 44965 44966 The INFORMATION is human readable, but designed to be simple enough for 44967 machine parsing too. 44968 44969 When printing percentages, 0% and 100% are only printed when the values 44970 are _exactly_ 0% and 100% respectively. Other values which would 44971 conventionally be rounded to 0% or 100% are instead printed as the 44972 nearest non-boundary value. 44973 44974 When using 'gcov', you must first compile your program with two special 44975 GCC options: '-fprofile-arcs -ftest-coverage'. This tells the compiler 44976 to generate additional information needed by gcov (basically a flow 44977 graph of the program) and also includes additional code in the object 44978 files for generating the extra profiling information needed by gcov. 44979 These additional files are placed in the directory where the object file 44980 is located. 44981 44982 Running the program will cause profile output to be generated. For 44983 each source file compiled with '-fprofile-arcs', an accompanying '.gcda' 44984 file will be placed in the object file directory. 44985 44986 Running 'gcov' with your program's source file names as arguments will 44987 now produce a listing of the code along with frequency of execution for 44988 each line. For example, if your program is called 'tmp.c', this is what 44989 you see when you use the basic 'gcov' facility: 44990 44991 $ gcc -fprofile-arcs -ftest-coverage tmp.c 44992 $ a.out 44993 $ gcov tmp.c 44994 90.00% of 10 source lines executed in file tmp.c 44995 Creating tmp.c.gcov. 44996 44997 The file 'tmp.c.gcov' contains output from 'gcov'. Here is a sample: 44998 44999 -: 0:Source:tmp.c 45000 -: 0:Graph:tmp.gcno 45001 -: 0:Data:tmp.gcda 45002 -: 0:Runs:1 45003 -: 0:Programs:1 45004 -: 1:#include <stdio.h> 45005 -: 2: 45006 -: 3:int main (void) 45007 1: 4:{ 45008 1: 5: int i, total; 45009 -: 6: 45010 1: 7: total = 0; 45011 -: 8: 45012 11: 9: for (i = 0; i < 10; i++) 45013 10: 10: total += i; 45014 -: 11: 45015 1: 12: if (total != 45) 45016 #####: 13: printf ("Failure\n"); 45017 -: 14: else 45018 1: 15: printf ("Success\n"); 45019 1: 16: return 0; 45020 -: 17:} 45021 45022 When you use the '-a' option, you will get individual block counts, and 45023 the output looks like this: 45024 45025 -: 0:Source:tmp.c 45026 -: 0:Graph:tmp.gcno 45027 -: 0:Data:tmp.gcda 45028 -: 0:Runs:1 45029 -: 0:Programs:1 45030 -: 1:#include <stdio.h> 45031 -: 2: 45032 -: 3:int main (void) 45033 1: 4:{ 45034 1: 4-block 0 45035 1: 5: int i, total; 45036 -: 6: 45037 1: 7: total = 0; 45038 -: 8: 45039 11: 9: for (i = 0; i < 10; i++) 45040 11: 9-block 0 45041 10: 10: total += i; 45042 10: 10-block 0 45043 -: 11: 45044 1: 12: if (total != 45) 45045 1: 12-block 0 45046 #####: 13: printf ("Failure\n"); 45047 $$$$$: 13-block 0 45048 -: 14: else 45049 1: 15: printf ("Success\n"); 45050 1: 15-block 0 45051 1: 16: return 0; 45052 1: 16-block 0 45053 -: 17:} 45054 45055 In this mode, each basic block is only shown on one line - the last 45056 line of the block. A multi-line block will only contribute to the 45057 execution count of that last line, and other lines will not be shown to 45058 contain code, unless previous blocks end on those lines. The total 45059 execution count of a line is shown and subsequent lines show the 45060 execution counts for individual blocks that end on that line. After 45061 each block, the branch and call counts of the block will be shown, if 45062 the '-b' option is given. 45063 45064 Because of the way GCC instruments calls, a call count can be shown 45065 after a line with no individual blocks. As you can see, line 13 45066 contains a basic block that was not executed. 45067 45068 When you use the '-b' option, your output looks like this: 45069 45070 $ gcov -b tmp.c 45071 90.00% of 10 source lines executed in file tmp.c 45072 80.00% of 5 branches executed in file tmp.c 45073 80.00% of 5 branches taken at least once in file tmp.c 45074 50.00% of 2 calls executed in file tmp.c 45075 Creating tmp.c.gcov. 45076 45077 Here is a sample of a resulting 'tmp.c.gcov' file: 45078 45079 -: 0:Source:tmp.c 45080 -: 0:Graph:tmp.gcno 45081 -: 0:Data:tmp.gcda 45082 -: 0:Runs:1 45083 -: 0:Programs:1 45084 -: 1:#include <stdio.h> 45085 -: 2: 45086 -: 3:int main (void) 45087 function main called 1 returned 1 blocks executed 75% 45088 1: 4:{ 45089 1: 5: int i, total; 45090 -: 6: 45091 1: 7: total = 0; 45092 -: 8: 45093 11: 9: for (i = 0; i < 10; i++) 45094 branch 0 taken 91% (fallthrough) 45095 branch 1 taken 9% 45096 10: 10: total += i; 45097 -: 11: 45098 1: 12: if (total != 45) 45099 branch 0 taken 0% (fallthrough) 45100 branch 1 taken 100% 45101 #####: 13: printf ("Failure\n"); 45102 call 0 never executed 45103 -: 14: else 45104 1: 15: printf ("Success\n"); 45105 call 0 called 1 returned 100% 45106 1: 16: return 0; 45107 -: 17:} 45108 45109 For each function, a line is printed showing how many times the 45110 function is called, how many times it returns and what percentage of the 45111 function's blocks were executed. 45112 45113 For each basic block, a line is printed after the last line of the 45114 basic block describing the branch or call that ends the basic block. 45115 There can be multiple branches and calls listed for a single source line 45116 if there are multiple basic blocks that end on that line. In this case, 45117 the branches and calls are each given a number. There is no simple way 45118 to map these branches and calls back to source constructs. In general, 45119 though, the lowest numbered branch or call will correspond to the 45120 leftmost construct on the source line. 45121 45122 For a branch, if it was executed at least once, then a percentage 45123 indicating the number of times the branch was taken divided by the 45124 number of times the branch was executed will be printed. Otherwise, the 45125 message "never executed" is printed. 45126 45127 For a call, if it was executed at least once, then a percentage 45128 indicating the number of times the call returned divided by the number 45129 of times the call was executed will be printed. This will usually be 45130 100%, but may be less for functions that call 'exit' or 'longjmp', and 45131 thus may not return every time they are called. 45132 45133 The execution counts are cumulative. If the example program were 45134 executed again without removing the '.gcda' file, the count for the 45135 number of times each line in the source was executed would be added to 45136 the results of the previous run(s). This is potentially useful in 45137 several ways. For example, it could be used to accumulate data over a 45138 number of program runs as part of a test verification suite, or to 45139 provide more accurate long-term information over a large number of 45140 program runs. 45141 45142 The data in the '.gcda' files is saved immediately before the program 45143 exits. For each source file compiled with '-fprofile-arcs', the 45144 profiling code first attempts to read in an existing '.gcda' file; if 45145 the file doesn't match the executable (differing number of basic block 45146 counts) it will ignore the contents of the file. It then adds in the 45147 new execution counts and finally writes the data to the file. 45148 45149 45150 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 45151 45152 10.3 Using 'gcov' with GCC Optimization 45153 ======================================= 45154 45155 If you plan to use 'gcov' to help optimize your code, you must first 45156 compile your program with two special GCC options: '-fprofile-arcs 45157 -ftest-coverage'. Aside from that, you can use any other GCC options; 45158 but if you want to prove that every single line in your program was 45159 executed, you should not compile with optimization at the same time. On 45160 some machines the optimizer can eliminate some simple code lines by 45161 combining them with other lines. For example, code like this: 45162 45163 if (a != b) 45164 c = 1; 45165 else 45166 c = 0; 45167 45168 can be compiled into one instruction on some machines. In this case, 45169 there is no way for 'gcov' to calculate separate execution counts for 45170 each line because there isn't separate code for each line. Hence the 45171 'gcov' output looks like this if you compiled the program with 45172 optimization: 45173 45174 100: 12:if (a != b) 45175 100: 13: c = 1; 45176 100: 14:else 45177 100: 15: c = 0; 45178 45179 The output shows that this block of code, combined by optimization, 45180 executed 100 times. In one sense this result is correct, because there 45181 was only one instruction representing all four of these lines. However, 45182 the output does not indicate how many times the result was 0 and how 45183 many times the result was 1. 45184 45185 Inlineable functions can create unexpected line counts. Line counts 45186 are shown for the source code of the inlineable function, but what is 45187 shown depends on where the function is inlined, or if it is not inlined 45188 at all. 45189 45190 If the function is not inlined, the compiler must emit an out of line 45191 copy of the function, in any object file that needs it. If 'fileA.o' 45192 and 'fileB.o' both contain out of line bodies of a particular inlineable 45193 function, they will also both contain coverage counts for that function. 45194 When 'fileA.o' and 'fileB.o' are linked together, the linker will, on 45195 many systems, select one of those out of line bodies for all calls to 45196 that function, and remove or ignore the other. Unfortunately, it will 45197 not remove the coverage counters for the unused function body. Hence 45198 when instrumented, all but one use of that function will show zero 45199 counts. 45200 45201 If the function is inlined in several places, the block structure in 45202 each location might not be the same. For instance, a condition might 45203 now be calculable at compile time in some instances. Because the 45204 coverage of all the uses of the inline function will be shown for the 45205 same source lines, the line counts themselves might seem inconsistent. 45206 45207 Long-running applications can use the '_gcov_reset' and '_gcov_dump' 45208 facilities to restrict profile collection to the program region of 45209 interest. Calling '_gcov_reset(void)' will clear all profile counters 45210 to zero, and calling '_gcov_dump(void)' will cause the profile 45211 information collected at that point to be dumped to '.gcda' output 45212 files. 45213 45214 45215 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 45216 45217 10.4 Brief description of 'gcov' data files 45218 =========================================== 45219 45220 'gcov' uses two files for profiling. The names of these files are 45221 derived from the original _object_ file by substituting the file suffix 45222 with either '.gcno', or '.gcda'. The files contain coverage and profile 45223 data stored in a platform-independent format. The '.gcno' files are 45224 placed in the same directory as the object file. By default, the 45225 '.gcda' files are also stored in the same directory as the object file, 45226 but the GCC '-fprofile-dir' option may be used to store the '.gcda' 45227 files in a separate directory. 45228 45229 The '.gcno' notes file is generated when the source file is compiled 45230 with the GCC '-ftest-coverage' option. It contains information to 45231 reconstruct the basic block graphs and assign source line numbers to 45232 blocks. 45233 45234 The '.gcda' count data file is generated when a program containing 45235 object files built with the GCC '-fprofile-arcs' option is executed. A 45236 separate '.gcda' file is created for each object file compiled with this 45237 option. It contains arc transition counts, value profile counts, and 45238 some summary information. 45239 45240 The full details of the file format is specified in 'gcov-io.h', and 45241 functions provided in that header file should be used to access the 45242 coverage files. 45243 45244 45245 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 45246 45247 10.5 Data file relocation to support cross-profiling 45248 ==================================================== 45249 45250 Running the program will cause profile output to be generated. For each 45251 source file compiled with '-fprofile-arcs', an accompanying '.gcda' file 45252 will be placed in the object file directory. That implicitly requires 45253 running the program on the same system as it was built or having the 45254 same absolute directory structure on the target system. The program 45255 will try to create the needed directory structure, if it is not already 45256 present. 45257 45258 To support cross-profiling, a program compiled with '-fprofile-arcs' 45259 can relocate the data files based on two environment variables: 45260 45261 * GCOV_PREFIX contains the prefix to add to the absolute paths in the 45262 object file. Prefix can be absolute, or relative. The default is 45263 no prefix. 45264 45265 * GCOV_PREFIX_STRIP indicates the how many initial directory names to 45266 strip off the hardwired absolute paths. Default value is 0. 45267 45268 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is 45269 undefined, then a relative path is made out of the hardwired 45270 absolute paths. 45271 45272 For example, if the object file '/user/build/foo.o' was built with 45273 '-fprofile-arcs', the final executable will try to create the data file 45274 '/user/build/foo.gcda' when running on the target system. This will 45275 fail if the corresponding directory does not exist and it is unable to 45276 create it. This can be overcome by, for example, setting the 45277 environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'. 45278 Such a setting will name the data file '/target/run/build/foo.gcda'. 45279 45280 You must move the data files to the expected directory tree in order to 45281 use them for profile directed optimizations ('--use-profile'), or to use 45282 the 'gcov' tool. 45283 45284 45285 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 45286 45287 11 Known Causes of Trouble with GCC 45288 *********************************** 45289 45290 This section describes known problems that affect users of GCC. Most of 45291 these are not GCC bugs per se--if they were, we would fix them. But the 45292 result for a user may be like the result of a bug. 45293 45294 Some of these problems are due to bugs in other software, some are 45295 missing features that are too much work to add, and some are places 45296 where people's opinions differ as to what is best. 45297 45298 * Menu: 45299 45300 * Actual Bugs:: Bugs we will fix later. 45301 * Interoperation:: Problems using GCC with other compilers, 45302 and with certain linkers, assemblers and debuggers. 45303 * Incompatibilities:: GCC is incompatible with traditional C. 45304 * Fixed Headers:: GCC uses corrected versions of system header files. 45305 This is necessary, but doesn't always work smoothly. 45306 * Standard Libraries:: GCC uses the system C library, which might not be 45307 compliant with the ISO C standard. 45308 * Disappointments:: Regrettable things we can't change, but not quite bugs. 45309 * C++ Misunderstandings:: Common misunderstandings with GNU C++. 45310 * Non-bugs:: Things we think are right, but some others disagree. 45311 * Warnings and Errors:: Which problems in your code get warnings, 45312 and which get errors. 45313 45314 45315 File: gcc.info, Node: Actual Bugs, Next: Interoperation, Up: Trouble 45316 45317 11.1 Actual Bugs We Haven't Fixed Yet 45318 ===================================== 45319 45320 * The 'fixincludes' script interacts badly with automounters; if the 45321 directory of system header files is automounted, it tends to be 45322 unmounted while 'fixincludes' is running. This would seem to be a 45323 bug in the automounter. We don't know any good way to work around 45324 it. 45325 45326 45327 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Actual Bugs, Up: Trouble 45328 45329 11.2 Interoperation 45330 =================== 45331 45332 This section lists various difficulties encountered in using GCC 45333 together with other compilers or with the assemblers, linkers, libraries 45334 and debuggers on certain systems. 45335 45336 * On many platforms, GCC supports a different ABI for C++ than do 45337 other compilers, so the object files compiled by GCC cannot be used 45338 with object files generated by another C++ compiler. 45339 45340 An area where the difference is most apparent is name mangling. 45341 The use of different name mangling is intentional, to protect you 45342 from more subtle problems. Compilers differ as to many internal 45343 details of C++ implementation, including: how class instances are 45344 laid out, how multiple inheritance is implemented, and how virtual 45345 function calls are handled. If the name encoding were made the 45346 same, your programs would link against libraries provided from 45347 other compilers--but the programs would then crash when run. 45348 Incompatible libraries are then detected at link time, rather than 45349 at run time. 45350 45351 * On some BSD systems, including some versions of Ultrix, use of 45352 profiling causes static variable destructors (currently used only 45353 in C++) not to be run. 45354 45355 * On a SPARC, GCC aligns all values of type 'double' on an 8-byte 45356 boundary, and it expects every 'double' to be so aligned. The Sun 45357 compiler usually gives 'double' values 8-byte alignment, with one 45358 exception: function arguments of type 'double' may not be aligned. 45359 45360 As a result, if a function compiled with Sun CC takes the address 45361 of an argument of type 'double' and passes this pointer of type 45362 'double *' to a function compiled with GCC, dereferencing the 45363 pointer may cause a fatal signal. 45364 45365 One way to solve this problem is to compile your entire program 45366 with GCC. Another solution is to modify the function that is 45367 compiled with Sun CC to copy the argument into a local variable; 45368 local variables are always properly aligned. A third solution is 45369 to modify the function that uses the pointer to dereference it via 45370 the following function 'access_double' instead of directly with 45371 '*': 45372 45373 inline double 45374 access_double (double *unaligned_ptr) 45375 { 45376 union d2i { double d; int i[2]; }; 45377 45378 union d2i *p = (union d2i *) unaligned_ptr; 45379 union d2i u; 45380 45381 u.i[0] = p->i[0]; 45382 u.i[1] = p->i[1]; 45383 45384 return u.d; 45385 } 45386 45387 Storing into the pointer can be done likewise with the same union. 45388 45389 * On Solaris, the 'malloc' function in the 'libmalloc.a' library may 45390 allocate memory that is only 4 byte aligned. Since GCC on the 45391 SPARC assumes that doubles are 8 byte aligned, this may result in a 45392 fatal signal if doubles are stored in memory allocated by the 45393 'libmalloc.a' library. 45394 45395 The solution is to not use the 'libmalloc.a' library. Use instead 45396 'malloc' and related functions from 'libc.a'; they do not have this 45397 problem. 45398 45399 * On the HP PA machine, ADB sometimes fails to work on functions 45400 compiled with GCC. Specifically, it fails to work on functions 45401 that use 'alloca' or variable-size arrays. This is because GCC 45402 doesn't generate HP-UX unwind descriptors for such functions. It 45403 may even be impossible to generate them. 45404 45405 * Debugging ('-g') is not supported on the HP PA machine, unless you 45406 use the preliminary GNU tools. 45407 45408 * Taking the address of a label may generate errors from the HP-UX PA 45409 assembler. GAS for the PA does not have this problem. 45410 45411 * Using floating point parameters for indirect calls to static 45412 functions will not work when using the HP assembler. There simply 45413 is no way for GCC to specify what registers hold arguments for 45414 static functions when using the HP assembler. GAS for the PA does 45415 not have this problem. 45416 45417 * In extremely rare cases involving some very large functions you may 45418 receive errors from the HP linker complaining about an out of 45419 bounds unconditional branch offset. This used to occur more often 45420 in previous versions of GCC, but is now exceptionally rare. If you 45421 should run into it, you can work around by making your function 45422 smaller. 45423 45424 * GCC compiled code sometimes emits warnings from the HP-UX assembler 45425 of the form: 45426 45427 (warning) Use of GR3 when 45428 frame >= 8192 may cause conflict. 45429 45430 These warnings are harmless and can be safely ignored. 45431 45432 * In extremely rare cases involving some very large functions you may 45433 receive errors from the AIX Assembler complaining about a 45434 displacement that is too large. If you should run into it, you can 45435 work around by making your function smaller. 45436 45437 * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker 45438 semantics which merges global symbols between libraries and 45439 applications, especially necessary for C++ streams functionality. 45440 This is not the default behavior of AIX shared libraries and 45441 dynamic linking. 'libstdc++.a' is built on AIX with 45442 "runtime-linking" enabled so that symbol merging can occur. To 45443 utilize this feature, the application linked with 'libstdc++.a' 45444 must include the '-Wl,-brtl' flag on the link line. G++ cannot 45445 impose this because this option may interfere with the semantics of 45446 the user program and users may not always use 'g++' to link his or 45447 her application. Applications are not required to use the 45448 '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a' 45449 library which is not dependent on the symbol merging semantics will 45450 continue to function correctly. 45451 45452 * An application can interpose its own definition of functions for 45453 functions invoked by 'libstdc++.a' with "runtime-linking" enabled 45454 on AIX. To accomplish this the application must be linked with 45455 "runtime-linking" option and the functions explicitly must be 45456 exported by the application ('-Wl,-brtl,-bE:exportfile'). 45457 45458 * AIX on the RS/6000 provides support (NLS) for environments outside 45459 of the United States. Compilers and assemblers use NLS to support 45460 locale-specific representations of various objects including 45461 floating-point numbers ('.' vs ',' for separating decimal 45462 fractions). There have been problems reported where the library 45463 linked with GCC does not produce the same floating-point formats 45464 that the assembler accepts. If you have this problem, set the 45465 'LANG' environment variable to 'C' or 'En_US'. 45466 45467 * Even if you specify '-fdollars-in-identifiers', you cannot 45468 successfully use '$' in identifiers on the RS/6000 due to a 45469 restriction in the IBM assembler. GAS supports these identifiers. 45470 45471 45472 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 45473 45474 11.3 Incompatibilities of GCC 45475 ============================= 45476 45477 There are several noteworthy incompatibilities between GNU C and K&R 45478 (non-ISO) versions of C. 45479 45480 * GCC normally makes string constants read-only. If several 45481 identical-looking string constants are used, GCC stores only one 45482 copy of the string. 45483 45484 One consequence is that you cannot call 'mktemp' with a string 45485 constant argument. The function 'mktemp' always alters the string 45486 its argument points to. 45487 45488 Another consequence is that 'sscanf' does not work on some very old 45489 systems when passed a string constant as its format control string 45490 or input. This is because 'sscanf' incorrectly tries to write into 45491 the string constant. Likewise 'fscanf' and 'scanf'. 45492 45493 The solution to these problems is to change the program to use 45494 'char'-array variables with initialization strings for these 45495 purposes instead of string constants. 45496 45497 * '-2147483648' is positive. 45498 45499 This is because 2147483648 cannot fit in the type 'int', so 45500 (following the ISO C rules) its data type is 'unsigned long int'. 45501 Negating this value yields 2147483648 again. 45502 45503 * GCC does not substitute macro arguments when they appear inside of 45504 string constants. For example, the following macro in GCC 45505 45506 #define foo(a) "a" 45507 45508 will produce output '"a"' regardless of what the argument A is. 45509 45510 * When you use 'setjmp' and 'longjmp', the only automatic variables 45511 guaranteed to remain valid are those declared 'volatile'. This is 45512 a consequence of automatic register allocation. Consider this 45513 function: 45514 45515 jmp_buf j; 45516 45517 foo () 45518 { 45519 int a, b; 45520 45521 a = fun1 (); 45522 if (setjmp (j)) 45523 return a; 45524 45525 a = fun2 (); 45526 /* 'longjmp (j)' may occur in 'fun3'. */ 45527 return a + fun3 (); 45528 } 45529 45530 Here 'a' may or may not be restored to its first value when the 45531 'longjmp' occurs. If 'a' is allocated in a register, then its 45532 first value is restored; otherwise, it keeps the last value stored 45533 in it. 45534 45535 If you use the '-W' option with the '-O' option, you will get a 45536 warning when GCC thinks such a problem might be possible. 45537 45538 * Programs that use preprocessing directives in the middle of macro 45539 arguments do not work with GCC. For example, a program like this 45540 will not work: 45541 45542 foobar ( 45543 #define luser 45544 hack) 45545 45546 ISO C does not permit such a construct. 45547 45548 * K&R compilers allow comments to cross over an inclusion boundary 45549 (i.e. started in an include file and ended in the including file). 45550 45551 * Declarations of external variables and functions within a block 45552 apply only to the block containing the declaration. In other 45553 words, they have the same scope as any other declaration in the 45554 same place. 45555 45556 In some other C compilers, an 'extern' declaration affects all the 45557 rest of the file even if it happens within a block. 45558 45559 * In traditional C, you can combine 'long', etc., with a typedef 45560 name, as shown here: 45561 45562 typedef int foo; 45563 typedef long foo bar; 45564 45565 In ISO C, this is not allowed: 'long' and other type modifiers 45566 require an explicit 'int'. 45567 45568 * PCC allows typedef names to be used as function parameters. 45569 45570 * Traditional C allows the following erroneous pair of declarations 45571 to appear together in a given scope: 45572 45573 typedef int foo; 45574 typedef foo foo; 45575 45576 * GCC treats all characters of identifiers as significant. According 45577 to K&R-1 (2.2), "No more than the first eight characters are 45578 significant, although more may be used.". Also according to K&R-1 45579 (2.2), "An identifier is a sequence of letters and digits; the 45580 first character must be a letter. The underscore _ counts as a 45581 letter.", but GCC also allows dollar signs in identifiers. 45582 45583 * PCC allows whitespace in the middle of compound assignment 45584 operators such as '+='. GCC, following the ISO standard, does not 45585 allow this. 45586 45587 * GCC complains about unterminated character constants inside of 45588 preprocessing conditionals that fail. Some programs have English 45589 comments enclosed in conditionals that are guaranteed to fail; if 45590 these comments contain apostrophes, GCC will probably report an 45591 error. For example, this code would produce an error: 45592 45593 #if 0 45594 You can't expect this to work. 45595 #endif 45596 45597 The best solution to such a problem is to put the text into an 45598 actual C comment delimited by '/*...*/'. 45599 45600 * Many user programs contain the declaration 'long time ();'. In the 45601 past, the system header files on many systems did not actually 45602 declare 'time', so it did not matter what type your program 45603 declared it to return. But in systems with ISO C headers, 'time' 45604 is declared to return 'time_t', and if that is not the same as 45605 'long', then 'long time ();' is erroneous. 45606 45607 The solution is to change your program to use appropriate system 45608 headers ('<time.h>' on systems with ISO C headers) and not to 45609 declare 'time' if the system header files declare it, or failing 45610 that to use 'time_t' as the return type of 'time'. 45611 45612 * When compiling functions that return 'float', PCC converts it to a 45613 double. GCC actually returns a 'float'. If you are concerned with 45614 PCC compatibility, you should declare your functions to return 45615 'double'; you might as well say what you mean. 45616 45617 * When compiling functions that return structures or unions, GCC 45618 output code normally uses a method different from that used on most 45619 versions of Unix. As a result, code compiled with GCC cannot call 45620 a structure-returning function compiled with PCC, and vice versa. 45621 45622 The method used by GCC is as follows: a structure or union which is 45623 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 45624 union with any other size is stored into an address supplied by the 45625 caller (usually in a special, fixed register, but on some machines 45626 it is passed on the stack). The target hook 45627 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 45628 45629 By contrast, PCC on most target machines returns structures and 45630 unions of any size by copying the data into an area of static 45631 storage, and then returning the address of that storage as if it 45632 were a pointer value. The caller must copy the data from that 45633 memory area to the place where the value is wanted. GCC does not 45634 use this method because it is slower and nonreentrant. 45635 45636 On some newer machines, PCC uses a reentrant convention for all 45637 structure and union returning. GCC on most of these machines uses 45638 a compatible convention when returning structures and unions in 45639 memory, but still returns small structures and unions in registers. 45640 45641 You can tell GCC to use a compatible convention for all structure 45642 and union returning with the option '-fpcc-struct-return'. 45643 45644 * GCC complains about program fragments such as '0x74ae-0x4000' which 45645 appear to be two hexadecimal constants separated by the minus 45646 operator. Actually, this string is a single "preprocessing token". 45647 Each such token must correspond to one token in C. Since this does 45648 not, GCC prints an error message. Although it may appear obvious 45649 that what is meant is an operator and two values, the ISO C 45650 standard specifically requires that this be treated as erroneous. 45651 45652 A "preprocessing token" is a "preprocessing number" if it begins 45653 with a digit and is followed by letters, underscores, digits, 45654 periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-' 45655 character sequences. (In strict C90 mode, the sequences 'p+', 45656 'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.) 45657 45658 To make the above program fragment valid, place whitespace in front 45659 of the minus sign. This whitespace will end the preprocessing 45660 number. 45661 45662 45663 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 45664 45665 11.4 Fixed Header Files 45666 ======================= 45667 45668 GCC needs to install corrected versions of some system header files. 45669 This is because most target systems have some header files that won't 45670 work with GCC unless they are changed. Some have bugs, some are 45671 incompatible with ISO C, and some depend on special features of other 45672 compilers. 45673 45674 Installing GCC automatically creates and installs the fixed header 45675 files, by running a program called 'fixincludes'. Normally, you don't 45676 need to pay attention to this. But there are cases where it doesn't do 45677 the right thing automatically. 45678 45679 * If you update the system's header files, such as by installing a 45680 new system version, the fixed header files of GCC are not 45681 automatically updated. They can be updated using the 'mkheaders' 45682 script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 45683 45684 * On some systems, header file directories contain machine-specific 45685 symbolic links in certain places. This makes it possible to share 45686 most of the header files among hosts running the same version of 45687 the system on different machine models. 45688 45689 The programs that fix the header files do not understand this 45690 special way of using symbolic links; therefore, the directory of 45691 fixed header files is good only for the machine model used to build 45692 it. 45693 45694 It is possible to make separate sets of fixed header files for the 45695 different machine models, and arrange a structure of symbolic links 45696 so as to use the proper set, but you'll have to do this by hand. 45697 45698 45699 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 45700 45701 11.5 Standard Libraries 45702 ======================= 45703 45704 GCC by itself attempts to be a conforming freestanding implementation. 45705 *Note Language Standards Supported by GCC: Standards, for details of 45706 what this means. Beyond the library facilities required of such an 45707 implementation, the rest of the C library is supplied by the vendor of 45708 the operating system. If that C library doesn't conform to the C 45709 standards, then your programs might get warnings (especially when using 45710 '-Wall') that you don't expect. 45711 45712 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *' 45713 while the C standard says that 'sprintf' returns an 'int'. The 45714 'fixincludes' program could make the prototype for this function match 45715 the Standard, but that would be wrong, since the function will still 45716 return 'char *'. 45717 45718 If you need a Standard compliant library, then you need to find one, as 45719 GCC does not provide one. The GNU C library (called 'glibc') provides 45720 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 45721 HURD-based GNU systems; no recent version of it supports other systems, 45722 though some very old versions did. Version 2.2 of the GNU C library 45723 includes nearly complete C99 support. You could also ask your operating 45724 system vendor if newer libraries are available. 45725 45726 45727 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 45728 45729 11.6 Disappointments and Misunderstandings 45730 ========================================== 45731 45732 These problems are perhaps regrettable, but we don't know any practical 45733 way around them. 45734 45735 * Certain local variables aren't recognized by debuggers when you 45736 compile with optimization. 45737 45738 This occurs because sometimes GCC optimizes the variable out of 45739 existence. There is no way to tell the debugger how to compute the 45740 value such a variable "would have had", and it is not clear that 45741 would be desirable anyway. So GCC simply does not mention the 45742 eliminated variable when it writes debugging information. 45743 45744 You have to expect a certain amount of disagreement between the 45745 executable and your source code, when you use optimization. 45746 45747 * Users often think it is a bug when GCC reports an error for code 45748 like this: 45749 45750 int foo (struct mumble *); 45751 45752 struct mumble { ... }; 45753 45754 int foo (struct mumble *x) 45755 { ... } 45756 45757 This code really is erroneous, because the scope of 'struct mumble' 45758 in the prototype is limited to the argument list containing it. It 45759 does not refer to the 'struct mumble' defined with file scope 45760 immediately below--they are two unrelated types with similar names 45761 in different scopes. 45762 45763 But in the definition of 'foo', the file-scope type is used because 45764 that is available to be inherited. Thus, the definition and the 45765 prototype do not match, and you get an error. 45766 45767 This behavior may seem silly, but it's what the ISO standard 45768 specifies. It is easy enough for you to make your code work by 45769 moving the definition of 'struct mumble' above the prototype. It's 45770 not worth being incompatible with ISO C just to avoid an error for 45771 the example shown above. 45772 45773 * Accesses to bit-fields even in volatile objects works by accessing 45774 larger objects, such as a byte or a word. You cannot rely on what 45775 size of object is accessed in order to read or write the bit-field; 45776 it may even vary for a given bit-field according to the precise 45777 usage. 45778 45779 If you care about controlling the amount of memory that is 45780 accessed, use volatile but do not use bit-fields. 45781 45782 * GCC comes with shell scripts to fix certain known problems in 45783 system header files. They install corrected copies of various 45784 header files in a special directory where only GCC will normally 45785 look for them. The scripts adapt to various systems by searching 45786 all the system header files for the problem cases that we know 45787 about. 45788 45789 If new system header files are installed, nothing automatically 45790 arranges to update the corrected header files. They can be updated 45791 using the 'mkheaders' script installed in 45792 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 45793 45794 * On 68000 and x86 systems, for instance, you can get paradoxical 45795 results if you test the precise values of floating point numbers. 45796 For example, you can find that a floating point value which is not 45797 a NaN is not equal to itself. This results from the fact that the 45798 floating point registers hold a few more bits of precision than fit 45799 in a 'double' in memory. Compiled code moves values between memory 45800 and floating point registers at its convenience, and moving them 45801 into memory truncates them. 45802 45803 You can partially avoid this problem by using the '-ffloat-store' 45804 option (*note Optimize Options::). 45805 45806 * On AIX and other platforms without weak symbol support, templates 45807 need to be instantiated explicitly and symbols for static members 45808 of templates will not be generated. 45809 45810 * On AIX, GCC scans object files and library archives for static 45811 constructors and destructors when linking an application before the 45812 linker prunes unreferenced symbols. This is necessary to prevent 45813 the AIX linker from mistakenly assuming that static constructor or 45814 destructor are unused and removing them before the scanning can 45815 occur. All static constructors and destructors found will be 45816 referenced even though the modules in which they occur may not be 45817 used by the program. This may lead to both increased executable 45818 size and unexpected symbol references. 45819 45820 45821 File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 45822 45823 11.7 Common Misunderstandings with GNU C++ 45824 ========================================== 45825 45826 C++ is a complex language and an evolving one, and its standard 45827 definition (the ISO C++ standard) was only recently completed. As a 45828 result, your C++ compiler may occasionally surprise you, even when its 45829 behavior is correct. This section discusses some areas that frequently 45830 give rise to questions of this sort. 45831 45832 * Menu: 45833 45834 * Static Definitions:: Static member declarations are not definitions 45835 * Name lookup:: Name lookup, templates, and accessing members of base classes 45836 * Temporaries:: Temporaries may vanish before you expect 45837 * Copy Assignment:: Copy Assignment operators copy virtual bases twice 45838 45839 45840 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 45841 45842 11.7.1 Declare _and_ Define Static Members 45843 ------------------------------------------ 45844 45845 When a class has static data members, it is not enough to _declare_ the 45846 static member; you must also _define_ it. For example: 45847 45848 class Foo 45849 { 45850 ... 45851 void method(); 45852 static int bar; 45853 }; 45854 45855 This declaration only establishes that the class 'Foo' has an 'int' 45856 named 'Foo::bar', and a member function named 'Foo::method'. But you 45857 still need to define _both_ 'method' and 'bar' elsewhere. According to 45858 the ISO standard, you must supply an initializer in one (and only one) 45859 source file, such as: 45860 45861 int Foo::bar = 0; 45862 45863 Other C++ compilers may not correctly implement the standard behavior. 45864 As a result, when you switch to 'g++' from one of these compilers, you 45865 may discover that a program that appeared to work correctly in fact does 45866 not conform to the standard: 'g++' reports as undefined symbols any 45867 static data members that lack definitions. 45868 45869 45870 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 45871 45872 11.7.2 Name lookup, templates, and accessing members of base classes 45873 -------------------------------------------------------------------- 45874 45875 The C++ standard prescribes that all names that are not dependent on 45876 template parameters are bound to their present definitions when parsing 45877 a template function or class.(1) Only names that are dependent are 45878 looked up at the point of instantiation. For example, consider 45879 45880 void foo(double); 45881 45882 struct A { 45883 template <typename T> 45884 void f () { 45885 foo (1); // 1 45886 int i = N; // 2 45887 T t; 45888 t.bar(); // 3 45889 foo (t); // 4 45890 } 45891 45892 static const int N; 45893 }; 45894 45895 Here, the names 'foo' and 'N' appear in a context that does not depend 45896 on the type of 'T'. The compiler will thus require that they are 45897 defined in the context of use in the template, not only before the point 45898 of instantiation, and will here use '::foo(double)' and 'A::N', 45899 respectively. In particular, it will convert the integer value to a 45900 'double' when passing it to '::foo(double)'. 45901 45902 Conversely, 'bar' and the call to 'foo' in the fourth marked line are 45903 used in contexts that do depend on the type of 'T', so they are only 45904 looked up at the point of instantiation, and you can provide 45905 declarations for them after declaring the template, but before 45906 instantiating it. In particular, if you instantiate 'A::f<int>', the 45907 last line will call an overloaded '::foo(int)' if one was provided, even 45908 if after the declaration of 'struct A'. 45909 45910 This distinction between lookup of dependent and non-dependent names is 45911 called two-stage (or dependent) name lookup. G++ implements it since 45912 version 3.4. 45913 45914 Two-stage name lookup sometimes leads to situations with behavior 45915 different from non-template codes. The most common is probably this: 45916 45917 template <typename T> struct Base { 45918 int i; 45919 }; 45920 45921 template <typename T> struct Derived : public Base<T> { 45922 int get_i() { return i; } 45923 }; 45924 45925 In 'get_i()', 'i' is not used in a dependent context, so the compiler 45926 will look for a name declared at the enclosing namespace scope (which is 45927 the global scope here). It will not look into the base class, since 45928 that is dependent and you may declare specializations of 'Base' even 45929 after declaring 'Derived', so the compiler can't really know what 'i' 45930 would refer to. If there is no global variable 'i', then you will get 45931 an error message. 45932 45933 In order to make it clear that you want the member of the base class, 45934 you need to defer lookup until instantiation time, at which the base 45935 class is known. For this, you need to access 'i' in a dependent 45936 context, by either using 'this->i' (remember that 'this' is of type 45937 'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'. 45938 Alternatively, 'Base<T>::i' might be brought into scope by a 45939 'using'-declaration. 45940 45941 Another, similar example involves calling member functions of a base 45942 class: 45943 45944 template <typename T> struct Base { 45945 int f(); 45946 }; 45947 45948 template <typename T> struct Derived : Base<T> { 45949 int g() { return f(); }; 45950 }; 45951 45952 Again, the call to 'f()' is not dependent on template arguments (there 45953 are no arguments that depend on the type 'T', and it is also not 45954 otherwise specified that the call should be in a dependent context). 45955 Thus a global declaration of such a function must be available, since 45956 the one in the base class is not visible until instantiation time. The 45957 compiler will consequently produce the following error message: 45958 45959 x.cc: In member function `int Derived<T>::g()': 45960 x.cc:6: error: there are no arguments to `f' that depend on a template 45961 parameter, so a declaration of `f' must be available 45962 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 45963 allowing the use of an undeclared name is deprecated) 45964 45965 To make the code valid either use 'this->f()', or 'Base<T>::f()'. 45966 Using the '-fpermissive' flag will also let the compiler accept the 45967 code, by marking all function calls for which no declaration is visible 45968 at the time of definition of the template for later lookup at 45969 instantiation time, as if it were a dependent call. We do not recommend 45970 using '-fpermissive' to work around invalid code, and it will also only 45971 catch cases where functions in base classes are called, not where 45972 variables in base classes are used (as in the example above). 45973 45974 Note that some compilers (including G++ versions prior to 3.4) get 45975 these examples wrong and accept above code without an error. Those 45976 compilers do not implement two-stage name lookup correctly. 45977 45978 ---------- Footnotes ---------- 45979 45980 (1) The C++ standard just uses the term "dependent" for names that 45981 depend on the type or value of template parameters. This shorter term 45982 will also be used in the rest of this section. 45983 45984 45985 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 45986 45987 11.7.3 Temporaries May Vanish Before You Expect 45988 ----------------------------------------------- 45989 45990 It is dangerous to use pointers or references to _portions_ of a 45991 temporary object. The compiler may very well delete the object before 45992 you expect it to, leaving a pointer to garbage. The most common place 45993 where this problem crops up is in classes like string classes, 45994 especially ones that define a conversion function to type 'char *' or 45995 'const char *'--which is one reason why the standard 'string' class 45996 requires you to call the 'c_str' member function. However, any class 45997 that returns a pointer to some internal structure is potentially subject 45998 to this problem. 45999 46000 For example, a program may use a function 'strfunc' that returns 46001 'string' objects, and another function 'charfunc' that operates on 46002 pointers to 'char': 46003 46004 string strfunc (); 46005 void charfunc (const char *); 46006 46007 void 46008 f () 46009 { 46010 const char *p = strfunc().c_str(); 46011 ... 46012 charfunc (p); 46013 ... 46014 charfunc (p); 46015 } 46016 46017 In this situation, it may seem reasonable to save a pointer to the C 46018 string returned by the 'c_str' member function and use that rather than 46019 call 'c_str' repeatedly. However, the temporary string created by the 46020 call to 'strfunc' is destroyed after 'p' is initialized, at which point 46021 'p' is left pointing to freed memory. 46022 46023 Code like this may run successfully under some other compilers, 46024 particularly obsolete cfront-based compilers that delete temporaries 46025 along with normal local variables. However, the GNU C++ behavior is 46026 standard-conforming, so if your program depends on late destruction of 46027 temporaries it is not portable. 46028 46029 The safe way to write such code is to give the temporary a name, which 46030 forces it to remain until the end of the scope of the name. For 46031 example: 46032 46033 const string& tmp = strfunc (); 46034 charfunc (tmp.c_str ()); 46035 46036 46037 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 46038 46039 11.7.4 Implicit Copy-Assignment for Virtual Bases 46040 ------------------------------------------------- 46041 46042 When a base class is virtual, only one subobject of the base class 46043 belongs to each full object. Also, the constructors and destructors are 46044 invoked only once, and called from the most-derived class. However, 46045 such objects behave unspecified when being assigned. For example: 46046 46047 struct Base{ 46048 char *name; 46049 Base(char *n) : name(strdup(n)){} 46050 Base& operator= (const Base& other){ 46051 free (name); 46052 name = strdup (other.name); 46053 } 46054 }; 46055 46056 struct A:virtual Base{ 46057 int val; 46058 A():Base("A"){} 46059 }; 46060 46061 struct B:virtual Base{ 46062 int bval; 46063 B():Base("B"){} 46064 }; 46065 46066 struct Derived:public A, public B{ 46067 Derived():Base("Derived"){} 46068 }; 46069 46070 void func(Derived &d1, Derived &d2) 46071 { 46072 d1 = d2; 46073 } 46074 46075 The C++ standard specifies that 'Base::Base' is only called once when 46076 constructing or copy-constructing a Derived object. It is unspecified 46077 whether 'Base::operator=' is called more than once when the implicit 46078 copy-assignment for Derived objects is invoked (as it is inside 'func' 46079 in the example). 46080 46081 G++ implements the "intuitive" algorithm for copy-assignment: assign 46082 all direct bases, then assign all members. In that algorithm, the 46083 virtual base subobject can be encountered more than once. In the 46084 example, copying proceeds in the following order: 'val', 'name' (via 46085 'strdup'), 'bval', and 'name' again. 46086 46087 If application code relies on copy-assignment, a user-defined 46088 copy-assignment operator removes any uncertainties. With such an 46089 operator, the application can define whether and how the virtual base 46090 subobject is assigned. 46091 46092 46093 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 46094 46095 11.8 Certain Changes We Don't Want to Make 46096 ========================================== 46097 46098 This section lists changes that people frequently request, but which we 46099 do not make because we think GCC is better without them. 46100 46101 * Checking the number and type of arguments to a function which has 46102 an old-fashioned definition and no prototype. 46103 46104 Such a feature would work only occasionally--only for calls that 46105 appear in the same file as the called function, following the 46106 definition. The only way to check all calls reliably is to add a 46107 prototype for the function. But adding a prototype eliminates the 46108 motivation for this feature. So the feature is not worthwhile. 46109 46110 * Warning about using an expression whose type is signed as a shift 46111 count. 46112 46113 Shift count operands are probably signed more often than unsigned. 46114 Warning about this would cause far more annoyance than good. 46115 46116 * Warning about assigning a signed value to an unsigned variable. 46117 46118 Such assignments must be very common; warning about them would 46119 cause more annoyance than good. 46120 46121 * Warning when a non-void function value is ignored. 46122 46123 C contains many standard functions that return a value that most 46124 programs choose to ignore. One obvious example is 'printf'. 46125 Warning about this practice only leads the defensive programmer to 46126 clutter programs with dozens of casts to 'void'. Such casts are 46127 required so frequently that they become visual noise. Writing 46128 those casts becomes so automatic that they no longer convey useful 46129 information about the intentions of the programmer. For functions 46130 where the return value should never be ignored, use the 46131 'warn_unused_result' function attribute (*note Function 46132 Attributes::). 46133 46134 * Making '-fshort-enums' the default. 46135 46136 This would cause storage layout to be incompatible with most other 46137 C compilers. And it doesn't seem very important, given that you 46138 can get the same result in other ways. The case where it matters 46139 most is when the enumeration-valued object is inside a structure, 46140 and in that case you can specify a field width explicitly. 46141 46142 * Making bit-fields unsigned by default on particular machines where 46143 "the ABI standard" says to do so. 46144 46145 The ISO C standard leaves it up to the implementation whether a 46146 bit-field declared plain 'int' is signed or not. This in effect 46147 creates two alternative dialects of C. 46148 46149 The GNU C compiler supports both dialects; you can specify the 46150 signed dialect with '-fsigned-bitfields' and the unsigned dialect 46151 with '-funsigned-bitfields'. However, this leaves open the 46152 question of which dialect to use by default. 46153 46154 Currently, the preferred dialect makes plain bit-fields signed, 46155 because this is simplest. Since 'int' is the same as 'signed int' 46156 in every other context, it is cleanest for them to be the same in 46157 bit-fields as well. 46158 46159 Some computer manufacturers have published Application Binary 46160 Interface standards which specify that plain bit-fields should be 46161 unsigned. It is a mistake, however, to say anything about this 46162 issue in an ABI. This is because the handling of plain bit-fields 46163 distinguishes two dialects of C. Both dialects are meaningful on 46164 every type of machine. Whether a particular object file was 46165 compiled using signed bit-fields or unsigned is of no concern to 46166 other object files, even if they access the same bit-fields in the 46167 same data structures. 46168 46169 A given program is written in one or the other of these two 46170 dialects. The program stands a chance to work on most any machine 46171 if it is compiled with the proper dialect. It is unlikely to work 46172 at all if compiled with the wrong dialect. 46173 46174 Many users appreciate the GNU C compiler because it provides an 46175 environment that is uniform across machines. These users would be 46176 inconvenienced if the compiler treated plain bit-fields differently 46177 on certain machines. 46178 46179 Occasionally users write programs intended only for a particular 46180 machine type. On these occasions, the users would benefit if the 46181 GNU C compiler were to support by default the same dialect as the 46182 other compilers on that machine. But such applications are rare. 46183 And users writing a program to run on more than one type of machine 46184 cannot possibly benefit from this kind of compatibility. 46185 46186 This is why GCC does and will treat plain bit-fields in the same 46187 fashion on all types of machines (by default). 46188 46189 There are some arguments for making bit-fields unsigned by default 46190 on all machines. If, for example, this becomes a universal de 46191 facto standard, it would make sense for GCC to go along with it. 46192 This is something to be considered in the future. 46193 46194 (Of course, users strongly concerned about portability should 46195 indicate explicitly in each bit-field whether it is signed or not. 46196 In this way, they write programs which have the same meaning in 46197 both C dialects.) 46198 46199 * Undefining '__STDC__' when '-ansi' is not used. 46200 46201 Currently, GCC defines '__STDC__' unconditionally. This provides 46202 good results in practice. 46203 46204 Programmers normally use conditionals on '__STDC__' to ask whether 46205 it is safe to use certain features of ISO C, such as function 46206 prototypes or ISO token concatenation. Since plain 'gcc' supports 46207 all the features of ISO C, the correct answer to these questions is 46208 "yes". 46209 46210 Some users try to use '__STDC__' to check for the availability of 46211 certain library facilities. This is actually incorrect usage in an 46212 ISO C program, because the ISO C standard says that a conforming 46213 freestanding implementation should define '__STDC__' even though it 46214 does not have the library facilities. 'gcc -ansi -pedantic' is a 46215 conforming freestanding implementation, and it is therefore 46216 required to define '__STDC__', even though it does not come with an 46217 ISO C library. 46218 46219 Sometimes people say that defining '__STDC__' in a compiler that 46220 does not completely conform to the ISO C standard somehow violates 46221 the standard. This is illogical. The standard is a standard for 46222 compilers that claim to support ISO C, such as 'gcc -ansi'--not for 46223 other compilers such as plain 'gcc'. Whatever the ISO C standard 46224 says is relevant to the design of plain 'gcc' without '-ansi' only 46225 for pragmatic reasons, not as a requirement. 46226 46227 GCC normally defines '__STDC__' to be 1, and in addition defines 46228 '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std' 46229 option for strict conformance to some version of ISO C. On some 46230 hosts, system include files use a different convention, where 46231 '__STDC__' is normally 0, but is 1 if the user specifies strict 46232 conformance to the C Standard. GCC follows the host convention 46233 when processing system include files, but when processing user 46234 files it follows the usual GNU C convention. 46235 46236 * Undefining '__STDC__' in C++. 46237 46238 Programs written to compile with C++-to-C translators get the value 46239 of '__STDC__' that goes with the C compiler that is subsequently 46240 used. These programs must test '__STDC__' to determine what kind 46241 of C preprocessor that compiler uses: whether they should 46242 concatenate tokens in the ISO C fashion or in the traditional 46243 fashion. 46244 46245 These programs work properly with GNU C++ if '__STDC__' is defined. 46246 They would not work otherwise. 46247 46248 In addition, many header files are written to provide prototypes in 46249 ISO C but not in traditional C. Many of these header files can 46250 work without change in C++ provided '__STDC__' is defined. If 46251 '__STDC__' is not defined, they will all fail, and will all need to 46252 be changed to test explicitly for C++ as well. 46253 46254 * Deleting "empty" loops. 46255 46256 Historically, GCC has not deleted "empty" loops under the 46257 assumption that the most likely reason you would put one in a 46258 program is to have a delay, so deleting them will not make real 46259 programs run any faster. 46260 46261 However, the rationale here is that optimization of a nonempty loop 46262 cannot produce an empty one. This held for carefully written C 46263 compiled with less powerful optimizers but is not always the case 46264 for carefully written C++ or with more powerful optimizers. Thus 46265 GCC will remove operations from loops whenever it can determine 46266 those operations are not externally visible (apart from the time 46267 taken to execute them, of course). In case the loop can be proved 46268 to be finite, GCC will also remove the loop itself. 46269 46270 Be aware of this when performing timing tests, for instance the 46271 following loop can be completely removed, provided 46272 'some_expression' can provably not change any global state. 46273 46274 { 46275 int sum = 0; 46276 int ix; 46277 46278 for (ix = 0; ix != 10000; ix++) 46279 sum += some_expression; 46280 } 46281 46282 Even though 'sum' is accumulated in the loop, no use is made of 46283 that summation, so the accumulation can be removed. 46284 46285 * Making side effects happen in the same order as in some other 46286 compiler. 46287 46288 It is never safe to depend on the order of evaluation of side 46289 effects. For example, a function call like this may very well 46290 behave differently from one compiler to another: 46291 46292 void func (int, int); 46293 46294 int i = 2; 46295 func (i++, i++); 46296 46297 There is no guarantee (in either the C or the C++ standard language 46298 definitions) that the increments will be evaluated in any 46299 particular order. Either increment might happen first. 'func' 46300 might get the arguments '2, 3', or it might get '3, 2', or even '2, 46301 2'. 46302 46303 * Making certain warnings into errors by default. 46304 46305 Some ISO C testsuites report failure when the compiler does not 46306 produce an error message for a certain program. 46307 46308 ISO C requires a "diagnostic" message for certain kinds of invalid 46309 programs, but a warning is defined by GCC to count as a diagnostic. 46310 If GCC produces a warning but not an error, that is correct ISO C 46311 support. If testsuites call this "failure", they should be run 46312 with the GCC option '-pedantic-errors', which will turn these 46313 warnings into errors. 46314 46315 46316 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 46317 46318 11.9 Warning Messages and Error Messages 46319 ======================================== 46320 46321 The GNU compiler can produce two kinds of diagnostics: errors and 46322 warnings. Each kind has a different purpose: 46323 46324 "Errors" report problems that make it impossible to compile your 46325 program. GCC reports errors with the source file name and line 46326 number where the problem is apparent. 46327 46328 "Warnings" report other unusual conditions in your code that _may_ 46329 indicate a problem, although compilation can (and does) proceed. 46330 Warning messages also report the source file name and line number, 46331 but include the text 'warning:' to distinguish them from error 46332 messages. 46333 46334 Warnings may indicate danger points where you should check to make sure 46335 that your program really does what you intend; or the use of obsolete 46336 features; or the use of nonstandard features of GNU C or C++. Many 46337 warnings are issued only if you ask for them, with one of the '-W' 46338 options (for instance, '-Wall' requests a variety of useful warnings). 46339 46340 GCC always tries to compile your program if possible; it never 46341 gratuitously rejects a program whose meaning is clear merely because 46342 (for instance) it fails to conform to a standard. In some cases, 46343 however, the C and C++ standards specify that certain extensions are 46344 forbidden, and a diagnostic _must_ be issued by a conforming compiler. 46345 The '-pedantic' option tells GCC to issue warnings in such cases; 46346 '-pedantic-errors' says to make them errors instead. This does not mean 46347 that _all_ non-ISO constructs get warnings or errors. 46348 46349 *Note Options to Request or Suppress Warnings: Warning Options, for 46350 more detail on these and related command-line options. 46351 46352 46353 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 46354 46355 12 Reporting Bugs 46356 ***************** 46357 46358 Your bug reports play an essential role in making GCC reliable. 46359 46360 When you encounter a problem, the first thing to do is to see if it is 46361 already known. *Note Trouble::. If it isn't known, then you should 46362 report the problem. 46363 46364 * Menu: 46365 46366 * Criteria: Bug Criteria. Have you really found a bug? 46367 * Reporting: Bug Reporting. How to report a bug effectively. 46368 * Known: Trouble. Known problems. 46369 * Help: Service. Where to ask for help. 46370 46371 46372 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 46373 46374 12.1 Have You Found a Bug? 46375 ========================== 46376 46377 If you are not sure whether you have found a bug, here are some 46378 guidelines: 46379 46380 * If the compiler gets a fatal signal, for any input whatever, that 46381 is a compiler bug. Reliable compilers never crash. 46382 46383 * If the compiler produces invalid assembly code, for any input 46384 whatever (except an 'asm' statement), that is a compiler bug, 46385 unless the compiler reports errors (not just warnings) which would 46386 ordinarily prevent the assembler from being run. 46387 46388 * If the compiler produces valid assembly code that does not 46389 correctly execute the input source code, that is a compiler bug. 46390 46391 However, you must double-check to make sure, because you may have a 46392 program whose behavior is undefined, which happened by chance to 46393 give the desired results with another C or C++ compiler. 46394 46395 For example, in many nonoptimizing compilers, you can write 'x;' at 46396 the end of a function instead of 'return x;', with the same 46397 results. But the value of the function is undefined if 'return' is 46398 omitted; it is not a bug when GCC produces different results. 46399 46400 Problems often result from expressions with two increment 46401 operators, as in 'f (*p++, *p++)'. Your previous compiler might 46402 have interpreted that expression the way you intended; GCC might 46403 interpret it another way. Neither compiler is wrong. The bug is 46404 in your code. 46405 46406 After you have localized the error to a single source line, it 46407 should be easy to check for these things. If your program is 46408 correct and well defined, you have found a compiler bug. 46409 46410 * If the compiler produces an error message for valid input, that is 46411 a compiler bug. 46412 46413 * If the compiler does not produce an error message for invalid 46414 input, that is a compiler bug. However, you should note that your 46415 idea of "invalid input" might be someone else's idea of "an 46416 extension" or "support for traditional practice". 46417 46418 * If you are an experienced user of one of the languages GCC 46419 supports, your suggestions for improvement of GCC are welcome in 46420 any case. 46421 46422 46423 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 46424 46425 12.2 How and where to Report Bugs 46426 ================================= 46427 46428 Bugs should be reported to the bug database at 46429 <http://gcc.gnu.org/bugs.html>. 46430 46431 46432 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 46433 46434 13 How To Get Help with GCC 46435 *************************** 46436 46437 If you need help installing, using or changing GCC, there are two ways 46438 to find it: 46439 46440 * Send a message to a suitable network mailing list. First try 46441 <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if 46442 that brings no response, try <gcc (a] gcc.gnu.org>. For help changing 46443 GCC, ask <gcc (a] gcc.gnu.org>. If you think you have found a bug in 46444 GCC, please report it following the instructions at *note Bug 46445 Reporting::. 46446 46447 * Look in the service directory for someone who might help you for a 46448 fee. The service directory is found at 46449 <http://www.fsf.org/resources/service>. 46450 46451 For further information, see <http://gcc.gnu.org/faq.html#support>. 46452 46453 46454 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 46455 46456 14 Contributing to GCC Development 46457 ********************************** 46458 46459 If you would like to help pretest GCC releases to assure they work well, 46460 current development sources are available by SVN (see 46461 <http://gcc.gnu.org/svn.html>). Source and binary snapshots are also 46462 available for FTP; see <http://gcc.gnu.org/snapshots.html>. 46463 46464 If you would like to work on improvements to GCC, please read the 46465 advice at these URLs: 46466 46467 <http://gcc.gnu.org/contribute.html> 46468 <http://gcc.gnu.org/contributewhy.html> 46469 46470 for information on how to make useful contributions and avoid 46471 duplication of effort. Suggested projects are listed at 46472 <http://gcc.gnu.org/projects/>. 46473 46474 46475 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 46476 46477 Funding Free Software 46478 ********************* 46479 46480 If you want to have more free software a few years from now, it makes 46481 sense for you to help encourage people to contribute funds for its 46482 development. The most effective approach known is to encourage 46483 commercial redistributors to donate. 46484 46485 Users of free software systems can boost the pace of development by 46486 encouraging for-a-fee distributors to donate part of their selling price 46487 to free software developers--the Free Software Foundation, and others. 46488 46489 The way to convince distributors to do this is to demand it and expect 46490 it from them. So when you compare distributors, judge them partly by 46491 how much they give to free software development. Show distributors they 46492 must compete to be the one who gives the most. 46493 46494 To make this approach work, you must insist on numbers that you can 46495 compare, such as, "We will donate ten dollars to the Frobnitz project 46496 for each disk sold." Don't be satisfied with a vague promise, such as 46497 "A portion of the profits are donated," since it doesn't give a basis 46498 for comparison. 46499 46500 Even a precise fraction "of the profits from this disk" is not very 46501 meaningful, since creative accounting and unrelated business decisions 46502 can greatly alter what fraction of the sales price counts as profit. If 46503 the price you pay is $50, ten percent of the profit is probably less 46504 than a dollar; it might be a few cents, or nothing at all. 46505 46506 Some redistributors do development work themselves. This is useful 46507 too; but to keep everyone honest, you need to inquire how much they do, 46508 and what kind. Some kinds of development make much more long-term 46509 difference than others. For example, maintaining a separate version of 46510 a program contributes very little; maintaining the standard version of a 46511 program for the whole community contributes much. Easy new ports 46512 contribute little, since someone else would surely do them; difficult 46513 ports such as adding a new CPU to the GNU Compiler Collection contribute 46514 more; major new features or packages contribute the most. 46515 46516 By establishing the idea that supporting further development is "the 46517 proper thing to do" when distributing free software for a fee, we can 46518 assure a steady flow of resources into making more free software. 46519 46520 Copyright (C) 1994 Free Software Foundation, Inc. 46521 Verbatim copying and redistribution of this section is permitted 46522 without royalty; alteration is not permitted. 46523 46524 46525 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 46526 46527 The GNU Project and GNU/Linux 46528 ***************************** 46529 46530 The GNU Project was launched in 1984 to develop a complete Unix-like 46531 operating system which is free software: the GNU system. (GNU is a 46532 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 46533 Variants of the GNU operating system, which use the kernel Linux, are 46534 now widely used; though these systems are often referred to as "Linux", 46535 they are more accurately called GNU/Linux systems. 46536 46537 For more information, see: 46538 <http://www.gnu.org/> 46539 <http://www.gnu.org/gnu/linux-and-gnu.html> 46540 46541 46542 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 46543 46544 GNU General Public License 46545 ************************** 46546 46547 Version 3, 29 June 2007 46548 46549 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> 46550 46551 Everyone is permitted to copy and distribute verbatim copies of this 46552 license document, but changing it is not allowed. 46553 46554 Preamble 46555 ======== 46556 46557 The GNU General Public License is a free, copyleft license for software 46558 and other kinds of works. 46559 46560 The licenses for most software and other practical works are designed 46561 to take away your freedom to share and change the works. By contrast, 46562 the GNU General Public License is intended to guarantee your freedom to 46563 share and change all versions of a program-to make sure it remains free 46564 software for all its users. We, the Free Software Foundation, use the 46565 GNU General Public License for most of our software; it applies also to 46566 any other work released this way by its authors. You can apply it to 46567 your programs, too. 46568 46569 When we speak of free software, we are referring to freedom, not price. 46570 Our General Public Licenses are designed to make sure that you have the 46571 freedom to distribute copies of free software (and charge for them if 46572 you wish), that you receive source code or can get it if you want it, 46573 that you can change the software or use pieces of it in new free 46574 programs, and that you know you can do these things. 46575 46576 To protect your rights, we need to prevent others from denying you 46577 these rights or asking you to surrender the rights. Therefore, you have 46578 certain responsibilities if you distribute copies of the software, or if 46579 you modify it: responsibilities to respect the freedom of others. 46580 46581 For example, if you distribute copies of such a program, whether gratis 46582 or for a fee, you must pass on to the recipients the same freedoms that 46583 you received. You must make sure that they, too, receive or can get the 46584 source code. And you must show them these terms so they know their 46585 rights. 46586 46587 Developers that use the GNU GPL protect your rights with two steps: (1) 46588 assert copyright on the software, and (2) offer you this License giving 46589 you legal permission to copy, distribute and/or modify it. 46590 46591 For the developers' and authors' protection, the GPL clearly explains 46592 that there is no warranty for this free software. For both users' and 46593 authors' sake, the GPL requires that modified versions be marked as 46594 changed, so that their problems will not be attributed erroneously to 46595 authors of previous versions. 46596 46597 Some devices are designed to deny users access to install or run 46598 modified versions of the software inside them, although the manufacturer 46599 can do so. This is fundamentally incompatible with the aim of 46600 protecting users' freedom to change the software. The systematic 46601 pattern of such abuse occurs in the area of products for individuals to 46602 use, which is precisely where it is most unacceptable. Therefore, we 46603 have designed this version of the GPL to prohibit the practice for those 46604 products. If such problems arise substantially in other domains, we 46605 stand ready to extend this provision to those domains in future versions 46606 of the GPL, as needed to protect the freedom of users. 46607 46608 Finally, every program is threatened constantly by software patents. 46609 States should not allow patents to restrict development and use of 46610 software on general-purpose computers, but in those that do, we wish to 46611 avoid the special danger that patents applied to a free program could 46612 make it effectively proprietary. To prevent this, the GPL assures that 46613 patents cannot be used to render the program non-free. 46614 46615 The precise terms and conditions for copying, distribution and 46616 modification follow. 46617 46618 TERMS AND CONDITIONS 46619 ==================== 46620 46621 0. Definitions. 46622 46623 "This License" refers to version 3 of the GNU General Public 46624 License. 46625 46626 "Copyright" also means copyright-like laws that apply to other 46627 kinds of works, such as semiconductor masks. 46628 46629 "The Program" refers to any copyrightable work licensed under this 46630 License. Each licensee is addressed as "you". "Licensees" and 46631 "recipients" may be individuals or organizations. 46632 46633 To "modify" a work means to copy from or adapt all or part of the 46634 work in a fashion requiring copyright permission, other than the 46635 making of an exact copy. The resulting work is called a "modified 46636 version" of the earlier work or a work "based on" the earlier work. 46637 46638 A "covered work" means either the unmodified Program or a work 46639 based on the Program. 46640 46641 To "propagate" a work means to do anything with it that, without 46642 permission, would make you directly or secondarily liable for 46643 infringement under applicable copyright law, except executing it on 46644 a computer or modifying a private copy. Propagation includes 46645 copying, distribution (with or without modification), making 46646 available to the public, and in some countries other activities as 46647 well. 46648 46649 To "convey" a work means any kind of propagation that enables other 46650 parties to make or receive copies. Mere interaction with a user 46651 through a computer network, with no transfer of a copy, is not 46652 conveying. 46653 46654 An interactive user interface displays "Appropriate Legal Notices" 46655 to the extent that it includes a convenient and prominently visible 46656 feature that (1) displays an appropriate copyright notice, and (2) 46657 tells the user that there is no warranty for the work (except to 46658 the extent that warranties are provided), that licensees may convey 46659 the work under this License, and how to view a copy of this 46660 License. If the interface presents a list of user commands or 46661 options, such as a menu, a prominent item in the list meets this 46662 criterion. 46663 46664 1. Source Code. 46665 46666 The "source code" for a work means the preferred form of the work 46667 for making modifications to it. "Object code" means any non-source 46668 form of a work. 46669 46670 A "Standard Interface" means an interface that either is an 46671 official standard defined by a recognized standards body, or, in 46672 the case of interfaces specified for a particular programming 46673 language, one that is widely used among developers working in that 46674 language. 46675 46676 The "System Libraries" of an executable work include anything, 46677 other than the work as a whole, that (a) is included in the normal 46678 form of packaging a Major Component, but which is not part of that 46679 Major Component, and (b) serves only to enable use of the work with 46680 that Major Component, or to implement a Standard Interface for 46681 which an implementation is available to the public in source code 46682 form. A "Major Component", in this context, means a major 46683 essential component (kernel, window system, and so on) of the 46684 specific operating system (if any) on which the executable work 46685 runs, or a compiler used to produce the work, or an object code 46686 interpreter used to run it. 46687 46688 The "Corresponding Source" for a work in object code form means all 46689 the source code needed to generate, install, and (for an executable 46690 work) run the object code and to modify the work, including scripts 46691 to control those activities. However, it does not include the 46692 work's System Libraries, or general-purpose tools or generally 46693 available free programs which are used unmodified in performing 46694 those activities but which are not part of the work. For example, 46695 Corresponding Source includes interface definition files associated 46696 with source files for the work, and the source code for shared 46697 libraries and dynamically linked subprograms that the work is 46698 specifically designed to require, such as by intimate data 46699 communication or control flow between those subprograms and other 46700 parts of the work. 46701 46702 The Corresponding Source need not include anything that users can 46703 regenerate automatically from other parts of the Corresponding 46704 Source. 46705 46706 The Corresponding Source for a work in source code form is that 46707 same work. 46708 46709 2. Basic Permissions. 46710 46711 All rights granted under this License are granted for the term of 46712 copyright on the Program, and are irrevocable provided the stated 46713 conditions are met. This License explicitly affirms your unlimited 46714 permission to run the unmodified Program. The output from running 46715 a covered work is covered by this License only if the output, given 46716 its content, constitutes a covered work. This License acknowledges 46717 your rights of fair use or other equivalent, as provided by 46718 copyright law. 46719 46720 You may make, run and propagate covered works that you do not 46721 convey, without conditions so long as your license otherwise 46722 remains in force. You may convey covered works to others for the 46723 sole purpose of having them make modifications exclusively for you, 46724 or provide you with facilities for running those works, provided 46725 that you comply with the terms of this License in conveying all 46726 material for which you do not control copyright. Those thus making 46727 or running the covered works for you must do so exclusively on your 46728 behalf, under your direction and control, on terms that prohibit 46729 them from making any copies of your copyrighted material outside 46730 their relationship with you. 46731 46732 Conveying under any other circumstances is permitted solely under 46733 the conditions stated below. Sublicensing is not allowed; section 46734 10 makes it unnecessary. 46735 46736 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 46737 46738 No covered work shall be deemed part of an effective technological 46739 measure under any applicable law fulfilling obligations under 46740 article 11 of the WIPO copyright treaty adopted on 20 December 46741 1996, or similar laws prohibiting or restricting circumvention of 46742 such measures. 46743 46744 When you convey a covered work, you waive any legal power to forbid 46745 circumvention of technological measures to the extent such 46746 circumvention is effected by exercising rights under this License 46747 with respect to the covered work, and you disclaim any intention to 46748 limit operation or modification of the work as a means of 46749 enforcing, against the work's users, your or third parties' legal 46750 rights to forbid circumvention of technological measures. 46751 46752 4. Conveying Verbatim Copies. 46753 46754 You may convey verbatim copies of the Program's source code as you 46755 receive it, in any medium, provided that you conspicuously and 46756 appropriately publish on each copy an appropriate copyright notice; 46757 keep intact all notices stating that this License and any 46758 non-permissive terms added in accord with section 7 apply to the 46759 code; keep intact all notices of the absence of any warranty; and 46760 give all recipients a copy of this License along with the Program. 46761 46762 You may charge any price or no price for each copy that you convey, 46763 and you may offer support or warranty protection for a fee. 46764 46765 5. Conveying Modified Source Versions. 46766 46767 You may convey a work based on the Program, or the modifications to 46768 produce it from the Program, in the form of source code under the 46769 terms of section 4, provided that you also meet all of these 46770 conditions: 46771 46772 a. The work must carry prominent notices stating that you 46773 modified it, and giving a relevant date. 46774 46775 b. The work must carry prominent notices stating that it is 46776 released under this License and any conditions added under 46777 section 7. This requirement modifies the requirement in 46778 section 4 to "keep intact all notices". 46779 46780 c. You must license the entire work, as a whole, under this 46781 License to anyone who comes into possession of a copy. This 46782 License will therefore apply, along with any applicable 46783 section 7 additional terms, to the whole of the work, and all 46784 its parts, regardless of how they are packaged. This License 46785 gives no permission to license the work in any other way, but 46786 it does not invalidate such permission if you have separately 46787 received it. 46788 46789 d. If the work has interactive user interfaces, each must display 46790 Appropriate Legal Notices; however, if the Program has 46791 interactive interfaces that do not display Appropriate Legal 46792 Notices, your work need not make them do so. 46793 46794 A compilation of a covered work with other separate and independent 46795 works, which are not by their nature extensions of the covered 46796 work, and which are not combined with it such as to form a larger 46797 program, in or on a volume of a storage or distribution medium, is 46798 called an "aggregate" if the compilation and its resulting 46799 copyright are not used to limit the access or legal rights of the 46800 compilation's users beyond what the individual works permit. 46801 Inclusion of a covered work in an aggregate does not cause this 46802 License to apply to the other parts of the aggregate. 46803 46804 6. Conveying Non-Source Forms. 46805 46806 You may convey a covered work in object code form under the terms 46807 of sections 4 and 5, provided that you also convey the 46808 machine-readable Corresponding Source under the terms of this 46809 License, in one of these ways: 46810 46811 a. Convey the object code in, or embodied in, a physical product 46812 (including a physical distribution medium), accompanied by the 46813 Corresponding Source fixed on a durable physical medium 46814 customarily used for software interchange. 46815 46816 b. Convey the object code in, or embodied in, a physical product 46817 (including a physical distribution medium), accompanied by a 46818 written offer, valid for at least three years and valid for as 46819 long as you offer spare parts or customer support for that 46820 product model, to give anyone who possesses the object code 46821 either (1) a copy of the Corresponding Source for all the 46822 software in the product that is covered by this License, on a 46823 durable physical medium customarily used for software 46824 interchange, for a price no more than your reasonable cost of 46825 physically performing this conveying of source, or (2) access 46826 to copy the Corresponding Source from a network server at no 46827 charge. 46828 46829 c. Convey individual copies of the object code with a copy of the 46830 written offer to provide the Corresponding Source. This 46831 alternative is allowed only occasionally and noncommercially, 46832 and only if you received the object code with such an offer, 46833 in accord with subsection 6b. 46834 46835 d. Convey the object code by offering access from a designated 46836 place (gratis or for a charge), and offer equivalent access to 46837 the Corresponding Source in the same way through the same 46838 place at no further charge. You need not require recipients 46839 to copy the Corresponding Source along with the object code. 46840 If the place to copy the object code is a network server, the 46841 Corresponding Source may be on a different server (operated by 46842 you or a third party) that supports equivalent copying 46843 facilities, provided you maintain clear directions next to the 46844 object code saying where to find the Corresponding Source. 46845 Regardless of what server hosts the Corresponding Source, you 46846 remain obligated to ensure that it is available for as long as 46847 needed to satisfy these requirements. 46848 46849 e. Convey the object code using peer-to-peer transmission, 46850 provided you inform other peers where the object code and 46851 Corresponding Source of the work are being offered to the 46852 general public at no charge under subsection 6d. 46853 46854 A separable portion of the object code, whose source code is 46855 excluded from the Corresponding Source as a System Library, need 46856 not be included in conveying the object code work. 46857 46858 A "User Product" is either (1) a "consumer product", which means 46859 any tangible personal property which is normally used for personal, 46860 family, or household purposes, or (2) anything designed or sold for 46861 incorporation into a dwelling. In determining whether a product is 46862 a consumer product, doubtful cases shall be resolved in favor of 46863 coverage. For a particular product received by a particular user, 46864 "normally used" refers to a typical or common use of that class of 46865 product, regardless of the status of the particular user or of the 46866 way in which the particular user actually uses, or expects or is 46867 expected to use, the product. A product is a consumer product 46868 regardless of whether the product has substantial commercial, 46869 industrial or non-consumer uses, unless such uses represent the 46870 only significant mode of use of the product. 46871 46872 "Installation Information" for a User Product means any methods, 46873 procedures, authorization keys, or other information required to 46874 install and execute modified versions of a covered work in that 46875 User Product from a modified version of its Corresponding Source. 46876 The information must suffice to ensure that the continued 46877 functioning of the modified object code is in no case prevented or 46878 interfered with solely because modification has been made. 46879 46880 If you convey an object code work under this section in, or with, 46881 or specifically for use in, a User Product, and the conveying 46882 occurs as part of a transaction in which the right of possession 46883 and use of the User Product is transferred to the recipient in 46884 perpetuity or for a fixed term (regardless of how the transaction 46885 is characterized), the Corresponding Source conveyed under this 46886 section must be accompanied by the Installation Information. But 46887 this requirement does not apply if neither you nor any third party 46888 retains the ability to install modified object code on the User 46889 Product (for example, the work has been installed in ROM). 46890 46891 The requirement to provide Installation Information does not 46892 include a requirement to continue to provide support service, 46893 warranty, or updates for a work that has been modified or installed 46894 by the recipient, or for the User Product in which it has been 46895 modified or installed. Access to a network may be denied when the 46896 modification itself materially and adversely affects the operation 46897 of the network or violates the rules and protocols for 46898 communication across the network. 46899 46900 Corresponding Source conveyed, and Installation Information 46901 provided, in accord with this section must be in a format that is 46902 publicly documented (and with an implementation available to the 46903 public in source code form), and must require no special password 46904 or key for unpacking, reading or copying. 46905 46906 7. Additional Terms. 46907 46908 "Additional permissions" are terms that supplement the terms of 46909 this License by making exceptions from one or more of its 46910 conditions. Additional permissions that are applicable to the 46911 entire Program shall be treated as though they were included in 46912 this License, to the extent that they are valid under applicable 46913 law. If additional permissions apply only to part of the Program, 46914 that part may be used separately under those permissions, but the 46915 entire Program remains governed by this License without regard to 46916 the additional permissions. 46917 46918 When you convey a copy of a covered work, you may at your option 46919 remove any additional permissions from that copy, or from any part 46920 of it. (Additional permissions may be written to require their own 46921 removal in certain cases when you modify the work.) You may place 46922 additional permissions on material, added by you to a covered work, 46923 for which you have or can give appropriate copyright permission. 46924 46925 Notwithstanding any other provision of this License, for material 46926 you add to a covered work, you may (if authorized by the copyright 46927 holders of that material) supplement the terms of this License with 46928 terms: 46929 46930 a. Disclaiming warranty or limiting liability differently from 46931 the terms of sections 15 and 16 of this License; or 46932 46933 b. Requiring preservation of specified reasonable legal notices 46934 or author attributions in that material or in the Appropriate 46935 Legal Notices displayed by works containing it; or 46936 46937 c. Prohibiting misrepresentation of the origin of that material, 46938 or requiring that modified versions of such material be marked 46939 in reasonable ways as different from the original version; or 46940 46941 d. Limiting the use for publicity purposes of names of licensors 46942 or authors of the material; or 46943 46944 e. Declining to grant rights under trademark law for use of some 46945 trade names, trademarks, or service marks; or 46946 46947 f. Requiring indemnification of licensors and authors of that 46948 material by anyone who conveys the material (or modified 46949 versions of it) with contractual assumptions of liability to 46950 the recipient, for any liability that these contractual 46951 assumptions directly impose on those licensors and authors. 46952 46953 All other non-permissive additional terms are considered "further 46954 restrictions" within the meaning of section 10. If the Program as 46955 you received it, or any part of it, contains a notice stating that 46956 it is governed by this License along with a term that is a further 46957 restriction, you may remove that term. If a license document 46958 contains a further restriction but permits relicensing or conveying 46959 under this License, you may add to a covered work material governed 46960 by the terms of that license document, provided that the further 46961 restriction does not survive such relicensing or conveying. 46962 46963 If you add terms to a covered work in accord with this section, you 46964 must place, in the relevant source files, a statement of the 46965 additional terms that apply to those files, or a notice indicating 46966 where to find the applicable terms. 46967 46968 Additional terms, permissive or non-permissive, may be stated in 46969 the form of a separately written license, or stated as exceptions; 46970 the above requirements apply either way. 46971 46972 8. Termination. 46973 46974 You may not propagate or modify a covered work except as expressly 46975 provided under this License. Any attempt otherwise to propagate or 46976 modify it is void, and will automatically terminate your rights 46977 under this License (including any patent licenses granted under the 46978 third paragraph of section 11). 46979 46980 However, if you cease all violation of this License, then your 46981 license from a particular copyright holder is reinstated (a) 46982 provisionally, unless and until the copyright holder explicitly and 46983 finally terminates your license, and (b) permanently, if the 46984 copyright holder fails to notify you of the violation by some 46985 reasonable means prior to 60 days after the cessation. 46986 46987 Moreover, your license from a particular copyright holder is 46988 reinstated permanently if the copyright holder notifies you of the 46989 violation by some reasonable means, this is the first time you have 46990 received notice of violation of this License (for any work) from 46991 that copyright holder, and you cure the violation prior to 30 days 46992 after your receipt of the notice. 46993 46994 Termination of your rights under this section does not terminate 46995 the licenses of parties who have received copies or rights from you 46996 under this License. If your rights have been terminated and not 46997 permanently reinstated, you do not qualify to receive new licenses 46998 for the same material under section 10. 46999 47000 9. Acceptance Not Required for Having Copies. 47001 47002 You are not required to accept this License in order to receive or 47003 run a copy of the Program. Ancillary propagation of a covered work 47004 occurring solely as a consequence of using peer-to-peer 47005 transmission to receive a copy likewise does not require 47006 acceptance. However, nothing other than this License grants you 47007 permission to propagate or modify any covered work. These actions 47008 infringe copyright if you do not accept this License. Therefore, 47009 by modifying or propagating a covered work, you indicate your 47010 acceptance of this License to do so. 47011 47012 10. Automatic Licensing of Downstream Recipients. 47013 47014 Each time you convey a covered work, the recipient automatically 47015 receives a license from the original licensors, to run, modify and 47016 propagate that work, subject to this License. You are not 47017 responsible for enforcing compliance by third parties with this 47018 License. 47019 47020 An "entity transaction" is a transaction transferring control of an 47021 organization, or substantially all assets of one, or subdividing an 47022 organization, or merging organizations. If propagation of a 47023 covered work results from an entity transaction, each party to that 47024 transaction who receives a copy of the work also receives whatever 47025 licenses to the work the party's predecessor in interest had or 47026 could give under the previous paragraph, plus a right to possession 47027 of the Corresponding Source of the work from the predecessor in 47028 interest, if the predecessor has it or can get it with reasonable 47029 efforts. 47030 47031 You may not impose any further restrictions on the exercise of the 47032 rights granted or affirmed under this License. For example, you 47033 may not impose a license fee, royalty, or other charge for exercise 47034 of rights granted under this License, and you may not initiate 47035 litigation (including a cross-claim or counterclaim in a lawsuit) 47036 alleging that any patent claim is infringed by making, using, 47037 selling, offering for sale, or importing the Program or any portion 47038 of it. 47039 47040 11. Patents. 47041 47042 A "contributor" is a copyright holder who authorizes use under this 47043 License of the Program or a work on which the Program is based. 47044 The work thus licensed is called the contributor's "contributor 47045 version". 47046 47047 A contributor's "essential patent claims" are all patent claims 47048 owned or controlled by the contributor, whether already acquired or 47049 hereafter acquired, that would be infringed by some manner, 47050 permitted by this License, of making, using, or selling its 47051 contributor version, but do not include claims that would be 47052 infringed only as a consequence of further modification of the 47053 contributor version. For purposes of this definition, "control" 47054 includes the right to grant patent sublicenses in a manner 47055 consistent with the requirements of this License. 47056 47057 Each contributor grants you a non-exclusive, worldwide, 47058 royalty-free patent license under the contributor's essential 47059 patent claims, to make, use, sell, offer for sale, import and 47060 otherwise run, modify and propagate the contents of its contributor 47061 version. 47062 47063 In the following three paragraphs, a "patent license" is any 47064 express agreement or commitment, however denominated, not to 47065 enforce a patent (such as an express permission to practice a 47066 patent or covenant not to sue for patent infringement). To "grant" 47067 such a patent license to a party means to make such an agreement or 47068 commitment not to enforce a patent against the party. 47069 47070 If you convey a covered work, knowingly relying on a patent 47071 license, and the Corresponding Source of the work is not available 47072 for anyone to copy, free of charge and under the terms of this 47073 License, through a publicly available network server or other 47074 readily accessible means, then you must either (1) cause the 47075 Corresponding Source to be so available, or (2) arrange to deprive 47076 yourself of the benefit of the patent license for this particular 47077 work, or (3) arrange, in a manner consistent with the requirements 47078 of this License, to extend the patent license to downstream 47079 recipients. "Knowingly relying" means you have actual knowledge 47080 that, but for the patent license, your conveying the covered work 47081 in a country, or your recipient's use of the covered work in a 47082 country, would infringe one or more identifiable patents in that 47083 country that you have reason to believe are valid. 47084 47085 If, pursuant to or in connection with a single transaction or 47086 arrangement, you convey, or propagate by procuring conveyance of, a 47087 covered work, and grant a patent license to some of the parties 47088 receiving the covered work authorizing them to use, propagate, 47089 modify or convey a specific copy of the covered work, then the 47090 patent license you grant is automatically extended to all 47091 recipients of the covered work and works based on it. 47092 47093 A patent license is "discriminatory" if it does not include within 47094 the scope of its coverage, prohibits the exercise of, or is 47095 conditioned on the non-exercise of one or more of the rights that 47096 are specifically granted under this License. You may not convey a 47097 covered work if you are a party to an arrangement with a third 47098 party that is in the business of distributing software, under which 47099 you make payment to the third party based on the extent of your 47100 activity of conveying the work, and under which the third party 47101 grants, to any of the parties who would receive the covered work 47102 from you, a discriminatory patent license (a) in connection with 47103 copies of the covered work conveyed by you (or copies made from 47104 those copies), or (b) primarily for and in connection with specific 47105 products or compilations that contain the covered work, unless you 47106 entered into that arrangement, or that patent license was granted, 47107 prior to 28 March 2007. 47108 47109 Nothing in this License shall be construed as excluding or limiting 47110 any implied license or other defenses to infringement that may 47111 otherwise be available to you under applicable patent law. 47112 47113 12. No Surrender of Others' Freedom. 47114 47115 If conditions are imposed on you (whether by court order, agreement 47116 or otherwise) that contradict the conditions of this License, they 47117 do not excuse you from the conditions of this License. If you 47118 cannot convey a covered work so as to satisfy simultaneously your 47119 obligations under this License and any other pertinent obligations, 47120 then as a consequence you may not convey it at all. For example, 47121 if you agree to terms that obligate you to collect a royalty for 47122 further conveying from those to whom you convey the Program, the 47123 only way you could satisfy both those terms and this License would 47124 be to refrain entirely from conveying the Program. 47125 47126 13. Use with the GNU Affero General Public License. 47127 47128 Notwithstanding any other provision of this License, you have 47129 permission to link or combine any covered work with a work licensed 47130 under version 3 of the GNU Affero General Public License into a 47131 single combined work, and to convey the resulting work. The terms 47132 of this License will continue to apply to the part which is the 47133 covered work, but the special requirements of the GNU Affero 47134 General Public License, section 13, concerning interaction through 47135 a network will apply to the combination as such. 47136 47137 14. Revised Versions of this License. 47138 47139 The Free Software Foundation may publish revised and/or new 47140 versions of the GNU General Public License from time to time. Such 47141 new versions will be similar in spirit to the present version, but 47142 may differ in detail to address new problems or concerns. 47143 47144 Each version is given a distinguishing version number. If the 47145 Program specifies that a certain numbered version of the GNU 47146 General Public License "or any later version" applies to it, you 47147 have the option of following the terms and conditions either of 47148 that numbered version or of any later version published by the Free 47149 Software Foundation. If the Program does not specify a version 47150 number of the GNU General Public License, you may choose any 47151 version ever published by the Free Software Foundation. 47152 47153 If the Program specifies that a proxy can decide which future 47154 versions of the GNU General Public License can be used, that 47155 proxy's public statement of acceptance of a version permanently 47156 authorizes you to choose that version for the Program. 47157 47158 Later license versions may give you additional or different 47159 permissions. However, no additional obligations are imposed on any 47160 author or copyright holder as a result of your choosing to follow a 47161 later version. 47162 47163 15. Disclaimer of Warranty. 47164 47165 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 47166 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 47167 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 47168 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 47169 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 47170 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 47171 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 47172 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 47173 NECESSARY SERVICING, REPAIR OR CORRECTION. 47174 47175 16. Limitation of Liability. 47176 47177 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 47178 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 47179 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 47180 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 47181 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 47182 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 47183 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 47184 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 47185 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 47186 THE POSSIBILITY OF SUCH DAMAGES. 47187 47188 17. Interpretation of Sections 15 and 16. 47189 47190 If the disclaimer of warranty and limitation of liability provided 47191 above cannot be given local legal effect according to their terms, 47192 reviewing courts shall apply local law that most closely 47193 approximates an absolute waiver of all civil liability in 47194 connection with the Program, unless a warranty or assumption of 47195 liability accompanies a copy of the Program in return for a fee. 47196 47197 END OF TERMS AND CONDITIONS 47198 =========================== 47199 47200 How to Apply These Terms to Your New Programs 47201 ============================================= 47202 47203 If you develop a new program, and you want it to be of the greatest 47204 possible use to the public, the best way to achieve this is to make it 47205 free software which everyone can redistribute and change under these 47206 terms. 47207 47208 To do so, attach the following notices to the program. It is safest to 47209 attach them to the start of each source file to most effectively state 47210 the exclusion of warranty; and each file should have at least the 47211 "copyright" line and a pointer to where the full notice is found. 47212 47213 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 47214 Copyright (C) YEAR NAME OF AUTHOR 47215 47216 This program is free software: you can redistribute it and/or modify 47217 it under the terms of the GNU General Public License as published by 47218 the Free Software Foundation, either version 3 of the License, or (at 47219 your option) any later version. 47220 47221 This program is distributed in the hope that it will be useful, but 47222 WITHOUT ANY WARRANTY; without even the implied warranty of 47223 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 47224 General Public License for more details. 47225 47226 You should have received a copy of the GNU General Public License 47227 along with this program. If not, see <http://www.gnu.org/licenses/>. 47228 47229 Also add information on how to contact you by electronic and paper 47230 mail. 47231 47232 If the program does terminal interaction, make it output a short notice 47233 like this when it starts in an interactive mode: 47234 47235 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 47236 This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. 47237 This is free software, and you are welcome to redistribute it 47238 under certain conditions; type 'show c' for details. 47239 47240 The hypothetical commands 'show w' and 'show c' should show the 47241 appropriate parts of the General Public License. Of course, your 47242 program's commands might be different; for a GUI interface, you would 47243 use an "about box". 47244 47245 You should also get your employer (if you work as a programmer) or 47246 school, if any, to sign a "copyright disclaimer" for the program, if 47247 necessary. For more information on this, and how to apply and follow 47248 the GNU GPL, see <http://www.gnu.org/licenses/>. 47249 47250 The GNU General Public License does not permit incorporating your 47251 program into proprietary programs. If your program is a subroutine 47252 library, you may consider it more useful to permit linking proprietary 47253 applications with the library. If this is what you want to do, use the 47254 GNU Lesser General Public License instead of this License. But first, 47255 please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. 47256 47257 47258 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 47259 47260 GNU Free Documentation License 47261 ****************************** 47262 47263 Version 1.3, 3 November 2008 47264 47265 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 47266 <http://fsf.org/> 47267 47268 Everyone is permitted to copy and distribute verbatim copies 47269 of this license document, but changing it is not allowed. 47270 47271 0. PREAMBLE 47272 47273 The purpose of this License is to make a manual, textbook, or other 47274 functional and useful document "free" in the sense of freedom: to 47275 assure everyone the effective freedom to copy and redistribute it, 47276 with or without modifying it, either commercially or 47277 noncommercially. Secondarily, this License preserves for the 47278 author and publisher a way to get credit for their work, while not 47279 being considered responsible for modifications made by others. 47280 47281 This License is a kind of "copyleft", which means that derivative 47282 works of the document must themselves be free in the same sense. 47283 It complements the GNU General Public License, which is a copyleft 47284 license designed for free software. 47285 47286 We have designed this License in order to use it for manuals for 47287 free software, because free software needs free documentation: a 47288 free program should come with manuals providing the same freedoms 47289 that the software does. But this License is not limited to 47290 software manuals; it can be used for any textual work, regardless 47291 of subject matter or whether it is published as a printed book. We 47292 recommend this License principally for works whose purpose is 47293 instruction or reference. 47294 47295 1. APPLICABILITY AND DEFINITIONS 47296 47297 This License applies to any manual or other work, in any medium, 47298 that contains a notice placed by the copyright holder saying it can 47299 be distributed under the terms of this License. Such a notice 47300 grants a world-wide, royalty-free license, unlimited in duration, 47301 to use that work under the conditions stated herein. The 47302 "Document", below, refers to any such manual or work. Any member 47303 of the public is a licensee, and is addressed as "you". You accept 47304 the license if you copy, modify or distribute the work in a way 47305 requiring permission under copyright law. 47306 47307 A "Modified Version" of the Document means any work containing the 47308 Document or a portion of it, either copied verbatim, or with 47309 modifications and/or translated into another language. 47310 47311 A "Secondary Section" is a named appendix or a front-matter section 47312 of the Document that deals exclusively with the relationship of the 47313 publishers or authors of the Document to the Document's overall 47314 subject (or to related matters) and contains nothing that could 47315 fall directly within that overall subject. (Thus, if the Document 47316 is in part a textbook of mathematics, a Secondary Section may not 47317 explain any mathematics.) The relationship could be a matter of 47318 historical connection with the subject or with related matters, or 47319 of legal, commercial, philosophical, ethical or political position 47320 regarding them. 47321 47322 The "Invariant Sections" are certain Secondary Sections whose 47323 titles are designated, as being those of Invariant Sections, in the 47324 notice that says that the Document is released under this License. 47325 If a section does not fit the above definition of Secondary then it 47326 is not allowed to be designated as Invariant. The Document may 47327 contain zero Invariant Sections. If the Document does not identify 47328 any Invariant Sections then there are none. 47329 47330 The "Cover Texts" are certain short passages of text that are 47331 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 47332 that says that the Document is released under this License. A 47333 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 47334 be at most 25 words. 47335 47336 A "Transparent" copy of the Document means a machine-readable copy, 47337 represented in a format whose specification is available to the 47338 general public, that is suitable for revising the document 47339 straightforwardly with generic text editors or (for images composed 47340 of pixels) generic paint programs or (for drawings) some widely 47341 available drawing editor, and that is suitable for input to text 47342 formatters or for automatic translation to a variety of formats 47343 suitable for input to text formatters. A copy made in an otherwise 47344 Transparent file format whose markup, or absence of markup, has 47345 been arranged to thwart or discourage subsequent modification by 47346 readers is not Transparent. An image format is not Transparent if 47347 used for any substantial amount of text. A copy that is not 47348 "Transparent" is called "Opaque". 47349 47350 Examples of suitable formats for Transparent copies include plain 47351 ASCII without markup, Texinfo input format, LaTeX input format, 47352 SGML or XML using a publicly available DTD, and standard-conforming 47353 simple HTML, PostScript or PDF designed for human modification. 47354 Examples of transparent image formats include PNG, XCF and JPG. 47355 Opaque formats include proprietary formats that can be read and 47356 edited only by proprietary word processors, SGML or XML for which 47357 the DTD and/or processing tools are not generally available, and 47358 the machine-generated HTML, PostScript or PDF produced by some word 47359 processors for output purposes only. 47360 47361 The "Title Page" means, for a printed book, the title page itself, 47362 plus such following pages as are needed to hold, legibly, the 47363 material this License requires to appear in the title page. For 47364 works in formats which do not have any title page as such, "Title 47365 Page" means the text near the most prominent appearance of the 47366 work's title, preceding the beginning of the body of the text. 47367 47368 The "publisher" means any person or entity that distributes copies 47369 of the Document to the public. 47370 47371 A section "Entitled XYZ" means a named subunit of the Document 47372 whose title either is precisely XYZ or contains XYZ in parentheses 47373 following text that translates XYZ in another language. (Here XYZ 47374 stands for a specific section name mentioned below, such as 47375 "Acknowledgements", "Dedications", "Endorsements", or "History".) 47376 To "Preserve the Title" of such a section when you modify the 47377 Document means that it remains a section "Entitled XYZ" according 47378 to this definition. 47379 47380 The Document may include Warranty Disclaimers next to the notice 47381 which states that this License applies to the Document. These 47382 Warranty Disclaimers are considered to be included by reference in 47383 this License, but only as regards disclaiming warranties: any other 47384 implication that these Warranty Disclaimers may have is void and 47385 has no effect on the meaning of this License. 47386 47387 2. VERBATIM COPYING 47388 47389 You may copy and distribute the Document in any medium, either 47390 commercially or noncommercially, provided that this License, the 47391 copyright notices, and the license notice saying this License 47392 applies to the Document are reproduced in all copies, and that you 47393 add no other conditions whatsoever to those of this License. You 47394 may not use technical measures to obstruct or control the reading 47395 or further copying of the copies you make or distribute. However, 47396 you may accept compensation in exchange for copies. If you 47397 distribute a large enough number of copies you must also follow the 47398 conditions in section 3. 47399 47400 You may also lend copies, under the same conditions stated above, 47401 and you may publicly display copies. 47402 47403 3. COPYING IN QUANTITY 47404 47405 If you publish printed copies (or copies in media that commonly 47406 have printed covers) of the Document, numbering more than 100, and 47407 the Document's license notice requires Cover Texts, you must 47408 enclose the copies in covers that carry, clearly and legibly, all 47409 these Cover Texts: Front-Cover Texts on the front cover, and 47410 Back-Cover Texts on the back cover. Both covers must also clearly 47411 and legibly identify you as the publisher of these copies. The 47412 front cover must present the full title with all words of the title 47413 equally prominent and visible. You may add other material on the 47414 covers in addition. Copying with changes limited to the covers, as 47415 long as they preserve the title of the Document and satisfy these 47416 conditions, can be treated as verbatim copying in other respects. 47417 47418 If the required texts for either cover are too voluminous to fit 47419 legibly, you should put the first ones listed (as many as fit 47420 reasonably) on the actual cover, and continue the rest onto 47421 adjacent pages. 47422 47423 If you publish or distribute Opaque copies of the Document 47424 numbering more than 100, you must either include a machine-readable 47425 Transparent copy along with each Opaque copy, or state in or with 47426 each Opaque copy a computer-network location from which the general 47427 network-using public has access to download using public-standard 47428 network protocols a complete Transparent copy of the Document, free 47429 of added material. If you use the latter option, you must take 47430 reasonably prudent steps, when you begin distribution of Opaque 47431 copies in quantity, to ensure that this Transparent copy will 47432 remain thus accessible at the stated location until at least one 47433 year after the last time you distribute an Opaque copy (directly or 47434 through your agents or retailers) of that edition to the public. 47435 47436 It is requested, but not required, that you contact the authors of 47437 the Document well before redistributing any large number of copies, 47438 to give them a chance to provide you with an updated version of the 47439 Document. 47440 47441 4. MODIFICATIONS 47442 47443 You may copy and distribute a Modified Version of the Document 47444 under the conditions of sections 2 and 3 above, provided that you 47445 release the Modified Version under precisely this License, with the 47446 Modified Version filling the role of the Document, thus licensing 47447 distribution and modification of the Modified Version to whoever 47448 possesses a copy of it. In addition, you must do these things in 47449 the Modified Version: 47450 47451 A. Use in the Title Page (and on the covers, if any) a title 47452 distinct from that of the Document, and from those of previous 47453 versions (which should, if there were any, be listed in the 47454 History section of the Document). You may use the same title 47455 as a previous version if the original publisher of that 47456 version gives permission. 47457 47458 B. List on the Title Page, as authors, one or more persons or 47459 entities responsible for authorship of the modifications in 47460 the Modified Version, together with at least five of the 47461 principal authors of the Document (all of its principal 47462 authors, if it has fewer than five), unless they release you 47463 from this requirement. 47464 47465 C. State on the Title page the name of the publisher of the 47466 Modified Version, as the publisher. 47467 47468 D. Preserve all the copyright notices of the Document. 47469 47470 E. Add an appropriate copyright notice for your modifications 47471 adjacent to the other copyright notices. 47472 47473 F. Include, immediately after the copyright notices, a license 47474 notice giving the public permission to use the Modified 47475 Version under the terms of this License, in the form shown in 47476 the Addendum below. 47477 47478 G. Preserve in that license notice the full lists of Invariant 47479 Sections and required Cover Texts given in the Document's 47480 license notice. 47481 47482 H. Include an unaltered copy of this License. 47483 47484 I. Preserve the section Entitled "History", Preserve its Title, 47485 and add to it an item stating at least the title, year, new 47486 authors, and publisher of the Modified Version as given on the 47487 Title Page. If there is no section Entitled "History" in the 47488 Document, create one stating the title, year, authors, and 47489 publisher of the Document as given on its Title Page, then add 47490 an item describing the Modified Version as stated in the 47491 previous sentence. 47492 47493 J. Preserve the network location, if any, given in the Document 47494 for public access to a Transparent copy of the Document, and 47495 likewise the network locations given in the Document for 47496 previous versions it was based on. These may be placed in the 47497 "History" section. You may omit a network location for a work 47498 that was published at least four years before the Document 47499 itself, or if the original publisher of the version it refers 47500 to gives permission. 47501 47502 K. For any section Entitled "Acknowledgements" or "Dedications", 47503 Preserve the Title of the section, and preserve in the section 47504 all the substance and tone of each of the contributor 47505 acknowledgements and/or dedications given therein. 47506 47507 L. Preserve all the Invariant Sections of the Document, unaltered 47508 in their text and in their titles. Section numbers or the 47509 equivalent are not considered part of the section titles. 47510 47511 M. Delete any section Entitled "Endorsements". Such a section 47512 may not be included in the Modified Version. 47513 47514 N. Do not retitle any existing section to be Entitled 47515 "Endorsements" or to conflict in title with any Invariant 47516 Section. 47517 47518 O. Preserve any Warranty Disclaimers. 47519 47520 If the Modified Version includes new front-matter sections or 47521 appendices that qualify as Secondary Sections and contain no 47522 material copied from the Document, you may at your option designate 47523 some or all of these sections as invariant. To do this, add their 47524 titles to the list of Invariant Sections in the Modified Version's 47525 license notice. These titles must be distinct from any other 47526 section titles. 47527 47528 You may add a section Entitled "Endorsements", provided it contains 47529 nothing but endorsements of your Modified Version by various 47530 parties--for example, statements of peer review or that the text 47531 has been approved by an organization as the authoritative 47532 definition of a standard. 47533 47534 You may add a passage of up to five words as a Front-Cover Text, 47535 and a passage of up to 25 words as a Back-Cover Text, to the end of 47536 the list of Cover Texts in the Modified Version. Only one passage 47537 of Front-Cover Text and one of Back-Cover Text may be added by (or 47538 through arrangements made by) any one entity. If the Document 47539 already includes a cover text for the same cover, previously added 47540 by you or by arrangement made by the same entity you are acting on 47541 behalf of, you may not add another; but you may replace the old 47542 one, on explicit permission from the previous publisher that added 47543 the old one. 47544 47545 The author(s) and publisher(s) of the Document do not by this 47546 License give permission to use their names for publicity for or to 47547 assert or imply endorsement of any Modified Version. 47548 47549 5. COMBINING DOCUMENTS 47550 47551 You may combine the Document with other documents released under 47552 this License, under the terms defined in section 4 above for 47553 modified versions, provided that you include in the combination all 47554 of the Invariant Sections of all of the original documents, 47555 unmodified, and list them all as Invariant Sections of your 47556 combined work in its license notice, and that you preserve all 47557 their Warranty Disclaimers. 47558 47559 The combined work need only contain one copy of this License, and 47560 multiple identical Invariant Sections may be replaced with a single 47561 copy. If there are multiple Invariant Sections with the same name 47562 but different contents, make the title of each such section unique 47563 by adding at the end of it, in parentheses, the name of the 47564 original author or publisher of that section if known, or else a 47565 unique number. Make the same adjustment to the section titles in 47566 the list of Invariant Sections in the license notice of the 47567 combined work. 47568 47569 In the combination, you must combine any sections Entitled 47570 "History" in the various original documents, forming one section 47571 Entitled "History"; likewise combine any sections Entitled 47572 "Acknowledgements", and any sections Entitled "Dedications". You 47573 must delete all sections Entitled "Endorsements." 47574 47575 6. COLLECTIONS OF DOCUMENTS 47576 47577 You may make a collection consisting of the Document and other 47578 documents released under this License, and replace the individual 47579 copies of this License in the various documents with a single copy 47580 that is included in the collection, provided that you follow the 47581 rules of this License for verbatim copying of each of the documents 47582 in all other respects. 47583 47584 You may extract a single document from such a collection, and 47585 distribute it individually under this License, provided you insert 47586 a copy of this License into the extracted document, and follow this 47587 License in all other respects regarding verbatim copying of that 47588 document. 47589 47590 7. AGGREGATION WITH INDEPENDENT WORKS 47591 47592 A compilation of the Document or its derivatives with other 47593 separate and independent documents or works, in or on a volume of a 47594 storage or distribution medium, is called an "aggregate" if the 47595 copyright resulting from the compilation is not used to limit the 47596 legal rights of the compilation's users beyond what the individual 47597 works permit. When the Document is included in an aggregate, this 47598 License does not apply to the other works in the aggregate which 47599 are not themselves derivative works of the Document. 47600 47601 If the Cover Text requirement of section 3 is applicable to these 47602 copies of the Document, then if the Document is less than one half 47603 of the entire aggregate, the Document's Cover Texts may be placed 47604 on covers that bracket the Document within the aggregate, or the 47605 electronic equivalent of covers if the Document is in electronic 47606 form. Otherwise they must appear on printed covers that bracket 47607 the whole aggregate. 47608 47609 8. TRANSLATION 47610 47611 Translation is considered a kind of modification, so you may 47612 distribute translations of the Document under the terms of section 47613 4. Replacing Invariant Sections with translations requires special 47614 permission from their copyright holders, but you may include 47615 translations of some or all Invariant Sections in addition to the 47616 original versions of these Invariant Sections. You may include a 47617 translation of this License, and all the license notices in the 47618 Document, and any Warranty Disclaimers, provided that you also 47619 include the original English version of this License and the 47620 original versions of those notices and disclaimers. In case of a 47621 disagreement between the translation and the original version of 47622 this License or a notice or disclaimer, the original version will 47623 prevail. 47624 47625 If a section in the Document is Entitled "Acknowledgements", 47626 "Dedications", or "History", the requirement (section 4) to 47627 Preserve its Title (section 1) will typically require changing the 47628 actual title. 47629 47630 9. TERMINATION 47631 47632 You may not copy, modify, sublicense, or distribute the Document 47633 except as expressly provided under this License. Any attempt 47634 otherwise to copy, modify, sublicense, or distribute it is void, 47635 and will automatically terminate your rights under this License. 47636 47637 However, if you cease all violation of this License, then your 47638 license from a particular copyright holder is reinstated (a) 47639 provisionally, unless and until the copyright holder explicitly and 47640 finally terminates your license, and (b) permanently, if the 47641 copyright holder fails to notify you of the violation by some 47642 reasonable means prior to 60 days after the cessation. 47643 47644 Moreover, your license from a particular copyright holder is 47645 reinstated permanently if the copyright holder notifies you of the 47646 violation by some reasonable means, this is the first time you have 47647 received notice of violation of this License (for any work) from 47648 that copyright holder, and you cure the violation prior to 30 days 47649 after your receipt of the notice. 47650 47651 Termination of your rights under this section does not terminate 47652 the licenses of parties who have received copies or rights from you 47653 under this License. If your rights have been terminated and not 47654 permanently reinstated, receipt of a copy of some or all of the 47655 same material does not give you any rights to use it. 47656 47657 10. FUTURE REVISIONS OF THIS LICENSE 47658 47659 The Free Software Foundation may publish new, revised versions of 47660 the GNU Free Documentation License from time to time. Such new 47661 versions will be similar in spirit to the present version, but may 47662 differ in detail to address new problems or concerns. See 47663 <http://www.gnu.org/copyleft/>. 47664 47665 Each version of the License is given a distinguishing version 47666 number. If the Document specifies that a particular numbered 47667 version of this License "or any later version" applies to it, you 47668 have the option of following the terms and conditions either of 47669 that specified version or of any later version that has been 47670 published (not as a draft) by the Free Software Foundation. If the 47671 Document does not specify a version number of this License, you may 47672 choose any version ever published (not as a draft) by the Free 47673 Software Foundation. If the Document specifies that a proxy can 47674 decide which future versions of this License can be used, that 47675 proxy's public statement of acceptance of a version permanently 47676 authorizes you to choose that version for the Document. 47677 47678 11. RELICENSING 47679 47680 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 47681 World Wide Web server that publishes copyrightable works and also 47682 provides prominent facilities for anybody to edit those works. A 47683 public wiki that anybody can edit is an example of such a server. 47684 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 47685 site means any set of copyrightable works thus published on the MMC 47686 site. 47687 47688 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 47689 license published by Creative Commons Corporation, a not-for-profit 47690 corporation with a principal place of business in San Francisco, 47691 California, as well as future copyleft versions of that license 47692 published by that same organization. 47693 47694 "Incorporate" means to publish or republish a Document, in whole or 47695 in part, as part of another Document. 47696 47697 An MMC is "eligible for relicensing" if it is licensed under this 47698 License, and if all works that were first published under this 47699 License somewhere other than this MMC, and subsequently 47700 incorporated in whole or in part into the MMC, (1) had no cover 47701 texts or invariant sections, and (2) were thus incorporated prior 47702 to November 1, 2008. 47703 47704 The operator of an MMC Site may republish an MMC contained in the 47705 site under CC-BY-SA on the same site at any time before August 1, 47706 2009, provided the MMC is eligible for relicensing. 47707 47708 ADDENDUM: How to use this License for your documents 47709 ==================================================== 47710 47711 To use this License in a document you have written, include a copy of 47712 the License in the document and put the following copyright and license 47713 notices just after the title page: 47714 47715 Copyright (C) YEAR YOUR NAME. 47716 Permission is granted to copy, distribute and/or modify this document 47717 under the terms of the GNU Free Documentation License, Version 1.3 47718 or any later version published by the Free Software Foundation; 47719 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 47720 Texts. A copy of the license is included in the section entitled ``GNU 47721 Free Documentation License''. 47722 47723 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 47724 replace the "with...Texts." line with this: 47725 47726 with the Invariant Sections being LIST THEIR TITLES, with 47727 the Front-Cover Texts being LIST, and with the Back-Cover Texts 47728 being LIST. 47729 47730 If you have Invariant Sections without Cover Texts, or some other 47731 combination of the three, merge those two alternatives to suit the 47732 situation. 47733 47734 If your document contains nontrivial examples of program code, we 47735 recommend releasing these examples in parallel under your choice of free 47736 software license, such as the GNU General Public License, to permit 47737 their use in free software. 47738 47739 47740 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 47741 47742 Contributors to GCC 47743 ******************* 47744 47745 The GCC project would like to thank its many contributors. Without them 47746 the project would not have been nearly as successful as it has been. 47747 Any omissions in this list are accidental. Feel free to contact 47748 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 47749 some of your contributions are not listed. Please keep this list in 47750 alphabetical order. 47751 47752 * Analog Devices helped implement the support for complex data types 47753 and iterators. 47754 47755 * John David Anglin for threading-related fixes and improvements to 47756 libstdc++-v3, and the HP-UX port. 47757 47758 * James van Artsdalen wrote the code that makes efficient use of the 47759 Intel 80387 register stack. 47760 47761 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 47762 Series port. 47763 47764 * Alasdair Baird for various bug fixes. 47765 47766 * Giovanni Bajo for analyzing lots of complicated C++ problem 47767 reports. 47768 47769 * Peter Barada for his work to improve code generation for new 47770 ColdFire cores. 47771 47772 * Gerald Baumgartner added the signature extension to the C++ front 47773 end. 47774 47775 * Godmar Back for his Java improvements and encouragement. 47776 47777 * Scott Bambrough for help porting the Java compiler. 47778 47779 * Wolfgang Bangerth for processing tons of bug reports. 47780 47781 * Jon Beniston for his Microsoft Windows port of Java and port to 47782 Lattice Mico32. 47783 47784 * Daniel Berlin for better DWARF2 support, faster/better 47785 optimizations, improved alias analysis, plus migrating GCC to 47786 Bugzilla. 47787 47788 * Geoff Berry for his Java object serialization work and various 47789 patches. 47790 47791 * David Binderman tests weekly snapshots of GCC trunk against Fedora 47792 Rawhide for several architectures. 47793 47794 * Uros Bizjak for the implementation of x87 math built-in functions 47795 and for various middle end and i386 back end improvements and bug 47796 fixes. 47797 47798 * Eric Blake for helping to make GCJ and libgcj conform to the 47799 specifications. 47800 47801 * Janne Blomqvist for contributions to GNU Fortran. 47802 47803 * Segher Boessenkool for various fixes. 47804 47805 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 47806 other Java work. 47807 47808 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 47809 miscellaneous clean-ups. 47810 47811 * Steven Bosscher for integrating the GNU Fortran front end into GCC 47812 and for contributing to the tree-ssa branch. 47813 47814 * Eric Botcazou for fixing middle- and backend bugs left and right. 47815 47816 * Per Bothner for his direction via the steering committee and 47817 various improvements to the infrastructure for supporting new 47818 languages. Chill front end implementation. Initial 47819 implementations of cpplib, fix-header, config.guess, libio, and 47820 past C++ library (libg++) maintainer. Dreaming up, designing and 47821 implementing much of GCJ. 47822 47823 * Devon Bowen helped port GCC to the Tahoe. 47824 47825 * Don Bowman for mips-vxworks contributions. 47826 47827 * Dave Brolley for work on cpplib and Chill. 47828 47829 * Paul Brook for work on the ARM architecture and maintaining GNU 47830 Fortran. 47831 47832 * Robert Brown implemented the support for Encore 32000 systems. 47833 47834 * Christian Bruel for improvements to local store elimination. 47835 47836 * Herman A.J. ten Brugge for various fixes. 47837 47838 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 47839 FAQ. 47840 47841 * Joe Buck for his direction via the steering committee. 47842 47843 * Craig Burley for leadership of the G77 Fortran effort. 47844 47845 * Stephan Buys for contributing Doxygen notes for libstdc++. 47846 47847 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 47848 to the C++ strings, streambufs and formatted I/O, hard detective 47849 work on the frustrating localization issues, and keeping up with 47850 the problem reports. 47851 47852 * John Carr for his alias work, SPARC hacking, infrastructure 47853 improvements, previous contributions to the steering committee, 47854 loop optimizations, etc. 47855 47856 * Stephane Carrez for 68HC11 and 68HC12 ports. 47857 47858 * Steve Chamberlain for support for the Renesas SH and H8 processors 47859 and the PicoJava processor, and for GCJ config fixes. 47860 47861 * Glenn Chambers for help with the GCJ FAQ. 47862 47863 * John-Marc Chandonia for various libgcj patches. 47864 47865 * Denis Chertykov for contributing and maintaining the AVR port, the 47866 first GCC port for an 8-bit architecture. 47867 47868 * Scott Christley for his Objective-C contributions. 47869 47870 * Eric Christopher for his Java porting help and clean-ups. 47871 47872 * Branko Cibej for more warning contributions. 47873 47874 * The GNU Classpath project for all of their merged runtime code. 47875 47876 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, '--help', 47877 and other random hacking. 47878 47879 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 47880 47881 * R. Kelley Cook for making GCC buildable from a read-only directory 47882 as well as other miscellaneous build process and documentation 47883 clean-ups. 47884 47885 * Ralf Corsepius for SH testing and minor bug fixing. 47886 47887 * Stan Cox for care and feeding of the x86 port and lots of behind 47888 the scenes hacking. 47889 47890 * Alex Crain provided changes for the 3b1. 47891 47892 * Ian Dall for major improvements to the NS32k port. 47893 47894 * Paul Dale for his work to add uClinux platform support to the m68k 47895 backend. 47896 47897 * Dario Dariol contributed the four varieties of sample programs that 47898 print a copy of their source. 47899 47900 * Russell Davidson for fstream and stringstream fixes in libstdc++. 47901 47902 * Bud Davis for work on the G77 and GNU Fortran compilers. 47903 47904 * Mo DeJong for GCJ and libgcj bug fixes. 47905 47906 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 47907 various bug fixes, and the M32C, MeP, and RL78 ports. 47908 47909 * Arnaud Desitter for helping to debug GNU Fortran. 47910 47911 * Gabriel Dos Reis for contributions to G++, contributions and 47912 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 47913 including 'valarray<>', 'complex<>', maintaining the numerics 47914 library (including that pesky '<limits>' :-) and keeping up-to-date 47915 anything to do with numbers. 47916 47917 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 47918 ISO C99 support, CFG dumping support, etc., plus support of the C++ 47919 runtime libraries including for all kinds of C interface issues, 47920 contributing and maintaining 'complex<>', sanity checking and 47921 disbursement, configuration architecture, libio maintenance, and 47922 early math work. 47923 47924 * Zdenek Dvorak for a new loop unroller and various fixes. 47925 47926 * Michael Eager for his work on the Xilinx MicroBlaze port. 47927 47928 * Richard Earnshaw for his ongoing work with the ARM. 47929 47930 * David Edelsohn for his direction via the steering committee, 47931 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 47932 loop changes, doing the entire AIX port of libstdc++ with his bare 47933 hands, and for ensuring GCC properly keeps working on AIX. 47934 47935 * Kevin Ediger for the floating point formatting of num_put::do_put 47936 in libstdc++. 47937 47938 * Phil Edwards for libstdc++ work including configuration hackery, 47939 documentation maintainer, chief breaker of the web pages, the 47940 occasional iostream bug fix, and work on shared library symbol 47941 versioning. 47942 47943 * Paul Eggert for random hacking all over GCC. 47944 47945 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 47946 configuration support for locales and fstream-related fixes. 47947 47948 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 47949 iostreams. 47950 47951 * Christian Ehrhardt for dealing with bug reports. 47952 47953 * Ben Elliston for his work to move the Objective-C runtime into its 47954 own subdirectory and for his work on autoconf. 47955 47956 * Revital Eres for work on the PowerPC 750CL port. 47957 47958 * Marc Espie for OpenBSD support. 47959 47960 * Doug Evans for much of the global optimization framework, arc, 47961 m32r, and SPARC work. 47962 47963 * Christopher Faylor for his work on the Cygwin port and for caring 47964 and feeding the gcc.gnu.org box and saving its users tons of spam. 47965 47966 * Fred Fish for BeOS support and Ada fixes. 47967 47968 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 47969 47970 * Peter Gerwinski for various bug fixes and the Pascal front end. 47971 47972 * Kaveh R. Ghazi for his direction via the steering committee, 47973 amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC 47974 on a plethora of platforms. Kaveh extends his gratitude to the 47975 CAIP Center at Rutgers University for providing him with computing 47976 resources to work on Free Software from the late 1980s to 2010. 47977 47978 * John Gilmore for a donation to the FSF earmarked improving GNU 47979 Java. 47980 47981 * Judy Goldberg for c++ contributions. 47982 47983 * Torbjorn Granlund for various fixes and the c-torture testsuite, 47984 multiply- and divide-by-constant optimization, improved long long 47985 support, improved leaf function register allocation, and his 47986 direction via the steering committee. 47987 47988 * Anthony Green for his '-Os' contributions, the moxie port, and Java 47989 front end work. 47990 47991 * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java 47992 code. 47993 47994 * Michael K. Gschwind contributed the port to the PDP-11. 47995 47996 * Richard Guenther for his ongoing middle-end contributions and bug 47997 fixes and for release management. 47998 47999 * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools, 48000 the support for Dwarf symbolic debugging information, and much of 48001 the support for System V Release 4. He has also worked heavily on 48002 the Intel 386 and 860 support. 48003 48004 * Sumanth Gundapaneni for contributing the CR16 port. 48005 48006 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 48007 GCSE. 48008 48009 * Bruno Haible for improvements in the runtime overhead for EH, new 48010 warnings and assorted bug fixes. 48011 48012 * Andrew Haley for his amazing Java compiler and library efforts. 48013 48014 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 48015 series 300. 48016 48017 * Michael Hayes for various thankless work he's done trying to get 48018 the c30/c40 ports functional. Lots of loop and unroll improvements 48019 and fixes. 48020 48021 * Dara Hazeghi for wading through myriads of target-specific bug 48022 reports. 48023 48024 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 48025 48026 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 48027 work, loop opts, and generally fixing lots of old problems we've 48028 ignored for years, flow rewrite and lots of further stuff, 48029 including reviewing tons of patches. 48030 48031 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 48032 various fixes. 48033 48034 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 48035 contributed the support for the Sony NEWS machine. 48036 48037 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 48038 various fixes. 48039 48040 * Katherine Holcomb for work on GNU Fortran. 48041 48042 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 48043 of testing and bug fixing, particularly of GCC configury code. 48044 48045 * Steve Holmgren for MachTen patches. 48046 48047 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 48048 48049 * Jan Hubicka for his x86 port improvements. 48050 48051 * Falk Hueffner for working on C and optimization bug reports. 48052 48053 * Bernardo Innocenti for his m68k work, including merging of ColdFire 48054 improvements and uClinux support. 48055 48056 * Christian Iseli for various bug fixes. 48057 48058 * Kamil Iskra for general m68k hacking. 48059 48060 * Lee Iverson for random fixes and MIPS testing. 48061 48062 * Andreas Jaeger for testing and benchmarking of GCC and various bug 48063 fixes. 48064 48065 * Jakub Jelinek for his SPARC work and sibling call optimizations as 48066 well as lots of bug fixes and test cases, and for improving the 48067 Java build system. 48068 48069 * Janis Johnson for ia64 testing and fixes, her quality improvement 48070 sidetracks, and web page maintenance. 48071 48072 * Kean Johnston for SCO OpenServer support and various fixes. 48073 48074 * Tim Josling for the sample language treelang based originally on 48075 Richard Kenner's "toy" language. 48076 48077 * Nicolai Josuttis for additional libstdc++ documentation. 48078 48079 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 48080 target. 48081 48082 * Steven G. Kargl for work on GNU Fortran. 48083 48084 * David Kashtan of SRI adapted GCC to VMS. 48085 48086 * Ryszard Kabatek for many, many libstdc++ bug fixes and 48087 optimizations of strings, especially member functions, and for 48088 auto_ptr fixes. 48089 48090 * Geoffrey Keating for his ongoing work to make the PPC work for 48091 GNU/Linux and his automatic regression tester. 48092 48093 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 48094 work in just about every part of libstdc++. 48095 48096 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 48097 MIL-STD-1750A. 48098 48099 * Richard Kenner of the New York University Ultracomputer Research 48100 Laboratory wrote the machine descriptions for the AMD 29000, the 48101 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 48102 support for instruction attributes. He also made changes to better 48103 support RISC processors including changes to common subexpression 48104 elimination, strength reduction, function calling sequence 48105 handling, and condition code support, in addition to generalizing 48106 the code for frame pointer elimination and delay slot scheduling. 48107 Richard Kenner was also the head maintainer of GCC for several 48108 years. 48109 48110 * Mumit Khan for various contributions to the Cygwin and Mingw32 48111 ports and maintaining binary releases for Microsoft Windows hosts, 48112 and for massive libstdc++ porting work to Cygwin/Mingw32. 48113 48114 * Robin Kirkham for cpu32 support. 48115 48116 * Mark Klein for PA improvements. 48117 48118 * Thomas Koenig for various bug fixes. 48119 48120 * Bruce Korb for the new and improved fixincludes code. 48121 48122 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 48123 effort. 48124 48125 * Charles LaBrec contributed the support for the Integrated Solutions 48126 68020 system. 48127 48128 * Asher Langton and Mike Kumbera for contributing Cray pointer 48129 support to GNU Fortran, and for other GNU Fortran improvements. 48130 48131 * Jeff Law for his direction via the steering committee, coordinating 48132 the entire egcs project and GCC 2.95, rolling out snapshots and 48133 releases, handling merges from GCC2, reviewing tons of patches that 48134 might have fallen through the cracks else, and random but extensive 48135 hacking. 48136 48137 * Walter Lee for work on the TILE-Gx and TILEPro ports. 48138 48139 * Marc Lehmann for his direction via the steering committee and 48140 helping with analysis and improvements of x86 performance. 48141 48142 * Victor Leikehman for work on GNU Fortran. 48143 48144 * Ted Lemon wrote parts of the RTL reader and printer. 48145 48146 * Kriang Lerdsuwanakij for C++ improvements including template as 48147 template parameter support, and many C++ fixes. 48148 48149 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 48150 and random work on the Java front end. 48151 48152 * Alain Lichnewsky ported GCC to the MIPS CPU. 48153 48154 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 48155 and patches. 48156 48157 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 48158 48159 * Chen Liqin for various S+core related fixes/improvement, and for 48160 maintaining the S+core port. 48161 48162 * Weiwen Liu for testing and various bug fixes. 48163 48164 * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other 48165 diagnostics fixes and improvements. 48166 48167 * Dave Love for his ongoing work with the Fortran front end and 48168 runtime libraries. 48169 48170 * Martin von Lo"wis for internal consistency checking infrastructure, 48171 various C++ improvements including namespace support, and tons of 48172 assistance with libstdc++/compiler merges. 48173 48174 * H.J. Lu for his previous contributions to the steering committee, 48175 many x86 bug reports, prototype patches, and keeping the GNU/Linux 48176 ports working. 48177 48178 * Greg McGary for random fixes and (someday) bounded pointers. 48179 48180 * Andrew MacLeod for his ongoing work in building a real EH system, 48181 various code generation improvements, work on the global optimizer, 48182 etc. 48183 48184 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 48185 hacking improvements to compile-time performance, overall knowledge 48186 and direction in the area of instruction scheduling, and design and 48187 implementation of the automaton based instruction scheduler. 48188 48189 * Bob Manson for his behind the scenes work on dejagnu. 48190 48191 * Philip Martin for lots of libstdc++ string and vector iterator 48192 fixes and improvements, and string clean up and testsuites. 48193 48194 * All of the Mauve project contributors, for Java test code. 48195 48196 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 48197 48198 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 48199 48200 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 48201 powerpc, haifa, ECOFF debug support, and other assorted hacking. 48202 48203 * Jason Merrill for his direction via the steering committee and 48204 leading the G++ effort. 48205 48206 * Martin Michlmayr for testing GCC on several architectures using the 48207 entire Debian archive. 48208 48209 * David Miller for his direction via the steering committee, lots of 48210 SPARC work, improvements in jump.c and interfacing with the Linux 48211 kernel developers. 48212 48213 * Gary Miller ported GCC to Charles River Data Systems machines. 48214 48215 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 48216 the entire libstdc++ testsuite namespace-compatible. 48217 48218 * Mark Mitchell for his direction via the steering committee, 48219 mountains of C++ work, load/store hoisting out of loops, alias 48220 analysis improvements, ISO C 'restrict' support, and serving as 48221 release manager from 2000 to 2011. 48222 48223 * Alan Modra for various GNU/Linux bits and testing. 48224 48225 * Toon Moene for his direction via the steering committee, Fortran 48226 maintenance, and his ongoing work to make us make Fortran run fast. 48227 48228 * Jason Molenda for major help in the care and feeding of all the 48229 services on the gcc.gnu.org (formerly egcs.cygnus.com) 48230 machine--mail, web services, ftp services, etc etc. Doing all this 48231 work on scrap paper and the backs of envelopes would have been... 48232 difficult. 48233 48234 * Catherine Moore for fixing various ugly problems we have sent her 48235 way, including the haifa bug which was killing the Alpha & PowerPC 48236 Linux kernels. 48237 48238 * Mike Moreton for his various Java patches. 48239 48240 * David Mosberger-Tang for various Alpha improvements, and for the 48241 initial IA-64 port. 48242 48243 * Stephen Moshier contributed the floating point emulator that 48244 assists in cross-compilation and permits support for floating point 48245 numbers wider than 64 bits and for ISO C99 support. 48246 48247 * Bill Moyer for his behind the scenes work on various issues. 48248 48249 * Philippe De Muyter for his work on the m68k port. 48250 48251 * Joseph S. Myers for his work on the PDP-11 port, format checking 48252 and ISO C99 support, and continuous emphasis on (and contributions 48253 to) documentation. 48254 48255 * Nathan Myers for his work on libstdc++-v3: architecture and 48256 authorship through the first three snapshots, including 48257 implementation of locale infrastructure, string, shadow C headers, 48258 and the initial project documentation (DESIGN, CHECKLIST, and so 48259 forth). Later, more work on MT-safe string and shadow headers. 48260 48261 * Felix Natter for documentation on porting libstdc++. 48262 48263 * Nathanael Nerode for cleaning up the configuration/build process. 48264 48265 * NeXT, Inc. donated the front end that supports the Objective-C 48266 language. 48267 48268 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the 48269 search engine setup, various documentation fixes and other small 48270 fixes. 48271 48272 * Geoff Noer for his work on getting cygwin native builds working. 48273 48274 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 48275 tracking web pages, GIMPLE tuples, and assorted fixes. 48276 48277 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 48278 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related 48279 infrastructure improvements. 48280 48281 * Alexandre Oliva for various build infrastructure improvements, 48282 scripts and amazing testing work, including keeping libtool issues 48283 sane and happy. 48284 48285 * Stefan Olsson for work on mt_alloc. 48286 48287 * Melissa O'Neill for various NeXT fixes. 48288 48289 * Rainer Orth for random MIPS work, including improvements to GCC's 48290 o32 ABI support, improvements to dejagnu's MIPS support, Java 48291 configuration clean-ups and porting work, and maintaining the IRIX, 48292 Solaris 2, and Tru64 UNIX ports. 48293 48294 * Hartmut Penner for work on the s390 port. 48295 48296 * Paul Petersen wrote the machine description for the Alliant FX/8. 48297 48298 * Alexandre Petit-Bianco for implementing much of the Java compiler 48299 and continued Java maintainership. 48300 48301 * Matthias Pfaller for major improvements to the NS32k port. 48302 48303 * Gerald Pfeifer for his direction via the steering committee, 48304 pointing out lots of problems we need to solve, maintenance of the 48305 web pages, and taking care of documentation maintenance in general. 48306 48307 * Andrew Pinski for processing bug reports by the dozen. 48308 48309 * Ovidiu Predescu for his work on the Objective-C front end and 48310 runtime libraries. 48311 48312 * Jerry Quinn for major performance improvements in C++ formatted 48313 I/O. 48314 48315 * Ken Raeburn for various improvements to checker, MIPS ports and 48316 various cleanups in the compiler. 48317 48318 * Rolf W. Rasmussen for hacking on AWT. 48319 48320 * David Reese of Sun Microsystems contributed to the Solaris on 48321 PowerPC port. 48322 48323 * Volker Reichelt for keeping up with the problem reports. 48324 48325 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 48326 hacking and developing and maintaining the Epiphany port. 48327 48328 * Loren J. Rittle for improvements to libstdc++-v3 including the 48329 FreeBSD port, threading fixes, thread-related configury changes, 48330 critical threading documentation, and solutions to really tricky 48331 I/O problems, as well as keeping GCC properly working on FreeBSD 48332 and continuous testing. 48333 48334 * Craig Rodrigues for processing tons of bug reports. 48335 48336 * Ola Ro"nnerup for work on mt_alloc. 48337 48338 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 48339 48340 * David Ronis inspired and encouraged Craig to rewrite the G77 48341 documentation in texinfo format by contributing a first pass at a 48342 translation of the old 'g77-0.5.16/f/DOC' file. 48343 48344 * Ken Rose for fixes to GCC's delay slot filling code. 48345 48346 * Paul Rubin wrote most of the preprocessor. 48347 48348 * Pe'tur Runo'lfsson for major performance improvements in C++ 48349 formatted I/O and large file support in C++ filebuf. 48350 48351 * Chip Salzenberg for libstdc++ patches and improvements to locales, 48352 traits, Makefiles, libio, libtool hackery, and "long long" support. 48353 48354 * Juha Sarlin for improvements to the H8 code generator. 48355 48356 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 48357 300. 48358 48359 * Roger Sayle for improvements to constant folding and GCC's RTL 48360 optimizers as well as for fixing numerous bugs. 48361 48362 * Bradley Schatz for his work on the GCJ FAQ. 48363 48364 * Peter Schauer wrote the code to allow debugging to work on the 48365 Alpha. 48366 48367 * William Schelter did most of the work on the Intel 80386 support. 48368 48369 * Tobias Schlu"ter for work on GNU Fortran. 48370 48371 * Bernd Schmidt for various code generation improvements and major 48372 work in the reload pass, serving as release manager for GCC 2.95.3, 48373 and work on the Blackfin and C6X ports. 48374 48375 * Peter Schmid for constant testing of libstdc++--especially 48376 application testing, going above and beyond what was requested for 48377 the release criteria--and libstdc++ header file tweaks. 48378 48379 * Jason Schroeder for jcf-dump patches. 48380 48381 * Andreas Schwab for his work on the m68k port. 48382 48383 * Lars Segerlund for work on GNU Fortran. 48384 48385 * Dodji Seketeli for numerous C++ bug fixes and debug info 48386 improvements. 48387 48388 * Joel Sherrill for his direction via the steering committee, RTEMS 48389 contributions and RTEMS testing. 48390 48391 * Nathan Sidwell for many C++ fixes/improvements. 48392 48393 * Jeffrey Siegal for helping RMS with the original design of GCC, 48394 some code which handles the parse tree and RTL data structures, 48395 constant folding and help with the original VAX & m68k ports. 48396 48397 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 48398 from the LWG (thereby keeping GCC in line with updates from the 48399 ISO). 48400 48401 * Franz Sirl for his ongoing work with making the PPC port stable for 48402 GNU/Linux. 48403 48404 * Andrey Slepuhin for assorted AIX hacking. 48405 48406 * Trevor Smigiel for contributing the SPU port. 48407 48408 * Christopher Smith did the port for Convex machines. 48409 48410 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 48411 48412 * Randy Smith finished the Sun FPA support. 48413 48414 * Scott Snyder for queue, iterator, istream, and string fixes and 48415 libstdc++ testsuite entries. Also for providing the patch to G77 48416 to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and 48417 'LOGICAL*1'. 48418 48419 * Zdenek Sojka for running automated regression testing of GCC and 48420 reporting numerous bugs. 48421 48422 * Jayant Sonar for contributing the CR16 port. 48423 48424 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 48425 48426 * Richard Stallman, for writing the original GCC and launching the 48427 GNU project. 48428 48429 * Jan Stein of the Chalmers Computer Society provided support for 48430 Genix, as well as part of the 32000 machine description. 48431 48432 * Nigel Stephens for various mips16 related fixes/improvements. 48433 48434 * Jonathan Stone wrote the machine description for the Pyramid 48435 computer. 48436 48437 * Graham Stott for various infrastructure improvements. 48438 48439 * John Stracke for his Java HTTP protocol fixes. 48440 48441 * Mike Stump for his Elxsi port, G++ contributions over the years and 48442 more recently his vxworks contributions 48443 48444 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 48445 48446 * Shigeya Suzuki for this fixes for the bsdi platforms. 48447 48448 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 48449 support, general configury hacking, fixincludes, etc. 48450 48451 * Holger Teutsch provided the support for the Clipper CPU. 48452 48453 * Gary Thomas for his ongoing work to make the PPC work for 48454 GNU/Linux. 48455 48456 * Philipp Thomas for random bug fixes throughout the compiler 48457 48458 * Jason Thorpe for thread support in libstdc++ on NetBSD. 48459 48460 * Kresten Krab Thorup wrote the run time support for the Objective-C 48461 language and the fantastic Java bytecode interpreter. 48462 48463 * Michael Tiemann for random bug fixes, the first instruction 48464 scheduler, initial C++ support, function integration, NS32k, SPARC 48465 and M88k machine description work, delay slot scheduling. 48466 48467 * Andreas Tobler for his work porting libgcj to Darwin. 48468 48469 * Teemu Torma for thread safe exception handling support. 48470 48471 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 48472 definitions, and of the VAX machine description. 48473 48474 * Daniel Towner and Hariharan Sandanagobalane contributed and 48475 maintain the picoChip port. 48476 48477 * Tom Tromey for internationalization support and for his many Java 48478 contributions and libgcj maintainership. 48479 48480 * Lassi Tuura for improvements to config.guess to determine HP 48481 processor types. 48482 48483 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 48484 48485 * Andy Vaught for the design and initial implementation of the GNU 48486 Fortran front end. 48487 48488 * Brent Verner for work with the libstdc++ cshadow files and their 48489 associated configure steps. 48490 48491 * Todd Vierling for contributions for NetBSD ports. 48492 48493 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 48494 guidance. 48495 48496 * Dean Wakerley for converting the install documentation from HTML to 48497 texinfo in time for GCC 3.0. 48498 48499 * Krister Walfridsson for random bug fixes. 48500 48501 * Feng Wang for contributions to GNU Fortran. 48502 48503 * Stephen M. Webb for time and effort on making libstdc++ shadow 48504 files work with the tricky Solaris 8+ headers, and for pushing the 48505 build-time header tree. 48506 48507 * John Wehle for various improvements for the x86 code generator, 48508 related infrastructure improvements to help x86 code generation, 48509 value range propagation and other work, WE32k port. 48510 48511 * Ulrich Weigand for work on the s390 port. 48512 48513 * Zack Weinberg for major work on cpplib and various other bug fixes. 48514 48515 * Matt Welsh for help with Linux Threads support in GCJ. 48516 48517 * Urban Widmark for help fixing java.io. 48518 48519 * Mark Wielaard for new Java library code and his work integrating 48520 with Classpath. 48521 48522 * Dale Wiles helped port GCC to the Tahoe. 48523 48524 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 48525 48526 * Jim Wilson for his direction via the steering committee, tackling 48527 hard problems in various places that nobody else wanted to work on, 48528 strength reduction and other loop optimizations. 48529 48530 * Paul Woegerer and Tal Agmon for the CRX port. 48531 48532 * Carlo Wood for various fixes. 48533 48534 * Tom Wood for work on the m88k port. 48535 48536 * Canqun Yang for work on GNU Fortran. 48537 48538 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 48539 description for the Tron architecture (specifically, the Gmicro). 48540 48541 * Kevin Zachmann helped port GCC to the Tahoe. 48542 48543 * Ayal Zaks for Swing Modulo Scheduling (SMS). 48544 48545 * Xiaoqiang Zhang for work on GNU Fortran. 48546 48547 * Gilles Zunino for help porting Java to Irix. 48548 48549 The following people are recognized for their contributions to GNAT, 48550 the Ada front end of GCC: 48551 * Bernard Banner 48552 48553 * Romain Berrendonner 48554 48555 * Geert Bosch 48556 48557 * Emmanuel Briot 48558 48559 * Joel Brobecker 48560 48561 * Ben Brosgol 48562 48563 * Vincent Celier 48564 48565 * Arnaud Charlet 48566 48567 * Chien Chieng 48568 48569 * Cyrille Comar 48570 48571 * Cyrille Crozes 48572 48573 * Robert Dewar 48574 48575 * Gary Dismukes 48576 48577 * Robert Duff 48578 48579 * Ed Falis 48580 48581 * Ramon Fernandez 48582 48583 * Sam Figueroa 48584 48585 * Vasiliy Fofanov 48586 48587 * Michael Friess 48588 48589 * Franco Gasperoni 48590 48591 * Ted Giering 48592 48593 * Matthew Gingell 48594 48595 * Laurent Guerby 48596 48597 * Jerome Guitton 48598 48599 * Olivier Hainque 48600 48601 * Jerome Hugues 48602 48603 * Hristian Kirtchev 48604 48605 * Jerome Lambourg 48606 48607 * Bruno Leclerc 48608 48609 * Albert Lee 48610 48611 * Sean McNeil 48612 48613 * Javier Miranda 48614 48615 * Laurent Nana 48616 48617 * Pascal Obry 48618 48619 * Dong-Ik Oh 48620 48621 * Laurent Pautet 48622 48623 * Brett Porter 48624 48625 * Thomas Quinot 48626 48627 * Nicolas Roche 48628 48629 * Pat Rogers 48630 48631 * Jose Ruiz 48632 48633 * Douglas Rupp 48634 48635 * Sergey Rybin 48636 48637 * Gail Schenker 48638 48639 * Ed Schonberg 48640 48641 * Nicolas Setton 48642 48643 * Samuel Tardieu 48644 48645 The following people are recognized for their contributions of new 48646 features, bug reports, testing and integration of classpath/libgcj for 48647 GCC version 4.1: 48648 * Lillian Angel for 'JTree' implementation and lots Free Swing 48649 additions and bug fixes. 48650 48651 * Wolfgang Baer for 'GapContent' bug fixes. 48652 48653 * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse 48654 event fixes, lots of Free Swing work including 'JTable' editing. 48655 48656 * Stuart Ballard for RMI constant fixes. 48657 48658 * Goffredo Baroncelli for 'HTTPURLConnection' fixes. 48659 48660 * Gary Benson for 'MessageFormat' fixes. 48661 48662 * Daniel Bonniot for 'Serialization' fixes. 48663 48664 * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX' 48665 and 'DOM xml:id' support. 48666 48667 * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes. 48668 48669 * Archie Cobbs for build fixes, VM interface updates, 48670 'URLClassLoader' updates. 48671 48672 * Kelley Cook for build fixes. 48673 48674 * Martin Cordova for Suggestions for better 'SocketTimeoutException'. 48675 48676 * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and 48677 improvements. 48678 48679 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 48680 2D support. Lots of imageio framework additions, lots of AWT and 48681 Free Swing bug fixes. 48682 48683 * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization 48684 fixes, better 'Proxy' support, bug fixes and IKVM integration. 48685 48686 * Santiago Gala for 'AccessControlContext' fixes. 48687 48688 * Nicolas Geoffray for 'VMClassLoader' and 'AccessController' 48689 improvements. 48690 48691 * David Gilbert for 'basic' and 'metal' icon and plaf support and 48692 lots of documenting, Lots of Free Swing and metal theme additions. 48693 'MetalIconFactory' implementation. 48694 48695 * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers. 48696 48697 * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj 48698 build speedups. 48699 48700 * Kim Ho for 'JFileChooser' implementation. 48701 48702 * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates, 48703 'Serialization' fixes, 'Properties' XML support and generic branch 48704 work, VMIntegration guide update. 48705 48706 * Bastiaan Huisman for 'TimeZone' bug fixing. 48707 48708 * Andreas Jaeger for mprec updates. 48709 48710 * Paul Jenner for better '-Werror' support. 48711 48712 * Ito Kazumitsu for 'NetworkInterface' implementation and updates. 48713 48714 * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus 48715 bug fixes all over. Lots of Free Swing work including styled text. 48716 48717 * Simon Kitching for 'String' cleanups and optimization suggestions. 48718 48719 * Michael Koch for configuration fixes, 'Locale' updates, bug and 48720 build fixes. 48721 48722 * Guilhem Lavaux for configuration, thread and channel fixes and 48723 Kaffe integration. JCL native 'Pointer' updates. Logger bug 48724 fixes. 48725 48726 * David Lichteblau for JCL support library global/local reference 48727 cleanups. 48728 48729 * Aaron Luchko for JDWP updates and documentation fixes. 48730 48731 * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex 48732 features. 48733 48734 * Sven de Marothy for BMP imageio support, CSS and 'TextLayout' 48735 fixes. 'GtkImage' rewrite, 2D, awt, free swing and date/time fixes 48736 and implementing the Qt4 peers. 48737 48738 * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock, 48739 'SystemLogger' and 'FileHandler' rotate implementations, NIO 48740 'FileChannel.map' support, security and policy updates. 48741 48742 * Bryce McKinlay for RMI work. 48743 48744 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 48745 testing and documenting. 48746 48747 * Kalle Olavi Niemitalo for build fixes. 48748 48749 * Rainer Orth for build fixes. 48750 48751 * Andrew Overholt for 'File' locking fixes. 48752 48753 * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates. 48754 48755 * Olga Rodimina for 'MenuSelectionManager' implementation. 48756 48757 * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes. 48758 48759 * Julian Scheid for documentation updates and gjdoc support. 48760 48761 * Christian Schlichtherle for zip fixes and cleanups. 48762 48763 * Robert Schuster for documentation updates and beans fixes, 48764 'TreeNode' enumerations and 'ActionCommand' and various fixes, XML 48765 and URL, AWT and Free Swing bug fixes. 48766 48767 * Keith Seitz for lots of JDWP work. 48768 48769 * Christian Thalinger for 64-bit cleanups, Configuration and VM 48770 interface fixes and 'CACAO' integration, 'fdlibm' updates. 48771 48772 * Gael Thomas for 'VMClassLoader' boot packages support suggestions. 48773 48774 * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4' 48775 support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates. 48776 48777 * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe 48778 integration. 'Qt4' build infrastructure, 'SHA1PRNG' and 48779 'GdkPixbugDecoder' updates. 48780 48781 * Tom Tromey for Eclipse integration, generics work, lots of bug 48782 fixes and gcj integration including coordinating The Big Merge. 48783 48784 * Mark Wielaard for bug fixes, packaging and release management, 48785 'Clipboard' implementation, system call interrupts and network 48786 timeouts and 'GdkPixpufDecoder' fixes. 48787 48788 In addition to the above, all of which also contributed time and energy 48789 in testing GCC, we would like to thank the following for their 48790 contributions to testing: 48791 48792 * Michael Abd-El-Malek 48793 48794 * Thomas Arend 48795 48796 * Bonzo Armstrong 48797 48798 * Steven Ashe 48799 48800 * Chris Baldwin 48801 48802 * David Billinghurst 48803 48804 * Jim Blandy 48805 48806 * Stephane Bortzmeyer 48807 48808 * Horst von Brand 48809 48810 * Frank Braun 48811 48812 * Rodney Brown 48813 48814 * Sidney Cadot 48815 48816 * Bradford Castalia 48817 48818 * Robert Clark 48819 48820 * Jonathan Corbet 48821 48822 * Ralph Doncaster 48823 48824 * Richard Emberson 48825 48826 * Levente Farkas 48827 48828 * Graham Fawcett 48829 48830 * Mark Fernyhough 48831 48832 * Robert A. French 48833 48834 * Jo"rgen Freyh 48835 48836 * Mark K. Gardner 48837 48838 * Charles-Antoine Gauthier 48839 48840 * Yung Shing Gene 48841 48842 * David Gilbert 48843 48844 * Simon Gornall 48845 48846 * Fred Gray 48847 48848 * John Griffin 48849 48850 * Patrik Hagglund 48851 48852 * Phil Hargett 48853 48854 * Amancio Hasty 48855 48856 * Takafumi Hayashi 48857 48858 * Bryan W. Headley 48859 48860 * Kevin B. Hendricks 48861 48862 * Joep Jansen 48863 48864 * Christian Joensson 48865 48866 * Michel Kern 48867 48868 * David Kidd 48869 48870 * Tobias Kuipers 48871 48872 * Anand Krishnaswamy 48873 48874 * A. O. V. Le Blanc 48875 48876 * llewelly 48877 48878 * Damon Love 48879 48880 * Brad Lucier 48881 48882 * Matthias Klose 48883 48884 * Martin Knoblauch 48885 48886 * Rick Lutowski 48887 48888 * Jesse Macnish 48889 48890 * Stefan Morrell 48891 48892 * Anon A. Mous 48893 48894 * Matthias Mueller 48895 48896 * Pekka Nikander 48897 48898 * Rick Niles 48899 48900 * Jon Olson 48901 48902 * Magnus Persson 48903 48904 * Chris Pollard 48905 48906 * Richard Polton 48907 48908 * Derk Reefman 48909 48910 * David Rees 48911 48912 * Paul Reilly 48913 48914 * Tom Reilly 48915 48916 * Torsten Rueger 48917 48918 * Danny Sadinoff 48919 48920 * Marc Schifer 48921 48922 * Erik Schnetter 48923 48924 * Wayne K. Schroll 48925 48926 * David Schuler 48927 48928 * Vin Shelton 48929 48930 * Tim Souder 48931 48932 * Adam Sulmicki 48933 48934 * Bill Thorson 48935 48936 * George Talbot 48937 48938 * Pedro A. M. Vazquez 48939 48940 * Gregory Warnes 48941 48942 * Ian Watson 48943 48944 * David E. Young 48945 48946 * And many others 48947 48948 And finally we'd like to thank everyone who uses the compiler, provides 48949 feedback and generally reminds us why we're doing this work in the first 48950 place. 48951 48952 48953 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 48954 48955 Option Index 48956 ************ 48957 48958 GCC's command line options are indexed here without any initial '-' or 48959 '--'. Where an option has both positive and negative forms (such as 48960 '-fOPTION' and '-fno-OPTION'), relevant entries in the manual are 48961 indexed under the most appropriate form; it may sometimes be useful to 48962 look up both forms. 48963 48964 [index] 48965 * Menu: 48966 48967 * ###: Overall Options. (line 209) 48968 * -fno-keep-inline-dllexport: Optimize Options. (line 316) 48969 * -mcpu: RX Options. (line 30) 48970 * -mpointer-size=SIZE: VMS Options. (line 20) 48971 * 8bit-idiv: i386 and x86-64 Options. 48972 (line 816) 48973 * A: Preprocessor Options. 48974 (line 596) 48975 * allowable_client: Darwin Options. (line 196) 48976 * all_load: Darwin Options. (line 110) 48977 * ansi: Standards. (line 16) 48978 * ansi <1>: C Dialect Options. (line 11) 48979 * ansi <2>: Preprocessor Options. 48980 (line 340) 48981 * ansi <3>: Other Builtins. (line 21) 48982 * ansi <4>: Non-bugs. (line 107) 48983 * arch_errors_fatal: Darwin Options. (line 114) 48984 * aux-info: C Dialect Options. (line 167) 48985 * avx256-split-unaligned-load: i386 and x86-64 Options. 48986 (line 824) 48987 * avx256-split-unaligned-store: i386 and x86-64 Options. 48988 (line 824) 48989 * B: Directory Options. (line 44) 48990 * Bdynamic: VxWorks Options. (line 22) 48991 * bind_at_load: Darwin Options. (line 118) 48992 * Bstatic: VxWorks Options. (line 22) 48993 * bundle: Darwin Options. (line 123) 48994 * bundle_loader: Darwin Options. (line 127) 48995 * c: Overall Options. (line 164) 48996 * C: Preprocessor Options. 48997 (line 653) 48998 * c <1>: Link Options. (line 20) 48999 * client_name: Darwin Options. (line 196) 49000 * compatibility_version: Darwin Options. (line 196) 49001 * coverage: Debugging Options. (line 409) 49002 * current_version: Darwin Options. (line 196) 49003 * d: Debugging Options. (line 541) 49004 * D: Preprocessor Options. 49005 (line 46) 49006 * da: Debugging Options. (line 747) 49007 * dA: Debugging Options. (line 750) 49008 * dD: Debugging Options. (line 754) 49009 * dD <1>: Preprocessor Options. 49010 (line 627) 49011 * dead_strip: Darwin Options. (line 196) 49012 * dependency-file: Darwin Options. (line 196) 49013 * dH: Debugging Options. (line 758) 49014 * dI: Preprocessor Options. 49015 (line 636) 49016 * dM: Preprocessor Options. 49017 (line 612) 49018 * dN: Preprocessor Options. 49019 (line 633) 49020 * dp: Debugging Options. (line 761) 49021 * dP: Debugging Options. (line 766) 49022 * dU: Preprocessor Options. 49023 (line 640) 49024 * dumpmachine: Debugging Options. (line 1351) 49025 * dumpspecs: Debugging Options. (line 1359) 49026 * dumpversion: Debugging Options. (line 1355) 49027 * dx: Debugging Options. (line 770) 49028 * dylib_file: Darwin Options. (line 196) 49029 * dylinker_install_name: Darwin Options. (line 196) 49030 * dynamic: Darwin Options. (line 196) 49031 * dynamiclib: Darwin Options. (line 131) 49032 * E: Overall Options. (line 185) 49033 * E <1>: Link Options. (line 20) 49034 * EB: MIPS Options. (line 7) 49035 * EL: MIPS Options. (line 10) 49036 * exported_symbols_list: Darwin Options. (line 196) 49037 * F: Darwin Options. (line 31) 49038 * fabi-version: C++ Dialect Options. 49039 (line 19) 49040 * fada-spec-parent: Overall Options. (line 367) 49041 * faggressive-loop-optimizations: Optimize Options. (line 506) 49042 * falign-functions: Optimize Options. (line 1458) 49043 * falign-jumps: Optimize Options. (line 1507) 49044 * falign-labels: Optimize Options. (line 1476) 49045 * falign-loops: Optimize Options. (line 1494) 49046 * fassociative-math: Optimize Options. (line 1951) 49047 * fasynchronous-unwind-tables: Code Gen Options. (line 146) 49048 * fauto-inc-dec: Optimize Options. (line 530) 49049 * fbounds-check: Code Gen Options. (line 15) 49050 * fbranch-probabilities: Optimize Options. (line 2079) 49051 * fbranch-target-load-optimize: Optimize Options. (line 2187) 49052 * fbranch-target-load-optimize2: Optimize Options. (line 2193) 49053 * fbtr-bb-exclusive: Optimize Options. (line 2197) 49054 * fcall-saved: Code Gen Options. (line 343) 49055 * fcall-used: Code Gen Options. (line 329) 49056 * fcaller-saves: Optimize Options. (line 825) 49057 * fcheck-data-deps: Optimize Options. (line 1090) 49058 * fcheck-new: C++ Dialect Options. 49059 (line 54) 49060 * fcombine-stack-adjustments: Optimize Options. (line 837) 49061 * fcommon: Variable Attributes. 49062 (line 104) 49063 * fcompare-debug: Debugging Options. (line 200) 49064 * fcompare-debug-second: Debugging Options. (line 226) 49065 * fcompare-elim: Optimize Options. (line 1787) 49066 * fcond-mismatch: C Dialect Options. (line 317) 49067 * fconserve-stack: Optimize Options. (line 843) 49068 * fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 49069 (line 30) 49070 * fconstexpr-depth: C++ Dialect Options. 49071 (line 64) 49072 * fcprop-registers: Optimize Options. (line 1805) 49073 * fcrossjumping: Optimize Options. (line 523) 49074 * fcse-follow-jumps: Optimize Options. (line 442) 49075 * fcse-skip-blocks: Optimize Options. (line 451) 49076 * fcx-fortran-rules: Optimize Options. (line 2066) 49077 * fcx-limited-range: Optimize Options. (line 2054) 49078 * fdata-sections: Optimize Options. (line 2168) 49079 * fdbg-cnt: Debugging Options. (line 461) 49080 * fdbg-cnt-list: Debugging Options. (line 458) 49081 * fdce: Optimize Options. (line 536) 49082 * fdebug-cpp: Preprocessor Options. 49083 (line 527) 49084 * fdebug-prefix-map: Debugging Options. (line 320) 49085 * fdebug-types-section: Debugging Options. (line 74) 49086 * fdeduce-init-list: C++ Dialect Options. 49087 (line 70) 49088 * fdelayed-branch: Optimize Options. (line 672) 49089 * fdelete-dead-exceptions: Code Gen Options. (line 131) 49090 * fdelete-null-pointer-checks: Optimize Options. (line 559) 49091 * fdevirtualize: Optimize Options. (line 577) 49092 * fdiagnostics-show-caret: Language Independent Options. 49093 (line 40) 49094 * fdiagnostics-show-location: Language Independent Options. 49095 (line 20) 49096 * fdiagnostics-show-option: Language Independent Options. 49097 (line 34) 49098 * fdirectives-only: Preprocessor Options. 49099 (line 475) 49100 * fdisable-: Debugging Options. (line 471) 49101 * fdollars-in-identifiers: Preprocessor Options. 49102 (line 496) 49103 * fdollars-in-identifiers <1>: Interoperation. (line 141) 49104 * fdse: Optimize Options. (line 540) 49105 * fdump-ada-spec: Overall Options. (line 362) 49106 * fdump-class-hierarchy: Debugging Options. (line 801) 49107 * fdump-final-insns: Debugging Options. (line 194) 49108 * fdump-go-spec: Overall Options. (line 371) 49109 * fdump-ipa: Debugging Options. (line 809) 49110 * fdump-noaddr: Debugging Options. (line 774) 49111 * fdump-passes: Debugging Options. (line 826) 49112 * fdump-rtl-alignments: Debugging Options. (line 562) 49113 * fdump-rtl-all: Debugging Options. (line 747) 49114 * fdump-rtl-asmcons: Debugging Options. (line 565) 49115 * fdump-rtl-auto_inc_dec: Debugging Options. (line 569) 49116 * fdump-rtl-barriers: Debugging Options. (line 573) 49117 * fdump-rtl-bbpart: Debugging Options. (line 576) 49118 * fdump-rtl-bbro: Debugging Options. (line 579) 49119 * fdump-rtl-btl2: Debugging Options. (line 583) 49120 * fdump-rtl-btl2 <1>: Debugging Options. (line 583) 49121 * fdump-rtl-bypass: Debugging Options. (line 587) 49122 * fdump-rtl-ce1: Debugging Options. (line 598) 49123 * fdump-rtl-ce2: Debugging Options. (line 598) 49124 * fdump-rtl-ce3: Debugging Options. (line 598) 49125 * fdump-rtl-combine: Debugging Options. (line 590) 49126 * fdump-rtl-compgotos: Debugging Options. (line 593) 49127 * fdump-rtl-cprop_hardreg: Debugging Options. (line 602) 49128 * fdump-rtl-csa: Debugging Options. (line 605) 49129 * fdump-rtl-cse1: Debugging Options. (line 609) 49130 * fdump-rtl-cse2: Debugging Options. (line 609) 49131 * fdump-rtl-dbr: Debugging Options. (line 616) 49132 * fdump-rtl-dce: Debugging Options. (line 613) 49133 * fdump-rtl-dce1: Debugging Options. (line 620) 49134 * fdump-rtl-dce2: Debugging Options. (line 620) 49135 * fdump-rtl-dfinish: Debugging Options. (line 743) 49136 * fdump-rtl-dfinit: Debugging Options. (line 743) 49137 * fdump-rtl-eh: Debugging Options. (line 624) 49138 * fdump-rtl-eh_ranges: Debugging Options. (line 627) 49139 * fdump-rtl-expand: Debugging Options. (line 630) 49140 * fdump-rtl-fwprop1: Debugging Options. (line 634) 49141 * fdump-rtl-fwprop2: Debugging Options. (line 634) 49142 * fdump-rtl-gcse1: Debugging Options. (line 639) 49143 * fdump-rtl-gcse2: Debugging Options. (line 639) 49144 * fdump-rtl-init-regs: Debugging Options. (line 643) 49145 * fdump-rtl-initvals: Debugging Options. (line 646) 49146 * fdump-rtl-into_cfglayout: Debugging Options. (line 649) 49147 * fdump-rtl-ira: Debugging Options. (line 652) 49148 * fdump-rtl-jump: Debugging Options. (line 655) 49149 * fdump-rtl-loop2: Debugging Options. (line 658) 49150 * fdump-rtl-mach: Debugging Options. (line 662) 49151 * fdump-rtl-mode_sw: Debugging Options. (line 666) 49152 * fdump-rtl-outof_cfglayout: Debugging Options. (line 672) 49153 * fdump-rtl-peephole2: Debugging Options. (line 675) 49154 * fdump-rtl-postreload: Debugging Options. (line 678) 49155 * fdump-rtl-pro_and_epilogue: Debugging Options. (line 681) 49156 * fdump-rtl-regclass: Debugging Options. (line 743) 49157 * fdump-rtl-regmove: Debugging Options. (line 684) 49158 * fdump-rtl-rnreg: Debugging Options. (line 669) 49159 * fdump-rtl-sched1: Debugging Options. (line 688) 49160 * fdump-rtl-sched2: Debugging Options. (line 688) 49161 * fdump-rtl-see: Debugging Options. (line 692) 49162 * fdump-rtl-seqabstr: Debugging Options. (line 695) 49163 * fdump-rtl-shorten: Debugging Options. (line 698) 49164 * fdump-rtl-sibling: Debugging Options. (line 701) 49165 * fdump-rtl-sms: Debugging Options. (line 713) 49166 * fdump-rtl-split1: Debugging Options. (line 708) 49167 * fdump-rtl-split2: Debugging Options. (line 708) 49168 * fdump-rtl-split3: Debugging Options. (line 708) 49169 * fdump-rtl-split4: Debugging Options. (line 708) 49170 * fdump-rtl-split5: Debugging Options. (line 708) 49171 * fdump-rtl-stack: Debugging Options. (line 717) 49172 * fdump-rtl-subreg1: Debugging Options. (line 723) 49173 * fdump-rtl-subreg2: Debugging Options. (line 723) 49174 * fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 743) 49175 * fdump-rtl-subregs_of_mode_init: Debugging Options. (line 743) 49176 * fdump-rtl-unshare: Debugging Options. (line 727) 49177 * fdump-rtl-vartrack: Debugging Options. (line 730) 49178 * fdump-rtl-vregs: Debugging Options. (line 733) 49179 * fdump-rtl-web: Debugging Options. (line 736) 49180 * fdump-statistics: Debugging Options. (line 830) 49181 * fdump-translation-unit: Debugging Options. (line 792) 49182 * fdump-tree: Debugging Options. (line 842) 49183 * fdump-tree-alias: Debugging Options. (line 964) 49184 * fdump-tree-all: Debugging Options. (line 1053) 49185 * fdump-tree-ccp: Debugging Options. (line 968) 49186 * fdump-tree-cfg: Debugging Options. (line 952) 49187 * fdump-tree-ch: Debugging Options. (line 956) 49188 * fdump-tree-copyprop: Debugging Options. (line 984) 49189 * fdump-tree-copyrename: Debugging Options. (line 1029) 49190 * fdump-tree-dce: Debugging Options. (line 992) 49191 * fdump-tree-dom: Debugging Options. (line 1010) 49192 * fdump-tree-dse: Debugging Options. (line 1015) 49193 * fdump-tree-forwprop: Debugging Options. (line 1024) 49194 * fdump-tree-fre: Debugging Options. (line 980) 49195 * fdump-tree-gimple: Debugging Options. (line 947) 49196 * fdump-tree-mudflap: Debugging Options. (line 996) 49197 * fdump-tree-nrv: Debugging Options. (line 1034) 49198 * fdump-tree-optimized: Debugging Options. (line 944) 49199 * fdump-tree-original: Debugging Options. (line 941) 49200 * fdump-tree-phiopt: Debugging Options. (line 1019) 49201 * fdump-tree-pre: Debugging Options. (line 976) 49202 * fdump-tree-sink: Debugging Options. (line 1006) 49203 * fdump-tree-slp: Debugging Options. (line 1044) 49204 * fdump-tree-sra: Debugging Options. (line 1001) 49205 * fdump-tree-ssa: Debugging Options. (line 960) 49206 * fdump-tree-storeccp: Debugging Options. (line 972) 49207 * fdump-tree-store_copyprop: Debugging Options. (line 988) 49208 * fdump-tree-vect: Debugging Options. (line 1039) 49209 * fdump-tree-vrp: Debugging Options. (line 1049) 49210 * fdump-unnumbered: Debugging Options. (line 780) 49211 * fdump-unnumbered-links: Debugging Options. (line 786) 49212 * fdwarf2-cfi-asm: Debugging Options. (line 324) 49213 * fearly-inlining: Optimize Options. (line 275) 49214 * feliminate-dwarf2-dups: Debugging Options. (line 239) 49215 * feliminate-unused-debug-symbols: Debugging Options. (line 62) 49216 * feliminate-unused-debug-types: Debugging Options. (line 1363) 49217 * fenable-: Debugging Options. (line 471) 49218 * fexceptions: Code Gen Options. (line 109) 49219 * fexcess-precision: Optimize Options. (line 1878) 49220 * fexec-charset: Preprocessor Options. 49221 (line 554) 49222 * fexpensive-optimizations: Optimize Options. (line 584) 49223 * fext-numeric-literals: C++ Dialect Options. 49224 (line 541) 49225 * fextended-identifiers: Preprocessor Options. 49226 (line 499) 49227 * fextern-tls-init: C++ Dialect Options. 49228 (line 120) 49229 * ffast-math: Optimize Options. (line 1901) 49230 * ffat-lto-objects: Optimize Options. (line 1768) 49231 * ffinite-math-only: Optimize Options. (line 1978) 49232 * ffix-and-continue: Darwin Options. (line 104) 49233 * ffixed: Code Gen Options. (line 317) 49234 * ffloat-store: Optimize Options. (line 1864) 49235 * ffloat-store <1>: Disappointments. (line 77) 49236 * ffor-scope: C++ Dialect Options. 49237 (line 141) 49238 * fforward-propagate: Optimize Options. (line 185) 49239 * ffp-contract: Optimize Options. (line 194) 49240 * ffreestanding: Standards. (line 93) 49241 * ffreestanding <1>: C Dialect Options. (line 246) 49242 * ffreestanding <2>: Warning Options. (line 253) 49243 * ffreestanding <3>: Function Attributes. 49244 (line 454) 49245 * ffriend-injection: C++ Dialect Options. 49246 (line 91) 49247 * ffunction-sections: Optimize Options. (line 2168) 49248 * fgcse: Optimize Options. (line 465) 49249 * fgcse-after-reload: Optimize Options. (line 501) 49250 * fgcse-las: Optimize Options. (line 494) 49251 * fgcse-lm: Optimize Options. (line 476) 49252 * fgcse-sm: Optimize Options. (line 485) 49253 * fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 49254 (line 39) 49255 * fgnu-tm: C Dialect Options. (line 266) 49256 * fgnu89-inline: C Dialect Options. (line 146) 49257 * fgraphite-identity: Optimize Options. (line 1070) 49258 * fhosted: C Dialect Options. (line 238) 49259 * fif-conversion: Optimize Options. (line 544) 49260 * fif-conversion2: Optimize Options. (line 553) 49261 * filelist: Darwin Options. (line 196) 49262 * findirect-data: Darwin Options. (line 104) 49263 * findirect-inlining: Optimize Options. (line 248) 49264 * finhibit-size-directive: Code Gen Options. (line 238) 49265 * finline-functions: Optimize Options. (line 256) 49266 * finline-functions-called-once: Optimize Options. (line 267) 49267 * finline-limit: Optimize Options. (line 291) 49268 * finline-small-functions: Optimize Options. (line 239) 49269 * finput-charset: Preprocessor Options. 49270 (line 567) 49271 * finstrument-functions: Code Gen Options. (line 373) 49272 * finstrument-functions <1>: Function Attributes. 49273 (line 953) 49274 * finstrument-functions-exclude-file-list: Code Gen Options. (line 408) 49275 * finstrument-functions-exclude-function-list: Code Gen Options. 49276 (line 429) 49277 * fipa-cp: Optimize Options. (line 909) 49278 * fipa-cp-clone: Optimize Options. (line 917) 49279 * fipa-profile: Optimize Options. (line 901) 49280 * fipa-pta: Optimize Options. (line 895) 49281 * fipa-pure-const: Optimize Options. (line 887) 49282 * fipa-reference: Optimize Options. (line 891) 49283 * fipa-sra: Optimize Options. (line 284) 49284 * fira-hoist-pressure: Optimize Options. (line 639) 49285 * fira-loop-pressure: Optimize Options. (line 646) 49286 * fira-verbose: Optimize Options. (line 666) 49287 * fivopts: Optimize Options. (line 1166) 49288 * fkeep-inline-functions: Optimize Options. (line 322) 49289 * fkeep-inline-functions <1>: Inline. (line 51) 49290 * fkeep-static-consts: Optimize Options. (line 329) 49291 * flat_namespace: Darwin Options. (line 196) 49292 * flax-vector-conversions: C Dialect Options. (line 322) 49293 * fleading-underscore: Code Gen Options. (line 511) 49294 * floop-block: Optimize Options. (line 1041) 49295 * floop-interchange: Optimize Options. (line 996) 49296 * floop-nest-optimize: Optimize Options. (line 1078) 49297 * floop-parallelize-all: Optimize Options. (line 1084) 49298 * floop-strip-mine: Optimize Options. (line 1020) 49299 * flto: Optimize Options. (line 1561) 49300 * flto-partition: Optimize Options. (line 1723) 49301 * fmax-errors: Warning Options. (line 18) 49302 * fmem-report: Debugging Options. (line 348) 49303 * fmem-report-wpa: Debugging Options. (line 352) 49304 * fmerge-all-constants: Optimize Options. (line 348) 49305 * fmerge-constants: Optimize Options. (line 338) 49306 * fmerge-debug-strings: Debugging Options. (line 313) 49307 * fmessage-length: Language Independent Options. 49308 (line 14) 49309 * fmodulo-sched: Optimize Options. (line 359) 49310 * fmodulo-sched-allow-regmoves: Optimize Options. (line 364) 49311 * fmove-loop-invariants: Optimize Options. (line 2158) 49312 * fms-extensions: C Dialect Options. (line 281) 49313 * fms-extensions <1>: C++ Dialect Options. 49314 (line 175) 49315 * fms-extensions <2>: Unnamed Fields. (line 36) 49316 * fmudflap: Optimize Options. (line 404) 49317 * fmudflapir: Optimize Options. (line 404) 49318 * fmudflapth: Optimize Options. (line 404) 49319 * fnext-runtime: Objective-C and Objective-C++ Dialect Options. 49320 (line 43) 49321 * fno-access-control: C++ Dialect Options. 49322 (line 50) 49323 * fno-asm: C Dialect Options. (line 190) 49324 * fno-branch-count-reg: Optimize Options. (line 371) 49325 * fno-builtin: C Dialect Options. (line 204) 49326 * fno-builtin <1>: Warning Options. (line 253) 49327 * fno-builtin <2>: Function Attributes. 49328 (line 454) 49329 * fno-builtin <3>: Other Builtins. (line 14) 49330 * fno-canonical-system-headers: Preprocessor Options. 49331 (line 504) 49332 * fno-common: Code Gen Options. (line 216) 49333 * fno-common <1>: Variable Attributes. 49334 (line 104) 49335 * fno-compare-debug: Debugging Options. (line 200) 49336 * fno-debug-types-section: Debugging Options. (line 74) 49337 * fno-default-inline: C++ Dialect Options. 49338 (line 354) 49339 * fno-default-inline <1>: Optimize Options. (line 169) 49340 * fno-default-inline <2>: Inline. (line 71) 49341 * fno-defer-pop: Optimize Options. (line 177) 49342 * fno-diagnostics-show-caret: Language Independent Options. 49343 (line 40) 49344 * fno-diagnostics-show-option: Language Independent Options. 49345 (line 34) 49346 * fno-dwarf2-cfi-asm: Debugging Options. (line 324) 49347 * fno-elide-constructors: C++ Dialect Options. 49348 (line 104) 49349 * fno-eliminate-unused-debug-types: Debugging Options. (line 1363) 49350 * fno-enforce-eh-specs: C++ Dialect Options. 49351 (line 110) 49352 * fno-ext-numeric-literals: C++ Dialect Options. 49353 (line 541) 49354 * fno-extern-tls-init: C++ Dialect Options. 49355 (line 120) 49356 * fno-for-scope: C++ Dialect Options. 49357 (line 141) 49358 * fno-function-cse: Optimize Options. (line 381) 49359 * fno-gnu-keywords: C++ Dialect Options. 49360 (line 153) 49361 * fno-guess-branch-probability: Optimize Options. (line 1330) 49362 * fno-ident: Code Gen Options. (line 235) 49363 * fno-implement-inlines: C++ Dialect Options. 49364 (line 170) 49365 * fno-implement-inlines <1>: C++ Interface. (line 75) 49366 * fno-implicit-inline-templates: C++ Dialect Options. 49367 (line 164) 49368 * fno-implicit-templates: C++ Dialect Options. 49369 (line 158) 49370 * fno-implicit-templates <1>: Template Instantiation. 49371 (line 78) 49372 * fno-inline: Optimize Options. (line 231) 49373 * fno-ira-share-save-slots: Optimize Options. (line 654) 49374 * fno-ira-share-spill-slots: Optimize Options. (line 660) 49375 * fno-jump-tables: Code Gen Options. (line 309) 49376 * fno-math-errno: Optimize Options. (line 1915) 49377 * fno-merge-debug-strings: Debugging Options. (line 313) 49378 * fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 49379 (line 49) 49380 * fno-nonansi-builtins: C++ Dialect Options. 49381 (line 180) 49382 * fno-operator-names: C++ Dialect Options. 49383 (line 196) 49384 * fno-optional-diags: C++ Dialect Options. 49385 (line 200) 49386 * fno-peephole: Optimize Options. (line 1321) 49387 * fno-peephole2: Optimize Options. (line 1321) 49388 * fno-pretty-templates: C++ Dialect Options. 49389 (line 210) 49390 * fno-rtti: C++ Dialect Options. 49391 (line 227) 49392 * fno-sched-interblock: Optimize Options. (line 698) 49393 * fno-sched-spec: Optimize Options. (line 703) 49394 * fno-set-stack-executable: i386 and x86-64 Windows Options. 49395 (line 46) 49396 * fno-show-column: Preprocessor Options. 49397 (line 591) 49398 * fno-signed-bitfields: C Dialect Options. (line 355) 49399 * fno-signed-zeros: Optimize Options. (line 1990) 49400 * fno-stack-limit: Code Gen Options. (line 479) 49401 * fno-threadsafe-statics: C++ Dialect Options. 49402 (line 264) 49403 * fno-toplevel-reorder: Optimize Options. (line 1527) 49404 * fno-trapping-math: Optimize Options. (line 2000) 49405 * fno-unsigned-bitfields: C Dialect Options. (line 355) 49406 * fno-use-cxa-get-exception-ptr: C++ Dialect Options. 49407 (line 277) 49408 * fno-var-tracking-assignments: Debugging Options. (line 1271) 49409 * fno-var-tracking-assignments-toggle: Debugging Options. (line 1280) 49410 * fno-weak: C++ Dialect Options. 49411 (line 339) 49412 * fno-working-directory: Preprocessor Options. 49413 (line 577) 49414 * fno-writable-relocated-rdata: i386 and x86-64 Windows Options. 49415 (line 53) 49416 * fno-zero-initialized-in-bss: Optimize Options. (line 392) 49417 * fnon-call-exceptions: Code Gen Options. (line 123) 49418 * fnothrow-opt: C++ Dialect Options. 49419 (line 185) 49420 * fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. 49421 (line 56) 49422 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 49423 (line 67) 49424 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 49425 (line 92) 49426 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 49427 (line 96) 49428 * fobjc-gc: Objective-C and Objective-C++ Dialect Options. 49429 (line 105) 49430 * fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. 49431 (line 111) 49432 * fobjc-std: Objective-C and Objective-C++ Dialect Options. 49433 (line 120) 49434 * fomit-frame-pointer: Optimize Options. (line 205) 49435 * fopenmp: C Dialect Options. (line 257) 49436 * fopt-info: Debugging Options. (line 1059) 49437 * foptimize-register-move: Optimize Options. (line 599) 49438 * foptimize-sibling-calls: Optimize Options. (line 226) 49439 * force_cpusubtype_ALL: Darwin Options. (line 135) 49440 * force_flat_namespace: Darwin Options. (line 196) 49441 * fpack-struct: Code Gen Options. (line 360) 49442 * fpartial-inlining: Optimize Options. (line 1296) 49443 * fpcc-struct-return: Code Gen Options. (line 152) 49444 * fpcc-struct-return <1>: Incompatibilities. (line 170) 49445 * fpch-deps: Preprocessor Options. 49446 (line 296) 49447 * fpch-preprocess: Preprocessor Options. 49448 (line 304) 49449 * fpeel-loops: Optimize Options. (line 2150) 49450 * fpermissive: C++ Dialect Options. 49451 (line 205) 49452 * fpic: Code Gen Options. (line 266) 49453 * fPIC: Code Gen Options. (line 287) 49454 * fpie: Code Gen Options. (line 300) 49455 * fPIE: Code Gen Options. (line 300) 49456 * fplan9-extensions: Unnamed Fields. (line 43) 49457 * fpost-ipa-mem-report: Debugging Options. (line 357) 49458 * fpre-ipa-mem-report: Debugging Options. (line 356) 49459 * fpredictive-commoning: Optimize Options. (line 1303) 49460 * fprefetch-loop-arrays: Optimize Options. (line 1310) 49461 * fpreprocessed: Preprocessor Options. 49462 (line 508) 49463 * fprofile-arcs: Debugging Options. (line 394) 49464 * fprofile-arcs <1>: Other Builtins. (line 253) 49465 * fprofile-correction: Optimize Options. (line 1812) 49466 * fprofile-dir: Optimize Options. (line 1819) 49467 * fprofile-generate: Optimize Options. (line 1830) 49468 * fprofile-report: Debugging Options. (line 361) 49469 * fprofile-use: Optimize Options. (line 1844) 49470 * fprofile-values: Optimize Options. (line 2098) 49471 * fpu: RX Options. (line 17) 49472 * frandom-seed: Debugging Options. (line 1165) 49473 * freciprocal-math: Optimize Options. (line 1968) 49474 * frecord-gcc-switches: Code Gen Options. (line 254) 49475 * free: Optimize Options. (line 590) 49476 * freg-struct-return: Code Gen Options. (line 170) 49477 * fregmove: Optimize Options. (line 599) 49478 * frename-registers: Optimize Options. (line 2117) 49479 * freorder-blocks: Optimize Options. (line 1347) 49480 * freorder-blocks-and-partition: Optimize Options. (line 1353) 49481 * freorder-functions: Optimize Options. (line 1364) 49482 * freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 49483 (line 131) 49484 * frepo: C++ Dialect Options. 49485 (line 222) 49486 * frepo <1>: Template Instantiation. 49487 (line 54) 49488 * frerun-cse-after-loop: Optimize Options. (line 459) 49489 * freschedule-modulo-scheduled-loops: Optimize Options. (line 797) 49490 * frounding-math: Optimize Options. (line 2015) 49491 * fsched-critical-path-heuristic: Optimize Options. (line 763) 49492 * fsched-dep-count-heuristic: Optimize Options. (line 790) 49493 * fsched-group-heuristic: Optimize Options. (line 757) 49494 * fsched-last-insn-heuristic: Optimize Options. (line 783) 49495 * fsched-pressure: Optimize Options. (line 708) 49496 * fsched-rank-heuristic: Optimize Options. (line 776) 49497 * fsched-spec-insn-heuristic: Optimize Options. (line 769) 49498 * fsched-spec-load: Optimize Options. (line 717) 49499 * fsched-spec-load-dangerous: Optimize Options. (line 722) 49500 * fsched-stalled-insns: Optimize Options. (line 728) 49501 * fsched-stalled-insns-dep: Optimize Options. (line 738) 49502 * fsched-verbose: Debugging Options. (line 1175) 49503 * fsched2-use-superblocks: Optimize Options. (line 747) 49504 * fschedule-insns: Optimize Options. (line 679) 49505 * fschedule-insns2: Optimize Options. (line 689) 49506 * fsection-anchors: Optimize Options. (line 2213) 49507 * fsel-sched-pipelining: Optimize Options. (line 810) 49508 * fsel-sched-pipelining-outer-loops: Optimize Options. (line 815) 49509 * fselective-scheduling: Optimize Options. (line 802) 49510 * fselective-scheduling2: Optimize Options. (line 806) 49511 * fshort-double: Code Gen Options. (line 198) 49512 * fshort-enums: Code Gen Options. (line 188) 49513 * fshort-enums <1>: Structures unions enumerations and bit-fields implementation. 49514 (line 43) 49515 * fshort-enums <2>: Type Attributes. (line 113) 49516 * fshort-enums <3>: Non-bugs. (line 42) 49517 * fshort-wchar: Code Gen Options. (line 206) 49518 * fshrink-wrap: Optimize Options. (line 820) 49519 * fsignaling-nans: Optimize Options. (line 2035) 49520 * fsigned-bitfields: C Dialect Options. (line 355) 49521 * fsigned-bitfields <1>: Non-bugs. (line 57) 49522 * fsigned-char: C Dialect Options. (line 345) 49523 * fsigned-char <1>: Characters implementation. 49524 (line 31) 49525 * fsingle-precision-constant: Optimize Options. (line 2050) 49526 * fsplit-ivs-in-unroller: Optimize Options. (line 1277) 49527 * fsplit-stack: Code Gen Options. (line 493) 49528 * fsplit-stack <1>: Function Attributes. 49529 (line 958) 49530 * fsplit-wide-types: Optimize Options. (line 434) 49531 * fstack-check: Code Gen Options. (line 441) 49532 * fstack-limit-register: Code Gen Options. (line 479) 49533 * fstack-limit-symbol: Code Gen Options. (line 479) 49534 * fstack-protector: Optimize Options. (line 2201) 49535 * fstack-protector-all: Optimize Options. (line 2210) 49536 * fstack-usage: Debugging Options. (line 365) 49537 * fstack_reuse: Code Gen Options. (line 21) 49538 * fstats: C++ Dialect Options. 49539 (line 237) 49540 * fstrict-aliasing: Optimize Options. (line 1377) 49541 * fstrict-enums: C++ Dialect Options. 49542 (line 242) 49543 * fstrict-overflow: Optimize Options. (line 1423) 49544 * fstrict-volatile-bitfields: Code Gen Options. (line 596) 49545 * fsync-libcalls: Code Gen Options. (line 624) 49546 * fsyntax-only: Warning Options. (line 14) 49547 * ftabstop: Preprocessor Options. 49548 (line 521) 49549 * ftemplate-backtrace-limit: C++ Dialect Options. 49550 (line 251) 49551 * ftemplate-depth: C++ Dialect Options. 49552 (line 255) 49553 * ftest-coverage: Debugging Options. (line 449) 49554 * fthread-jumps: Optimize Options. (line 425) 49555 * ftime-report: Debugging Options. (line 344) 49556 * ftls-model: Code Gen Options. (line 522) 49557 * ftracer: Optimize Options. (line 1260) 49558 * ftracer <1>: Optimize Options. (line 2127) 49559 * ftrack-macro-expansion: Preprocessor Options. 49560 (line 536) 49561 * ftrapv: Code Gen Options. (line 97) 49562 * ftree-bit-ccp: Optimize Options. (line 931) 49563 * ftree-builtin-call-dce: Optimize Options. (line 959) 49564 * ftree-ccp: Optimize Options. (line 937) 49565 * ftree-ch: Optimize Options. (line 979) 49566 * ftree-copy-prop: Optimize Options. (line 882) 49567 * ftree-copyrename: Optimize Options. (line 1190) 49568 * ftree-dce: Optimize Options. (line 955) 49569 * ftree-dominator-opts: Optimize Options. (line 965) 49570 * ftree-dse: Optimize Options. (line 972) 49571 * ftree-forwprop: Optimize Options. (line 861) 49572 * ftree-fre: Optimize Options. (line 865) 49573 * ftree-loop-im: Optimize Options. (line 1151) 49574 * ftree-loop-ivcanon: Optimize Options. (line 1160) 49575 * ftree-loop-linear: Optimize Options. (line 990) 49576 * ftree-loop-optimize: Optimize Options. (line 986) 49577 * ftree-parallelize-loops: Optimize Options. (line 1171) 49578 * ftree-partial-pre: Optimize Options. (line 857) 49579 * ftree-phiprop: Optimize Options. (line 872) 49580 * ftree-pre: Optimize Options. (line 853) 49581 * ftree-pta: Optimize Options. (line 1180) 49582 * ftree-reassoc: Optimize Options. (line 849) 49583 * ftree-sink: Optimize Options. (line 927) 49584 * ftree-slp-vectorize: Optimize Options. (line 1234) 49585 * ftree-slsr: Optimize Options. (line 1224) 49586 * ftree-sra: Optimize Options. (line 1184) 49587 * ftree-ter: Optimize Options. (line 1216) 49588 * ftree-vect-loop-version: Optimize Options. (line 1238) 49589 * ftree-vectorize: Optimize Options. (line 1230) 49590 * ftree-vectorizer-verbose: Debugging Options. (line 1148) 49591 * ftree-vrp: Optimize Options. (line 1251) 49592 * funit-at-a-time: Optimize Options. (line 1520) 49593 * funroll-all-loops: Optimize Options. (line 1271) 49594 * funroll-all-loops <1>: Optimize Options. (line 2144) 49595 * funroll-loops: Optimize Options. (line 1265) 49596 * funroll-loops <1>: Optimize Options. (line 2134) 49597 * funsafe-loop-optimizations: Optimize Options. (line 515) 49598 * funsafe-math-optimizations: Optimize Options. (line 1933) 49599 * funsigned-bitfields: C Dialect Options. (line 355) 49600 * funsigned-bitfields <1>: Structures unions enumerations and bit-fields implementation. 49601 (line 17) 49602 * funsigned-bitfields <2>: Non-bugs. (line 57) 49603 * funsigned-char: C Dialect Options. (line 327) 49604 * funsigned-char <1>: Characters implementation. 49605 (line 31) 49606 * funswitch-loops: Optimize Options. (line 2162) 49607 * funwind-tables: Code Gen Options. (line 139) 49608 * fuse-cxa-atexit: C++ Dialect Options. 49609 (line 270) 49610 * fvar-tracking: Debugging Options. (line 1261) 49611 * fvar-tracking-assignments: Debugging Options. (line 1271) 49612 * fvar-tracking-assignments-toggle: Debugging Options. (line 1280) 49613 * fvariable-expansion-in-unroller: Optimize Options. (line 1291) 49614 * fvect-cost-model: Optimize Options. (line 1247) 49615 * fverbose-asm: Code Gen Options. (line 245) 49616 * fvisibility: Code Gen Options. (line 530) 49617 * fvisibility-inlines-hidden: C++ Dialect Options. 49618 (line 282) 49619 * fvisibility-ms-compat: C++ Dialect Options. 49620 (line 310) 49621 * fvpt: Optimize Options. (line 2107) 49622 * fweb: Optimize Options. (line 1539) 49623 * fwhole-program: Optimize Options. (line 1550) 49624 * fwide-exec-charset: Preprocessor Options. 49625 (line 559) 49626 * fworking-directory: Preprocessor Options. 49627 (line 577) 49628 * fwrapv: Code Gen Options. (line 101) 49629 * fzero-link: Objective-C and Objective-C++ Dialect Options. 49630 (line 141) 49631 * g: Debugging Options. (line 10) 49632 * G: M32R/D Options. (line 57) 49633 * G <1>: MIPS Options. (line 329) 49634 * G <2>: RS/6000 and PowerPC Options. 49635 (line 739) 49636 * G <3>: System V Options. (line 10) 49637 * gcoff: Debugging Options. (line 89) 49638 * gdwarf-VERSION: Debugging Options. (line 107) 49639 * gen-decls: Objective-C and Objective-C++ Dialect Options. 49640 (line 153) 49641 * gfull: Darwin Options. (line 69) 49642 * ggdb: Debugging Options. (line 45) 49643 * gno-record-gcc-switches: Debugging Options. (line 127) 49644 * gno-strict-dwarf: Debugging Options. (line 137) 49645 * gpubnames: Debugging Options. (line 51) 49646 * grecord-gcc-switches: Debugging Options. (line 118) 49647 * gsplit-dwarf: Debugging Options. (line 38) 49648 * gstabs: Debugging Options. (line 54) 49649 * gstabs+: Debugging Options. (line 83) 49650 * gstrict-dwarf: Debugging Options. (line 131) 49651 * gtoggle: Debugging Options. (line 174) 49652 * gused: Darwin Options. (line 64) 49653 * gvms: Debugging Options. (line 141) 49654 * gxcoff: Debugging Options. (line 94) 49655 * gxcoff+: Debugging Options. (line 99) 49656 * H: Preprocessor Options. 49657 (line 707) 49658 * headerpad_max_install_names: Darwin Options. (line 196) 49659 * help: Overall Options. (line 221) 49660 * help <1>: Preprocessor Options. 49661 (line 699) 49662 * hoist-adjacent-loads: Optimize Options. (line 876) 49663 * I: Preprocessor Options. 49664 (line 77) 49665 * I <1>: Directory Options. (line 10) 49666 * I-: Preprocessor Options. 49667 (line 389) 49668 * I- <1>: Directory Options. (line 116) 49669 * idirafter: Preprocessor Options. 49670 (line 431) 49671 * iframework: Darwin Options. (line 57) 49672 * imacros: Preprocessor Options. 49673 (line 422) 49674 * image_base: Darwin Options. (line 196) 49675 * imultilib: Preprocessor Options. 49676 (line 456) 49677 * include: Preprocessor Options. 49678 (line 411) 49679 * init: Darwin Options. (line 196) 49680 * install_name: Darwin Options. (line 196) 49681 * iprefix: Preprocessor Options. 49682 (line 438) 49683 * iquote: Preprocessor Options. 49684 (line 468) 49685 * iquote <1>: Directory Options. (line 34) 49686 * isysroot: Preprocessor Options. 49687 (line 450) 49688 * isystem: Preprocessor Options. 49689 (line 460) 49690 * iwithprefix: Preprocessor Options. 49691 (line 444) 49692 * iwithprefixbefore: Preprocessor Options. 49693 (line 444) 49694 * keep_private_externs: Darwin Options. (line 196) 49695 * l: Link Options. (line 26) 49696 * L: Directory Options. (line 40) 49697 * lobjc: Link Options. (line 53) 49698 * M: Preprocessor Options. 49699 (line 185) 49700 * m: RS/6000 and PowerPC Options. 49701 (line 581) 49702 * m1: SH Options. (line 9) 49703 * m10: PDP-11 Options. (line 29) 49704 * m128bit-long-double: i386 and x86-64 Options. 49705 (line 335) 49706 * m16-bit: CRIS Options. (line 64) 49707 * m1reg-: Adapteva Epiphany Options. 49708 (line 131) 49709 * m2: SH Options. (line 12) 49710 * m210: MCore Options. (line 43) 49711 * m2a: SH Options. (line 30) 49712 * m2a-nofpu: SH Options. (line 18) 49713 * m2a-single: SH Options. (line 26) 49714 * m2a-single-only: SH Options. (line 22) 49715 * m3: SH Options. (line 34) 49716 * m31: S/390 and zSeries Options. 49717 (line 86) 49718 * m32: i386 and x86-64 Options. 49719 (line 832) 49720 * m32 <1>: RS/6000 and PowerPC Options. 49721 (line 274) 49722 * m32 <2>: SPARC Options. (line 256) 49723 * m32 <3>: TILE-Gx Options. (line 23) 49724 * m32 <4>: TILEPro Options. (line 13) 49725 * m32-bit: CRIS Options. (line 64) 49726 * m32bit-doubles: RX Options. (line 10) 49727 * m32r: M32R/D Options. (line 15) 49728 * m32r2: M32R/D Options. (line 9) 49729 * m32rx: M32R/D Options. (line 12) 49730 * m340: MCore Options. (line 43) 49731 * m3dnow: i386 and x86-64 Options. 49732 (line 564) 49733 * m3e: SH Options. (line 37) 49734 * m4: SH Options. (line 51) 49735 * m4-nofpu: SH Options. (line 40) 49736 * m4-single: SH Options. (line 47) 49737 * m4-single-only: SH Options. (line 43) 49738 * m40: PDP-11 Options. (line 23) 49739 * m45: PDP-11 Options. (line 26) 49740 * m4a: SH Options. (line 66) 49741 * m4a-nofpu: SH Options. (line 54) 49742 * m4a-single: SH Options. (line 62) 49743 * m4a-single-only: SH Options. (line 58) 49744 * m4al: SH Options. (line 69) 49745 * m4byte-functions: MCore Options. (line 27) 49746 * m5200: M680x0 Options. (line 144) 49747 * m5206e: M680x0 Options. (line 153) 49748 * m528x: M680x0 Options. (line 157) 49749 * m5307: M680x0 Options. (line 161) 49750 * m5407: M680x0 Options. (line 165) 49751 * m64: i386 and x86-64 Options. 49752 (line 832) 49753 * m64 <1>: RS/6000 and PowerPC Options. 49754 (line 274) 49755 * m64 <2>: S/390 and zSeries Options. 49756 (line 86) 49757 * m64 <3>: SPARC Options. (line 256) 49758 * m64 <4>: TILE-Gx Options. (line 23) 49759 * m64bit-doubles: RX Options. (line 10) 49760 * m68000: M680x0 Options. (line 93) 49761 * m68010: M680x0 Options. (line 101) 49762 * m68020: M680x0 Options. (line 107) 49763 * m68020-40: M680x0 Options. (line 175) 49764 * m68020-60: M680x0 Options. (line 184) 49765 * m68030: M680x0 Options. (line 112) 49766 * m68040: M680x0 Options. (line 117) 49767 * m68060: M680x0 Options. (line 126) 49768 * m68881: M680x0 Options. (line 194) 49769 * m8-bit: CRIS Options. (line 64) 49770 * m8byte-align: V850 Options. (line 170) 49771 * m96bit-long-double: i386 and x86-64 Options. 49772 (line 335) 49773 * mabi: ARM Options. (line 10) 49774 * mabi <1>: i386 and x86-64 Options. 49775 (line 714) 49776 * mabi <2>: RS/6000 and PowerPC Options. 49777 (line 608) 49778 * mabi=32: MIPS Options. (line 130) 49779 * mabi=64: MIPS Options. (line 130) 49780 * mabi=eabi: MIPS Options. (line 130) 49781 * mabi=elfv1: RS/6000 and PowerPC Options. 49782 (line 629) 49783 * mabi=elfv2: RS/6000 and PowerPC Options. 49784 (line 635) 49785 * mabi=gnu: MMIX Options. (line 20) 49786 * mabi=ibmlongdouble: RS/6000 and PowerPC Options. 49787 (line 621) 49788 * mabi=ieeelongdouble: RS/6000 and PowerPC Options. 49789 (line 625) 49790 * mabi=mmixware: MMIX Options. (line 20) 49791 * mabi=n32: MIPS Options. (line 130) 49792 * mabi=no-spe: RS/6000 and PowerPC Options. 49793 (line 618) 49794 * mabi=o64: MIPS Options. (line 130) 49795 * mabi=spe: RS/6000 and PowerPC Options. 49796 (line 613) 49797 * mabicalls: MIPS Options. (line 154) 49798 * mabort-on-noreturn: ARM Options. (line 184) 49799 * mabsdiff: MeP Options. (line 7) 49800 * mabshi: PDP-11 Options. (line 55) 49801 * mac0: PDP-11 Options. (line 16) 49802 * macc-4: FRV Options. (line 139) 49803 * macc-8: FRV Options. (line 143) 49804 * maccumulate-args: AVR Options. (line 137) 49805 * maccumulate-outgoing-args: i386 and x86-64 Options. 49806 (line 737) 49807 * maccumulate-outgoing-args <1>: SH Options. (line 325) 49808 * maddress-mode=long: i386 and x86-64 Options. 49809 (line 875) 49810 * maddress-mode=short: i386 and x86-64 Options. 49811 (line 880) 49812 * maddress-space-conversion: SPU Options. (line 68) 49813 * mads: RS/6000 and PowerPC Options. 49814 (line 663) 49815 * maix-struct-return: RS/6000 and PowerPC Options. 49816 (line 601) 49817 * maix32: RS/6000 and PowerPC Options. 49818 (line 312) 49819 * maix64: RS/6000 and PowerPC Options. 49820 (line 312) 49821 * malign-300: H8/300 Options. (line 41) 49822 * malign-double: i386 and x86-64 Options. 49823 (line 320) 49824 * malign-int: M680x0 Options. (line 263) 49825 * malign-labels: FRV Options. (line 128) 49826 * malign-loops: M32R/D Options. (line 73) 49827 * malign-natural: RS/6000 and PowerPC Options. 49828 (line 350) 49829 * malign-power: RS/6000 and PowerPC Options. 49830 (line 350) 49831 * mall-opts: MeP Options. (line 11) 49832 * malloc-cc: FRV Options. (line 31) 49833 * maltivec: RS/6000 and PowerPC Options. 49834 (line 132) 49835 * maltivec=be: RS/6000 and PowerPC Options. 49836 (line 148) 49837 * maltivec=le: RS/6000 and PowerPC Options. 49838 (line 158) 49839 * mam33: MN10300 Options. (line 17) 49840 * mam33-2: MN10300 Options. (line 24) 49841 * mam34: MN10300 Options. (line 27) 49842 * mandroid: GNU/Linux Options. (line 21) 49843 * mapcs: ARM Options. (line 22) 49844 * mapcs-frame: ARM Options. (line 14) 49845 * mapp-regs: SPARC Options. (line 10) 49846 * mapp-regs <1>: V850 Options. (line 181) 49847 * march: AArch64 Options. (line 55) 49848 * march <1>: ARM Options. (line 75) 49849 * march <2>: C6X Options. (line 7) 49850 * march <3>: CRIS Options. (line 10) 49851 * march <4>: HPPA Options. (line 9) 49852 * march <5>: HPPA Options. (line 161) 49853 * march <6>: i386 and x86-64 Options. 49854 (line 10) 49855 * march <7>: M680x0 Options. (line 12) 49856 * march <8>: MIPS Options. (line 14) 49857 * march <9>: S/390 and zSeries Options. 49858 (line 114) 49859 * marm: ARM Options. (line 248) 49860 * mas100-syntax: RX Options. (line 76) 49861 * masm=DIALECT: i386 and x86-64 Options. 49862 (line 276) 49863 * matomic-model=MODEL: SH Options. (line 144) 49864 * matomic-updates: SPU Options. (line 83) 49865 * mauto-pic: IA-64 Options. (line 50) 49866 * maverage: MeP Options. (line 16) 49867 * mavoid-indexed-addresses: RS/6000 and PowerPC Options. 49868 (line 420) 49869 * max-vect-align: Adapteva Epiphany Options. 49870 (line 119) 49871 * mb: SH Options. (line 74) 49872 * mbackchain: S/390 and zSeries Options. 49873 (line 35) 49874 * mbarrel-shift-enabled: LM32 Options. (line 9) 49875 * mbase-addresses: MMIX Options. (line 53) 49876 * mbased=: MeP Options. (line 20) 49877 * mbcopy: PDP-11 Options. (line 36) 49878 * mbcopy-builtin: PDP-11 Options. (line 32) 49879 * mbig: RS/6000 and PowerPC Options. 49880 (line 500) 49881 * mbig-endian: AArch64 Options. (line 9) 49882 * mbig-endian <1>: ARM Options. (line 62) 49883 * mbig-endian <2>: C6X Options. (line 13) 49884 * mbig-endian <3>: IA-64 Options. (line 9) 49885 * mbig-endian <4>: MCore Options. (line 39) 49886 * mbig-endian <5>: MicroBlaze Options. (line 57) 49887 * mbig-endian <6>: RS/6000 and PowerPC Options. 49888 (line 500) 49889 * mbig-endian-data: RX Options. (line 42) 49890 * mbig-switch: HPPA Options. (line 23) 49891 * mbig-switch <1>: V850 Options. (line 176) 49892 * mbigtable: SH Options. (line 89) 49893 * mbionic: GNU/Linux Options. (line 17) 49894 * mbit-align: RS/6000 and PowerPC Options. 49895 (line 452) 49896 * mbit-ops: CR16 Options. (line 25) 49897 * mbitfield: M680x0 Options. (line 231) 49898 * mbitops: MeP Options. (line 26) 49899 * mbitops <1>: SH Options. (line 93) 49900 * mblock-move-inline-limit: RS/6000 and PowerPC Options. 49901 (line 733) 49902 * mbranch-cheap: PDP-11 Options. (line 65) 49903 * mbranch-cost: Adapteva Epiphany Options. 49904 (line 18) 49905 * mbranch-cost <1>: AVR Options. (line 152) 49906 * mbranch-cost <2>: MIPS Options. (line 625) 49907 * mbranch-cost=NUM: SH Options. (line 389) 49908 * mbranch-cost=NUMBER: M32R/D Options. (line 82) 49909 * mbranch-expensive: PDP-11 Options. (line 61) 49910 * mbranch-hints: SPU Options. (line 29) 49911 * mbranch-likely: MIPS Options. (line 632) 49912 * mbranch-predict: MMIX Options. (line 48) 49913 * mbss-plt: RS/6000 and PowerPC Options. 49914 (line 185) 49915 * mbuild-constants: DEC Alpha Options. (line 141) 49916 * mbwx: DEC Alpha Options. (line 163) 49917 * mc68000: M680x0 Options. (line 93) 49918 * mc68020: M680x0 Options. (line 107) 49919 * mc=: MeP Options. (line 31) 49920 * mcache-size: SPU Options. (line 75) 49921 * mcall-eabi: RS/6000 and PowerPC Options. 49922 (line 575) 49923 * mcall-freebsd: RS/6000 and PowerPC Options. 49924 (line 589) 49925 * mcall-linux: RS/6000 and PowerPC Options. 49926 (line 585) 49927 * mcall-netbsd: RS/6000 and PowerPC Options. 49928 (line 593) 49929 * mcall-netbsd <1>: RS/6000 and PowerPC Options. 49930 (line 597) 49931 * mcall-prologues: AVR Options. (line 157) 49932 * mcall-sysv: RS/6000 and PowerPC Options. 49933 (line 567) 49934 * mcall-sysv-eabi: RS/6000 and PowerPC Options. 49935 (line 575) 49936 * mcall-sysv-noeabi: RS/6000 and PowerPC Options. 49937 (line 578) 49938 * mcallee-super-interworking: ARM Options. (line 267) 49939 * mcaller-super-interworking: ARM Options. (line 274) 49940 * mcallgraph-data: MCore Options. (line 31) 49941 * mcbcond: SPARC Options. (line 223) 49942 * mcbranchdi: SH Options. (line 404) 49943 * mcc-init: CRIS Options. (line 42) 49944 * mcfv4e: M680x0 Options. (line 169) 49945 * mcheck-zero-division: MIPS Options. (line 439) 49946 * mcix: DEC Alpha Options. (line 163) 49947 * mcld: i386 and x86-64 Options. 49948 (line 587) 49949 * mclip: MeP Options. (line 35) 49950 * mcmodel: SPARC Options. (line 261) 49951 * mcmodel=kernel: i386 and x86-64 Options. 49952 (line 859) 49953 * mcmodel=large: AArch64 Options. (line 33) 49954 * mcmodel=large <1>: i386 and x86-64 Options. 49955 (line 871) 49956 * mcmodel=large <2>: RS/6000 and PowerPC Options. 49957 (line 126) 49958 * mcmodel=large <3>: TILE-Gx Options. (line 14) 49959 * mcmodel=medium: i386 and x86-64 Options. 49960 (line 864) 49961 * mcmodel=medium <1>: RS/6000 and PowerPC Options. 49962 (line 122) 49963 * mcmodel=small: AArch64 Options. (line 27) 49964 * mcmodel=small <1>: i386 and x86-64 Options. 49965 (line 853) 49966 * mcmodel=small <2>: RS/6000 and PowerPC Options. 49967 (line 118) 49968 * mcmodel=small <3>: TILE-Gx Options. (line 9) 49969 * mcmodel=tiny: AArch64 Options. (line 20) 49970 * mcmove: Adapteva Epiphany Options. 49971 (line 23) 49972 * mcmpb: RS/6000 and PowerPC Options. 49973 (line 27) 49974 * mcmpeqdi: SH Options. (line 407) 49975 * mcode-readable: MIPS Options. (line 399) 49976 * mcompat-align-parm: RS/6000 and PowerPC Options. 49977 (line 889) 49978 * mcond-exec: FRV Options. (line 187) 49979 * mcond-move: FRV Options. (line 159) 49980 * mconfig=: MeP Options. (line 39) 49981 * mconsole: i386 and x86-64 Windows Options. 49982 (line 9) 49983 * mconst-align: CRIS Options. (line 55) 49984 * mconst16: Xtensa Options. (line 10) 49985 * mconstant-gp: IA-64 Options. (line 46) 49986 * mcop: MeP Options. (line 48) 49987 * mcop32: MeP Options. (line 53) 49988 * mcop64: MeP Options. (line 56) 49989 * mcorea: Blackfin Options. (line 156) 49990 * mcoreb: Blackfin Options. (line 163) 49991 * mcpu: AArch64 Options. (line 69) 49992 * mcpu <1>: ARM Options. (line 124) 49993 * mcpu <2>: CRIS Options. (line 10) 49994 * mcpu <3>: DEC Alpha Options. (line 215) 49995 * mcpu <4>: FRV Options. (line 258) 49996 * mcpu <5>: i386 and x86-64 Options. 49997 (line 224) 49998 * mcpu <6>: M680x0 Options. (line 28) 49999 * mcpu <7>: picoChip Options. (line 9) 50000 * mcpu <8>: RS/6000 and PowerPC Options. 50001 (line 68) 50002 * mcpu <9>: SPARC Options. (line 101) 50003 * mcpu <10>: TILE-Gx Options. (line 18) 50004 * mcpu <11>: TILEPro Options. (line 9) 50005 * mcpu32: M680x0 Options. (line 135) 50006 * mcpu=: Blackfin Options. (line 7) 50007 * mcpu= <1>: M32C Options. (line 7) 50008 * mcpu= <2>: MicroBlaze Options. (line 20) 50009 * mcr16c: CR16 Options. (line 14) 50010 * mcr16cplus: CR16 Options. (line 14) 50011 * mcrc32: i386 and x86-64 Options. 50012 (line 634) 50013 * mcrypto: RS/6000 and PowerPC Options. 50014 (line 220) 50015 * mcsync-anomaly: Blackfin Options. (line 59) 50016 * mcx16: i386 and x86-64 Options. 50017 (line 611) 50018 * MD: Preprocessor Options. 50019 (line 276) 50020 * mdalign: SH Options. (line 80) 50021 * mdata-align: CRIS Options. (line 55) 50022 * mdata-model: CR16 Options. (line 28) 50023 * mdc: MeP Options. (line 62) 50024 * mdebug: M32R/D Options. (line 69) 50025 * mdebug <1>: S/390 and zSeries Options. 50026 (line 110) 50027 * mdebug-main=PREFIX: VMS Options. (line 13) 50028 * mdec-asm: PDP-11 Options. (line 72) 50029 * mdirect-move: RS/6000 and PowerPC Options. 50030 (line 226) 50031 * mdisable-callt: V850 Options. (line 92) 50032 * mdisable-fpregs: HPPA Options. (line 33) 50033 * mdisable-indexing: HPPA Options. (line 39) 50034 * mdiv: M680x0 Options. (line 206) 50035 * mdiv <1>: MCore Options. (line 15) 50036 * mdiv <2>: MeP Options. (line 65) 50037 * mdiv=STRATEGY: SH Options. (line 236) 50038 * mdivide-breaks: MIPS Options. (line 445) 50039 * mdivide-enabled: LM32 Options. (line 12) 50040 * mdivide-traps: MIPS Options. (line 445) 50041 * mdivsi3_libfunc=NAME: SH Options. (line 331) 50042 * mdll: i386 and x86-64 Windows Options. 50043 (line 16) 50044 * mdlmzb: RS/6000 and PowerPC Options. 50045 (line 445) 50046 * mdmx: MIPS Options. (line 289) 50047 * mdouble: FRV Options. (line 48) 50048 * mdouble-float: MIPS Options. (line 247) 50049 * mdouble-float <1>: RS/6000 and PowerPC Options. 50050 (line 368) 50051 * mdsp: MIPS Options. (line 266) 50052 * mdspr2: MIPS Options. (line 272) 50053 * mdual-nops: SPU Options. (line 95) 50054 * mdwarf2-asm: IA-64 Options. (line 94) 50055 * mdword: FRV Options. (line 40) 50056 * mdynamic-no-pic: RS/6000 and PowerPC Options. 50057 (line 505) 50058 * mea32: SPU Options. (line 60) 50059 * mea64: SPU Options. (line 60) 50060 * meabi: RS/6000 and PowerPC Options. 50061 (line 682) 50062 * mearly-stop-bits: IA-64 Options. (line 100) 50063 * meb: MeP Options. (line 68) 50064 * meb <1>: Moxie Options. (line 7) 50065 * meb <2>: Score Options. (line 9) 50066 * mel: MeP Options. (line 71) 50067 * mel <1>: Moxie Options. (line 11) 50068 * mel <2>: Score Options. (line 12) 50069 * melf: CRIS Options. (line 87) 50070 * melf <1>: MMIX Options. (line 43) 50071 * memb: RS/6000 and PowerPC Options. 50072 (line 677) 50073 * membedded-data: MIPS Options. (line 386) 50074 * memregs=: M32C Options. (line 21) 50075 * mep: V850 Options. (line 16) 50076 * mepsilon: MMIX Options. (line 15) 50077 * merror-reloc: SPU Options. (line 10) 50078 * mesa: S/390 and zSeries Options. 50079 (line 94) 50080 * metrax100: CRIS Options. (line 27) 50081 * metrax4: CRIS Options. (line 27) 50082 * mexplicit-relocs: DEC Alpha Options. (line 176) 50083 * mexplicit-relocs <1>: MIPS Options. (line 430) 50084 * mexr: H8/300 Options. (line 28) 50085 * mextern-sdata: MIPS Options. (line 349) 50086 * MF: Preprocessor Options. 50087 (line 220) 50088 * mfast-fp: Blackfin Options. (line 132) 50089 * mfast-indirect-calls: HPPA Options. (line 51) 50090 * mfaster-structs: SPARC Options. (line 91) 50091 * mfdpic: FRV Options. (line 72) 50092 * mfentry: i386 and x86-64 Options. 50093 (line 809) 50094 * mfix: DEC Alpha Options. (line 163) 50095 * mfix-24k: MIPS Options. (line 496) 50096 * mfix-and-continue: Darwin Options. (line 104) 50097 * mfix-at697f: SPARC Options. (line 243) 50098 * mfix-cortex-m3-ldrd: ARM Options. (line 307) 50099 * mfix-r10000: MIPS Options. (line 518) 50100 * mfix-r4000: MIPS Options. (line 502) 50101 * mfix-r4400: MIPS Options. (line 512) 50102 * mfix-sb1: MIPS Options. (line 549) 50103 * mfix-ut699: SPARC Options. (line 248) 50104 * mfix-vr4120: MIPS Options. (line 529) 50105 * mfix-vr4130: MIPS Options. (line 542) 50106 * mfixed-cc: FRV Options. (line 35) 50107 * mfixed-range: HPPA Options. (line 58) 50108 * mfixed-range <1>: IA-64 Options. (line 105) 50109 * mfixed-range <2>: SH Options. (line 338) 50110 * mfixed-range <3>: SPU Options. (line 52) 50111 * mflat: SPARC Options. (line 22) 50112 * mflip-mips16: MIPS Options. (line 110) 50113 * mfloat-abi: ARM Options. (line 42) 50114 * mfloat-gprs: RS/6000 and PowerPC Options. 50115 (line 257) 50116 * mfloat-ieee: DEC Alpha Options. (line 171) 50117 * mfloat-vax: DEC Alpha Options. (line 171) 50118 * mfloat32: PDP-11 Options. (line 52) 50119 * mfloat64: PDP-11 Options. (line 48) 50120 * mflush-func: MIPS Options. (line 616) 50121 * mflush-func=NAME: M32R/D Options. (line 93) 50122 * mflush-trap=NUMBER: M32R/D Options. (line 86) 50123 * mfmaf: SPARC Options. (line 237) 50124 * mfmovd: SH Options. (line 96) 50125 * mforce-no-pic: Xtensa Options. (line 41) 50126 * mfp-exceptions: MIPS Options. (line 643) 50127 * mfp-mode: Adapteva Epiphany Options. 50128 (line 71) 50129 * mfp-reg: DEC Alpha Options. (line 25) 50130 * mfp-rounding-mode: DEC Alpha Options. (line 85) 50131 * mfp-trap-mode: DEC Alpha Options. (line 63) 50132 * mfp16-format: ARM Options. (line 164) 50133 * mfp32: MIPS Options. (line 220) 50134 * mfp64: MIPS Options. (line 223) 50135 * mfpmath: Optimize Options. (line 1893) 50136 * mfpmath <1>: i386 and x86-64 Options. 50137 (line 227) 50138 * mfpr-32: FRV Options. (line 15) 50139 * mfpr-64: FRV Options. (line 19) 50140 * mfprnd: RS/6000 and PowerPC Options. 50141 (line 27) 50142 * mfpu: ARM Options. (line 144) 50143 * mfpu <1>: PDP-11 Options. (line 9) 50144 * mfpu <2>: RS/6000 and PowerPC Options. 50145 (line 376) 50146 * mfpu <3>: SPARC Options. (line 34) 50147 * mfriz: RS/6000 and PowerPC Options. 50148 (line 860) 50149 * mfsca: SH Options. (line 421) 50150 * mfsrra: SH Options. (line 430) 50151 * mfull-toc: RS/6000 and PowerPC Options. 50152 (line 285) 50153 * mfused-madd: IA-64 Options. (line 88) 50154 * mfused-madd <1>: MIPS Options. (line 479) 50155 * mfused-madd <2>: RS/6000 and PowerPC Options. 50156 (line 429) 50157 * mfused-madd <3>: S/390 and zSeries Options. 50158 (line 135) 50159 * mfused-madd <4>: SH Options. (line 412) 50160 * mfused-madd <5>: Xtensa Options. (line 19) 50161 * MG: Preprocessor Options. 50162 (line 229) 50163 * mg: VAX Options. (line 17) 50164 * mgas: HPPA Options. (line 74) 50165 * mgcc-abi: V850 Options. (line 148) 50166 * mgen-cell-microcode: RS/6000 and PowerPC Options. 50167 (line 173) 50168 * mgeneral-regs-only: AArch64 Options. (line 13) 50169 * mgettrcost=NUMBER: SH Options. (line 355) 50170 * mghs: V850 Options. (line 127) 50171 * mglibc: GNU/Linux Options. (line 9) 50172 * mgnu: VAX Options. (line 13) 50173 * mgnu-as: IA-64 Options. (line 18) 50174 * mgnu-ld: HPPA Options. (line 110) 50175 * mgnu-ld <1>: IA-64 Options. (line 23) 50176 * mgotplt: CRIS Options. (line 81) 50177 * mgp32: MIPS Options. (line 214) 50178 * mgp64: MIPS Options. (line 217) 50179 * mgpopt: MIPS Options. (line 371) 50180 * mgpr-32: FRV Options. (line 7) 50181 * mgpr-64: FRV Options. (line 11) 50182 * mgprel-ro: FRV Options. (line 99) 50183 * mh: H8/300 Options. (line 14) 50184 * mhalf-reg-file: Adapteva Epiphany Options. 50185 (line 9) 50186 * mhard-dfp: RS/6000 and PowerPC Options. 50187 (line 27) 50188 * mhard-dfp <1>: S/390 and zSeries Options. 50189 (line 20) 50190 * mhard-float: FRV Options. (line 23) 50191 * mhard-float <1>: M680x0 Options. (line 194) 50192 * mhard-float <2>: MicroBlaze Options. (line 10) 50193 * mhard-float <3>: MIPS Options. (line 226) 50194 * mhard-float <4>: RS/6000 and PowerPC Options. 50195 (line 362) 50196 * mhard-float <5>: S/390 and zSeries Options. 50197 (line 11) 50198 * mhard-float <6>: SPARC Options. (line 34) 50199 * mhard-float <7>: V850 Options. (line 113) 50200 * mhard-quad-float: SPARC Options. (line 55) 50201 * mhardlit: MCore Options. (line 10) 50202 * mhint-max-distance: SPU Options. (line 107) 50203 * mhint-max-nops: SPU Options. (line 101) 50204 * mhitachi: SH Options. (line 100) 50205 * mhitachi <1>: SH Options. (line 103) 50206 * mhitachi <2>: SH Options. (line 106) 50207 * mhotpatch: S/390 and zSeries Options. 50208 (line 171) 50209 * mhp-ld: HPPA Options. (line 122) 50210 * micplb: Blackfin Options. (line 177) 50211 * mid-shared-library: Blackfin Options. (line 80) 50212 * mieee: DEC Alpha Options. (line 39) 50213 * mieee <1>: SH Options. (line 116) 50214 * mieee-conformant: DEC Alpha Options. (line 134) 50215 * mieee-fp: i386 and x86-64 Options. 50216 (line 282) 50217 * mieee-with-inexact: DEC Alpha Options. (line 52) 50218 * milp32: IA-64 Options. (line 121) 50219 * mimpure-text: Solaris 2 Options. (line 9) 50220 * mincoming-stack-boundary: i386 and x86-64 Options. 50221 (line 485) 50222 * mindexed-addressing: SH Options. (line 345) 50223 * minline-all-stringops: i386 and x86-64 Options. 50224 (line 757) 50225 * minline-float-divide-max-throughput: IA-64 Options. (line 58) 50226 * minline-float-divide-min-latency: IA-64 Options. (line 54) 50227 * minline-ic_invalidate: SH Options. (line 125) 50228 * minline-int-divide-max-throughput: IA-64 Options. (line 69) 50229 * minline-int-divide-min-latency: IA-64 Options. (line 65) 50230 * minline-plt: Blackfin Options. (line 137) 50231 * minline-plt <1>: FRV Options. (line 81) 50232 * minline-sqrt-max-throughput: IA-64 Options. (line 80) 50233 * minline-sqrt-min-latency: IA-64 Options. (line 76) 50234 * minline-stringops-dynamically: i386 and x86-64 Options. 50235 (line 764) 50236 * minsert-sched-nops: RS/6000 and PowerPC Options. 50237 (line 545) 50238 * mint-register: RX Options. (line 100) 50239 * mint16: PDP-11 Options. (line 40) 50240 * mint32: CR16 Options. (line 22) 50241 * mint32 <1>: H8/300 Options. (line 38) 50242 * mint32 <2>: PDP-11 Options. (line 44) 50243 * mint8: AVR Options. (line 161) 50244 * minterlink-mips16: MIPS Options. (line 117) 50245 * minvalid-symbols: SH Options. (line 379) 50246 * mio-volatile: MeP Options. (line 74) 50247 * mips1: MIPS Options. (line 77) 50248 * mips16: MIPS Options. (line 102) 50249 * mips2: MIPS Options. (line 80) 50250 * mips3: MIPS Options. (line 83) 50251 * mips32: MIPS Options. (line 89) 50252 * mips32r2: MIPS Options. (line 92) 50253 * mips3d: MIPS Options. (line 295) 50254 * mips4: MIPS Options. (line 86) 50255 * mips64: MIPS Options. (line 95) 50256 * mips64r2: MIPS Options. (line 98) 50257 * misel: RS/6000 and PowerPC Options. 50258 (line 191) 50259 * misize: SH Options. (line 137) 50260 * missue-rate=NUMBER: M32R/D Options. (line 79) 50261 * mivc2: MeP Options. (line 59) 50262 * mjump-in-delay: HPPA Options. (line 28) 50263 * mkernel: Darwin Options. (line 82) 50264 * mknuthdiv: MMIX Options. (line 32) 50265 * ml: MeP Options. (line 78) 50266 * ml <1>: SH Options. (line 77) 50267 * mlarge-data: DEC Alpha Options. (line 187) 50268 * mlarge-data-threshold: i386 and x86-64 Options. 50269 (line 371) 50270 * mlarge-mem: SPU Options. (line 38) 50271 * mlarge-text: DEC Alpha Options. (line 205) 50272 * mleadz: MeP Options. (line 81) 50273 * mleaf-id-shared-library: Blackfin Options. (line 91) 50274 * mlibfuncs: MMIX Options. (line 10) 50275 * mlibrary-pic: FRV Options. (line 135) 50276 * mlinked-fp: FRV Options. (line 116) 50277 * mlinker-opt: HPPA Options. (line 84) 50278 * mlinux: CRIS Options. (line 91) 50279 * mlittle: RS/6000 and PowerPC Options. 50280 (line 494) 50281 * mlittle-endian: AArch64 Options. (line 16) 50282 * mlittle-endian <1>: ARM Options. (line 58) 50283 * mlittle-endian <2>: C6X Options. (line 16) 50284 * mlittle-endian <3>: IA-64 Options. (line 13) 50285 * mlittle-endian <4>: MCore Options. (line 39) 50286 * mlittle-endian <5>: MicroBlaze Options. (line 60) 50287 * mlittle-endian <6>: RS/6000 and PowerPC Options. 50288 (line 494) 50289 * mlittle-endian-data: RX Options. (line 42) 50290 * mliw: MN10300 Options. (line 54) 50291 * mllsc: MIPS Options. (line 252) 50292 * mlocal-sdata: MIPS Options. (line 337) 50293 * mlong-calls: Adapteva Epiphany Options. 50294 (line 55) 50295 * mlong-calls <1>: ARM Options. (line 189) 50296 * mlong-calls <2>: Blackfin Options. (line 120) 50297 * mlong-calls <3>: FRV Options. (line 122) 50298 * mlong-calls <4>: MIPS Options. (line 465) 50299 * mlong-calls <5>: V850 Options. (line 10) 50300 * mlong-double-128: S/390 and zSeries Options. 50301 (line 29) 50302 * mlong-double-64: i386 and x86-64 Options. 50303 (line 360) 50304 * mlong-double-64 <1>: S/390 and zSeries Options. 50305 (line 29) 50306 * mlong-double-80: i386 and x86-64 Options. 50307 (line 360) 50308 * mlong-jumps: V850 Options. (line 108) 50309 * mlong-load-store: HPPA Options. (line 65) 50310 * mlong32: MIPS Options. (line 312) 50311 * mlong64: MIPS Options. (line 307) 50312 * mlongcall: RS/6000 and PowerPC Options. 50313 (line 753) 50314 * mlongcalls: Xtensa Options. (line 72) 50315 * mloop: V850 Options. (line 121) 50316 * mlow-64k: Blackfin Options. (line 69) 50317 * mlp64: IA-64 Options. (line 121) 50318 * MM: Preprocessor Options. 50319 (line 210) 50320 * mm: MeP Options. (line 84) 50321 * mmac: CR16 Options. (line 9) 50322 * mmac <1>: Score Options. (line 21) 50323 * mmad: MIPS Options. (line 474) 50324 * mmalloc64: VMS Options. (line 17) 50325 * mmax: DEC Alpha Options. (line 163) 50326 * mmax-constant-size: RX Options. (line 82) 50327 * mmax-stack-frame: CRIS Options. (line 23) 50328 * mmcount-ra-address: MIPS Options. (line 692) 50329 * mmcu: AVR Options. (line 9) 50330 * mmcu <1>: MIPS Options. (line 304) 50331 * MMD: Preprocessor Options. 50332 (line 292) 50333 * mmedia: FRV Options. (line 56) 50334 * mmemcpy: MicroBlaze Options. (line 13) 50335 * mmemcpy <1>: MIPS Options. (line 459) 50336 * mmemory-latency: DEC Alpha Options. (line 268) 50337 * mmemory-model: SPARC Options. (line 289) 50338 * mmfcrf: RS/6000 and PowerPC Options. 50339 (line 27) 50340 * mmfpgpr: RS/6000 and PowerPC Options. 50341 (line 27) 50342 * mminimal-toc: RS/6000 and PowerPC Options. 50343 (line 285) 50344 * mminmax: MeP Options. (line 87) 50345 * mmmx: i386 and x86-64 Options. 50346 (line 564) 50347 * mmodel=large: M32R/D Options. (line 33) 50348 * mmodel=medium: M32R/D Options. (line 27) 50349 * mmodel=small: M32R/D Options. (line 18) 50350 * mmovbe: i386 and x86-64 Options. 50351 (line 630) 50352 * mmt: MIPS Options. (line 300) 50353 * mmul: RL78 Options. (line 13) 50354 * mmul-bug-workaround: CRIS Options. (line 32) 50355 * mmuladd: FRV Options. (line 64) 50356 * mmulhw: RS/6000 and PowerPC Options. 50357 (line 438) 50358 * mmult: MeP Options. (line 90) 50359 * mmult-bug: MN10300 Options. (line 9) 50360 * mmulti-cond-exec: FRV Options. (line 215) 50361 * mmulticore: Blackfin Options. (line 141) 50362 * mmultiple: RS/6000 and PowerPC Options. 50363 (line 388) 50364 * mmvcle: S/390 and zSeries Options. 50365 (line 104) 50366 * mmvme: RS/6000 and PowerPC Options. 50367 (line 658) 50368 * mn: H8/300 Options. (line 20) 50369 * mnested-cond-exec: FRV Options. (line 230) 50370 * mnhwloop: Score Options. (line 15) 50371 * mno-3dnow: i386 and x86-64 Options. 50372 (line 564) 50373 * mno-4byte-functions: MCore Options. (line 27) 50374 * mno-8byte-align: V850 Options. (line 170) 50375 * mno-abicalls: MIPS Options. (line 154) 50376 * mno-abshi: PDP-11 Options. (line 58) 50377 * mno-ac0: PDP-11 Options. (line 20) 50378 * mno-address-space-conversion: SPU Options. (line 68) 50379 * mno-align-double: i386 and x86-64 Options. 50380 (line 320) 50381 * mno-align-int: M680x0 Options. (line 263) 50382 * mno-align-loops: M32R/D Options. (line 76) 50383 * mno-align-stringops: i386 and x86-64 Options. 50384 (line 752) 50385 * mno-altivec: RS/6000 and PowerPC Options. 50386 (line 132) 50387 * mno-am33: MN10300 Options. (line 20) 50388 * mno-app-regs: SPARC Options. (line 10) 50389 * mno-app-regs <1>: V850 Options. (line 185) 50390 * mno-as100-syntax: RX Options. (line 76) 50391 * mno-atomic-updates: SPU Options. (line 83) 50392 * mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 50393 (line 420) 50394 * mno-backchain: S/390 and zSeries Options. 50395 (line 35) 50396 * mno-base-addresses: MMIX Options. (line 53) 50397 * mno-bit-align: RS/6000 and PowerPC Options. 50398 (line 452) 50399 * mno-bitfield: M680x0 Options. (line 227) 50400 * mno-branch-likely: MIPS Options. (line 632) 50401 * mno-branch-predict: MMIX Options. (line 48) 50402 * mno-bwx: DEC Alpha Options. (line 163) 50403 * mno-callgraph-data: MCore Options. (line 31) 50404 * mno-cbcond: SPARC Options. (line 223) 50405 * mno-check-zero-division: MIPS Options. (line 439) 50406 * mno-cix: DEC Alpha Options. (line 163) 50407 * mno-clearbss: MicroBlaze Options. (line 16) 50408 * mno-cmpb: RS/6000 and PowerPC Options. 50409 (line 27) 50410 * mno-cond-exec: FRV Options. (line 194) 50411 * mno-cond-move: FRV Options. (line 166) 50412 * mno-const-align: CRIS Options. (line 55) 50413 * mno-const16: Xtensa Options. (line 10) 50414 * mno-crt0: MN10300 Options. (line 43) 50415 * mno-crt0 <1>: Moxie Options. (line 14) 50416 * mno-crypto: RS/6000 and PowerPC Options. 50417 (line 220) 50418 * mno-csync-anomaly: Blackfin Options. (line 65) 50419 * mno-data-align: CRIS Options. (line 55) 50420 * mno-debug: S/390 and zSeries Options. 50421 (line 110) 50422 * mno-direct-move: RS/6000 and PowerPC Options. 50423 (line 226) 50424 * mno-disable-callt: V850 Options. (line 92) 50425 * mno-div: M680x0 Options. (line 206) 50426 * mno-div <1>: MCore Options. (line 15) 50427 * mno-dlmzb: RS/6000 and PowerPC Options. 50428 (line 445) 50429 * mno-double: FRV Options. (line 52) 50430 * mno-dsp: MIPS Options. (line 266) 50431 * mno-dspr2: MIPS Options. (line 272) 50432 * mno-dwarf2-asm: IA-64 Options. (line 94) 50433 * mno-dword: FRV Options. (line 44) 50434 * mno-eabi: RS/6000 and PowerPC Options. 50435 (line 682) 50436 * mno-early-stop-bits: IA-64 Options. (line 100) 50437 * mno-eflags: FRV Options. (line 155) 50438 * mno-embedded-data: MIPS Options. (line 386) 50439 * mno-ep: V850 Options. (line 16) 50440 * mno-epsilon: MMIX Options. (line 15) 50441 * mno-explicit-relocs: DEC Alpha Options. (line 176) 50442 * mno-explicit-relocs <1>: MIPS Options. (line 430) 50443 * mno-exr: H8/300 Options. (line 33) 50444 * mno-extern-sdata: MIPS Options. (line 349) 50445 * mno-fancy-math-387: i386 and x86-64 Options. 50446 (line 310) 50447 * mno-faster-structs: SPARC Options. (line 91) 50448 * mno-fix: DEC Alpha Options. (line 163) 50449 * mno-fix-24k: MIPS Options. (line 496) 50450 * mno-fix-r10000: MIPS Options. (line 518) 50451 * mno-fix-r4000: MIPS Options. (line 502) 50452 * mno-fix-r4400: MIPS Options. (line 512) 50453 * mno-flat: SPARC Options. (line 22) 50454 * mno-float: MIPS Options. (line 233) 50455 * mno-float32: PDP-11 Options. (line 48) 50456 * mno-float64: PDP-11 Options. (line 52) 50457 * mno-flush-func: M32R/D Options. (line 98) 50458 * mno-flush-trap: M32R/D Options. (line 90) 50459 * mno-fmaf: SPARC Options. (line 237) 50460 * mno-fp-in-toc: RS/6000 and PowerPC Options. 50461 (line 285) 50462 * mno-fp-regs: DEC Alpha Options. (line 25) 50463 * mno-fp-ret-in-387: i386 and x86-64 Options. 50464 (line 300) 50465 * mno-fprnd: RS/6000 and PowerPC Options. 50466 (line 27) 50467 * mno-fpu: SPARC Options. (line 39) 50468 * mno-fsca: SH Options. (line 421) 50469 * mno-fsrra: SH Options. (line 430) 50470 * mno-fused-madd: IA-64 Options. (line 88) 50471 * mno-fused-madd <1>: MIPS Options. (line 479) 50472 * mno-fused-madd <2>: RS/6000 and PowerPC Options. 50473 (line 429) 50474 * mno-fused-madd <3>: S/390 and zSeries Options. 50475 (line 135) 50476 * mno-fused-madd <4>: SH Options. (line 412) 50477 * mno-fused-madd <5>: Xtensa Options. (line 19) 50478 * mno-gnu-as: IA-64 Options. (line 18) 50479 * mno-gnu-ld: IA-64 Options. (line 23) 50480 * mno-gotplt: CRIS Options. (line 81) 50481 * mno-gpopt: MIPS Options. (line 371) 50482 * mno-hard-dfp: RS/6000 and PowerPC Options. 50483 (line 27) 50484 * mno-hard-dfp <1>: S/390 and zSeries Options. 50485 (line 20) 50486 * mno-hardlit: MCore Options. (line 10) 50487 * mno-id-shared-library: Blackfin Options. (line 87) 50488 * mno-ieee-fp: i386 and x86-64 Options. 50489 (line 282) 50490 * mno-inline-float-divide: IA-64 Options. (line 62) 50491 * mno-inline-int-divide: IA-64 Options. (line 73) 50492 * mno-inline-sqrt: IA-64 Options. (line 84) 50493 * mno-int16: PDP-11 Options. (line 44) 50494 * mno-int32: PDP-11 Options. (line 40) 50495 * mno-interlink-mips16: MIPS Options. (line 117) 50496 * mno-interrupts: AVR Options. (line 167) 50497 * mno-isel: RS/6000 and PowerPC Options. 50498 (line 191) 50499 * mno-knuthdiv: MMIX Options. (line 32) 50500 * mno-leaf-id-shared-library: Blackfin Options. (line 97) 50501 * mno-libfuncs: MMIX Options. (line 10) 50502 * mno-llsc: MIPS Options. (line 252) 50503 * mno-local-sdata: MIPS Options. (line 337) 50504 * mno-long-calls: ARM Options. (line 189) 50505 * mno-long-calls <1>: Blackfin Options. (line 120) 50506 * mno-long-calls <2>: HPPA Options. (line 135) 50507 * mno-long-calls <3>: MIPS Options. (line 465) 50508 * mno-long-calls <4>: V850 Options. (line 10) 50509 * mno-long-jumps: V850 Options. (line 108) 50510 * mno-longcall: RS/6000 and PowerPC Options. 50511 (line 753) 50512 * mno-longcalls: Xtensa Options. (line 72) 50513 * mno-low-64k: Blackfin Options. (line 73) 50514 * mno-lsim: FR30 Options. (line 14) 50515 * mno-lsim <1>: MCore Options. (line 46) 50516 * mno-mad: MIPS Options. (line 474) 50517 * mno-max: DEC Alpha Options. (line 163) 50518 * mno-mcount-ra-address: MIPS Options. (line 692) 50519 * mno-mcu: MIPS Options. (line 304) 50520 * mno-mdmx: MIPS Options. (line 289) 50521 * mno-media: FRV Options. (line 60) 50522 * mno-memcpy: MIPS Options. (line 459) 50523 * mno-mfcrf: RS/6000 and PowerPC Options. 50524 (line 27) 50525 * mno-mfpgpr: RS/6000 and PowerPC Options. 50526 (line 27) 50527 * mno-mips16: MIPS Options. (line 102) 50528 * mno-mips3d: MIPS Options. (line 295) 50529 * mno-mmx: i386 and x86-64 Options. 50530 (line 564) 50531 * mno-mt: MIPS Options. (line 300) 50532 * mno-mul-bug-workaround: CRIS Options. (line 32) 50533 * mno-muladd: FRV Options. (line 68) 50534 * mno-mulhw: RS/6000 and PowerPC Options. 50535 (line 438) 50536 * mno-mult-bug: MN10300 Options. (line 13) 50537 * mno-multi-cond-exec: FRV Options. (line 223) 50538 * mno-multiple: RS/6000 and PowerPC Options. 50539 (line 388) 50540 * mno-mvcle: S/390 and zSeries Options. 50541 (line 104) 50542 * mno-nested-cond-exec: FRV Options. (line 237) 50543 * mno-omit-leaf-frame-pointer: AArch64 Options. (line 43) 50544 * mno-optimize-membar: FRV Options. (line 249) 50545 * mno-opts: MeP Options. (line 93) 50546 * mno-pack: FRV Options. (line 151) 50547 * mno-packed-stack: S/390 and zSeries Options. 50548 (line 54) 50549 * mno-paired: RS/6000 and PowerPC Options. 50550 (line 205) 50551 * mno-paired-single: MIPS Options. (line 283) 50552 * mno-pic: IA-64 Options. (line 26) 50553 * mno-pid: RX Options. (line 117) 50554 * mno-plt: MIPS Options. (line 181) 50555 * mno-popc: SPARC Options. (line 230) 50556 * mno-popcntb: RS/6000 and PowerPC Options. 50557 (line 27) 50558 * mno-popcntd: RS/6000 and PowerPC Options. 50559 (line 27) 50560 * mno-postinc: Adapteva Epiphany Options. 50561 (line 109) 50562 * mno-postmodify: Adapteva Epiphany Options. 50563 (line 109) 50564 * mno-power8-fusion: RS/6000 and PowerPC Options. 50565 (line 232) 50566 * mno-power8-vector: RS/6000 and PowerPC Options. 50567 (line 238) 50568 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 50569 (line 27) 50570 * mno-powerpc-gpopt: RS/6000 and PowerPC Options. 50571 (line 27) 50572 * mno-powerpc64: RS/6000 and PowerPC Options. 50573 (line 27) 50574 * mno-prolog-function: V850 Options. (line 23) 50575 * mno-prologue-epilogue: CRIS Options. (line 71) 50576 * mno-prototype: RS/6000 and PowerPC Options. 50577 (line 642) 50578 * mno-push-args: i386 and x86-64 Options. 50579 (line 730) 50580 * mno-quad-memory: RS/6000 and PowerPC Options. 50581 (line 245) 50582 * mno-quad-memory-atomic: RS/6000 and PowerPC Options. 50583 (line 251) 50584 * mno-red-zone: i386 and x86-64 Options. 50585 (line 845) 50586 * mno-register-names: IA-64 Options. (line 37) 50587 * mno-regnames: RS/6000 and PowerPC Options. 50588 (line 747) 50589 * mno-relax: V850 Options. (line 103) 50590 * mno-relax-immediate: MCore Options. (line 19) 50591 * mno-relocatable: RS/6000 and PowerPC Options. 50592 (line 468) 50593 * mno-relocatable-lib: RS/6000 and PowerPC Options. 50594 (line 479) 50595 * mno-round-nearest: Adapteva Epiphany Options. 50596 (line 51) 50597 * mno-rtd: M680x0 Options. (line 258) 50598 * mno-scc: FRV Options. (line 180) 50599 * mno-sched-ar-data-spec: IA-64 Options. (line 134) 50600 * mno-sched-ar-in-data-spec: IA-64 Options. (line 155) 50601 * mno-sched-br-data-spec: IA-64 Options. (line 128) 50602 * mno-sched-br-in-data-spec: IA-64 Options. (line 148) 50603 * mno-sched-control-spec: IA-64 Options. (line 140) 50604 * mno-sched-count-spec-in-critical-path: IA-64 Options. (line 182) 50605 * mno-sched-in-control-spec: IA-64 Options. (line 162) 50606 * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 50607 * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 50608 * mno-sched-prolog: ARM Options. (line 33) 50609 * mno-sdata: IA-64 Options. (line 42) 50610 * mno-sdata <1>: RS/6000 and PowerPC Options. 50611 (line 728) 50612 * mno-sep-data: Blackfin Options. (line 115) 50613 * mno-serialize-volatile: Xtensa Options. (line 35) 50614 * mno-short: M680x0 Options. (line 222) 50615 * mno-side-effects: CRIS Options. (line 46) 50616 * mno-sim: RX Options. (line 71) 50617 * mno-single-exit: MMIX Options. (line 65) 50618 * mno-slow-bytes: MCore Options. (line 35) 50619 * mno-small-exec: S/390 and zSeries Options. 50620 (line 79) 50621 * mno-smartmips: MIPS Options. (line 279) 50622 * mno-soft-cmpsf: Adapteva Epiphany Options. 50623 (line 29) 50624 * mno-soft-float: DEC Alpha Options. (line 10) 50625 * mno-space-regs: HPPA Options. (line 44) 50626 * mno-spe: RS/6000 and PowerPC Options. 50627 (line 200) 50628 * mno-specld-anomaly: Blackfin Options. (line 55) 50629 * mno-split-addresses: MIPS Options. (line 424) 50630 * mno-sse: i386 and x86-64 Options. 50631 (line 564) 50632 * mno-stack-align: CRIS Options. (line 55) 50633 * mno-stack-bias: SPARC Options. (line 313) 50634 * mno-strict-align: M680x0 Options. (line 283) 50635 * mno-strict-align <1>: RS/6000 and PowerPC Options. 50636 (line 463) 50637 * mno-string: RS/6000 and PowerPC Options. 50638 (line 399) 50639 * mno-sum-in-toc: RS/6000 and PowerPC Options. 50640 (line 285) 50641 * mno-sym32: MIPS Options. (line 322) 50642 * mno-target-align: Xtensa Options. (line 59) 50643 * mno-text-section-literals: Xtensa Options. (line 47) 50644 * mno-tls-markers: RS/6000 and PowerPC Options. 50645 (line 785) 50646 * mno-toc: RS/6000 and PowerPC Options. 50647 (line 488) 50648 * mno-toplevel-symbols: MMIX Options. (line 39) 50649 * mno-tpf-trace: S/390 and zSeries Options. 50650 (line 129) 50651 * mno-unaligned-access: ARM Options. (line 314) 50652 * mno-unaligned-doubles: SPARC Options. (line 73) 50653 * mno-uninit-const-in-rodata: MIPS Options. (line 394) 50654 * mno-update: RS/6000 and PowerPC Options. 50655 (line 410) 50656 * mno-user-mode: SPARC Options. (line 85) 50657 * mno-v8plus: SPARC Options. (line 194) 50658 * mno-vect-double: Adapteva Epiphany Options. 50659 (line 115) 50660 * mno-vis: SPARC Options. (line 201) 50661 * mno-vis2: SPARC Options. (line 207) 50662 * mno-vis3: SPARC Options. (line 215) 50663 * mno-vliw-branch: FRV Options. (line 208) 50664 * mno-volatile-asm-stop: IA-64 Options. (line 32) 50665 * mno-vrsave: RS/6000 and PowerPC Options. 50666 (line 170) 50667 * mno-vsx: RS/6000 and PowerPC Options. 50668 (line 214) 50669 * mno-warn-multiple-fast-interrupts: RX Options. (line 143) 50670 * mno-wide-bitfields: MCore Options. (line 23) 50671 * mno-xgot: M680x0 Options. (line 315) 50672 * mno-xgot <1>: MIPS Options. (line 191) 50673 * mno-xl-compat: RS/6000 and PowerPC Options. 50674 (line 320) 50675 * mno-zdcbranch: SH Options. (line 396) 50676 * mno-zero-extend: MMIX Options. (line 26) 50677 * mnobitfield: M680x0 Options. (line 227) 50678 * mnoieee: SH Options. (line 116) 50679 * mnoliw: MN10300 Options. (line 59) 50680 * mnomacsave: SH Options. (line 111) 50681 * mnop-fun-dllimport: i386 and x86-64 Windows Options. 50682 (line 22) 50683 * mnops: Adapteva Epiphany Options. 50684 (line 26) 50685 * mnosetlb: MN10300 Options. (line 69) 50686 * mnosplit-lohi: Adapteva Epiphany Options. 50687 (line 109) 50688 * momit-leaf-frame-pointer: AArch64 Options. (line 43) 50689 * momit-leaf-frame-pointer <1>: Blackfin Options. (line 43) 50690 * momit-leaf-frame-pointer <2>: i386 and x86-64 Options. 50691 (line 786) 50692 * mone-byte-bool: Darwin Options. (line 90) 50693 * moptimize-membar: FRV Options. (line 244) 50694 * MP: Preprocessor Options. 50695 (line 239) 50696 * mpa-risc-1-0: HPPA Options. (line 19) 50697 * mpa-risc-1-1: HPPA Options. (line 19) 50698 * mpa-risc-2-0: HPPA Options. (line 19) 50699 * mpack: FRV Options. (line 147) 50700 * mpacked-stack: S/390 and zSeries Options. 50701 (line 54) 50702 * mpadstruct: SH Options. (line 140) 50703 * mpaired: RS/6000 and PowerPC Options. 50704 (line 205) 50705 * mpaired-single: MIPS Options. (line 283) 50706 * mpc32: i386 and x86-64 Options. 50707 (line 434) 50708 * mpc64: i386 and x86-64 Options. 50709 (line 434) 50710 * mpc80: i386 and x86-64 Options. 50711 (line 434) 50712 * mpcrel: M680x0 Options. (line 275) 50713 * mpdebug: CRIS Options. (line 36) 50714 * mpe: RS/6000 and PowerPC Options. 50715 (line 339) 50716 * mpe-aligned-commons: i386 and x86-64 Windows Options. 50717 (line 59) 50718 * mpic-register: ARM Options. (line 219) 50719 * mpid: RX Options. (line 117) 50720 * mplt: MIPS Options. (line 181) 50721 * mpointers-to-nested-functions: RS/6000 and PowerPC Options. 50722 (line 868) 50723 * mpoke-function-name: ARM Options. (line 226) 50724 * mpopc: SPARC Options. (line 230) 50725 * mpopcntb: RS/6000 and PowerPC Options. 50726 (line 27) 50727 * mpopcntd: RS/6000 and PowerPC Options. 50728 (line 27) 50729 * mportable-runtime: HPPA Options. (line 70) 50730 * mpower8-fusion: RS/6000 and PowerPC Options. 50731 (line 232) 50732 * mpower8-vector: RS/6000 and PowerPC Options. 50733 (line 238) 50734 * mpowerpc-gfxopt: RS/6000 and PowerPC Options. 50735 (line 27) 50736 * mpowerpc-gpopt: RS/6000 and PowerPC Options. 50737 (line 27) 50738 * mpowerpc64: RS/6000 and PowerPC Options. 50739 (line 27) 50740 * mprefer-avx128: i386 and x86-64 Options. 50741 (line 607) 50742 * mprefer-short-insn-regs: Adapteva Epiphany Options. 50743 (line 13) 50744 * mprefergot: SH Options. (line 223) 50745 * mpreferred-stack-boundary: i386 and x86-64 Options. 50746 (line 464) 50747 * mpretend-cmove: SH Options. (line 439) 50748 * mprioritize-restricted-insns: RS/6000 and PowerPC Options. 50749 (line 517) 50750 * mprolog-function: V850 Options. (line 23) 50751 * mprologue-epilogue: CRIS Options. (line 71) 50752 * mprototype: RS/6000 and PowerPC Options. 50753 (line 642) 50754 * mpt-fixed: SH Options. (line 359) 50755 * mpush-args: i386 and x86-64 Options. 50756 (line 730) 50757 * MQ: Preprocessor Options. 50758 (line 266) 50759 * mquad-memory: RS/6000 and PowerPC Options. 50760 (line 245) 50761 * mquad-memory-atomic: RS/6000 and PowerPC Options. 50762 (line 251) 50763 * mr10k-cache-barrier: MIPS Options. (line 554) 50764 * mrecip: i386 and x86-64 Options. 50765 (line 640) 50766 * mrecip <1>: RS/6000 and PowerPC Options. 50767 (line 797) 50768 * mrecip-precision: RS/6000 and PowerPC Options. 50769 (line 832) 50770 * mrecip=opt: i386 and x86-64 Options. 50771 (line 662) 50772 * mrecip=opt <1>: RS/6000 and PowerPC Options. 50773 (line 810) 50774 * mregister-names: IA-64 Options. (line 37) 50775 * mregnames: RS/6000 and PowerPC Options. 50776 (line 747) 50777 * mregparm: i386 and x86-64 Options. 50778 (line 401) 50779 * mrelax: AVR Options. (line 171) 50780 * mrelax <1>: H8/300 Options. (line 9) 50781 * mrelax <2>: MN10300 Options. (line 46) 50782 * mrelax <3>: RX Options. (line 95) 50783 * mrelax <4>: SH Options. (line 85) 50784 * mrelax <5>: V850 Options. (line 103) 50785 * mrelax-immediate: MCore Options. (line 19) 50786 * mrelax-pic-calls: MIPS Options. (line 679) 50787 * mrelocatable: RS/6000 and PowerPC Options. 50788 (line 468) 50789 * mrelocatable-lib: RS/6000 and PowerPC Options. 50790 (line 479) 50791 * mrepeat: MeP Options. (line 96) 50792 * mreturn-pointer-on-d0: MN10300 Options. (line 36) 50793 * mrh850-abi: V850 Options. (line 127) 50794 * mrtd: i386 and x86-64 Options. 50795 (line 377) 50796 * mrtd <1>: M680x0 Options. (line 236) 50797 * mrtd <2>: Function Attributes. 50798 (line 175) 50799 * mrtp: VxWorks Options. (line 11) 50800 * ms: H8/300 Options. (line 17) 50801 * ms <1>: MeP Options. (line 100) 50802 * ms2600: H8/300 Options. (line 24) 50803 * msafe-dma: SPU Options. (line 18) 50804 * msafe-hints: SPU Options. (line 112) 50805 * msahf: i386 and x86-64 Options. 50806 (line 620) 50807 * msatur: MeP Options. (line 105) 50808 * msave-acc-in-interrupts: RX Options. (line 109) 50809 * msave-toc-indirect: RS/6000 and PowerPC Options. 50810 (line 880) 50811 * mscc: FRV Options. (line 173) 50812 * msched-ar-data-spec: IA-64 Options. (line 134) 50813 * msched-ar-in-data-spec: IA-64 Options. (line 155) 50814 * msched-br-data-spec: IA-64 Options. (line 128) 50815 * msched-br-in-data-spec: IA-64 Options. (line 148) 50816 * msched-control-spec: IA-64 Options. (line 140) 50817 * msched-costly-dep: RS/6000 and PowerPC Options. 50818 (line 524) 50819 * msched-count-spec-in-critical-path: IA-64 Options. (line 182) 50820 * msched-fp-mem-deps-zero-cost: IA-64 Options. (line 198) 50821 * msched-in-control-spec: IA-64 Options. (line 162) 50822 * msched-max-memory-insns: IA-64 Options. (line 207) 50823 * msched-max-memory-insns-hard-limit: IA-64 Options. (line 213) 50824 * msched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 50825 * msched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 50826 * msched-spec-ldc: IA-64 Options. (line 187) 50827 * msched-spec-ldc <1>: IA-64 Options. (line 190) 50828 * msched-stop-bits-after-every-cycle: IA-64 Options. (line 194) 50829 * mschedule: HPPA Options. (line 77) 50830 * mscore5: Score Options. (line 25) 50831 * mscore5u: Score Options. (line 28) 50832 * mscore7: Score Options. (line 31) 50833 * mscore7d: Score Options. (line 35) 50834 * msda: V850 Options. (line 40) 50835 * msdata: IA-64 Options. (line 42) 50836 * msdata <1>: RS/6000 and PowerPC Options. 50837 (line 715) 50838 * msdata=all: C6X Options. (line 30) 50839 * msdata=data: RS/6000 and PowerPC Options. 50840 (line 720) 50841 * msdata=default: C6X Options. (line 22) 50842 * msdata=default <1>: RS/6000 and PowerPC Options. 50843 (line 715) 50844 * msdata=eabi: RS/6000 and PowerPC Options. 50845 (line 696) 50846 * msdata=none: C6X Options. (line 35) 50847 * msdata=none <1>: M32R/D Options. (line 40) 50848 * msdata=none <2>: RS/6000 and PowerPC Options. 50849 (line 728) 50850 * msdata=sdata: M32R/D Options. (line 49) 50851 * msdata=sysv: RS/6000 and PowerPC Options. 50852 (line 706) 50853 * msdata=use: M32R/D Options. (line 53) 50854 * msdram: Blackfin Options. (line 171) 50855 * msdram <1>: MeP Options. (line 110) 50856 * msecure-plt: RS/6000 and PowerPC Options. 50857 (line 180) 50858 * msel-sched-dont-check-control-spec: IA-64 Options. (line 203) 50859 * msep-data: Blackfin Options. (line 109) 50860 * mserialize-volatile: Xtensa Options. (line 35) 50861 * msetlb: MN10300 Options. (line 64) 50862 * mshared-library-id: Blackfin Options. (line 102) 50863 * mshort: M680x0 Options. (line 216) 50864 * msign-extend-enabled: LM32 Options. (line 18) 50865 * msim: Blackfin Options. (line 36) 50866 * msim <1>: C6X Options. (line 19) 50867 * msim <2>: CR16 Options. (line 18) 50868 * msim <3>: M32C Options. (line 13) 50869 * msim <4>: MeP Options. (line 114) 50870 * msim <5>: RL78 Options. (line 7) 50871 * msim <6>: RS/6000 and PowerPC Options. 50872 (line 652) 50873 * msim <7>: RX Options. (line 71) 50874 * msim <8>: Xstormy16 Options. (line 9) 50875 * msimnovec: MeP Options. (line 117) 50876 * msimple-fpu: RS/6000 and PowerPC Options. 50877 (line 372) 50878 * msingle-exit: MMIX Options. (line 65) 50879 * msingle-float: MIPS Options. (line 243) 50880 * msingle-float <1>: RS/6000 and PowerPC Options. 50881 (line 368) 50882 * msingle-pic-base: ARM Options. (line 213) 50883 * msingle-pic-base <1>: RS/6000 and PowerPC Options. 50884 (line 511) 50885 * msio: HPPA Options. (line 104) 50886 * mslow-bytes: MCore Options. (line 35) 50887 * msmall-data: DEC Alpha Options. (line 187) 50888 * msmall-data-limit: RX Options. (line 47) 50889 * msmall-divides: MicroBlaze Options. (line 39) 50890 * msmall-exec: S/390 and zSeries Options. 50891 (line 79) 50892 * msmall-mem: SPU Options. (line 38) 50893 * msmall-model: FR30 Options. (line 9) 50894 * msmall-text: DEC Alpha Options. (line 205) 50895 * msmall16: Adapteva Epiphany Options. 50896 (line 66) 50897 * msmartmips: MIPS Options. (line 279) 50898 * msoft-float: DEC Alpha Options. (line 10) 50899 * msoft-float <1>: FRV Options. (line 27) 50900 * msoft-float <2>: HPPA Options. (line 90) 50901 * msoft-float <3>: i386 and x86-64 Options. 50902 (line 287) 50903 * msoft-float <4>: M680x0 Options. (line 200) 50904 * msoft-float <5>: MicroBlaze Options. (line 7) 50905 * msoft-float <6>: MIPS Options. (line 229) 50906 * msoft-float <7>: PDP-11 Options. (line 13) 50907 * msoft-float <8>: RS/6000 and PowerPC Options. 50908 (line 362) 50909 * msoft-float <9>: S/390 and zSeries Options. 50910 (line 11) 50911 * msoft-float <10>: SPARC Options. (line 39) 50912 * msoft-float <11>: V850 Options. (line 113) 50913 * msoft-quad-float: SPARC Options. (line 59) 50914 * msp8: AVR Options. (line 185) 50915 * mspace: SH Options. (line 220) 50916 * mspace <1>: V850 Options. (line 30) 50917 * mspe: RS/6000 and PowerPC Options. 50918 (line 200) 50919 * mspecld-anomaly: Blackfin Options. (line 50) 50920 * msplit-addresses: MIPS Options. (line 424) 50921 * msplit-vecmove-early: Adapteva Epiphany Options. 50922 (line 126) 50923 * msse: i386 and x86-64 Options. 50924 (line 564) 50925 * msse2avx: i386 and x86-64 Options. 50926 (line 804) 50927 * msseregparm: i386 and x86-64 Options. 50928 (line 412) 50929 * mstack-align: CRIS Options. (line 55) 50930 * mstack-bias: SPARC Options. (line 313) 50931 * mstack-check-l1: Blackfin Options. (line 76) 50932 * mstack-guard: S/390 and zSeries Options. 50933 (line 154) 50934 * mstack-increment: MCore Options. (line 50) 50935 * mstack-offset: Adapteva Epiphany Options. 50936 (line 37) 50937 * mstack-size: S/390 and zSeries Options. 50938 (line 154) 50939 * mstackrealign: i386 and x86-64 Options. 50940 (line 455) 50941 * mstdmain: SPU Options. (line 44) 50942 * mstrict-align: AArch64 Options. (line 38) 50943 * mstrict-align <1>: M680x0 Options. (line 283) 50944 * mstrict-align <2>: RS/6000 and PowerPC Options. 50945 (line 463) 50946 * mstrict-X: AVR Options. (line 198) 50947 * mstring: RS/6000 and PowerPC Options. 50948 (line 399) 50949 * mstringop-strategy=ALG: i386 and x86-64 Options. 50950 (line 768) 50951 * mstructure-size-boundary: ARM Options. (line 170) 50952 * msvr4-struct-return: RS/6000 and PowerPC Options. 50953 (line 604) 50954 * msym32: MIPS Options. (line 322) 50955 * msynci: MIPS Options. (line 664) 50956 * MT: Preprocessor Options. 50957 (line 251) 50958 * mtarget-align: Xtensa Options. (line 59) 50959 * mtas: SH Options. (line 211) 50960 * mtda: V850 Options. (line 34) 50961 * mtext-section-literals: Xtensa Options. (line 47) 50962 * mtf: MeP Options. (line 121) 50963 * mthread: i386 and x86-64 Windows Options. 50964 (line 26) 50965 * mthreads: i386 and x86-64 Options. 50966 (line 745) 50967 * mthumb: ARM Options. (line 248) 50968 * mthumb-interwork: ARM Options. (line 25) 50969 * mtiny-stack: AVR Options. (line 212) 50970 * mtiny=: MeP Options. (line 125) 50971 * mTLS: FRV Options. (line 90) 50972 * mtls: FRV Options. (line 94) 50973 * mtls-dialect: ARM Options. (line 290) 50974 * mtls-dialect <1>: i386 and x86-64 Options. 50975 (line 723) 50976 * mtls-dialect=desc: AArch64 Options. (line 47) 50977 * mtls-dialect=traditional: AArch64 Options. (line 51) 50978 * mtls-direct-seg-refs: i386 and x86-64 Options. 50979 (line 794) 50980 * mtls-markers: RS/6000 and PowerPC Options. 50981 (line 785) 50982 * mtls-size: IA-64 Options. (line 112) 50983 * mtoc: RS/6000 and PowerPC Options. 50984 (line 488) 50985 * mtomcat-stats: FRV Options. (line 254) 50986 * mtoplevel-symbols: MMIX Options. (line 39) 50987 * mtp: ARM Options. (line 282) 50988 * mtpcs-frame: ARM Options. (line 255) 50989 * mtpcs-leaf-frame: ARM Options. (line 261) 50990 * mtpf-trace: S/390 and zSeries Options. 50991 (line 129) 50992 * mtrap-precision: DEC Alpha Options. (line 109) 50993 * mtune: AArch64 Options. (line 82) 50994 * mtune <1>: ARM Options. (line 90) 50995 * mtune <2>: CRIS Options. (line 17) 50996 * mtune <3>: DEC Alpha Options. (line 259) 50997 * mtune <4>: i386 and x86-64 Options. 50998 (line 191) 50999 * mtune <5>: IA-64 Options. (line 116) 51000 * mtune <6>: M680x0 Options. (line 68) 51001 * mtune <7>: MIPS Options. (line 63) 51002 * mtune <8>: MN10300 Options. (line 30) 51003 * mtune <9>: RS/6000 and PowerPC Options. 51004 (line 110) 51005 * mtune <10>: S/390 and zSeries Options. 51006 (line 122) 51007 * mtune <11>: SPARC Options. (line 180) 51008 * muclibc: GNU/Linux Options. (line 13) 51009 * muls: Score Options. (line 18) 51010 * multcost=NUMBER: SH Options. (line 233) 51011 * multilib-library-pic: FRV Options. (line 110) 51012 * multiply-enabled: LM32 Options. (line 15) 51013 * multiply_defined: Darwin Options. (line 196) 51014 * multiply_defined_unused: Darwin Options. (line 196) 51015 * multi_module: Darwin Options. (line 196) 51016 * munaligned-access: ARM Options. (line 314) 51017 * munaligned-doubles: SPARC Options. (line 73) 51018 * municode: i386 and x86-64 Windows Options. 51019 (line 30) 51020 * muninit-const-in-rodata: MIPS Options. (line 394) 51021 * munix: VAX Options. (line 9) 51022 * munix-asm: PDP-11 Options. (line 68) 51023 * munsafe-dma: SPU Options. (line 18) 51024 * mupdate: RS/6000 and PowerPC Options. 51025 (line 410) 51026 * muser-enabled: LM32 Options. (line 21) 51027 * muser-mode: SPARC Options. (line 85) 51028 * musermode: SH Options. (line 228) 51029 * mv850: V850 Options. (line 49) 51030 * mv850e: V850 Options. (line 79) 51031 * mv850e1: V850 Options. (line 70) 51032 * mv850e2: V850 Options. (line 66) 51033 * mv850e2v3: V850 Options. (line 61) 51034 * mv850e2v4: V850 Options. (line 57) 51035 * mv850e3v5: V850 Options. (line 52) 51036 * mv850es: V850 Options. (line 75) 51037 * mv8plus: SPARC Options. (line 194) 51038 * mveclibabi: i386 and x86-64 Options. 51039 (line 691) 51040 * mveclibabi <1>: RS/6000 and PowerPC Options. 51041 (line 841) 51042 * mvect8-ret-in-mem: i386 and x86-64 Options. 51043 (line 422) 51044 * mvis: SPARC Options. (line 201) 51045 * mvis2: SPARC Options. (line 207) 51046 * mvis3: SPARC Options. (line 215) 51047 * mvliw-branch: FRV Options. (line 201) 51048 * mvms-return-codes: VMS Options. (line 9) 51049 * mvolatile-asm-stop: IA-64 Options. (line 32) 51050 * mvr4130-align: MIPS Options. (line 653) 51051 * mvrsave: RS/6000 and PowerPC Options. 51052 (line 170) 51053 * mvsx: RS/6000 and PowerPC Options. 51054 (line 214) 51055 * mvxworks: RS/6000 and PowerPC Options. 51056 (line 673) 51057 * mvzeroupper: i386 and x86-64 Options. 51058 (line 601) 51059 * mwarn-cell-microcode: RS/6000 and PowerPC Options. 51060 (line 176) 51061 * mwarn-dynamicstack: S/390 and zSeries Options. 51062 (line 148) 51063 * mwarn-framesize: S/390 and zSeries Options. 51064 (line 140) 51065 * mwarn-multiple-fast-interrupts: RX Options. (line 143) 51066 * mwarn-reloc: SPU Options. (line 10) 51067 * mwide-bitfields: MCore Options. (line 23) 51068 * mwin32: i386 and x86-64 Windows Options. 51069 (line 35) 51070 * mwindows: i386 and x86-64 Windows Options. 51071 (line 41) 51072 * mword-relocations: ARM Options. (line 301) 51073 * mwords-little-endian: ARM Options. (line 66) 51074 * mx32: i386 and x86-64 Options. 51075 (line 832) 51076 * mxgot: M680x0 Options. (line 315) 51077 * mxgot <1>: MIPS Options. (line 191) 51078 * mxilinx-fpu: RS/6000 and PowerPC Options. 51079 (line 383) 51080 * mxl-barrel-shift: MicroBlaze Options. (line 33) 51081 * mxl-compat: RS/6000 and PowerPC Options. 51082 (line 320) 51083 * mxl-float-convert: MicroBlaze Options. (line 51) 51084 * mxl-float-sqrt: MicroBlaze Options. (line 54) 51085 * mxl-gp-opt: MicroBlaze Options. (line 45) 51086 * mxl-multiply-high: MicroBlaze Options. (line 48) 51087 * mxl-pattern-compare: MicroBlaze Options. (line 36) 51088 * mxl-reorder: MicroBlaze Options. (line 63) 51089 * mxl-soft-div: MicroBlaze Options. (line 30) 51090 * mxl-soft-mul: MicroBlaze Options. (line 27) 51091 * mxl-stack-check: MicroBlaze Options. (line 42) 51092 * myellowknife: RS/6000 and PowerPC Options. 51093 (line 668) 51094 * mzarch: S/390 and zSeries Options. 51095 (line 94) 51096 * mzda: V850 Options. (line 45) 51097 * mzdcbranch: SH Options. (line 396) 51098 * mzero-extend: MMIX Options. (line 26) 51099 * no-canonical-prefixes: Overall Options. (line 334) 51100 * no-integrated-cpp: Preprocessor Options. 51101 (line 34) 51102 * no-sysroot-suffix: Directory Options. (line 109) 51103 * noall_load: Darwin Options. (line 196) 51104 * nocpp: MIPS Options. (line 491) 51105 * nodefaultlibs: Link Options. (line 62) 51106 * nofixprebinding: Darwin Options. (line 196) 51107 * nofpu: RX Options. (line 17) 51108 * nolibdld: HPPA Options. (line 187) 51109 * nomultidefs: Darwin Options. (line 196) 51110 * non-static: VxWorks Options. (line 16) 51111 * noprebind: Darwin Options. (line 196) 51112 * noseglinkedit: Darwin Options. (line 196) 51113 * nostartfiles: Link Options. (line 57) 51114 * nostdinc: Preprocessor Options. 51115 (line 401) 51116 * nostdinc++: C++ Dialect Options. 51117 (line 346) 51118 * nostdinc++ <1>: Preprocessor Options. 51119 (line 406) 51120 * nostdlib: Link Options. (line 74) 51121 * no_dead_strip_inits_and_terms: Darwin Options. (line 196) 51122 * o: Overall Options. (line 192) 51123 * O: Optimize Options. (line 39) 51124 * o <1>: Preprocessor Options. 51125 (line 87) 51126 * O0: Optimize Options. (line 128) 51127 * O1: Optimize Options. (line 39) 51128 * O2: Optimize Options. (line 83) 51129 * O3: Optimize Options. (line 121) 51130 * Ofast: Optimize Options. (line 142) 51131 * Og: Optimize Options. (line 148) 51132 * Os: Optimize Options. (line 132) 51133 * p: Debugging Options. (line 328) 51134 * P: Preprocessor Options. 51135 (line 647) 51136 * pagezero_size: Darwin Options. (line 196) 51137 * param: Optimize Options. (line 2237) 51138 * pass-exit-codes: Overall Options. (line 150) 51139 * pedantic: Standards. (line 16) 51140 * pedantic <1>: Warning Options. (line 71) 51141 * pedantic <2>: Preprocessor Options. 51142 (line 175) 51143 * pedantic <3>: C Extensions. (line 6) 51144 * pedantic <4>: Alternate Keywords. (line 30) 51145 * pedantic <5>: Warnings and Errors. 51146 (line 25) 51147 * pedantic-errors: Standards. (line 16) 51148 * pedantic-errors <1>: Warning Options. (line 112) 51149 * pedantic-errors <2>: Preprocessor Options. 51150 (line 180) 51151 * pedantic-errors <3>: Non-bugs. (line 216) 51152 * pedantic-errors <4>: Warnings and Errors. 51153 (line 25) 51154 * pg: Debugging Options. (line 334) 51155 * pie: Link Options. (line 99) 51156 * pipe: Overall Options. (line 215) 51157 * prebind: Darwin Options. (line 196) 51158 * prebind_all_twolevel_modules: Darwin Options. (line 196) 51159 * print-file-name: Debugging Options. (line 1284) 51160 * print-libgcc-file-name: Debugging Options. (line 1318) 51161 * print-multi-directory: Debugging Options. (line 1290) 51162 * print-multi-lib: Debugging Options. (line 1295) 51163 * print-multi-os-directory: Debugging Options. (line 1302) 51164 * print-multiarch: Debugging Options. (line 1311) 51165 * print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 51166 (line 203) 51167 * print-prog-name: Debugging Options. (line 1315) 51168 * print-search-dirs: Debugging Options. (line 1326) 51169 * print-sysroot: Debugging Options. (line 1339) 51170 * print-sysroot-headers-suffix: Debugging Options. (line 1346) 51171 * private_bundle: Darwin Options. (line 196) 51172 * pthread: RS/6000 and PowerPC Options. 51173 (line 792) 51174 * pthread <1>: Solaris 2 Options. (line 30) 51175 * pthreads: Solaris 2 Options. (line 24) 51176 * Q: Debugging Options. (line 340) 51177 * Qn: System V Options. (line 18) 51178 * Qy: System V Options. (line 14) 51179 * rdynamic: Link Options. (line 105) 51180 * read_only_relocs: Darwin Options. (line 196) 51181 * remap: Preprocessor Options. 51182 (line 694) 51183 * S: Overall Options. (line 175) 51184 * S <1>: Link Options. (line 20) 51185 * s: Link Options. (line 112) 51186 * save-temps: Debugging Options. (line 1193) 51187 * save-temps=obj: Debugging Options. (line 1219) 51188 * sectalign: Darwin Options. (line 196) 51189 * sectcreate: Darwin Options. (line 196) 51190 * sectobjectsymbols: Darwin Options. (line 196) 51191 * sectobjectsymbols <1>: Darwin Options. (line 196) 51192 * sectorder: Darwin Options. (line 196) 51193 * seg1addr: Darwin Options. (line 196) 51194 * segaddr: Darwin Options. (line 196) 51195 * seglinkedit: Darwin Options. (line 196) 51196 * segprot: Darwin Options. (line 196) 51197 * segs_read_only_addr: Darwin Options. (line 196) 51198 * segs_read_only_addr <1>: Darwin Options. (line 196) 51199 * segs_read_write_addr: Darwin Options. (line 196) 51200 * segs_read_write_addr <1>: Darwin Options. (line 196) 51201 * seg_addr_table: Darwin Options. (line 196) 51202 * seg_addr_table_filename: Darwin Options. (line 196) 51203 * shared: Link Options. (line 120) 51204 * shared-libgcc: Link Options. (line 128) 51205 * short-calls: Adapteva Epiphany Options. 51206 (line 61) 51207 * sim: CRIS Options. (line 95) 51208 * sim2: CRIS Options. (line 101) 51209 * single_module: Darwin Options. (line 196) 51210 * specs: Directory Options. (line 86) 51211 * static: Link Options. (line 116) 51212 * static <1>: Darwin Options. (line 196) 51213 * static <2>: HPPA Options. (line 191) 51214 * static-libgcc: Link Options. (line 128) 51215 * std: Standards. (line 16) 51216 * std <1>: C Dialect Options. (line 46) 51217 * std <2>: Other Builtins. (line 21) 51218 * std <3>: Non-bugs. (line 107) 51219 * std=: Preprocessor Options. 51220 (line 340) 51221 * sub_library: Darwin Options. (line 196) 51222 * sub_umbrella: Darwin Options. (line 196) 51223 * symbolic: Link Options. (line 190) 51224 * sysroot: Directory Options. (line 94) 51225 * T: Link Options. (line 196) 51226 * target-help: Overall Options. (line 230) 51227 * target-help <1>: Preprocessor Options. 51228 (line 699) 51229 * threads: HPPA Options. (line 204) 51230 * time: Debugging Options. (line 1234) 51231 * tno-android-cc: GNU/Linux Options. (line 31) 51232 * tno-android-ld: GNU/Linux Options. (line 35) 51233 * traditional: C Dialect Options. (line 311) 51234 * traditional <1>: Incompatibilities. (line 6) 51235 * traditional-cpp: C Dialect Options. (line 311) 51236 * traditional-cpp <1>: Preprocessor Options. 51237 (line 677) 51238 * trigraphs: C Dialect Options. (line 306) 51239 * trigraphs <1>: Preprocessor Options. 51240 (line 681) 51241 * twolevel_namespace: Darwin Options. (line 196) 51242 * U: Preprocessor Options. 51243 (line 69) 51244 * u: Link Options. (line 228) 51245 * umbrella: Darwin Options. (line 196) 51246 * undef: Preprocessor Options. 51247 (line 73) 51248 * undefined: Darwin Options. (line 196) 51249 * unexported_symbols_list: Darwin Options. (line 196) 51250 * v: Overall Options. (line 203) 51251 * v <1>: Preprocessor Options. 51252 (line 703) 51253 * version: Overall Options. (line 338) 51254 * version <1>: Preprocessor Options. 51255 (line 715) 51256 * w: Warning Options. (line 25) 51257 * W: Warning Options. (line 166) 51258 * W <1>: Warning Options. (line 1248) 51259 * W <2>: Warning Options. (line 1327) 51260 * w <1>: Preprocessor Options. 51261 (line 171) 51262 * W <3>: Incompatibilities. (line 64) 51263 * Wa: Assembler Options. (line 9) 51264 * Wabi: C++ Dialect Options. 51265 (line 360) 51266 * Waddr-space-convert: AVR Options. (line 215) 51267 * Waddress: Warning Options. (line 1165) 51268 * Waggregate-return: Warning Options. (line 1183) 51269 * Waggressive-loop-optimizations: Warning Options. (line 1188) 51270 * Wall: Warning Options. (line 116) 51271 * Wall <1>: Preprocessor Options. 51272 (line 93) 51273 * Wall <2>: Standard Libraries. (line 6) 51274 * Warray-bounds: Warning Options. (line 825) 51275 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 51276 (line 157) 51277 * Wattributes: Warning Options. (line 1193) 51278 * Wbad-function-cast: Warning Options. (line 1040) 51279 * Wbuiltin-macro-redefined: Warning Options. (line 1199) 51280 * Wcast-align: Warning Options. (line 1071) 51281 * Wcast-qual: Warning Options. (line 1055) 51282 * Wchar-subscripts: Warning Options. (line 205) 51283 * Wclobbered: Warning Options. (line 1090) 51284 * Wcomment: Warning Options. (line 210) 51285 * Wcomment <1>: Preprocessor Options. 51286 (line 101) 51287 * Wcomments: Preprocessor Options. 51288 (line 101) 51289 * Wconversion: Warning Options. (line 1094) 51290 * Wconversion-null: Warning Options. (line 1112) 51291 * Wctor-dtor-privacy: C++ Dialect Options. 51292 (line 467) 51293 * Wdeclaration-after-statement: Warning Options. (line 957) 51294 * Wdelete-non-virtual-dtor: C++ Dialect Options. 51295 (line 474) 51296 * Wdeprecated: Warning Options. (line 1314) 51297 * Wdeprecated-declarations: Warning Options. (line 1318) 51298 * Wdisabled-optimization: Warning Options. (line 1473) 51299 * Wdiv-by-zero: Warning Options. (line 830) 51300 * Wdouble-promotion: Warning Options. (line 234) 51301 * weak_reference_mismatches: Darwin Options. (line 196) 51302 * Weffc++: C++ Dialect Options. 51303 (line 552) 51304 * Wempty-body: Warning Options. (line 1123) 51305 * Wendif-labels: Warning Options. (line 967) 51306 * Wendif-labels <1>: Preprocessor Options. 51307 (line 148) 51308 * Wenum-compare: Warning Options. (line 1127) 51309 * Werror: Warning Options. (line 28) 51310 * Werror <1>: Preprocessor Options. 51311 (line 161) 51312 * Werror=: Warning Options. (line 31) 51313 * Wextra: Warning Options. (line 166) 51314 * Wextra <1>: Warning Options. (line 1248) 51315 * Wextra <2>: Warning Options. (line 1327) 51316 * Wfatal-errors: Warning Options. (line 48) 51317 * Wfloat-equal: Warning Options. (line 857) 51318 * Wformat: Warning Options. (line 253) 51319 * Wformat <1>: Warning Options. (line 804) 51320 * Wformat <2>: Function Attributes. 51321 (line 414) 51322 * Wformat-contains-nul: Warning Options. (line 287) 51323 * Wformat-extra-args: Warning Options. (line 291) 51324 * Wformat-nonliteral: Warning Options. (line 315) 51325 * Wformat-nonliteral <1>: Function Attributes. 51326 (line 479) 51327 * Wformat-security: Warning Options. (line 320) 51328 * Wformat-y2k: Warning Options. (line 332) 51329 * Wformat-zero-length: Warning Options. (line 305) 51330 * Wformat=: Warning Options. (line 253) 51331 * Wframe-larger-than: Warning Options. (line 981) 51332 * Wfree-nonheap-object: Warning Options. (line 990) 51333 * whatsloaded: Darwin Options. (line 196) 51334 * whyload: Darwin Options. (line 196) 51335 * Wignored-qualifiers: Warning Options. (line 372) 51336 * Wimplicit: Warning Options. (line 368) 51337 * Wimplicit-function-declaration: Warning Options. (line 362) 51338 * Wimplicit-int: Warning Options. (line 358) 51339 * Winherited-variadic-ctor: Warning Options. (line 1383) 51340 * Winit-self: Warning Options. (line 343) 51341 * Winline: Warning Options. (line 1388) 51342 * Winline <1>: Inline. (line 63) 51343 * Wint-to-pointer-cast: Warning Options. (line 1415) 51344 * Winvalid-offsetof: Warning Options. (line 1401) 51345 * Winvalid-pch: Warning Options. (line 1424) 51346 * Wjump-misses-init: Warning Options. (line 1133) 51347 * Wl: Link Options. (line 220) 51348 * Wlarger-than-LEN: Warning Options. (line 978) 51349 * Wlarger-than=LEN: Warning Options. (line 978) 51350 * Wliteral-suffix: C++ Dialect Options. 51351 (line 481) 51352 * Wlogical-op: Warning Options. (line 1178) 51353 * Wlong-long: Warning Options. (line 1428) 51354 * Wmain: Warning Options. (line 383) 51355 * Wmaybe-uninitialized: Warning Options. (line 641) 51356 * Wmissing-braces: Warning Options. (line 390) 51357 * Wmissing-declarations: Warning Options. (line 1238) 51358 * Wmissing-field-initializers: Warning Options. (line 1248) 51359 * Wmissing-format-attribute: Warning Options. (line 804) 51360 * Wmissing-include-dirs: Warning Options. (line 401) 51361 * Wmissing-parameter-type: Warning Options. (line 1220) 51362 * Wmissing-prototypes: Warning Options. (line 1228) 51363 * Wmultichar: Warning Options. (line 1266) 51364 * Wnarrowing: C++ Dialect Options. 51365 (line 502) 51366 * Wnested-externs: Warning Options. (line 1380) 51367 * Wno-abi: C++ Dialect Options. 51368 (line 360) 51369 * Wno-address: Warning Options. (line 1165) 51370 * Wno-aggregate-return: Warning Options. (line 1183) 51371 * Wno-aggressive-loop-optimizations: Warning Options. (line 1188) 51372 * Wno-all: Warning Options. (line 116) 51373 * Wno-array-bounds: Warning Options. (line 825) 51374 * Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 51375 (line 157) 51376 * Wno-attributes: Warning Options. (line 1193) 51377 * Wno-bad-function-cast: Warning Options. (line 1040) 51378 * Wno-builtin-macro-redefined: Warning Options. (line 1199) 51379 * Wno-cast-align: Warning Options. (line 1071) 51380 * Wno-cast-qual: Warning Options. (line 1055) 51381 * Wno-char-subscripts: Warning Options. (line 205) 51382 * Wno-clobbered: Warning Options. (line 1090) 51383 * Wno-comment: Warning Options. (line 210) 51384 * Wno-conversion: Warning Options. (line 1094) 51385 * Wno-conversion-null: Warning Options. (line 1112) 51386 * Wno-coverage-mismatch: Warning Options. (line 215) 51387 * Wno-ctor-dtor-privacy: C++ Dialect Options. 51388 (line 467) 51389 * Wno-declaration-after-statement: Warning Options. (line 957) 51390 * Wno-delete-non-virtual-dtor: C++ Dialect Options. 51391 (line 474) 51392 * Wno-deprecated: Warning Options. (line 1314) 51393 * Wno-deprecated-declarations: Warning Options. (line 1318) 51394 * Wno-disabled-optimization: Warning Options. (line 1473) 51395 * Wno-div-by-zero: Warning Options. (line 830) 51396 * Wno-double-promotion: Warning Options. (line 234) 51397 * Wno-effc++: C++ Dialect Options. 51398 (line 552) 51399 * Wno-empty-body: Warning Options. (line 1123) 51400 * Wno-endif-labels: Warning Options. (line 967) 51401 * Wno-enum-compare: Warning Options. (line 1127) 51402 * Wno-error: Warning Options. (line 28) 51403 * Wno-error=: Warning Options. (line 31) 51404 * Wno-extra: Warning Options. (line 166) 51405 * Wno-extra <1>: Warning Options. (line 1248) 51406 * Wno-extra <2>: Warning Options. (line 1327) 51407 * Wno-fatal-errors: Warning Options. (line 48) 51408 * Wno-float-equal: Warning Options. (line 857) 51409 * Wno-format: Warning Options. (line 253) 51410 * Wno-format <1>: Warning Options. (line 804) 51411 * Wno-format-contains-nul: Warning Options. (line 287) 51412 * Wno-format-extra-args: Warning Options. (line 291) 51413 * Wno-format-nonliteral: Warning Options. (line 315) 51414 * Wno-format-security: Warning Options. (line 320) 51415 * Wno-format-y2k: Warning Options. (line 332) 51416 * Wno-format-zero-length: Warning Options. (line 305) 51417 * Wno-free-nonheap-object: Warning Options. (line 990) 51418 * Wno-ignored-qualifiers: Warning Options. (line 372) 51419 * Wno-implicit: Warning Options. (line 368) 51420 * Wno-implicit-function-declaration: Warning Options. (line 362) 51421 * Wno-implicit-int: Warning Options. (line 358) 51422 * Wno-inherited-variadic-ctor: Warning Options. (line 1383) 51423 * Wno-init-self: Warning Options. (line 343) 51424 * Wno-inline: Warning Options. (line 1388) 51425 * Wno-int-to-pointer-cast: Warning Options. (line 1415) 51426 * Wno-invalid-offsetof: Warning Options. (line 1401) 51427 * Wno-invalid-pch: Warning Options. (line 1424) 51428 * Wno-jump-misses-init: Warning Options. (line 1133) 51429 * Wno-literal-suffix: C++ Dialect Options. 51430 (line 481) 51431 * Wno-logical-op: Warning Options. (line 1178) 51432 * Wno-long-long: Warning Options. (line 1428) 51433 * Wno-main: Warning Options. (line 383) 51434 * Wno-maybe-uninitialized: Warning Options. (line 641) 51435 * Wno-missing-braces: Warning Options. (line 390) 51436 * Wno-missing-declarations: Warning Options. (line 1238) 51437 * Wno-missing-field-initializers: Warning Options. (line 1248) 51438 * Wno-missing-format-attribute: Warning Options. (line 804) 51439 * Wno-missing-include-dirs: Warning Options. (line 401) 51440 * Wno-missing-parameter-type: Warning Options. (line 1220) 51441 * Wno-missing-prototypes: Warning Options. (line 1228) 51442 * Wno-mudflap: Warning Options. (line 1493) 51443 * Wno-multichar: Warning Options. (line 1266) 51444 * Wno-narrowing: C++ Dialect Options. 51445 (line 502) 51446 * Wno-nested-externs: Warning Options. (line 1380) 51447 * Wno-noexcept: C++ Dialect Options. 51448 (line 515) 51449 * Wno-non-template-friend: C++ Dialect Options. 51450 (line 587) 51451 * Wno-non-virtual-dtor: C++ Dialect Options. 51452 (line 521) 51453 * Wno-nonnull: Warning Options. (line 336) 51454 * Wno-old-style-cast: C++ Dialect Options. 51455 (line 603) 51456 * Wno-old-style-declaration: Warning Options. (line 1210) 51457 * Wno-old-style-definition: Warning Options. (line 1216) 51458 * Wno-overflow: Warning Options. (line 1324) 51459 * Wno-overlength-strings: Warning Options. (line 1497) 51460 * Wno-overloaded-virtual: C++ Dialect Options. 51461 (line 609) 51462 * Wno-override-init: Warning Options. (line 1327) 51463 * Wno-packed: Warning Options. (line 1335) 51464 * Wno-packed-bitfield-compat: Warning Options. (line 1352) 51465 * Wno-padded: Warning Options. (line 1369) 51466 * Wno-parentheses: Warning Options. (line 404) 51467 * Wno-pedantic-ms-format: Warning Options. (line 1020) 51468 * Wno-pmf-conversions: C++ Dialect Options. 51469 (line 628) 51470 * Wno-pmf-conversions <1>: Bound member functions. 51471 (line 35) 51472 * Wno-pointer-arith: Warning Options. (line 1026) 51473 * Wno-pointer-sign: Warning Options. (line 1482) 51474 * Wno-pointer-to-int-cast: Warning Options. (line 1420) 51475 * Wno-pragmas: Warning Options. (line 691) 51476 * Wno-protocol: Objective-C and Objective-C++ Dialect Options. 51477 (line 161) 51478 * Wno-redundant-decls: Warning Options. (line 1376) 51479 * Wno-reorder: C++ Dialect Options. 51480 (line 527) 51481 * Wno-return-local-addr: Warning Options. (line 499) 51482 * Wno-return-type: Warning Options. (line 503) 51483 * Wno-selector: Objective-C and Objective-C++ Dialect Options. 51484 (line 171) 51485 * Wno-sequence-point: Warning Options. (line 453) 51486 * Wno-shadow: Warning Options. (line 971) 51487 * Wno-sign-compare: Warning Options. (line 1144) 51488 * Wno-sign-conversion: Warning Options. (line 1151) 51489 * Wno-sign-promo: C++ Dialect Options. 51490 (line 632) 51491 * Wno-sizeof-pointer-memaccess: Warning Options. (line 1157) 51492 * Wno-stack-protector: Warning Options. (line 1488) 51493 * Wno-strict-aliasing: Warning Options. (line 696) 51494 * Wno-strict-null-sentinel: C++ Dialect Options. 51495 (line 580) 51496 * Wno-strict-overflow: Warning Options. (line 735) 51497 * Wno-strict-prototypes: Warning Options. (line 1204) 51498 * Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 51499 (line 183) 51500 * Wno-suggest-attribute=: Warning Options. (line 784) 51501 * Wno-suggest-attribute=const: Warning Options. (line 790) 51502 * Wno-suggest-attribute=format: Warning Options. (line 804) 51503 * Wno-suggest-attribute=noreturn: Warning Options. (line 790) 51504 * Wno-suggest-attribute=pure: Warning Options. (line 790) 51505 * Wno-switch: Warning Options. (line 517) 51506 * Wno-switch-default: Warning Options. (line 525) 51507 * Wno-switch-enum: Warning Options. (line 528) 51508 * Wno-sync-nand: Warning Options. (line 537) 51509 * Wno-system-headers: Warning Options. (line 835) 51510 * Wno-traditional: Warning Options. (line 872) 51511 * Wno-traditional-conversion: Warning Options. (line 949) 51512 * Wno-trampolines: Warning Options. (line 846) 51513 * Wno-trigraphs: Warning Options. (line 542) 51514 * Wno-type-limits: Warning Options. (line 1033) 51515 * Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 51516 (line 191) 51517 * Wno-undef: Warning Options. (line 964) 51518 * Wno-uninitialized: Warning Options. (line 619) 51519 * Wno-unknown-pragmas: Warning Options. (line 684) 51520 * Wno-unsafe-loop-optimizations: Warning Options. (line 1014) 51521 * Wno-unused: Warning Options. (line 612) 51522 * Wno-unused-but-set-parameter: Warning Options. (line 547) 51523 * Wno-unused-but-set-variable: Warning Options. (line 556) 51524 * Wno-unused-function: Warning Options. (line 566) 51525 * Wno-unused-label: Warning Options. (line 571) 51526 * Wno-unused-parameter: Warning Options. (line 582) 51527 * Wno-unused-result: Warning Options. (line 589) 51528 * Wno-unused-value: Warning Options. (line 602) 51529 * Wno-unused-variable: Warning Options. (line 594) 51530 * Wno-useless-cast: Warning Options. (line 1120) 51531 * Wno-varargs: Warning Options. (line 1439) 51532 * Wno-variadic-macros: Warning Options. (line 1433) 51533 * Wno-vector-operation-performance: Warning Options. (line 1444) 51534 * Wno-virtual-move-assign: Warning Options. (line 1454) 51535 * Wno-vla: Warning Options. (line 1463) 51536 * Wno-volatile-register-var: Warning Options. (line 1467) 51537 * Wno-write-strings: Warning Options. (line 1077) 51538 * Wno-zero-as-null-pointer-constant: Warning Options. (line 1116) 51539 * Wnoexcept: C++ Dialect Options. 51540 (line 515) 51541 * Wnon-template-friend: C++ Dialect Options. 51542 (line 587) 51543 * Wnon-virtual-dtor: C++ Dialect Options. 51544 (line 521) 51545 * Wnonnull: Warning Options. (line 336) 51546 * Wnormalized=: Warning Options. (line 1272) 51547 * Wold-style-cast: C++ Dialect Options. 51548 (line 603) 51549 * Wold-style-declaration: Warning Options. (line 1210) 51550 * Wold-style-definition: Warning Options. (line 1216) 51551 * Woverflow: Warning Options. (line 1324) 51552 * Woverlength-strings: Warning Options. (line 1497) 51553 * Woverloaded-virtual: C++ Dialect Options. 51554 (line 609) 51555 * Woverride-init: Warning Options. (line 1327) 51556 * Wp: Preprocessor Options. 51557 (line 14) 51558 * Wpacked: Warning Options. (line 1335) 51559 * Wpacked-bitfield-compat: Warning Options. (line 1352) 51560 * Wpadded: Warning Options. (line 1369) 51561 * Wparentheses: Warning Options. (line 404) 51562 * Wpedantic: Warning Options. (line 71) 51563 * Wpedantic-ms-format: Warning Options. (line 1020) 51564 * Wpmf-conversions: C++ Dialect Options. 51565 (line 628) 51566 * Wpointer-arith: Warning Options. (line 1026) 51567 * Wpointer-arith <1>: Pointer Arith. (line 13) 51568 * Wpointer-sign: Warning Options. (line 1482) 51569 * Wpointer-to-int-cast: Warning Options. (line 1420) 51570 * Wpragmas: Warning Options. (line 691) 51571 * Wprotocol: Objective-C and Objective-C++ Dialect Options. 51572 (line 161) 51573 * wrapper: Overall Options. (line 341) 51574 * Wredundant-decls: Warning Options. (line 1376) 51575 * Wreorder: C++ Dialect Options. 51576 (line 527) 51577 * Wreturn-local-addr: Warning Options. (line 499) 51578 * Wreturn-type: Warning Options. (line 503) 51579 * Wselector: Objective-C and Objective-C++ Dialect Options. 51580 (line 171) 51581 * Wsequence-point: Warning Options. (line 453) 51582 * Wshadow: Warning Options. (line 971) 51583 * Wsign-compare: Warning Options. (line 1144) 51584 * Wsign-conversion: Warning Options. (line 1151) 51585 * Wsign-promo: C++ Dialect Options. 51586 (line 632) 51587 * Wsizeof-pointer-memaccess: Warning Options. (line 1157) 51588 * Wstack-protector: Warning Options. (line 1488) 51589 * Wstack-usage: Warning Options. (line 994) 51590 * Wstrict-aliasing: Warning Options. (line 696) 51591 * Wstrict-aliasing=n: Warning Options. (line 703) 51592 * Wstrict-null-sentinel: C++ Dialect Options. 51593 (line 580) 51594 * Wstrict-overflow: Warning Options. (line 735) 51595 * Wstrict-prototypes: Warning Options. (line 1204) 51596 * Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 51597 (line 183) 51598 * Wsuggest-attribute=: Warning Options. (line 784) 51599 * Wsuggest-attribute=const: Warning Options. (line 790) 51600 * Wsuggest-attribute=format: Warning Options. (line 804) 51601 * Wsuggest-attribute=noreturn: Warning Options. (line 790) 51602 * Wsuggest-attribute=pure: Warning Options. (line 790) 51603 * Wswitch: Warning Options. (line 517) 51604 * Wswitch-default: Warning Options. (line 525) 51605 * Wswitch-enum: Warning Options. (line 528) 51606 * Wsync-nand: Warning Options. (line 537) 51607 * Wsystem-headers: Warning Options. (line 835) 51608 * Wsystem-headers <1>: Preprocessor Options. 51609 (line 165) 51610 * Wtraditional: Warning Options. (line 872) 51611 * Wtraditional <1>: Preprocessor Options. 51612 (line 118) 51613 * Wtraditional-conversion: Warning Options. (line 949) 51614 * Wtrampolines: Warning Options. (line 846) 51615 * Wtrigraphs: Warning Options. (line 542) 51616 * Wtrigraphs <1>: Preprocessor Options. 51617 (line 106) 51618 * Wtype-limits: Warning Options. (line 1033) 51619 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 51620 (line 191) 51621 * Wundef: Warning Options. (line 964) 51622 * Wundef <1>: Preprocessor Options. 51623 (line 124) 51624 * Wuninitialized: Warning Options. (line 619) 51625 * Wunknown-pragmas: Warning Options. (line 684) 51626 * Wunsafe-loop-optimizations: Warning Options. (line 1014) 51627 * Wunsuffixed-float-constants: Warning Options. (line 1512) 51628 * Wunused: Warning Options. (line 612) 51629 * Wunused-but-set-parameter: Warning Options. (line 547) 51630 * Wunused-but-set-variable: Warning Options. (line 556) 51631 * Wunused-function: Warning Options. (line 566) 51632 * Wunused-label: Warning Options. (line 571) 51633 * Wunused-local-typedefs: Warning Options. (line 578) 51634 * Wunused-macros: Preprocessor Options. 51635 (line 129) 51636 * Wunused-parameter: Warning Options. (line 582) 51637 * Wunused-result: Warning Options. (line 589) 51638 * Wunused-value: Warning Options. (line 602) 51639 * Wunused-variable: Warning Options. (line 594) 51640 * Wuseless-cast: Warning Options. (line 1120) 51641 * Wvarargs: Warning Options. (line 1439) 51642 * Wvariadic-macros: Warning Options. (line 1433) 51643 * Wvector-operation-performance: Warning Options. (line 1444) 51644 * Wvirtual-move-assign: Warning Options. (line 1454) 51645 * Wvla: Warning Options. (line 1463) 51646 * Wvolatile-register-var: Warning Options. (line 1467) 51647 * Wwrite-strings: Warning Options. (line 1077) 51648 * Wzero-as-null-pointer-constant: Warning Options. (line 1116) 51649 * x: Overall Options. (line 126) 51650 * x <1>: Preprocessor Options. 51651 (line 324) 51652 * Xassembler: Assembler Options. (line 13) 51653 * Xbind-lazy: VxWorks Options. (line 26) 51654 * Xbind-now: VxWorks Options. (line 30) 51655 * Xlinker: Link Options. (line 202) 51656 * Xpreprocessor: Preprocessor Options. 51657 (line 25) 51658 * Ym: System V Options. (line 26) 51659 * YP: System V Options. (line 22) 51660 51661 51662 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 51663 51664 Keyword Index 51665 ************* 51666 51667 [index] 51668 * Menu: 51669 51670 * '!' in constraint: Multi-Alternative. (line 33) 51671 * '#' in constraint: Modifiers. (line 57) 51672 * '#pragma': Pragmas. (line 6) 51673 * #pragma implementation: C++ Interface. (line 39) 51674 * '#pragma implementation', implied: C++ Interface. (line 46) 51675 * #pragma interface: C++ Interface. (line 20) 51676 * '#pragma', reason for not using: Function Attributes. 51677 (line 1875) 51678 * $: Dollar Signs. (line 6) 51679 * '%' in constraint: Modifiers. (line 45) 51680 * '%include': Spec Files. (line 26) 51681 * '%include_noerr': Spec Files. (line 30) 51682 * '%rename': Spec Files. (line 34) 51683 * '&' in constraint: Modifiers. (line 25) 51684 * ''': Incompatibilities. (line 116) 51685 * '*' in constraint: Modifiers. (line 62) 51686 * *__builtin_assume_aligned: Other Builtins. (line 332) 51687 * '+' in constraint: Modifiers. (line 12) 51688 * '-lgcc', use with '-nodefaultlibs': Link Options. (line 85) 51689 * '-lgcc', use with '-nostdlib': Link Options. (line 85) 51690 * '-march' feature modifiers: AArch64 Options. (line 91) 51691 * '-mcpu' feature modifiers: AArch64 Options. (line 91) 51692 * '-nodefaultlibs' and unresolved references: Link Options. (line 85) 51693 * '-nostdlib' and unresolved references: Link Options. (line 85) 51694 * .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 51695 (line 739) 51696 * '//': C++ Comments. (line 6) 51697 * '0' in constraint: Simple Constraints. (line 125) 51698 * '<' in constraint: Simple Constraints. (line 47) 51699 * '=' in constraint: Modifiers. (line 8) 51700 * '>' in constraint: Simple Constraints. (line 59) 51701 * '?' in constraint: Multi-Alternative. (line 27) 51702 * '?:' extensions: Conditionals. (line 6) 51703 * '?:' side effect: Conditionals. (line 20) 51704 * '_' in variables in macros: Typeof. (line 46) 51705 * '_Accum' data type: Fixed-Point. (line 6) 51706 * '_Complex' keyword: Complex. (line 6) 51707 * '_Decimal128' data type: Decimal Float. (line 6) 51708 * '_Decimal32' data type: Decimal Float. (line 6) 51709 * '_Decimal64' data type: Decimal Float. (line 6) 51710 * _Exit: Other Builtins. (line 6) 51711 * _exit: Other Builtins. (line 6) 51712 * '_Fract' data type: Fixed-Point. (line 6) 51713 * _HTM_FIRST_USER_ABORT_CODE: S/390 System z Built-in Functions. 51714 (line 44) 51715 * '_Sat' data type: Fixed-Point. (line 6) 51716 * _xabort: X86 transactional memory intrinsics. 51717 (line 61) 51718 * _xbegin: X86 transactional memory intrinsics. 51719 (line 19) 51720 * _xend: X86 transactional memory intrinsics. 51721 (line 52) 51722 * _xtest: X86 transactional memory intrinsics. 51723 (line 57) 51724 * __atomic_add_fetch: __atomic Builtins. (line 153) 51725 * __atomic_always_lock_free: __atomic Builtins. (line 230) 51726 * __atomic_and_fetch: __atomic Builtins. (line 157) 51727 * __atomic_clear: __atomic Builtins. (line 204) 51728 * __atomic_compare_exchange: __atomic Builtins. (line 145) 51729 * __atomic_compare_exchange_n: __atomic Builtins. (line 124) 51730 * __atomic_exchange: __atomic Builtins. (line 118) 51731 * __atomic_exchange_n: __atomic Builtins. (line 108) 51732 * __atomic_fetch_add: __atomic Builtins. (line 172) 51733 * __atomic_fetch_and: __atomic Builtins. (line 176) 51734 * __atomic_fetch_nand: __atomic Builtins. (line 182) 51735 * __atomic_fetch_or: __atomic Builtins. (line 180) 51736 * __atomic_fetch_sub: __atomic Builtins. (line 174) 51737 * __atomic_fetch_xor: __atomic Builtins. (line 178) 51738 * __atomic_is_lock_free: __atomic Builtins. (line 244) 51739 * __atomic_load: __atomic Builtins. (line 90) 51740 * __atomic_load_n: __atomic Builtins. (line 83) 51741 * __atomic_nand_fetch: __atomic Builtins. (line 163) 51742 * __atomic_or_fetch: __atomic Builtins. (line 161) 51743 * __atomic_signal_fence: __atomic Builtins. (line 223) 51744 * __atomic_store: __atomic Builtins. (line 103) 51745 * __atomic_store_n: __atomic Builtins. (line 95) 51746 * __atomic_sub_fetch: __atomic Builtins. (line 155) 51747 * __atomic_test_and_set: __atomic Builtins. (line 192) 51748 * __atomic_thread_fence: __atomic Builtins. (line 216) 51749 * __atomic_xor_fetch: __atomic Builtins. (line 159) 51750 * __builtin_apply: Constructing Calls. (line 29) 51751 * __builtin_apply_args: Constructing Calls. (line 19) 51752 * __builtin_bswap16: Other Builtins. (line 597) 51753 * __builtin_bswap32: Other Builtins. (line 601) 51754 * __builtin_bswap64: Other Builtins. (line 605) 51755 * __builtin_choose_expr: Other Builtins. (line 154) 51756 * __builtin_clrsb: Other Builtins. (line 526) 51757 * __builtin_clrsbl: Other Builtins. (line 549) 51758 * __builtin_clrsbll: Other Builtins. (line 572) 51759 * __builtin_clz: Other Builtins. (line 518) 51760 * __builtin_clzl: Other Builtins. (line 541) 51761 * __builtin_clzll: Other Builtins. (line 564) 51762 * __builtin_complex: Other Builtins. (line 194) 51763 * __builtin_constant_p: Other Builtins. (line 203) 51764 * __builtin_cpu_init: X86 Built-in Functions. 51765 (line 62) 51766 * __builtin_cpu_is: X86 Built-in Functions. 51767 (line 90) 51768 * __builtin_cpu_supports: X86 Built-in Functions. 51769 (line 159) 51770 * __builtin_ctz: Other Builtins. (line 522) 51771 * __builtin_ctzl: Other Builtins. (line 545) 51772 * __builtin_ctzll: Other Builtins. (line 568) 51773 * __builtin_expect: Other Builtins. (line 252) 51774 * __builtin_extract_return_addr: Return Address. (line 35) 51775 * __builtin_ffs: Other Builtins. (line 514) 51776 * __builtin_ffsl: Other Builtins. (line 537) 51777 * __builtin_ffsll: Other Builtins. (line 560) 51778 * __builtin_FILE: Other Builtins. (line 360) 51779 * __builtin_fpclassify: Other Builtins. (line 6) 51780 * __builtin_fpclassify <1>: Other Builtins. (line 429) 51781 * __builtin_frame_address: Return Address. (line 47) 51782 * __builtin_frob_return_address: Return Address. (line 44) 51783 * __builtin_FUNCTION: Other Builtins. (line 355) 51784 * __builtin_huge_val: Other Builtins. (line 417) 51785 * __builtin_huge_valf: Other Builtins. (line 422) 51786 * __builtin_huge_vall: Other Builtins. (line 425) 51787 * __builtin_huge_valq: X86 Built-in Functions. 51788 (line 57) 51789 * __builtin_inf: Other Builtins. (line 440) 51790 * __builtin_infd128: Other Builtins. (line 450) 51791 * __builtin_infd32: Other Builtins. (line 444) 51792 * __builtin_infd64: Other Builtins. (line 447) 51793 * __builtin_inff: Other Builtins. (line 454) 51794 * __builtin_infl: Other Builtins. (line 459) 51795 * __builtin_infq: X86 Built-in Functions. 51796 (line 54) 51797 * __builtin_isfinite: Other Builtins. (line 6) 51798 * __builtin_isgreater: Other Builtins. (line 6) 51799 * __builtin_isgreaterequal: Other Builtins. (line 6) 51800 * __builtin_isinf_sign: Other Builtins. (line 6) 51801 * __builtin_isinf_sign <1>: Other Builtins. (line 463) 51802 * __builtin_isless: Other Builtins. (line 6) 51803 * __builtin_islessequal: Other Builtins. (line 6) 51804 * __builtin_islessgreater: Other Builtins. (line 6) 51805 * __builtin_isnormal: Other Builtins. (line 6) 51806 * __builtin_isunordered: Other Builtins. (line 6) 51807 * __builtin_LINE: Other Builtins. (line 350) 51808 * __builtin_nan: Other Builtins. (line 470) 51809 * __builtin_nand128: Other Builtins. (line 492) 51810 * __builtin_nand32: Other Builtins. (line 486) 51811 * __builtin_nand64: Other Builtins. (line 489) 51812 * __builtin_nanf: Other Builtins. (line 496) 51813 * __builtin_nanl: Other Builtins. (line 499) 51814 * __builtin_nans: Other Builtins. (line 503) 51815 * __builtin_nansf: Other Builtins. (line 507) 51816 * __builtin_nansl: Other Builtins. (line 510) 51817 * __builtin_non_tx_store: S/390 System z Built-in Functions. 51818 (line 98) 51819 * __builtin_object_size: Object Size Checking. 51820 (line 6) 51821 * __builtin_object_size <1>: Object Size Checking. 51822 (line 9) 51823 * __builtin_offsetof: Offsetof. (line 6) 51824 * __builtin_parity: Other Builtins. (line 534) 51825 * __builtin_parityl: Other Builtins. (line 556) 51826 * __builtin_parityll: Other Builtins. (line 580) 51827 * __builtin_popcount: Other Builtins. (line 531) 51828 * __builtin_popcountl: Other Builtins. (line 552) 51829 * __builtin_popcountll: Other Builtins. (line 576) 51830 * __builtin_powi: Other Builtins. (line 6) 51831 * __builtin_powi <1>: Other Builtins. (line 584) 51832 * __builtin_powif: Other Builtins. (line 6) 51833 * __builtin_powif <1>: Other Builtins. (line 589) 51834 * __builtin_powil: Other Builtins. (line 6) 51835 * __builtin_powil <1>: Other Builtins. (line 593) 51836 * __builtin_prefetch: Other Builtins. (line 378) 51837 * __builtin_return: Constructing Calls. (line 47) 51838 * __builtin_return_address: Return Address. (line 9) 51839 * __builtin_rx_brk: RX Built-in Functions. 51840 (line 10) 51841 * __builtin_rx_clrpsw: RX Built-in Functions. 51842 (line 13) 51843 * __builtin_rx_int: RX Built-in Functions. 51844 (line 17) 51845 * __builtin_rx_machi: RX Built-in Functions. 51846 (line 21) 51847 * __builtin_rx_maclo: RX Built-in Functions. 51848 (line 26) 51849 * __builtin_rx_mulhi: RX Built-in Functions. 51850 (line 31) 51851 * __builtin_rx_mullo: RX Built-in Functions. 51852 (line 36) 51853 * __builtin_rx_mvfachi: RX Built-in Functions. 51854 (line 41) 51855 * __builtin_rx_mvfacmi: RX Built-in Functions. 51856 (line 45) 51857 * __builtin_rx_mvfc: RX Built-in Functions. 51858 (line 49) 51859 * __builtin_rx_mvtachi: RX Built-in Functions. 51860 (line 53) 51861 * __builtin_rx_mvtaclo: RX Built-in Functions. 51862 (line 57) 51863 * __builtin_rx_mvtc: RX Built-in Functions. 51864 (line 61) 51865 * __builtin_rx_mvtipl: RX Built-in Functions. 51866 (line 65) 51867 * __builtin_rx_racw: RX Built-in Functions. 51868 (line 69) 51869 * __builtin_rx_revw: RX Built-in Functions. 51870 (line 73) 51871 * __builtin_rx_rmpa: RX Built-in Functions. 51872 (line 78) 51873 * __builtin_rx_round: RX Built-in Functions. 51874 (line 82) 51875 * __builtin_rx_sat: RX Built-in Functions. 51876 (line 87) 51877 * __builtin_rx_setpsw: RX Built-in Functions. 51878 (line 91) 51879 * __builtin_rx_wait: RX Built-in Functions. 51880 (line 95) 51881 * __builtin_set_thread_pointer: SH Built-in Functions. 51882 (line 9) 51883 * __builtin_tabort: S/390 System z Built-in Functions. 51884 (line 82) 51885 * __builtin_tbegin: S/390 System z Built-in Functions. 51886 (line 6) 51887 * __builtin_tbeginc: S/390 System z Built-in Functions. 51888 (line 73) 51889 * __builtin_tbegin_nofloat: S/390 System z Built-in Functions. 51890 (line 54) 51891 * __builtin_tbegin_retry: S/390 System z Built-in Functions. 51892 (line 60) 51893 * __builtin_tbegin_retry_nofloat: S/390 System z Built-in Functions. 51894 (line 67) 51895 * __builtin_tend: S/390 System z Built-in Functions. 51896 (line 77) 51897 * __builtin_thread_pointer: SH Built-in Functions. 51898 (line 18) 51899 * __builtin_trap: Other Builtins. (line 276) 51900 * __builtin_tx_assist: S/390 System z Built-in Functions. 51901 (line 87) 51902 * __builtin_tx_nesting_depth: S/390 System z Built-in Functions. 51903 (line 93) 51904 * __builtin_types_compatible_p: Other Builtins. (line 109) 51905 * __builtin_unreachable: Other Builtins. (line 283) 51906 * __builtin_va_arg_pack: Constructing Calls. (line 52) 51907 * __builtin_va_arg_pack_len: Constructing Calls. (line 75) 51908 * __builtin___clear_cache: Other Builtins. (line 365) 51909 * __builtin___fprintf_chk: Object Size Checking. 51910 (line 6) 51911 * __builtin___memcpy_chk: Object Size Checking. 51912 (line 6) 51913 * __builtin___memmove_chk: Object Size Checking. 51914 (line 6) 51915 * __builtin___mempcpy_chk: Object Size Checking. 51916 (line 6) 51917 * __builtin___memset_chk: Object Size Checking. 51918 (line 6) 51919 * __builtin___printf_chk: Object Size Checking. 51920 (line 6) 51921 * __builtin___snprintf_chk: Object Size Checking. 51922 (line 6) 51923 * __builtin___sprintf_chk: Object Size Checking. 51924 (line 6) 51925 * __builtin___stpcpy_chk: Object Size Checking. 51926 (line 6) 51927 * __builtin___strcat_chk: Object Size Checking. 51928 (line 6) 51929 * __builtin___strcpy_chk: Object Size Checking. 51930 (line 6) 51931 * __builtin___strncat_chk: Object Size Checking. 51932 (line 6) 51933 * __builtin___strncpy_chk: Object Size Checking. 51934 (line 6) 51935 * __builtin___vfprintf_chk: Object Size Checking. 51936 (line 6) 51937 * __builtin___vprintf_chk: Object Size Checking. 51938 (line 6) 51939 * __builtin___vsnprintf_chk: Object Size Checking. 51940 (line 6) 51941 * __builtin___vsprintf_chk: Object Size Checking. 51942 (line 6) 51943 * '__complex__' keyword: Complex. (line 6) 51944 * '__declspec(dllexport)': Function Attributes. 51945 (line 256) 51946 * '__declspec(dllimport)': Function Attributes. 51947 (line 289) 51948 * '__ea' SPU Named Address Spaces: Named Address Spaces. 51949 (line 155) 51950 * __extension__: Alternate Keywords. (line 30) 51951 * '__far' M32C Named Address Spaces: Named Address Spaces. 51952 (line 138) 51953 * '__far' RL78 Named Address Spaces: Named Address Spaces. 51954 (line 147) 51955 * '__flash' AVR Named Address Spaces: Named Address Spaces. 51956 (line 31) 51957 * '__flash1' AVR Named Address Spaces: Named Address Spaces. 51958 (line 40) 51959 * '__flash2' AVR Named Address Spaces: Named Address Spaces. 51960 (line 40) 51961 * '__flash3' AVR Named Address Spaces: Named Address Spaces. 51962 (line 40) 51963 * '__flash4' AVR Named Address Spaces: Named Address Spaces. 51964 (line 40) 51965 * '__flash5' AVR Named Address Spaces: Named Address Spaces. 51966 (line 40) 51967 * '__float128' data type: Floating Types. (line 6) 51968 * '__float80' data type: Floating Types. (line 6) 51969 * '__fp16' data type: Half-Precision. (line 6) 51970 * '__FUNCTION__' identifier: Function Names. (line 6) 51971 * '__func__' identifier: Function Names. (line 6) 51972 * '__imag__' keyword: Complex. (line 27) 51973 * '__int128' data types: __int128. (line 6) 51974 * '__memx' AVR Named Address Spaces: Named Address Spaces. 51975 (line 46) 51976 * '__PRETTY_FUNCTION__' identifier: Function Names. (line 6) 51977 * '__real__' keyword: Complex. (line 27) 51978 * __STDC_HOSTED__: Standards. (line 13) 51979 * __sync_add_and_fetch: __sync Builtins. (line 60) 51980 * __sync_and_and_fetch: __sync Builtins. (line 60) 51981 * __sync_bool_compare_and_swap: __sync Builtins. (line 71) 51982 * __sync_fetch_and_add: __sync Builtins. (line 44) 51983 * __sync_fetch_and_and: __sync Builtins. (line 44) 51984 * __sync_fetch_and_nand: __sync Builtins. (line 44) 51985 * __sync_fetch_and_or: __sync Builtins. (line 44) 51986 * __sync_fetch_and_sub: __sync Builtins. (line 44) 51987 * __sync_fetch_and_xor: __sync Builtins. (line 44) 51988 * __sync_lock_release: __sync Builtins. (line 101) 51989 * __sync_lock_test_and_set: __sync Builtins. (line 83) 51990 * __sync_nand_and_fetch: __sync Builtins. (line 60) 51991 * __sync_or_and_fetch: __sync Builtins. (line 60) 51992 * __sync_sub_and_fetch: __sync Builtins. (line 60) 51993 * __sync_synchronize: __sync Builtins. (line 80) 51994 * __sync_val_compare_and_swap: __sync Builtins. (line 71) 51995 * __sync_xor_and_fetch: __sync Builtins. (line 60) 51996 * '__thread': Thread-Local. (line 6) 51997 * AArch64 Options: AArch64 Options. (line 6) 51998 * ABI: Compatibility. (line 6) 51999 * 'abi_tag' attribute: C++ Attributes. (line 9) 52000 * abort: Other Builtins. (line 6) 52001 * abs: Other Builtins. (line 6) 52002 * accessing volatiles: Volatiles. (line 6) 52003 * accessing volatiles <1>: C++ Volatiles. (line 6) 52004 * acos: Other Builtins. (line 6) 52005 * acosf: Other Builtins. (line 6) 52006 * acosh: Other Builtins. (line 6) 52007 * acoshf: Other Builtins. (line 6) 52008 * acoshl: Other Builtins. (line 6) 52009 * acosl: Other Builtins. (line 6) 52010 * Ada: G++ and GCC. (line 6) 52011 * Ada <1>: G++ and GCC. (line 30) 52012 * additional floating types: Floating Types. (line 6) 52013 * address constraints: Simple Constraints. (line 152) 52014 * address of a label: Labels as Values. (line 6) 52015 * address_operand: Simple Constraints. (line 156) 52016 * 'alias' attribute: Function Attributes. 52017 (line 37) 52018 * 'aligned' attribute: Function Attributes. 52019 (line 50) 52020 * 'aligned' attribute <1>: Variable Attributes. 52021 (line 23) 52022 * 'aligned' attribute <2>: Type Attributes. (line 31) 52023 * alignment: Alignment. (line 6) 52024 * alloca: Other Builtins. (line 6) 52025 * 'alloca' vs variable-length arrays: Variable Length. (line 26) 52026 * 'alloc_size' attribute: Function Attributes. 52027 (line 70) 52028 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 52029 (line 942) 52030 * alternate keywords: Alternate Keywords. (line 6) 52031 * 'always_inline' function attribute: Function Attributes. 52032 (line 91) 52033 * AMD x86-64 Options: i386 and x86-64 Options. 52034 (line 6) 52035 * AMD1: Standards. (line 13) 52036 * ANSI C: Standards. (line 13) 52037 * ANSI C standard: Standards. (line 13) 52038 * ANSI C89: Standards. (line 13) 52039 * ANSI support: C Dialect Options. (line 10) 52040 * ANSI X3.159-1989: Standards. (line 13) 52041 * apostrophes: Incompatibilities. (line 116) 52042 * application binary interface: Compatibility. (line 6) 52043 * ARM options: ARM Options. (line 6) 52044 * ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 52045 (line 6) 52046 * arrays of length zero: Zero Length. (line 6) 52047 * arrays of variable length: Variable Length. (line 6) 52048 * arrays, non-lvalue: Subscripting. (line 6) 52049 * 'artificial' function attribute: Function Attributes. 52050 (line 132) 52051 * asin: Other Builtins. (line 6) 52052 * asinf: Other Builtins. (line 6) 52053 * asinh: Other Builtins. (line 6) 52054 * asinhf: Other Builtins. (line 6) 52055 * asinhl: Other Builtins. (line 6) 52056 * asinl: Other Builtins. (line 6) 52057 * 'asm' constraints: Constraints. (line 6) 52058 * 'asm' expressions: Extended Asm. (line 6) 52059 * assembler instructions: Extended Asm. (line 6) 52060 * assembler names for identifiers: Asm Labels. (line 6) 52061 * assembly code, invalid: Bug Criteria. (line 12) 52062 * atan: Other Builtins. (line 6) 52063 * atan2: Other Builtins. (line 6) 52064 * atan2f: Other Builtins. (line 6) 52065 * atan2l: Other Builtins. (line 6) 52066 * atanf: Other Builtins. (line 6) 52067 * atanh: Other Builtins. (line 6) 52068 * atanhf: Other Builtins. (line 6) 52069 * atanhl: Other Builtins. (line 6) 52070 * atanl: Other Builtins. (line 6) 52071 * attribute of types: Type Attributes. (line 6) 52072 * attribute of variables: Variable Attributes. 52073 (line 6) 52074 * attribute syntax: Attribute Syntax. (line 6) 52075 * autoincrement/decrement addressing: Simple Constraints. (line 30) 52076 * automatic 'inline' for C++ member fns: Inline. (line 71) 52077 * AVR Options: AVR Options. (line 6) 52078 * Backwards Compatibility: Backwards Compatibility. 52079 (line 6) 52080 * base class members: Name lookup. (line 6) 52081 * bcmp: Other Builtins. (line 6) 52082 * 'below100' attribute: Variable Attributes. 52083 (line 578) 52084 * binary compatibility: Compatibility. (line 6) 52085 * Binary constants using the '0b' prefix: Binary constants. (line 6) 52086 * Blackfin Options: Blackfin Options. (line 6) 52087 * bound pointer to member function: Bound member functions. 52088 (line 6) 52089 * bounds checking: Optimize Options. (line 404) 52090 * bug criteria: Bug Criteria. (line 6) 52091 * bugs: Bugs. (line 6) 52092 * bugs, known: Trouble. (line 6) 52093 * built-in functions: C Dialect Options. (line 204) 52094 * built-in functions <1>: Other Builtins. (line 6) 52095 * bzero: Other Builtins. (line 6) 52096 * C compilation options: Invoking GCC. (line 17) 52097 * C intermediate output, nonexistent: G++ and GCC. (line 35) 52098 * C language extensions: C Extensions. (line 6) 52099 * C language, traditional: C Dialect Options. (line 309) 52100 * C standard: Standards. (line 13) 52101 * C standards: Standards. (line 13) 52102 * c++: Invoking G++. (line 14) 52103 * C++: G++ and GCC. (line 30) 52104 * C++ comments: C++ Comments. (line 6) 52105 * C++ compilation options: Invoking GCC. (line 23) 52106 * C++ interface and implementation headers: C++ Interface. (line 6) 52107 * C++ language extensions: C++ Extensions. (line 6) 52108 * C++ member fns, automatically 'inline': Inline. (line 71) 52109 * C++ misunderstandings: C++ Misunderstandings. 52110 (line 6) 52111 * C++ options, command-line: C++ Dialect Options. 52112 (line 6) 52113 * C++ pragmas, effect on inlining: C++ Interface. (line 66) 52114 * C++ source file suffixes: Invoking G++. (line 6) 52115 * C++ static data, declaring and defining: Static Definitions. 52116 (line 6) 52117 * C11: Standards. (line 13) 52118 * C1X: Standards. (line 13) 52119 * C6X Options: C6X Options. (line 6) 52120 * C89: Standards. (line 13) 52121 * C90: Standards. (line 13) 52122 * C94: Standards. (line 13) 52123 * C95: Standards. (line 13) 52124 * C99: Standards. (line 13) 52125 * C9X: Standards. (line 13) 52126 * cabs: Other Builtins. (line 6) 52127 * cabsf: Other Builtins. (line 6) 52128 * cabsl: Other Builtins. (line 6) 52129 * cacos: Other Builtins. (line 6) 52130 * cacosf: Other Builtins. (line 6) 52131 * cacosh: Other Builtins. (line 6) 52132 * cacoshf: Other Builtins. (line 6) 52133 * cacoshl: Other Builtins. (line 6) 52134 * cacosl: Other Builtins. (line 6) 52135 * 'callee_pop_aggregate_return' attribute: Function Attributes. 52136 (line 890) 52137 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 52138 (line 525) 52139 * calloc: Other Builtins. (line 6) 52140 * carg: Other Builtins. (line 6) 52141 * cargf: Other Builtins. (line 6) 52142 * cargl: Other Builtins. (line 6) 52143 * case labels in initializers: Designated Inits. (line 6) 52144 * case ranges: Case Ranges. (line 6) 52145 * casin: Other Builtins. (line 6) 52146 * casinf: Other Builtins. (line 6) 52147 * casinh: Other Builtins. (line 6) 52148 * casinhf: Other Builtins. (line 6) 52149 * casinhl: Other Builtins. (line 6) 52150 * casinl: Other Builtins. (line 6) 52151 * cast to a union: Cast to Union. (line 6) 52152 * catan: Other Builtins. (line 6) 52153 * catanf: Other Builtins. (line 6) 52154 * catanh: Other Builtins. (line 6) 52155 * catanhf: Other Builtins. (line 6) 52156 * catanhl: Other Builtins. (line 6) 52157 * catanl: Other Builtins. (line 6) 52158 * cbrt: Other Builtins. (line 6) 52159 * cbrtf: Other Builtins. (line 6) 52160 * cbrtl: Other Builtins. (line 6) 52161 * ccos: Other Builtins. (line 6) 52162 * ccosf: Other Builtins. (line 6) 52163 * ccosh: Other Builtins. (line 6) 52164 * ccoshf: Other Builtins. (line 6) 52165 * ccoshl: Other Builtins. (line 6) 52166 * ccosl: Other Builtins. (line 6) 52167 * ceil: Other Builtins. (line 6) 52168 * ceilf: Other Builtins. (line 6) 52169 * ceill: Other Builtins. (line 6) 52170 * cexp: Other Builtins. (line 6) 52171 * cexpf: Other Builtins. (line 6) 52172 * cexpl: Other Builtins. (line 6) 52173 * character set, execution: Preprocessor Options. 52174 (line 554) 52175 * character set, input: Preprocessor Options. 52176 (line 567) 52177 * character set, input normalization: Warning Options. (line 1272) 52178 * character set, wide execution: Preprocessor Options. 52179 (line 559) 52180 * cimag: Other Builtins. (line 6) 52181 * cimagf: Other Builtins. (line 6) 52182 * cimagl: Other Builtins. (line 6) 52183 * 'cleanup' attribute: Variable Attributes. 52184 (line 89) 52185 * clog: Other Builtins. (line 6) 52186 * clogf: Other Builtins. (line 6) 52187 * clogl: Other Builtins. (line 6) 52188 * COBOL: G++ and GCC. (line 23) 52189 * code generation conventions: Code Gen Options. (line 6) 52190 * code, mixed with declarations: Mixed Declarations. (line 6) 52191 * 'cold' function attribute: Function Attributes. 52192 (line 1165) 52193 * 'cold' label attribute: Function Attributes. 52194 (line 1183) 52195 * command options: Invoking GCC. (line 6) 52196 * comments, C++ style: C++ Comments. (line 6) 52197 * 'common' attribute: Variable Attributes. 52198 (line 104) 52199 * comparison of signed and unsigned values, warning: Warning Options. 52200 (line 1144) 52201 * compiler bugs, reporting: Bug Reporting. (line 6) 52202 * compiler compared to C++ preprocessor: G++ and GCC. (line 35) 52203 * compiler options, C++: C++ Dialect Options. 52204 (line 6) 52205 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 52206 (line 6) 52207 * compiler version, specifying: Target Options. (line 6) 52208 * COMPILER_PATH: Environment Variables. 52209 (line 91) 52210 * complex conjugation: Complex. (line 34) 52211 * complex numbers: Complex. (line 6) 52212 * compound literals: Compound Literals. (line 6) 52213 * computed gotos: Labels as Values. (line 6) 52214 * conditional expressions, extensions: Conditionals. (line 6) 52215 * conflicting types: Disappointments. (line 21) 52216 * conj: Other Builtins. (line 6) 52217 * conjf: Other Builtins. (line 6) 52218 * conjl: Other Builtins. (line 6) 52219 * 'const' applied to function: Function Attributes. 52220 (line 6) 52221 * 'const' function attribute: Function Attributes. 52222 (line 181) 52223 * constants in constraints: Simple Constraints. (line 68) 52224 * constraint modifier characters: Modifiers. (line 6) 52225 * constraint, matching: Simple Constraints. (line 137) 52226 * constraints, 'asm': Constraints. (line 6) 52227 * constraints, machine specific: Machine Constraints. 52228 (line 6) 52229 * constructing calls: Constructing Calls. (line 6) 52230 * constructor expressions: Compound Literals. (line 6) 52231 * 'constructor' function attribute: Function Attributes. 52232 (line 209) 52233 * contributors: Contributors. (line 6) 52234 * copysign: Other Builtins. (line 6) 52235 * copysignf: Other Builtins. (line 6) 52236 * copysignl: Other Builtins. (line 6) 52237 * core dump: Bug Criteria. (line 9) 52238 * cos: Other Builtins. (line 6) 52239 * cosf: Other Builtins. (line 6) 52240 * cosh: Other Builtins. (line 6) 52241 * coshf: Other Builtins. (line 6) 52242 * coshl: Other Builtins. (line 6) 52243 * cosl: Other Builtins. (line 6) 52244 * CPATH: Environment Variables. 52245 (line 127) 52246 * CPLUS_INCLUDE_PATH: Environment Variables. 52247 (line 129) 52248 * cpow: Other Builtins. (line 6) 52249 * cpowf: Other Builtins. (line 6) 52250 * cpowl: Other Builtins. (line 6) 52251 * cproj: Other Builtins. (line 6) 52252 * cprojf: Other Builtins. (line 6) 52253 * cprojl: Other Builtins. (line 6) 52254 * CR16 Options: CR16 Options. (line 6) 52255 * creal: Other Builtins. (line 6) 52256 * crealf: Other Builtins. (line 6) 52257 * creall: Other Builtins. (line 6) 52258 * CRIS Options: CRIS Options. (line 6) 52259 * cross compiling: Target Options. (line 6) 52260 * csin: Other Builtins. (line 6) 52261 * csinf: Other Builtins. (line 6) 52262 * csinh: Other Builtins. (line 6) 52263 * csinhf: Other Builtins. (line 6) 52264 * csinhl: Other Builtins. (line 6) 52265 * csinl: Other Builtins. (line 6) 52266 * csqrt: Other Builtins. (line 6) 52267 * csqrtf: Other Builtins. (line 6) 52268 * csqrtl: Other Builtins. (line 6) 52269 * ctan: Other Builtins. (line 6) 52270 * ctanf: Other Builtins. (line 6) 52271 * ctanh: Other Builtins. (line 6) 52272 * ctanhf: Other Builtins. (line 6) 52273 * ctanhl: Other Builtins. (line 6) 52274 * ctanl: Other Builtins. (line 6) 52275 * C_INCLUDE_PATH: Environment Variables. 52276 (line 128) 52277 * Darwin options: Darwin Options. (line 6) 52278 * dcgettext: Other Builtins. (line 6) 52279 * 'dd' integer suffix: Decimal Float. (line 6) 52280 * 'DD' integer suffix: Decimal Float. (line 6) 52281 * deallocating variable length arrays: Variable Length. (line 22) 52282 * debugging information options: Debugging Options. (line 6) 52283 * decimal floating types: Decimal Float. (line 6) 52284 * declaration scope: Incompatibilities. (line 80) 52285 * declarations inside expressions: Statement Exprs. (line 6) 52286 * declarations, mixed with code: Mixed Declarations. (line 6) 52287 * declaring attributes of functions: Function Attributes. 52288 (line 6) 52289 * declaring static data in C++: Static Definitions. (line 6) 52290 * defining static data in C++: Static Definitions. (line 6) 52291 * dependencies for make as output: Environment Variables. 52292 (line 155) 52293 * dependencies for make as output <1>: Environment Variables. 52294 (line 171) 52295 * dependencies, 'make': Preprocessor Options. 52296 (line 185) 52297 * DEPENDENCIES_OUTPUT: Environment Variables. 52298 (line 154) 52299 * dependent name lookup: Name lookup. (line 6) 52300 * 'deprecated' attribute: Variable Attributes. 52301 (line 113) 52302 * 'deprecated' attribute.: Function Attributes. 52303 (line 231) 52304 * designated initializers: Designated Inits. (line 6) 52305 * designator lists: Designated Inits. (line 93) 52306 * designators: Designated Inits. (line 61) 52307 * 'destructor' function attribute: Function Attributes. 52308 (line 209) 52309 * 'df' integer suffix: Decimal Float. (line 6) 52310 * 'DF' integer suffix: Decimal Float. (line 6) 52311 * dgettext: Other Builtins. (line 6) 52312 * diagnostic messages: Language Independent Options. 52313 (line 6) 52314 * dialect options: C Dialect Options. (line 6) 52315 * digits in constraint: Simple Constraints. (line 125) 52316 * directory options: Directory Options. (line 6) 52317 * 'disinterrupt' attribute: Function Attributes. 52318 (line 251) 52319 * 'dl' integer suffix: Decimal Float. (line 6) 52320 * 'DL' integer suffix: Decimal Float. (line 6) 52321 * dollar signs in identifier names: Dollar Signs. (line 6) 52322 * double-word arithmetic: Long Long. (line 6) 52323 * downward funargs: Nested Functions. (line 6) 52324 * drem: Other Builtins. (line 6) 52325 * dremf: Other Builtins. (line 6) 52326 * dreml: Other Builtins. (line 6) 52327 * 'E' in constraint: Simple Constraints. (line 87) 52328 * earlyclobber operand: Modifiers. (line 25) 52329 * eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes. 52330 (line 341) 52331 * 'EIND': AVR Options. (line 222) 52332 * empty structures: Empty Structures. (line 6) 52333 * environment variables: Environment Variables. 52334 (line 6) 52335 * erf: Other Builtins. (line 6) 52336 * erfc: Other Builtins. (line 6) 52337 * erfcf: Other Builtins. (line 6) 52338 * erfcl: Other Builtins. (line 6) 52339 * erff: Other Builtins. (line 6) 52340 * erfl: Other Builtins. (line 6) 52341 * 'error' function attribute: Function Attributes. 52342 (line 151) 52343 * error messages: Warnings and Errors. 52344 (line 6) 52345 * escaped newlines: Escaped Newlines. (line 6) 52346 * exception handler functions on the Blackfin processor: Function Attributes. 52347 (line 351) 52348 * exclamation point: Multi-Alternative. (line 33) 52349 * exit: Other Builtins. (line 6) 52350 * exp: Other Builtins. (line 6) 52351 * exp10: Other Builtins. (line 6) 52352 * exp10f: Other Builtins. (line 6) 52353 * exp10l: Other Builtins. (line 6) 52354 * exp2: Other Builtins. (line 6) 52355 * exp2f: Other Builtins. (line 6) 52356 * exp2l: Other Builtins. (line 6) 52357 * expf: Other Builtins. (line 6) 52358 * expl: Other Builtins. (line 6) 52359 * explicit register variables: Explicit Reg Vars. (line 6) 52360 * expm1: Other Builtins. (line 6) 52361 * expm1f: Other Builtins. (line 6) 52362 * expm1l: Other Builtins. (line 6) 52363 * expressions containing statements: Statement Exprs. (line 6) 52364 * expressions, constructor: Compound Literals. (line 6) 52365 * extended 'asm': Extended Asm. (line 6) 52366 * extensible constraints: Simple Constraints. (line 161) 52367 * extensions, '?:': Conditionals. (line 6) 52368 * extensions, C language: C Extensions. (line 6) 52369 * extensions, C++ language: C++ Extensions. (line 6) 52370 * external declaration scope: Incompatibilities. (line 80) 52371 * 'externally_visible' attribute.: Function Attributes. 52372 (line 357) 52373 * 'F' in constraint: Simple Constraints. (line 92) 52374 * fabs: Other Builtins. (line 6) 52375 * fabsf: Other Builtins. (line 6) 52376 * fabsl: Other Builtins. (line 6) 52377 * fatal signal: Bug Criteria. (line 9) 52378 * fdim: Other Builtins. (line 6) 52379 * fdimf: Other Builtins. (line 6) 52380 * fdiml: Other Builtins. (line 6) 52381 * FDL, GNU Free Documentation License: GNU Free Documentation License. 52382 (line 6) 52383 * ffs: Other Builtins. (line 6) 52384 * file name suffix: Overall Options. (line 14) 52385 * file names: Link Options. (line 10) 52386 * fixed-point types: Fixed-Point. (line 6) 52387 * 'flatten' function attribute: Function Attributes. 52388 (line 144) 52389 * flexible array members: Zero Length. (line 6) 52390 * 'float' as function value type: Incompatibilities. (line 141) 52391 * floating point precision: Disappointments. (line 68) 52392 * floating-point precision: Optimize Options. (line 1868) 52393 * floor: Other Builtins. (line 6) 52394 * floorf: Other Builtins. (line 6) 52395 * floorl: Other Builtins. (line 6) 52396 * fma: Other Builtins. (line 6) 52397 * fmaf: Other Builtins. (line 6) 52398 * fmal: Other Builtins. (line 6) 52399 * fmax: Other Builtins. (line 6) 52400 * fmaxf: Other Builtins. (line 6) 52401 * fmaxl: Other Builtins. (line 6) 52402 * fmin: Other Builtins. (line 6) 52403 * fminf: Other Builtins. (line 6) 52404 * fminl: Other Builtins. (line 6) 52405 * fmod: Other Builtins. (line 6) 52406 * fmodf: Other Builtins. (line 6) 52407 * fmodl: Other Builtins. (line 6) 52408 * 'force_align_arg_pointer' attribute: Function Attributes. 52409 (line 1225) 52410 * 'format' function attribute: Function Attributes. 52411 (line 414) 52412 * 'format_arg' function attribute: Function Attributes. 52413 (line 479) 52414 * Fortran: G++ and GCC. (line 6) 52415 * 'forwarder_section' attribute: Function Attributes. 52416 (line 680) 52417 * forwarding calls: Constructing Calls. (line 6) 52418 * fprintf: Other Builtins. (line 6) 52419 * fprintf_unlocked: Other Builtins. (line 6) 52420 * fputs: Other Builtins. (line 6) 52421 * fputs_unlocked: Other Builtins. (line 6) 52422 * FR30 Options: FR30 Options. (line 6) 52423 * freestanding environment: Standards. (line 13) 52424 * freestanding implementation: Standards. (line 13) 52425 * frexp: Other Builtins. (line 6) 52426 * frexpf: Other Builtins. (line 6) 52427 * frexpl: Other Builtins. (line 6) 52428 * FRV Options: FRV Options. (line 6) 52429 * fscanf: Other Builtins. (line 6) 52430 * 'fscanf', and constant strings: Incompatibilities. (line 17) 52431 * function addressability on the M32R/D: Function Attributes. 52432 (line 848) 52433 * function attributes: Function Attributes. 52434 (line 6) 52435 * function pointers, arithmetic: Pointer Arith. (line 6) 52436 * function prototype declarations: Function Prototypes. 52437 (line 6) 52438 * function versions: Function Multiversioning. 52439 (line 6) 52440 * function without a prologue/epilogue code: Function Attributes. 52441 (line 920) 52442 * function, size of pointer to: Pointer Arith. (line 6) 52443 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 52444 (line 802) 52445 * functions in arbitrary sections: Function Attributes. 52446 (line 6) 52447 * functions that are dynamically resolved: Function Attributes. 52448 (line 6) 52449 * functions that are passed arguments in registers on the 386: Function Attributes. 52450 (line 6) 52451 * functions that are passed arguments in registers on the 386 <1>: Function Attributes. 52452 (line 1201) 52453 * functions that behave like malloc: Function Attributes. 52454 (line 6) 52455 * functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 52456 (line 932) 52457 * functions that do not pop the argument stack on the 386: Function Attributes. 52458 (line 6) 52459 * functions that do pop the argument stack on the 386: Function Attributes. 52460 (line 175) 52461 * functions that handle memory bank switching: Function Attributes. 52462 (line 370) 52463 * functions that have different compilation options on the 386: Function Attributes. 52464 (line 6) 52465 * functions that have different optimization options: Function Attributes. 52466 (line 6) 52467 * functions that have no side effects: Function Attributes. 52468 (line 6) 52469 * functions that never return: Function Attributes. 52470 (line 6) 52471 * functions that pop the argument stack on the 386: Function Attributes. 52472 (line 6) 52473 * functions that pop the argument stack on the 386 <1>: Function Attributes. 52474 (line 396) 52475 * functions that pop the argument stack on the 386 <2>: Function Attributes. 52476 (line 404) 52477 * functions that pop the argument stack on the 386 <3>: Function Attributes. 52478 (line 1348) 52479 * functions that return more than once: Function Attributes. 52480 (line 6) 52481 * functions with non-null pointer arguments: Function Attributes. 52482 (line 6) 52483 * functions with 'printf', 'scanf', 'strftime' or 'strfmon' style arguments: Function Attributes. 52484 (line 6) 52485 * 'G' in constraint: Simple Constraints. (line 96) 52486 * 'g' in constraint: Simple Constraints. (line 118) 52487 * g++: Invoking G++. (line 14) 52488 * G++: G++ and GCC. (line 30) 52489 * gamma: Other Builtins. (line 6) 52490 * gammaf: Other Builtins. (line 6) 52491 * gammaf_r: Other Builtins. (line 6) 52492 * gammal: Other Builtins. (line 6) 52493 * gammal_r: Other Builtins. (line 6) 52494 * gamma_r: Other Builtins. (line 6) 52495 * GCC: G++ and GCC. (line 6) 52496 * GCC command options: Invoking GCC. (line 6) 52497 * GCC_COMPARE_DEBUG: Environment Variables. 52498 (line 52) 52499 * GCC_EXEC_PREFIX: Environment Variables. 52500 (line 57) 52501 * 'gcc_struct': Type Attributes. (line 323) 52502 * 'gcc_struct' attribute: Variable Attributes. 52503 (line 438) 52504 * 'gcov': Debugging Options. (line 408) 52505 * gettext: Other Builtins. (line 6) 52506 * global offset table: Code Gen Options. (line 266) 52507 * global register after 'longjmp': Global Reg Vars. (line 65) 52508 * global register variables: Global Reg Vars. (line 6) 52509 * GNAT: G++ and GCC. (line 30) 52510 * GNU C Compiler: G++ and GCC. (line 6) 52511 * GNU Compiler Collection: G++ and GCC. (line 6) 52512 * 'gnu_inline' function attribute: Function Attributes. 52513 (line 96) 52514 * Go: G++ and GCC. (line 6) 52515 * goto with computed label: Labels as Values. (line 6) 52516 * 'gprof': Debugging Options. (line 333) 52517 * grouping options: Invoking GCC. (line 26) 52518 * 'H' in constraint: Simple Constraints. (line 96) 52519 * half-precision floating point: Half-Precision. (line 6) 52520 * hardware models and configurations, specifying: Submodel Options. 52521 (line 6) 52522 * hex floats: Hex Floats. (line 6) 52523 * 'hk' fixed-suffix: Fixed-Point. (line 6) 52524 * 'HK' fixed-suffix: Fixed-Point. (line 6) 52525 * hosted environment: Standards. (line 13) 52526 * hosted environment <1>: C Dialect Options. (line 238) 52527 * hosted environment <2>: C Dialect Options. (line 246) 52528 * hosted implementation: Standards. (line 13) 52529 * 'hot' function attribute: Function Attributes. 52530 (line 1143) 52531 * 'hot' label attribute: Function Attributes. 52532 (line 1155) 52533 * 'hotpatch' attribute: Function Attributes. 52534 (line 911) 52535 * HPPA Options: HPPA Options. (line 6) 52536 * 'hr' fixed-suffix: Fixed-Point. (line 6) 52537 * 'HR' fixed-suffix: Fixed-Point. (line 6) 52538 * hypot: Other Builtins. (line 6) 52539 * hypotf: Other Builtins. (line 6) 52540 * hypotl: Other Builtins. (line 6) 52541 * 'i' in constraint: Simple Constraints. (line 68) 52542 * 'I' in constraint: Simple Constraints. (line 79) 52543 * i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 52544 (line 6) 52545 * i386 Options: i386 and x86-64 Options. 52546 (line 6) 52547 * IA-64 Options: IA-64 Options. (line 6) 52548 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 52549 (line 6) 52550 * identifier names, dollar signs in: Dollar Signs. (line 6) 52551 * identifiers, names in assembler code: Asm Labels. (line 6) 52552 * 'ifunc' attribute: Function Attributes. 52553 (line 586) 52554 * ilogb: Other Builtins. (line 6) 52555 * ilogbf: Other Builtins. (line 6) 52556 * ilogbl: Other Builtins. (line 6) 52557 * imaxabs: Other Builtins. (line 6) 52558 * implementation-defined behavior, C language: C Implementation. 52559 (line 6) 52560 * implementation-defined behavior, C++ language: C++ Implementation. 52561 (line 6) 52562 * implied '#pragma implementation': C++ Interface. (line 46) 52563 * incompatibilities of GCC: Incompatibilities. (line 6) 52564 * increment operators: Bug Criteria. (line 17) 52565 * index: Other Builtins. (line 6) 52566 * indirect calls on ARM: Function Attributes. 52567 (line 792) 52568 * indirect calls on MIPS: Function Attributes. 52569 (line 814) 52570 * initializations in expressions: Compound Literals. (line 6) 52571 * initializers with labeled elements: Designated Inits. (line 6) 52572 * initializers, non-constant: Initializers. (line 6) 52573 * 'init_priority' attribute: C++ Attributes. (line 30) 52574 * 'inline' automatic for C++ member fns: Inline. (line 71) 52575 * inline functions: Inline. (line 6) 52576 * inline functions, omission of: Inline. (line 51) 52577 * inlining and C++ pragmas: C++ Interface. (line 66) 52578 * installation trouble: Trouble. (line 6) 52579 * integrating function code: Inline. (line 6) 52580 * Intel 386 Options: i386 and x86-64 Options. 52581 (line 6) 52582 * interface and implementation headers, C++: C++ Interface. (line 6) 52583 * intermediate C version, nonexistent: G++ and GCC. (line 35) 52584 * interrupt handler functions: Function Attributes. 52585 (line 139) 52586 * interrupt handler functions <1>: Function Attributes. 52587 (line 390) 52588 * interrupt handler functions <2>: Function Attributes. 52589 (line 626) 52590 * interrupt handler functions on the AVR processors: Function Attributes. 52591 (line 1320) 52592 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 52593 (line 730) 52594 * interrupt service routines on ARM: Function Attributes. 52595 (line 744) 52596 * interrupt thread functions on fido: Function Attributes. 52597 (line 736) 52598 * introduction: Top. (line 6) 52599 * invalid assembly code: Bug Criteria. (line 12) 52600 * invalid input: Bug Criteria. (line 42) 52601 * invoking 'g++': Invoking G++. (line 22) 52602 * isalnum: Other Builtins. (line 6) 52603 * isalpha: Other Builtins. (line 6) 52604 * isascii: Other Builtins. (line 6) 52605 * isblank: Other Builtins. (line 6) 52606 * iscntrl: Other Builtins. (line 6) 52607 * isdigit: Other Builtins. (line 6) 52608 * isgraph: Other Builtins. (line 6) 52609 * islower: Other Builtins. (line 6) 52610 * ISO 9899: Standards. (line 13) 52611 * ISO C: Standards. (line 13) 52612 * ISO C standard: Standards. (line 13) 52613 * ISO C11: Standards. (line 13) 52614 * ISO C1X: Standards. (line 13) 52615 * ISO C90: Standards. (line 13) 52616 * ISO C94: Standards. (line 13) 52617 * ISO C95: Standards. (line 13) 52618 * ISO C99: Standards. (line 13) 52619 * ISO C9X: Standards. (line 13) 52620 * ISO support: C Dialect Options. (line 10) 52621 * ISO/IEC 9899: Standards. (line 13) 52622 * isprint: Other Builtins. (line 6) 52623 * ispunct: Other Builtins. (line 6) 52624 * isspace: Other Builtins. (line 6) 52625 * isupper: Other Builtins. (line 6) 52626 * iswalnum: Other Builtins. (line 6) 52627 * iswalpha: Other Builtins. (line 6) 52628 * iswblank: Other Builtins. (line 6) 52629 * iswcntrl: Other Builtins. (line 6) 52630 * iswdigit: Other Builtins. (line 6) 52631 * iswgraph: Other Builtins. (line 6) 52632 * iswlower: Other Builtins. (line 6) 52633 * iswprint: Other Builtins. (line 6) 52634 * iswpunct: Other Builtins. (line 6) 52635 * iswspace: Other Builtins. (line 6) 52636 * iswupper: Other Builtins. (line 6) 52637 * iswxdigit: Other Builtins. (line 6) 52638 * isxdigit: Other Builtins. (line 6) 52639 * j0: Other Builtins. (line 6) 52640 * j0f: Other Builtins. (line 6) 52641 * j0l: Other Builtins. (line 6) 52642 * j1: Other Builtins. (line 6) 52643 * j1f: Other Builtins. (line 6) 52644 * j1l: Other Builtins. (line 6) 52645 * Java: G++ and GCC. (line 6) 52646 * 'java_interface' attribute: C++ Attributes. (line 51) 52647 * jn: Other Builtins. (line 6) 52648 * jnf: Other Builtins. (line 6) 52649 * jnl: Other Builtins. (line 6) 52650 * 'k' fixed-suffix: Fixed-Point. (line 6) 52651 * 'K' fixed-suffix: Fixed-Point. (line 6) 52652 * 'keep_interrupts_masked' attribute: Function Attributes. 52653 (line 702) 52654 * keywords, alternate: Alternate Keywords. (line 6) 52655 * known causes of trouble: Trouble. (line 6) 52656 * 'l1_data' variable attribute: Variable Attributes. 52657 (line 352) 52658 * 'l1_data_A' variable attribute: Variable Attributes. 52659 (line 352) 52660 * 'l1_data_B' variable attribute: Variable Attributes. 52661 (line 352) 52662 * 'l1_text' function attribute: Function Attributes. 52663 (line 753) 52664 * 'l2' function attribute: Function Attributes. 52665 (line 759) 52666 * 'l2' variable attribute: Variable Attributes. 52667 (line 360) 52668 * labeled elements in initializers: Designated Inits. (line 6) 52669 * labels as values: Labels as Values. (line 6) 52670 * labs: Other Builtins. (line 6) 52671 * LANG: Environment Variables. 52672 (line 21) 52673 * LANG <1>: Environment Variables. 52674 (line 106) 52675 * language dialect options: C Dialect Options. (line 6) 52676 * LC_ALL: Environment Variables. 52677 (line 21) 52678 * LC_CTYPE: Environment Variables. 52679 (line 21) 52680 * LC_MESSAGES: Environment Variables. 52681 (line 21) 52682 * ldexp: Other Builtins. (line 6) 52683 * ldexpf: Other Builtins. (line 6) 52684 * ldexpl: Other Builtins. (line 6) 52685 * 'leaf' function attribute: Function Attributes. 52686 (line 765) 52687 * length-zero arrays: Zero Length. (line 6) 52688 * lgamma: Other Builtins. (line 6) 52689 * lgammaf: Other Builtins. (line 6) 52690 * lgammaf_r: Other Builtins. (line 6) 52691 * lgammal: Other Builtins. (line 6) 52692 * lgammal_r: Other Builtins. (line 6) 52693 * lgamma_r: Other Builtins. (line 6) 52694 * Libraries: Link Options. (line 24) 52695 * LIBRARY_PATH: Environment Variables. 52696 (line 97) 52697 * link options: Link Options. (line 6) 52698 * linker script: Link Options. (line 196) 52699 * 'lk' fixed-suffix: Fixed-Point. (line 6) 52700 * 'LK' fixed-suffix: Fixed-Point. (line 6) 52701 * 'LL' integer suffix: Long Long. (line 6) 52702 * llabs: Other Builtins. (line 6) 52703 * 'llk' fixed-suffix: Fixed-Point. (line 6) 52704 * 'LLK' fixed-suffix: Fixed-Point. (line 6) 52705 * 'llr' fixed-suffix: Fixed-Point. (line 6) 52706 * 'LLR' fixed-suffix: Fixed-Point. (line 6) 52707 * llrint: Other Builtins. (line 6) 52708 * llrintf: Other Builtins. (line 6) 52709 * llrintl: Other Builtins. (line 6) 52710 * llround: Other Builtins. (line 6) 52711 * llroundf: Other Builtins. (line 6) 52712 * llroundl: Other Builtins. (line 6) 52713 * LM32 options: LM32 Options. (line 6) 52714 * load address instruction: Simple Constraints. (line 152) 52715 * local labels: Local Labels. (line 6) 52716 * local variables in macros: Typeof. (line 46) 52717 * local variables, specifying registers: Local Reg Vars. (line 6) 52718 * locale: Environment Variables. 52719 (line 21) 52720 * locale definition: Environment Variables. 52721 (line 106) 52722 * log: Other Builtins. (line 6) 52723 * log10: Other Builtins. (line 6) 52724 * log10f: Other Builtins. (line 6) 52725 * log10l: Other Builtins. (line 6) 52726 * log1p: Other Builtins. (line 6) 52727 * log1pf: Other Builtins. (line 6) 52728 * log1pl: Other Builtins. (line 6) 52729 * log2: Other Builtins. (line 6) 52730 * log2f: Other Builtins. (line 6) 52731 * log2l: Other Builtins. (line 6) 52732 * logb: Other Builtins. (line 6) 52733 * logbf: Other Builtins. (line 6) 52734 * logbl: Other Builtins. (line 6) 52735 * logf: Other Builtins. (line 6) 52736 * logl: Other Builtins. (line 6) 52737 * 'long long' data types: Long Long. (line 6) 52738 * longjmp: Global Reg Vars. (line 65) 52739 * 'longjmp' incompatibilities: Incompatibilities. (line 39) 52740 * 'longjmp' warnings: Warning Options. (line 667) 52741 * 'lr' fixed-suffix: Fixed-Point. (line 6) 52742 * 'LR' fixed-suffix: Fixed-Point. (line 6) 52743 * lrint: Other Builtins. (line 6) 52744 * lrintf: Other Builtins. (line 6) 52745 * lrintl: Other Builtins. (line 6) 52746 * lround: Other Builtins. (line 6) 52747 * lroundf: Other Builtins. (line 6) 52748 * lroundl: Other Builtins. (line 6) 52749 * 'm' in constraint: Simple Constraints. (line 17) 52750 * M32C options: M32C Options. (line 6) 52751 * M32R/D options: M32R/D Options. (line 6) 52752 * M680x0 options: M680x0 Options. (line 6) 52753 * machine dependent options: Submodel Options. (line 6) 52754 * machine specific constraints: Machine Constraints. 52755 (line 6) 52756 * macro with variable arguments: Variadic Macros. (line 6) 52757 * macros containing 'asm': Extended Asm. (line 237) 52758 * macros, inline alternative: Inline. (line 6) 52759 * macros, local labels: Local Labels. (line 6) 52760 * macros, local variables in: Typeof. (line 46) 52761 * macros, statements in expressions: Statement Exprs. (line 6) 52762 * macros, types of arguments: Typeof. (line 6) 52763 * 'make': Preprocessor Options. 52764 (line 185) 52765 * malloc: Other Builtins. (line 6) 52766 * 'malloc' attribute: Function Attributes. 52767 (line 824) 52768 * matching constraint: Simple Constraints. (line 137) 52769 * MCore options: MCore Options. (line 6) 52770 * member fns, automatically 'inline': Inline. (line 71) 52771 * memchr: Other Builtins. (line 6) 52772 * memcmp: Other Builtins. (line 6) 52773 * memcpy: Other Builtins. (line 6) 52774 * memory references in constraints: Simple Constraints. (line 17) 52775 * mempcpy: Other Builtins. (line 6) 52776 * memset: Other Builtins. (line 6) 52777 * MeP options: MeP Options. (line 6) 52778 * Mercury: G++ and GCC. (line 23) 52779 * message formatting: Language Independent Options. 52780 (line 6) 52781 * messages, warning: Warning Options. (line 6) 52782 * messages, warning and error: Warnings and Errors. 52783 (line 6) 52784 * MicroBlaze Options: MicroBlaze Options. (line 6) 52785 * middle-operands, omitted: Conditionals. (line 6) 52786 * MIPS options: MIPS Options. (line 6) 52787 * 'mips16' attribute: Function Attributes. 52788 (line 833) 52789 * misunderstandings in C++: C++ Misunderstandings. 52790 (line 6) 52791 * mixed declarations and code: Mixed Declarations. (line 6) 52792 * 'mktemp', and constant strings: Incompatibilities. (line 13) 52793 * MMIX Options: MMIX Options. (line 6) 52794 * MN10300 options: MN10300 Options. (line 6) 52795 * 'mode' attribute: Variable Attributes. 52796 (line 133) 52797 * modf: Other Builtins. (line 6) 52798 * modff: Other Builtins. (line 6) 52799 * modfl: Other Builtins. (line 6) 52800 * modifiers in constraints: Modifiers. (line 6) 52801 * Moxie Options: Moxie Options. (line 6) 52802 * 'ms_abi' attribute: Function Attributes. 52803 (line 877) 52804 * 'ms_hook_prologue' attribute: Function Attributes. 52805 (line 904) 52806 * 'ms_struct': Type Attributes. (line 323) 52807 * 'ms_struct' attribute: Variable Attributes. 52808 (line 438) 52809 * mudflap: Optimize Options. (line 404) 52810 * multiple alternative constraints: Multi-Alternative. (line 6) 52811 * multiprecision arithmetic: Long Long. (line 6) 52812 * 'n' in constraint: Simple Constraints. (line 73) 52813 * Named Address Spaces: Named Address Spaces. 52814 (line 6) 52815 * names used in assembler code: Asm Labels. (line 6) 52816 * naming convention, implementation headers: C++ Interface. (line 46) 52817 * nearbyint: Other Builtins. (line 6) 52818 * nearbyintf: Other Builtins. (line 6) 52819 * nearbyintl: Other Builtins. (line 6) 52820 * nested functions: Nested Functions. (line 6) 52821 * newlines (escaped): Escaped Newlines. (line 6) 52822 * nextafter: Other Builtins. (line 6) 52823 * nextafterf: Other Builtins. (line 6) 52824 * nextafterl: Other Builtins. (line 6) 52825 * nexttoward: Other Builtins. (line 6) 52826 * nexttowardf: Other Builtins. (line 6) 52827 * nexttowardl: Other Builtins. (line 6) 52828 * NFC: Warning Options. (line 1272) 52829 * NFKC: Warning Options. (line 1272) 52830 * NMI handler functions on the Blackfin processor: Function Attributes. 52831 (line 947) 52832 * 'noclone' function attribute: Function Attributes. 52833 (line 975) 52834 * 'nocommon' attribute: Variable Attributes. 52835 (line 104) 52836 * 'noinline' function attribute: Function Attributes. 52837 (line 964) 52838 * 'nomips16' attribute: Function Attributes. 52839 (line 833) 52840 * non-constant initializers: Initializers. (line 6) 52841 * non-static inline function: Inline. (line 85) 52842 * 'nonnull' function attribute: Function Attributes. 52843 (line 981) 52844 * 'noreturn' function attribute: Function Attributes. 52845 (line 1005) 52846 * 'nosave_low_regs' attribute: Function Attributes. 52847 (line 1055) 52848 * 'nothrow' function attribute: Function Attributes. 52849 (line 1047) 52850 * 'no_instrument_function' function attribute: Function Attributes. 52851 (line 953) 52852 * 'no_sanitize_address' function attribute: Function Attributes. 52853 (line 1193) 52854 * 'no_split_stack' function attribute: Function Attributes. 52855 (line 958) 52856 * 'o' in constraint: Simple Constraints. (line 23) 52857 * OBJC_INCLUDE_PATH: Environment Variables. 52858 (line 130) 52859 * Objective-C: G++ and GCC. (line 6) 52860 * Objective-C <1>: Standards. (line 163) 52861 * Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options. 52862 (line 6) 52863 * Objective-C++: G++ and GCC. (line 6) 52864 * Objective-C++ <1>: Standards. (line 163) 52865 * offsettable address: Simple Constraints. (line 23) 52866 * old-style function definitions: Function Prototypes. 52867 (line 6) 52868 * omitted middle-operands: Conditionals. (line 6) 52869 * open coding: Inline. (line 6) 52870 * OpenMP parallel: C Dialect Options. (line 257) 52871 * operand constraints, 'asm': Constraints. (line 6) 52872 * 'optimize' function attribute: Function Attributes. 52873 (line 1061) 52874 * optimize options: Optimize Options. (line 6) 52875 * options to control diagnostics formatting: Language Independent Options. 52876 (line 6) 52877 * options to control warnings: Warning Options. (line 6) 52878 * options, C++: C++ Dialect Options. 52879 (line 6) 52880 * options, code generation: Code Gen Options. (line 6) 52881 * options, debugging: Debugging Options. (line 6) 52882 * options, dialect: C Dialect Options. (line 6) 52883 * options, directory search: Directory Options. (line 6) 52884 * options, GCC command: Invoking GCC. (line 6) 52885 * options, grouping: Invoking GCC. (line 26) 52886 * options, linking: Link Options. (line 6) 52887 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 52888 (line 6) 52889 * options, optimization: Optimize Options. (line 6) 52890 * options, order: Invoking GCC. (line 30) 52891 * options, preprocessor: Preprocessor Options. 52892 (line 6) 52893 * order of evaluation, side effects: Non-bugs. (line 196) 52894 * order of options: Invoking GCC. (line 30) 52895 * 'OS_main' AVR function attribute: Function Attributes. 52896 (line 1078) 52897 * 'OS_task' AVR function attribute: Function Attributes. 52898 (line 1078) 52899 * other register constraints: Simple Constraints. (line 161) 52900 * output file option: Overall Options. (line 191) 52901 * overloaded virtual function, warning: C++ Dialect Options. 52902 (line 609) 52903 * 'p' in constraint: Simple Constraints. (line 152) 52904 * 'packed' attribute: Variable Attributes. 52905 (line 144) 52906 * parameter forward declaration: Variable Length. (line 59) 52907 * Pascal: G++ and GCC. (line 23) 52908 * 'pcs' function attribute: Function Attributes. 52909 (line 1102) 52910 * PDP-11 Options: PDP-11 Options. (line 6) 52911 * PIC: Code Gen Options. (line 266) 52912 * picoChip options: picoChip Options. (line 6) 52913 * pmf: Bound member functions. 52914 (line 6) 52915 * pointer arguments: Function Attributes. 52916 (line 186) 52917 * pointer to member function: Bound member functions. 52918 (line 6) 52919 * portions of temporary objects, pointers to: Temporaries. (line 6) 52920 * pow: Other Builtins. (line 6) 52921 * pow10: Other Builtins. (line 6) 52922 * pow10f: Other Builtins. (line 6) 52923 * pow10l: Other Builtins. (line 6) 52924 * PowerPC options: PowerPC Options. (line 6) 52925 * powf: Other Builtins. (line 6) 52926 * powl: Other Builtins. (line 6) 52927 * pragma GCC optimize: Function Specific Option Pragmas. 52928 (line 22) 52929 * pragma GCC pop_options: Function Specific Option Pragmas. 52930 (line 36) 52931 * pragma GCC push_options: Function Specific Option Pragmas. 52932 (line 36) 52933 * pragma GCC reset_options: Function Specific Option Pragmas. 52934 (line 47) 52935 * pragma GCC target: Function Specific Option Pragmas. 52936 (line 7) 52937 * pragma, address: M32C Pragmas. (line 15) 52938 * pragma, align: Solaris Pragmas. (line 11) 52939 * pragma, call: MeP Pragmas. (line 48) 52940 * pragma, coprocessor available: MeP Pragmas. (line 13) 52941 * pragma, coprocessor call_saved: MeP Pragmas. (line 20) 52942 * pragma, coprocessor subclass: MeP Pragmas. (line 28) 52943 * pragma, custom io_volatile: MeP Pragmas. (line 7) 52944 * pragma, diagnostic: Diagnostic Pragmas. (line 14) 52945 * pragma, diagnostic <1>: Diagnostic Pragmas. (line 57) 52946 * pragma, disinterrupt: MeP Pragmas. (line 38) 52947 * pragma, fini: Solaris Pragmas. (line 20) 52948 * pragma, init: Solaris Pragmas. (line 26) 52949 * pragma, longcall: RS/6000 and PowerPC Pragmas. 52950 (line 14) 52951 * pragma, long_calls: ARM Pragmas. (line 11) 52952 * pragma, long_calls_off: ARM Pragmas. (line 17) 52953 * pragma, mark: Darwin Pragmas. (line 11) 52954 * pragma, memregs: M32C Pragmas. (line 7) 52955 * pragma, no_long_calls: ARM Pragmas. (line 14) 52956 * pragma, options align: Darwin Pragmas. (line 14) 52957 * pragma, pop_macro: Push/Pop Macro Pragmas. 52958 (line 15) 52959 * pragma, push_macro: Push/Pop Macro Pragmas. 52960 (line 11) 52961 * pragma, reason for not using: Function Attributes. 52962 (line 1875) 52963 * pragma, redefine_extname: Symbol-Renaming Pragmas. 52964 (line 12) 52965 * pragma, segment: Darwin Pragmas. (line 21) 52966 * pragma, unused: Darwin Pragmas. (line 24) 52967 * pragma, visibility: Visibility Pragmas. (line 8) 52968 * pragma, weak: Weak Pragmas. (line 10) 52969 * pragmas: Pragmas. (line 6) 52970 * pragmas in C++, effect on inlining: C++ Interface. (line 66) 52971 * pragmas, interface and implementation: C++ Interface. (line 6) 52972 * pragmas, warning of unknown: Warning Options. (line 684) 52973 * precompiled headers: Precompiled Headers. 52974 (line 6) 52975 * preprocessing numbers: Incompatibilities. (line 173) 52976 * preprocessing tokens: Incompatibilities. (line 173) 52977 * preprocessor options: Preprocessor Options. 52978 (line 6) 52979 * printf: Other Builtins. (line 6) 52980 * printf_unlocked: Other Builtins. (line 6) 52981 * 'prof': Debugging Options. (line 327) 52982 * 'progmem' AVR variable attribute: Variable Attributes. 52983 (line 314) 52984 * promotion of formal parameters: Function Prototypes. 52985 (line 6) 52986 * 'pure' function attribute: Function Attributes. 52987 (line 1121) 52988 * push address instruction: Simple Constraints. (line 152) 52989 * putchar: Other Builtins. (line 6) 52990 * puts: Other Builtins. (line 6) 52991 * 'q' floating point suffix: Floating Types. (line 6) 52992 * 'Q' floating point suffix: Floating Types. (line 6) 52993 * 'qsort', and global register variables: Global Reg Vars. (line 41) 52994 * question mark: Multi-Alternative. (line 27) 52995 * 'r' fixed-suffix: Fixed-Point. (line 6) 52996 * 'R' fixed-suffix: Fixed-Point. (line 6) 52997 * 'r' in constraint: Simple Constraints. (line 64) 52998 * 'RAMPD': AVR Options. (line 333) 52999 * 'RAMPX': AVR Options. (line 333) 53000 * 'RAMPY': AVR Options. (line 333) 53001 * 'RAMPZ': AVR Options. (line 333) 53002 * ranges in case statements: Case Ranges. (line 6) 53003 * read-only strings: Incompatibilities. (line 9) 53004 * register variable after 'longjmp': Global Reg Vars. (line 65) 53005 * registers: Extended Asm. (line 6) 53006 * registers for local variables: Local Reg Vars. (line 6) 53007 * registers in constraints: Simple Constraints. (line 64) 53008 * registers, global allocation: Explicit Reg Vars. (line 6) 53009 * registers, global variables in: Global Reg Vars. (line 6) 53010 * 'regparm' attribute: Function Attributes. 53011 (line 1201) 53012 * relocation truncated to fit (ColdFire): M680x0 Options. (line 325) 53013 * relocation truncated to fit (MIPS): MIPS Options. (line 199) 53014 * remainder: Other Builtins. (line 6) 53015 * remainderf: Other Builtins. (line 6) 53016 * remainderl: Other Builtins. (line 6) 53017 * remquo: Other Builtins. (line 6) 53018 * remquof: Other Builtins. (line 6) 53019 * remquol: Other Builtins. (line 6) 53020 * 'renesas' attribute: Function Attributes. 53021 (line 1233) 53022 * reordering, warning: C++ Dialect Options. 53023 (line 527) 53024 * reporting bugs: Bugs. (line 6) 53025 * 'resbank' attribute: Function Attributes. 53026 (line 1237) 53027 * rest argument (in macro): Variadic Macros. (line 6) 53028 * restricted pointers: Restricted Pointers. 53029 (line 6) 53030 * restricted references: Restricted Pointers. 53031 (line 6) 53032 * restricted this pointer: Restricted Pointers. 53033 (line 6) 53034 * 'returns_twice' attribute: Function Attributes. 53035 (line 1251) 53036 * rindex: Other Builtins. (line 6) 53037 * rint: Other Builtins. (line 6) 53038 * rintf: Other Builtins. (line 6) 53039 * rintl: Other Builtins. (line 6) 53040 * RL78 Options: RL78 Options. (line 6) 53041 * round: Other Builtins. (line 6) 53042 * roundf: Other Builtins. (line 6) 53043 * roundl: Other Builtins. (line 6) 53044 * RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 53045 (line 6) 53046 * RTTI: Vague Linkage. (line 42) 53047 * run-time options: Code Gen Options. (line 6) 53048 * RX Options: RX Options. (line 6) 53049 * 's' in constraint: Simple Constraints. (line 100) 53050 * S/390 and zSeries Options: S/390 and zSeries Options. 53051 (line 6) 53052 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 53053 (line 1260) 53054 * save volatile registers on the MicroBlaze: Function Attributes. 53055 (line 1265) 53056 * scalb: Other Builtins. (line 6) 53057 * scalbf: Other Builtins. (line 6) 53058 * scalbl: Other Builtins. (line 6) 53059 * scalbln: Other Builtins. (line 6) 53060 * scalblnf: Other Builtins. (line 6) 53061 * scalblnf <1>: Other Builtins. (line 6) 53062 * scalbn: Other Builtins. (line 6) 53063 * scalbnf: Other Builtins. (line 6) 53064 * 'scanf', and constant strings: Incompatibilities. (line 17) 53065 * scanfnl: Other Builtins. (line 6) 53066 * scope of a variable length array: Variable Length. (line 22) 53067 * scope of declaration: Disappointments. (line 21) 53068 * scope of external declarations: Incompatibilities. (line 80) 53069 * Score Options: Score Options. (line 6) 53070 * search path: Directory Options. (line 6) 53071 * 'section' function attribute: Function Attributes. 53072 (line 1273) 53073 * 'section' variable attribute: Variable Attributes. 53074 (line 165) 53075 * 'sentinel' function attribute: Function Attributes. 53076 (line 1289) 53077 * setjmp: Global Reg Vars. (line 65) 53078 * 'setjmp' incompatibilities: Incompatibilities. (line 39) 53079 * shared strings: Incompatibilities. (line 9) 53080 * 'shared' variable attribute: Variable Attributes. 53081 (line 210) 53082 * side effect in '?:': Conditionals. (line 20) 53083 * side effects, macro argument: Statement Exprs. (line 35) 53084 * side effects, order of evaluation: Non-bugs. (line 196) 53085 * signbit: Other Builtins. (line 6) 53086 * signbitd128: Other Builtins. (line 6) 53087 * signbitd32: Other Builtins. (line 6) 53088 * signbitd64: Other Builtins. (line 6) 53089 * signbitf: Other Builtins. (line 6) 53090 * signbitl: Other Builtins. (line 6) 53091 * signed and unsigned values, comparison warning: Warning Options. 53092 (line 1144) 53093 * significand: Other Builtins. (line 6) 53094 * significandf: Other Builtins. (line 6) 53095 * significandl: Other Builtins. (line 6) 53096 * simple constraints: Simple Constraints. (line 6) 53097 * sin: Other Builtins. (line 6) 53098 * sincos: Other Builtins. (line 6) 53099 * sincosf: Other Builtins. (line 6) 53100 * sincosl: Other Builtins. (line 6) 53101 * sinf: Other Builtins. (line 6) 53102 * sinh: Other Builtins. (line 6) 53103 * sinhf: Other Builtins. (line 6) 53104 * sinhl: Other Builtins. (line 6) 53105 * sinl: Other Builtins. (line 6) 53106 * sizeof: Typeof. (line 6) 53107 * smaller data references: M32R/D Options. (line 57) 53108 * smaller data references (PowerPC): RS/6000 and PowerPC Options. 53109 (line 739) 53110 * snprintf: Other Builtins. (line 6) 53111 * Solaris 2 options: Solaris 2 Options. (line 6) 53112 * SPARC options: SPARC Options. (line 6) 53113 * Spec Files: Spec Files. (line 6) 53114 * specified registers: Explicit Reg Vars. (line 6) 53115 * specifying compiler version and target machine: Target Options. 53116 (line 6) 53117 * specifying hardware config: Submodel Options. (line 6) 53118 * specifying machine version: Target Options. (line 6) 53119 * specifying registers for local variables: Local Reg Vars. (line 6) 53120 * speed of compilation: Precompiled Headers. 53121 (line 6) 53122 * sprintf: Other Builtins. (line 6) 53123 * SPU options: SPU Options. (line 6) 53124 * 'sp_switch' attribute: Function Attributes. 53125 (line 1338) 53126 * sqrt: Other Builtins. (line 6) 53127 * sqrtf: Other Builtins. (line 6) 53128 * sqrtl: Other Builtins. (line 6) 53129 * sscanf: Other Builtins. (line 6) 53130 * 'sscanf', and constant strings: Incompatibilities. (line 17) 53131 * 'sseregparm' attribute: Function Attributes. 53132 (line 1218) 53133 * statements inside expressions: Statement Exprs. (line 6) 53134 * static data in C++, declaring and defining: Static Definitions. 53135 (line 6) 53136 * stpcpy: Other Builtins. (line 6) 53137 * stpncpy: Other Builtins. (line 6) 53138 * strcasecmp: Other Builtins. (line 6) 53139 * strcat: Other Builtins. (line 6) 53140 * strchr: Other Builtins. (line 6) 53141 * strcmp: Other Builtins. (line 6) 53142 * strcpy: Other Builtins. (line 6) 53143 * strcspn: Other Builtins. (line 6) 53144 * strdup: Other Builtins. (line 6) 53145 * strfmon: Other Builtins. (line 6) 53146 * strftime: Other Builtins. (line 6) 53147 * string constants: Incompatibilities. (line 9) 53148 * strlen: Other Builtins. (line 6) 53149 * strncasecmp: Other Builtins. (line 6) 53150 * strncat: Other Builtins. (line 6) 53151 * strncmp: Other Builtins. (line 6) 53152 * strncpy: Other Builtins. (line 6) 53153 * strndup: Other Builtins. (line 6) 53154 * strpbrk: Other Builtins. (line 6) 53155 * strrchr: Other Builtins. (line 6) 53156 * strspn: Other Builtins. (line 6) 53157 * strstr: Other Builtins. (line 6) 53158 * 'struct': Unnamed Fields. (line 6) 53159 * struct __htm_tdb: S/390 System z Built-in Functions. 53160 (line 49) 53161 * structures: Incompatibilities. (line 146) 53162 * structures, constructor expression: Compound Literals. (line 6) 53163 * submodel options: Submodel Options. (line 6) 53164 * subscripting: Subscripting. (line 6) 53165 * subscripting and function values: Subscripting. (line 6) 53166 * suffixes for C++ source: Invoking G++. (line 6) 53167 * SUNPRO_DEPENDENCIES: Environment Variables. 53168 (line 170) 53169 * suppressing warnings: Warning Options. (line 6) 53170 * surprises in C++: C++ Misunderstandings. 53171 (line 6) 53172 * syntax checking: Warning Options. (line 13) 53173 * 'syscall_linkage' attribute: Function Attributes. 53174 (line 1353) 53175 * system headers, warnings from: Warning Options. (line 835) 53176 * 'sysv_abi' attribute: Function Attributes. 53177 (line 877) 53178 * tan: Other Builtins. (line 6) 53179 * tanf: Other Builtins. (line 6) 53180 * tanh: Other Builtins. (line 6) 53181 * tanhf: Other Builtins. (line 6) 53182 * tanhl: Other Builtins. (line 6) 53183 * tanl: Other Builtins. (line 6) 53184 * 'target' function attribute: Function Attributes. 53185 (line 1360) 53186 * target machine, specifying: Target Options. (line 6) 53187 * target options: Target Options. (line 6) 53188 * 'target("abm")' attribute: Function Attributes. 53189 (line 1386) 53190 * 'target("aes")' attribute: Function Attributes. 53191 (line 1391) 53192 * 'target("align-stringops")' attribute: Function Attributes. 53193 (line 1485) 53194 * 'target("altivec")' attribute: Function Attributes. 53195 (line 1511) 53196 * 'target("arch=ARCH")' attribute: Function Attributes. 53197 (line 1494) 53198 * 'target("avoid-indexed-addresses")' attribute: Function Attributes. 53199 (line 1632) 53200 * 'target("cld")' attribute: Function Attributes. 53201 (line 1456) 53202 * 'target("cmpb")' attribute: Function Attributes. 53203 (line 1517) 53204 * 'target("cpu=CPU")' attribute: Function Attributes. 53205 (line 1647) 53206 * 'target("default")' attribute: Function Attributes. 53207 (line 1394) 53208 * 'target("dlmzb")' attribute: Function Attributes. 53209 (line 1523) 53210 * 'target("fancy-math-387")' attribute: Function Attributes. 53211 (line 1460) 53212 * 'target("fma4")' attribute: Function Attributes. 53213 (line 1440) 53214 * 'target("fpmath=FPMATH")' attribute: Function Attributes. 53215 (line 1502) 53216 * 'target("fprnd")' attribute: Function Attributes. 53217 (line 1530) 53218 * 'target("friz")' attribute: Function Attributes. 53219 (line 1623) 53220 * 'target("fused-madd")' attribute: Function Attributes. 53221 (line 1465) 53222 * 'target("hard-dfp")' attribute: Function Attributes. 53223 (line 1536) 53224 * 'target("ieee-fp")' attribute: Function Attributes. 53225 (line 1470) 53226 * 'target("inline-all-stringops")' attribute: Function Attributes. 53227 (line 1475) 53228 * 'target("inline-stringops-dynamically")' attribute: Function Attributes. 53229 (line 1479) 53230 * 'target("isel")' attribute: Function Attributes. 53231 (line 1542) 53232 * 'target("longcall")' attribute: Function Attributes. 53233 (line 1642) 53234 * 'target("lwp")' attribute: Function Attributes. 53235 (line 1448) 53236 * 'target("mfcrf")' attribute: Function Attributes. 53237 (line 1546) 53238 * 'target("mfpgpr")' attribute: Function Attributes. 53239 (line 1553) 53240 * 'target("mmx")' attribute: Function Attributes. 53241 (line 1399) 53242 * 'target("mulhw")' attribute: Function Attributes. 53243 (line 1560) 53244 * 'target("multiple")' attribute: Function Attributes. 53245 (line 1567) 53246 * 'target("paired")' attribute: Function Attributes. 53247 (line 1637) 53248 * 'target("pclmul")' attribute: Function Attributes. 53249 (line 1403) 53250 * 'target("popcnt")' attribute: Function Attributes. 53251 (line 1407) 53252 * 'target("popcntb")' attribute: Function Attributes. 53253 (line 1578) 53254 * 'target("popcntd")' attribute: Function Attributes. 53255 (line 1585) 53256 * 'target("powerpc-gfxopt")' attribute: Function Attributes. 53257 (line 1591) 53258 * 'target("powerpc-gpopt")' attribute: Function Attributes. 53259 (line 1597) 53260 * 'target("recip")' attribute: Function Attributes. 53261 (line 1489) 53262 * 'target("recip-precision")' attribute: Function Attributes. 53263 (line 1603) 53264 * 'target("sse")' attribute: Function Attributes. 53265 (line 1411) 53266 * 'target("sse2")' attribute: Function Attributes. 53267 (line 1415) 53268 * 'target("sse3")' attribute: Function Attributes. 53269 (line 1419) 53270 * 'target("sse4")' attribute: Function Attributes. 53271 (line 1423) 53272 * 'target("sse4.1")' attribute: Function Attributes. 53273 (line 1428) 53274 * 'target("sse4.2")' attribute: Function Attributes. 53275 (line 1432) 53276 * 'target("sse4a")' attribute: Function Attributes. 53277 (line 1436) 53278 * 'target("ssse3")' attribute: Function Attributes. 53279 (line 1452) 53280 * 'target("string")' attribute: Function Attributes. 53281 (line 1609) 53282 * 'target("tune=TUNE")' attribute: Function Attributes. 53283 (line 1498) 53284 * 'target("tune=TUNE")' attribute <1>: Function Attributes. 53285 (line 1654) 53286 * 'target("update")' attribute: Function Attributes. 53287 (line 1572) 53288 * 'target("vsx")' attribute: Function Attributes. 53289 (line 1615) 53290 * 'target("xop")' attribute: Function Attributes. 53291 (line 1444) 53292 * TC1: Standards. (line 13) 53293 * TC2: Standards. (line 13) 53294 * TC3: Standards. (line 13) 53295 * Technical Corrigenda: Standards. (line 13) 53296 * Technical Corrigendum 1: Standards. (line 13) 53297 * Technical Corrigendum 2: Standards. (line 13) 53298 * Technical Corrigendum 3: Standards. (line 13) 53299 * template instantiation: Template Instantiation. 53300 (line 6) 53301 * temporaries, lifetime of: Temporaries. (line 6) 53302 * tgamma: Other Builtins. (line 6) 53303 * tgammaf: Other Builtins. (line 6) 53304 * tgammal: Other Builtins. (line 6) 53305 * Thread-Local Storage: Thread-Local. (line 6) 53306 * thunks: Nested Functions. (line 6) 53307 * TILE-Gx options: TILE-Gx Options. (line 6) 53308 * TILEPro options: TILEPro Options. (line 6) 53309 * tiny data section on the H8/300H and H8S: Function Attributes. 53310 (line 1676) 53311 * TLS: Thread-Local. (line 6) 53312 * 'tls_model' attribute: Variable Attributes. 53313 (line 233) 53314 * TMPDIR: Environment Variables. 53315 (line 45) 53316 * toascii: Other Builtins. (line 6) 53317 * tolower: Other Builtins. (line 6) 53318 * toupper: Other Builtins. (line 6) 53319 * towlower: Other Builtins. (line 6) 53320 * towupper: Other Builtins. (line 6) 53321 * traditional C language: C Dialect Options. (line 309) 53322 * 'trapa_handler' attribute: Function Attributes. 53323 (line 1688) 53324 * 'trap_exit' attribute: Function Attributes. 53325 (line 1683) 53326 * trunc: Other Builtins. (line 6) 53327 * truncf: Other Builtins. (line 6) 53328 * truncl: Other Builtins. (line 6) 53329 * two-stage name lookup: Name lookup. (line 6) 53330 * type alignment: Alignment. (line 6) 53331 * type attributes: Type Attributes. (line 6) 53332 * typedef names as function parameters: Incompatibilities. (line 97) 53333 * typeof: Typeof. (line 6) 53334 * 'type_info': Vague Linkage. (line 42) 53335 * 'uhk' fixed-suffix: Fixed-Point. (line 6) 53336 * 'UHK' fixed-suffix: Fixed-Point. (line 6) 53337 * 'uhr' fixed-suffix: Fixed-Point. (line 6) 53338 * 'UHR' fixed-suffix: Fixed-Point. (line 6) 53339 * 'uk' fixed-suffix: Fixed-Point. (line 6) 53340 * 'UK' fixed-suffix: Fixed-Point. (line 6) 53341 * 'ulk' fixed-suffix: Fixed-Point. (line 6) 53342 * 'ULK' fixed-suffix: Fixed-Point. (line 6) 53343 * 'ULL' integer suffix: Long Long. (line 6) 53344 * 'ullk' fixed-suffix: Fixed-Point. (line 6) 53345 * 'ULLK' fixed-suffix: Fixed-Point. (line 6) 53346 * 'ullr' fixed-suffix: Fixed-Point. (line 6) 53347 * 'ULLR' fixed-suffix: Fixed-Point. (line 6) 53348 * 'ulr' fixed-suffix: Fixed-Point. (line 6) 53349 * 'ULR' fixed-suffix: Fixed-Point. (line 6) 53350 * undefined behavior: Bug Criteria. (line 17) 53351 * undefined function value: Bug Criteria. (line 17) 53352 * underscores in variables in macros: Typeof. (line 46) 53353 * 'union': Unnamed Fields. (line 6) 53354 * union, casting to a: Cast to Union. (line 6) 53355 * unions: Incompatibilities. (line 146) 53356 * unknown pragmas, warning: Warning Options. (line 684) 53357 * unresolved references and '-nodefaultlibs': Link Options. (line 85) 53358 * unresolved references and '-nostdlib': Link Options. (line 85) 53359 * 'unused' attribute.: Function Attributes. 53360 (line 1692) 53361 * 'ur' fixed-suffix: Fixed-Point. (line 6) 53362 * 'UR' fixed-suffix: Fixed-Point. (line 6) 53363 * 'used' attribute.: Function Attributes. 53364 (line 1697) 53365 * User stack pointer in interrupts on the Blackfin: Function Attributes. 53366 (line 748) 53367 * 'use_debug_exception_return' attribute: Function Attributes. 53368 (line 707) 53369 * 'use_shadow_register_set' attribute: Function Attributes. 53370 (line 698) 53371 * 'V' in constraint: Simple Constraints. (line 43) 53372 * V850 Options: V850 Options. (line 6) 53373 * vague linkage: Vague Linkage. (line 6) 53374 * value after 'longjmp': Global Reg Vars. (line 65) 53375 * variable addressability on the IA-64: Function Attributes. 53376 (line 848) 53377 * variable addressability on the M32R/D: Variable Attributes. 53378 (line 370) 53379 * variable alignment: Alignment. (line 6) 53380 * variable attributes: Variable Attributes. 53381 (line 6) 53382 * variable number of arguments: Variadic Macros. (line 6) 53383 * variable-length array scope: Variable Length. (line 22) 53384 * variable-length arrays: Variable Length. (line 6) 53385 * variables in specified registers: Explicit Reg Vars. (line 6) 53386 * variables, local, in macros: Typeof. (line 46) 53387 * variadic macros: Variadic Macros. (line 6) 53388 * VAX options: VAX Options. (line 6) 53389 * 'version_id' attribute: Function Attributes. 53390 (line 1707) 53391 * vfprintf: Other Builtins. (line 6) 53392 * vfscanf: Other Builtins. (line 6) 53393 * 'visibility' attribute: Function Attributes. 53394 (line 1717) 53395 * VLAs: Variable Length. (line 6) 53396 * 'vliw' attribute: Function Attributes. 53397 (line 1809) 53398 * void pointers, arithmetic: Pointer Arith. (line 6) 53399 * void, size of pointer to: Pointer Arith. (line 6) 53400 * volatile access: Volatiles. (line 6) 53401 * volatile access <1>: C++ Volatiles. (line 6) 53402 * 'volatile' applied to function: Function Attributes. 53403 (line 6) 53404 * volatile read: Volatiles. (line 6) 53405 * volatile read <1>: C++ Volatiles. (line 6) 53406 * volatile write: Volatiles. (line 6) 53407 * volatile write <1>: C++ Volatiles. (line 6) 53408 * vprintf: Other Builtins. (line 6) 53409 * vscanf: Other Builtins. (line 6) 53410 * vsnprintf: Other Builtins. (line 6) 53411 * vsprintf: Other Builtins. (line 6) 53412 * vsscanf: Other Builtins. (line 6) 53413 * vtable: Vague Linkage. (line 27) 53414 * VxWorks Options: VxWorks Options. (line 6) 53415 * 'w' floating point suffix: Floating Types. (line 6) 53416 * 'W' floating point suffix: Floating Types. (line 6) 53417 * warning for comparison of signed and unsigned values: Warning Options. 53418 (line 1144) 53419 * warning for overloaded virtual function: C++ Dialect Options. 53420 (line 609) 53421 * warning for reordering of member initializers: C++ Dialect Options. 53422 (line 527) 53423 * warning for unknown pragmas: Warning Options. (line 684) 53424 * 'warning' function attribute: Function Attributes. 53425 (line 164) 53426 * warning messages: Warning Options. (line 6) 53427 * warnings from system headers: Warning Options. (line 835) 53428 * warnings vs errors: Warnings and Errors. 53429 (line 6) 53430 * 'warn_unused_result' attribute: Function Attributes. 53431 (line 1815) 53432 * 'weak' attribute: Function Attributes. 53433 (line 1832) 53434 * 'weakref' attribute: Function Attributes. 53435 (line 1841) 53436 * whitespace: Incompatibilities. (line 112) 53437 * 'X' in constraint: Simple Constraints. (line 122) 53438 * X3.159-1989: Standards. (line 13) 53439 * x86-64 Options: i386 and x86-64 Options. 53440 (line 6) 53441 * x86-64 options: x86-64 Options. (line 6) 53442 * Xstormy16 Options: Xstormy16 Options. (line 6) 53443 * Xtensa Options: Xtensa Options. (line 6) 53444 * y0: Other Builtins. (line 6) 53445 * y0f: Other Builtins. (line 6) 53446 * y0l: Other Builtins. (line 6) 53447 * y1: Other Builtins. (line 6) 53448 * y1f: Other Builtins. (line 6) 53449 * y1l: Other Builtins. (line 6) 53450 * yn: Other Builtins. (line 6) 53451 * ynf: Other Builtins. (line 6) 53452 * ynl: Other Builtins. (line 6) 53453 * zero-length arrays: Zero Length. (line 6) 53454 * zero-size structures: Empty Structures. (line 6) 53455 * zSeries options: zSeries Options. (line 6) 53456 53457 53458 53459 Tag Table: 53460 Node: Top1881 53461 Node: G++ and GCC3646 53462 Node: Standards5703 53463 Node: Invoking GCC17883 53464 Node: Option Summary21628 53465 Node: Overall Options61756 53466 Node: Invoking G++75943 53467 Node: C Dialect Options77466 53468 Node: C++ Dialect Options93301 53469 Node: Objective-C and Objective-C++ Dialect Options121369 53470 Node: Language Independent Options131876 53471 Node: Warning Options134073 53472 Node: Debugging Options203219 53473 Node: Optimize Options260718 53474 Ref: Type-punning319376 53475 Node: Preprocessor Options397709 53476 Ref: Wtrigraphs402492 53477 Ref: dashMF407242 53478 Ref: fdollars-in-identifiers418123 53479 Node: Assembler Options428348 53480 Node: Link Options429039 53481 Ref: Link Options-Footnote-1440271 53482 Node: Directory Options440607 53483 Node: Spec Files447152 53484 Node: Target Options468496 53485 Node: Submodel Options468895 53486 Node: AArch64 Options470588 53487 Node: Adapteva Epiphany Options474460 53488 Node: ARM Options480408 53489 Node: AVR Options496259 53490 Node: Blackfin Options516393 53491 Node: C6X Options524411 53492 Node: CRIS Options525954 53493 Node: CR16 Options529693 53494 Node: Darwin Options530604 53495 Node: DEC Alpha Options538036 53496 Node: FR30 Options549652 53497 Node: FRV Options550216 53498 Node: GNU/Linux Options556980 53499 Node: H8/300 Options558240 53500 Node: HPPA Options559692 53501 Node: i386 and x86-64 Options569177 53502 Node: i386 and x86-64 Windows Options606283 53503 Node: IA-64 Options609136 53504 Node: LM32 Options617202 53505 Node: M32C Options617725 53506 Node: M32R/D Options618998 53507 Node: M680x0 Options622543 53508 Node: MCore Options636578 53509 Node: MeP Options638080 53510 Node: MicroBlaze Options642039 53511 Node: MIPS Options644841 53512 Node: MMIX Options673693 53513 Node: MN10300 Options676170 53514 Node: Moxie Options678711 53515 Node: PDP-11 Options679081 53516 Node: picoChip Options680773 53517 Node: PowerPC Options682911 53518 Node: RL78 Options683132 53519 Node: RS/6000 and PowerPC Options683793 53520 Node: RX Options722790 53521 Node: S/390 and zSeries Options730122 53522 Node: Score Options738669 53523 Node: SH Options739518 53524 Node: Solaris 2 Options758356 53525 Node: SPARC Options759586 53526 Node: SPU Options772844 53527 Node: System V Options777783 53528 Node: TILE-Gx Options778609 53529 Node: TILEPro Options779533 53530 Node: V850 Options780037 53531 Node: VAX Options786745 53532 Node: VMS Options787280 53533 Node: VxWorks Options788093 53534 Node: x86-64 Options789248 53535 Node: Xstormy16 Options789466 53536 Node: Xtensa Options789755 53537 Node: zSeries Options794066 53538 Node: Code Gen Options794262 53539 Node: Environment Variables824057 53540 Node: Precompiled Headers832060 53541 Node: C Implementation838063 53542 Node: Translation implementation839733 53543 Node: Environment implementation840306 53544 Node: Identifiers implementation840855 53545 Node: Characters implementation841908 53546 Node: Integers implementation844714 53547 Node: Floating point implementation846538 53548 Node: Arrays and pointers implementation849465 53549 Ref: Arrays and pointers implementation-Footnote-1850901 53550 Node: Hints implementation851027 53551 Node: Structures unions enumerations and bit-fields implementation852491 53552 Node: Qualifiers implementation854476 53553 Node: Declarators implementation856248 53554 Node: Statements implementation856589 53555 Node: Preprocessing directives implementation856915 53556 Node: Library functions implementation859019 53557 Node: Architecture implementation859658 53558 Node: Locale-specific behavior implementation860360 53559 Node: C++ Implementation860665 53560 Node: Conditionally-supported behavior861948 53561 Node: Exception handling862457 53562 Node: C Extensions862865 53563 Node: Statement Exprs867855 53564 Node: Local Labels872315 53565 Node: Labels as Values875288 53566 Ref: Labels as Values-Footnote-1877689 53567 Node: Nested Functions877874 53568 Node: Constructing Calls881832 53569 Node: Typeof886549 53570 Node: Conditionals889858 53571 Node: __int128890747 53572 Node: Long Long891272 53573 Node: Complex892748 53574 Node: Floating Types895336 53575 Node: Half-Precision896464 53576 Node: Decimal Float898649 53577 Node: Hex Floats900505 53578 Node: Fixed-Point901542 53579 Node: Named Address Spaces904802 53580 Ref: AVR Named Address Spaces905483 53581 Node: Zero Length910691 53582 Node: Empty Structures913978 53583 Node: Variable Length914384 53584 Node: Variadic Macros917060 53585 Node: Escaped Newlines919438 53586 Node: Subscripting920277 53587 Node: Pointer Arith921002 53588 Node: Initializers921570 53589 Node: Compound Literals922066 53590 Node: Designated Inits925427 53591 Node: Case Ranges929059 53592 Node: Cast to Union929740 53593 Node: Mixed Declarations930830 53594 Node: Function Attributes931340 53595 Node: Attribute Syntax1017737 53596 Node: Function Prototypes1028127 53597 Node: C++ Comments1029907 53598 Node: Dollar Signs1030426 53599 Node: Character Escapes1030891 53600 Node: Variable Attributes1031185 53601 Ref: AVR Variable Attributes1044836 53602 Ref: MeP Variable Attributes1047498 53603 Ref: i386 Variable Attributes1049434 53604 Node: Type Attributes1055095 53605 Ref: MeP Type Attributes1068983 53606 Ref: i386 Type Attributes1069257 53607 Ref: PowerPC Type Attributes1069949 53608 Ref: SPU Type Attributes1070811 53609 Node: Alignment1071102 53610 Node: Inline1072472 53611 Node: Volatiles1077448 53612 Node: Extended Asm1080329 53613 Ref: Example of asm with clobbered asm reg1086233 53614 Ref: Extended asm with goto1095941 53615 Node: Constraints1103791 53616 Node: Simple Constraints1104875 53617 Node: Multi-Alternative1112185 53618 Node: Modifiers1113902 53619 Node: Machine Constraints1116915 53620 Node: Asm Labels1167684 53621 Node: Explicit Reg Vars1169360 53622 Node: Global Reg Vars1170958 53623 Node: Local Reg Vars1175454 53624 Node: Alternate Keywords1177870 53625 Node: Incomplete Enums1179356 53626 Node: Function Names1180112 53627 Node: Return Address1182273 53628 Node: Vector Extensions1185780 53629 Node: Offsetof1191963 53630 Node: __sync Builtins1192768 53631 Node: __atomic Builtins1198237 53632 Node: x86 specific memory model extensions for transactional memory1209871 53633 Node: Object Size Checking1211133 53634 Node: Other Builtins1216622 53635 Node: Target Builtins1245749 53636 Node: Alpha Built-in Functions1246988 53637 Node: ARM iWMMXt Built-in Functions1249997 53638 Node: ARM NEON Intrinsics1256977 53639 Node: AVR Built-in Functions1465406 53640 Node: Blackfin Built-in Functions1468484 53641 Node: FR-V Built-in Functions1469101 53642 Node: Argument Types1469962 53643 Node: Directly-mapped Integer Functions1471714 53644 Node: Directly-mapped Media Functions1472796 53645 Node: Raw read/write Functions1481000 53646 Node: Other Built-in Functions1481906 53647 Node: X86 Built-in Functions1483090 53648 Node: X86 transactional memory intrinsics1542055 53649 Node: MIPS DSP Built-in Functions1544728 53650 Node: MIPS Paired-Single Support1557235 53651 Node: MIPS Loongson Built-in Functions1558734 53652 Node: Paired-Single Arithmetic1565249 53653 Node: Paired-Single Built-in Functions1566197 53654 Node: MIPS-3D Built-in Functions1568864 53655 Node: Other MIPS Built-in Functions1574242 53656 Node: picoChip Built-in Functions1574766 53657 Node: PowerPC Built-in Functions1576114 53658 Node: PowerPC AltiVec/VSX Built-in Functions1579927 53659 Node: PowerPC Hardware Transactional Memory Built-in Functions1712825 53660 Node: RX Built-in Functions1719366 53661 Node: S/390 System z Built-in Functions1723399 53662 Node: SH Built-in Functions1728628 53663 Node: SPARC VIS Built-in Functions1730021 53664 Node: SPU Built-in Functions1735624 53665 Node: TI C6X Built-in Functions1737441 53666 Node: TILE-Gx Built-in Functions1738466 53667 Node: TILEPro Built-in Functions1739585 53668 Node: Target Format Checks1740654 53669 Node: Solaris Format Checks1741086 53670 Node: Darwin Format Checks1741512 53671 Node: Pragmas1742330 53672 Node: ARM Pragmas1743040 53673 Node: M32C Pragmas1743643 53674 Node: MeP Pragmas1744715 53675 Node: RS/6000 and PowerPC Pragmas1746783 53676 Node: Darwin Pragmas1747524 53677 Node: Solaris Pragmas1748591 53678 Node: Symbol-Renaming Pragmas1749755 53679 Node: Structure-Packing Pragmas1751311 53680 Node: Weak Pragmas1752956 53681 Node: Diagnostic Pragmas1753690 53682 Node: Visibility Pragmas1756799 53683 Node: Push/Pop Macro Pragmas1757551 53684 Node: Function Specific Option Pragmas1758524 53685 Node: Unnamed Fields1760784 53686 Node: Thread-Local1763011 53687 Node: C99 Thread-Local Edits1765116 53688 Node: C++98 Thread-Local Edits1767114 53689 Node: Binary constants1770559 53690 Node: C++ Extensions1771230 53691 Node: C++ Volatiles1772941 53692 Node: Restricted Pointers1775289 53693 Node: Vague Linkage1776880 53694 Node: C++ Interface1780503 53695 Ref: C++ Interface-Footnote-11784791 53696 Node: Template Instantiation1784929 53697 Node: Bound member functions1791515 53698 Node: C++ Attributes1793047 53699 Node: Function Multiversioning1795703 53700 Node: Namespace Association1797520 53701 Node: Type Traits1798900 53702 Node: Java Exceptions1805383 53703 Node: Deprecated Features1806773 53704 Node: Backwards Compatibility1809740 53705 Node: Objective-C1811087 53706 Node: GNU Objective-C runtime API1811694 53707 Node: Modern GNU Objective-C runtime API1812701 53708 Node: Traditional GNU Objective-C runtime API1815137 53709 Node: Executing code before main1815864 53710 Node: What you can and what you cannot do in +load1818604 53711 Node: Type encoding1820992 53712 Node: Legacy type encoding1826019 53713 Node: @encode1827109 53714 Node: Method signatures1827650 53715 Node: Garbage Collection1829642 53716 Node: Constant string objects1832332 53717 Node: compatibility_alias1834841 53718 Node: Exceptions1835562 53719 Node: Synchronization1838272 53720 Node: Fast enumeration1839456 53721 Node: Using fast enumeration1839768 53722 Node: c99-like fast enumeration syntax1840979 53723 Node: Fast enumeration details1841682 53724 Node: Fast enumeration protocol1844022 53725 Node: Messaging with the GNU Objective-C runtime1847174 53726 Node: Dynamically registering methods1848546 53727 Node: Forwarding hook1850237 53728 Node: Compatibility1853277 53729 Node: Gcov1859833 53730 Node: Gcov Intro1860366 53731 Node: Invoking Gcov1863084 53732 Node: Gcov and Optimization1875986 53733 Node: Gcov Data Files1878988 53734 Node: Cross-profiling1880383 53735 Node: Trouble1882237 53736 Node: Actual Bugs1883649 53737 Node: Interoperation1884096 53738 Node: Incompatibilities1890987 53739 Node: Fixed Headers1899139 53740 Node: Standard Libraries1900797 53741 Node: Disappointments1902169 53742 Node: C++ Misunderstandings1906528 53743 Node: Static Definitions1907339 53744 Node: Name lookup1908392 53745 Ref: Name lookup-Footnote-11913172 53746 Node: Temporaries1913361 53747 Node: Copy Assignment1915337 53748 Node: Non-bugs1917144 53749 Node: Warnings and Errors1927650 53750 Node: Bugs1929412 53751 Node: Bug Criteria1929976 53752 Node: Bug Reporting1932186 53753 Node: Service1932407 53754 Node: Contributing1933226 53755 Node: Funding1933966 53756 Node: GNU Project1936456 53757 Node: Copying1937102 53758 Node: GNU Free Documentation License1974611 53759 Node: Contributors1999729 53760 Node: Option Index2037127 53761 Node: Keyword Index2231663 53762 53763 End Tag Table 53764