1This is doc/gcc.info, produced by makeinfo version 4.8 from 2/scratch/mitchell/gcc-releases/gcc-4.2.1/gcc-4.2.1/gcc/doc/gcc.texi. 3 4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 51999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 6 7 Permission is granted to copy, distribute and/or modify this document 8under the terms of the GNU Free Documentation License, Version 1.2 or 9any later version published by the Free Software Foundation; with the 10Invariant Sections being "GNU General Public License" and "Funding Free 11Software", the Front-Cover texts being (a) (see below), and with the 12Back-Cover Texts being (b) (see below). A copy of the license is 13included in the section entitled "GNU Free Documentation License". 14 15 (a) The FSF's Front-Cover Text is: 16 17 A GNU Manual 18 19 (b) The FSF's Back-Cover Text is: 20 21 You have freedom to copy and modify this GNU Manual, like GNU 22software. Copies published by the Free Software Foundation raise 23funds for GNU development. 24 25INFO-DIR-SECTION Software development 26START-INFO-DIR-ENTRY 27* gcc: (gcc). The GNU Compiler Collection. 28END-INFO-DIR-ENTRY 29 This file documents the use of the GNU compilers. 30 31 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 321999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 33 34 Permission is granted to copy, distribute and/or modify this document 35under the terms of the GNU Free Documentation License, Version 1.2 or 36any later version published by the Free Software Foundation; with the 37Invariant Sections being "GNU General Public License" and "Funding Free 38Software", the Front-Cover texts being (a) (see below), and with the 39Back-Cover Texts being (b) (see below). A copy of the license is 40included in the section entitled "GNU Free Documentation License". 41 42 (a) The FSF's Front-Cover Text is: 43 44 A GNU Manual 45 46 (b) The FSF's Back-Cover Text is: 47 48 You have freedom to copy and modify this GNU Manual, like GNU 49software. Copies published by the Free Software Foundation raise 50funds for GNU development. 51 52 53 54File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 55 56Introduction 57************ 58 59This manual documents how to use the GNU compilers, as well as their 60features and incompatibilities, and how to report bugs. It corresponds 61to GCC version 4.2.1. The internals of the GNU compilers, including 62how to port them to new targets and some information about how to write 63front ends for new languages, are documented in a separate manual. 64*Note Introduction: (gccint)Top. 65 66* Menu: 67 68* G++ and GCC:: You can compile C or C++ programs. 69* Standards:: Language standards supported by GCC. 70* Invoking GCC:: Command options supported by `gcc'. 71* C Implementation:: How GCC implements the ISO C specification. 72* C Extensions:: GNU extensions to the C language family. 73* C++ Extensions:: GNU extensions to the C++ language. 74* Objective-C:: GNU Objective-C runtime features. 75* Compatibility:: Binary Compatibility 76* Gcov:: `gcov'---a test coverage program. 77* Trouble:: If you have trouble using GCC. 78* Bugs:: How, why and where to report bugs. 79* Service:: How to find suppliers of support for GCC. 80* Contributing:: How to contribute to testing and developing GCC. 81 82* Funding:: How to help assure funding for free software. 83* GNU Project:: The GNU Project and GNU/Linux. 84 85* Copying:: GNU General Public License says 86 how you can copy and share GCC. 87* GNU Free Documentation License:: How you can copy and share this manual. 88* Contributors:: People who have contributed to GCC. 89 90* Option Index:: Index to command line options. 91* Keyword Index:: Index of concepts and symbol names. 92 93 94File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 95 961 Programming Languages Supported by GCC 97**************************************** 98 99GCC stands for "GNU Compiler Collection". GCC is an integrated 100distribution of compilers for several major programming languages. 101These languages currently include C, C++, Objective-C, Objective-C++, 102Java, Fortran, and Ada. 103 104 The abbreviation "GCC" has multiple meanings in common use. The 105current official meaning is "GNU Compiler Collection", which refers 106generically to the complete suite of tools. The name historically stood 107for "GNU C Compiler", and this usage is still common when the emphasis 108is on compiling C programs. Finally, the name is also used when 109speaking of the "language-independent" component of GCC: code shared 110among the compilers for all supported languages. 111 112 The language-independent component of GCC includes the majority of the 113optimizers, as well as the "back ends" that generate machine code for 114various processors. 115 116 The part of a compiler that is specific to a particular language is 117called the "front end". In addition to the front ends that are 118integrated components of GCC, there are several other front ends that 119are maintained separately. These support languages such as Pascal, 120Mercury, and COBOL. To use these, they must be built together with GCC 121proper. 122 123 Most of the compilers for languages other than C have their own names. 124The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 125talk about compiling one of those languages, we might refer to that 126compiler by its own name, or as GCC. Either is correct. 127 128 Historically, compilers for many languages, including C++ and Fortran, 129have been implemented as "preprocessors" which emit another high level 130language such as C. None of the compilers included in GCC are 131implemented this way; they all generate machine code directly. This 132sort of preprocessor should not be confused with the "C preprocessor", 133which is an integral feature of the C, C++, Objective-C and 134Objective-C++ languages. 135 136 137File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 138 1392 Language Standards Supported by GCC 140************************************* 141 142For each language compiled by GCC for which there is a standard, GCC 143attempts to follow one or more versions of that standard, possibly with 144some exceptions, and possibly with some extensions. 145 146 GCC supports three versions of the C standard, although support for 147the most recent version is not yet complete. 148 149 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 150published in 1990. This standard was ratified as an ISO standard 151(ISO/IEC 9899:1990) later in 1990. There were no technical differences 152between these publications, although the sections of the ANSI standard 153were renumbered and became clauses in the ISO standard. This standard, 154in both its forms, is commonly known as "C89", or occasionally as 155"C90", from the dates of ratification. The ANSI standard, but not the 156ISO standard, also came with a Rationale document. To select this 157standard in GCC, use one of the options `-ansi', `-std=c89' or 158`-std=iso9899:1990'; to obtain all the diagnostics required by the 159standard, you should also specify `-pedantic' (or `-pedantic-errors' if 160you want them to be errors rather than warnings). *Note Options 161Controlling C Dialect: C Dialect Options. 162 163 Errors in the 1990 ISO C standard were corrected in two Technical 164Corrigenda published in 1994 and 1996. GCC does not support the 165uncorrected version. 166 167 An amendment to the 1990 standard was published in 1995. This 168amendment added digraphs and `__STDC_VERSION__' to the language, but 169otherwise concerned the library. This amendment is commonly known as 170"AMD1"; the amended standard is sometimes known as "C94" or "C95". To 171select this standard in GCC, use the option `-std=iso9899:199409' 172(with, as for other standard versions, `-pedantic' to receive all 173required diagnostics). 174 175 A new edition of the ISO C standard was published in 1999 as ISO/IEC 1769899:1999, and is commonly known as "C99". GCC has incomplete support 177for this standard version; see 178`http://gcc.gnu.org/gcc-4.2/c99status.html' for details. To select this 179standard, use `-std=c99' or `-std=iso9899:1999'. (While in 180development, drafts of this standard version were referred to as "C9X".) 181 182 Errors in the 1999 ISO C standard were corrected in two Technical 183Corrigenda published in 2001 and 2004. GCC does not support the 184uncorrected version. 185 186 By default, GCC provides some extensions to the C language that on 187rare occasions conflict with the C standard. *Note Extensions to the C 188Language Family: C Extensions. Use of the `-std' options listed above 189will disable these extensions where they conflict with the C standard 190version selected. You may also select an extended version of the C 191language explicitly with `-std=gnu89' (for C89 with GNU extensions) or 192`-std=gnu99' (for C99 with GNU extensions). The default, if no C 193language dialect options are given, is `-std=gnu89'; this will change to 194`-std=gnu99' in some future release when the C99 support is complete. 195Some features that are part of the C99 standard are accepted as 196extensions in C89 mode. 197 198 The ISO C standard defines (in clause 4) two classes of conforming 199implementation. A "conforming hosted implementation" supports the 200whole standard including all the library facilities; a "conforming 201freestanding implementation" is only required to provide certain 202library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 203and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99, 204also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex 205types, added in C99, are not required for freestanding implementations. 206The standard also defines two environments for programs, a 207"freestanding environment", required of all implementations and which 208may not have library facilities beyond those required of freestanding 209implementations, where the handling of program startup and termination 210are implementation-defined, and a "hosted environment", which is not 211required, in which all the library facilities are provided and startup 212is through a function `int main (void)' or `int main (int, char *[])'. 213An OS kernel would be a freestanding environment; a program using the 214facilities of an operating system would normally be in a hosted 215implementation. 216 217 GCC aims towards being usable as a conforming freestanding 218implementation, or as the compiler for a conforming hosted 219implementation. By default, it will act as the compiler for a hosted 220implementation, defining `__STDC_HOSTED__' as `1' and presuming that 221when the names of ISO C functions are used, they have the semantics 222defined in the standard. To make it act as a conforming freestanding 223implementation for a freestanding environment, use the option 224`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 225make assumptions about the meanings of function names from the standard 226library, with exceptions noted below. To build an OS kernel, you may 227well still need to make your own arrangements for linking and startup. 228*Note Options Controlling C Dialect: C Dialect Options. 229 230 GCC does not provide the library facilities required only of hosted 231implementations, nor yet all the facilities required by C99 of 232freestanding implementations; to use the facilities of a hosted 233environment, you will need to find them elsewhere (for example, in the 234GNU C library). *Note Standard Libraries: Standard Libraries. 235 236 Most of the compiler support routines used by GCC are present in 237`libgcc', but there are a few exceptions. GCC requires the 238freestanding environment provide `memcpy', `memmove', `memset' and 239`memcmp'. Finally, if `__builtin_trap' is used, and the target does 240not implement the `trap' pattern, then GCC will emit a call to `abort'. 241 242 For references to Technical Corrigenda, Rationale documents and 243information concerning the history of C that is available online, see 244`http://gcc.gnu.org/readings.html' 245 246 There is no formal written standard for Objective-C or Objective-C++. 247The most authoritative manual is "Object-Oriented Programming and the 248Objective-C Language", available at a number of web sites: 249 250 * 251 `http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/' 252 is a recent (and periodically updated) version; 253 254 * `http://www.toodarkpark.org/computers/objc/' is an older example; 255 256 * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html' 257 have additional useful information. 258 259 There is no standard for treelang, which is a sample language front end 260for GCC. Its only purpose is as a sample for people wishing to write a 261new language for GCC. The language is documented in 262`gcc/treelang/treelang.texi' which can be turned into info or HTML 263format. 264 265 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 266conformance and compatibility of the Ada compiler. 267 268 *Note Standards: (gfortran)Standards, for details of standards 269supported by GNU Fortran. 270 271 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 272details of compatibility between `gcj' and the Java Platform. 273 274 275File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 276 2773 GCC Command Options 278********************* 279 280When you invoke GCC, it normally does preprocessing, compilation, 281assembly and linking. The "overall options" allow you to stop this 282process at an intermediate stage. For example, the `-c' option says 283not to run the linker. Then the output consists of object files output 284by the assembler. 285 286 Other options are passed on to one stage of processing. Some options 287control the preprocessor and others the compiler itself. Yet other 288options control the assembler and linker; most of these are not 289documented here, since you rarely need to use any of them. 290 291 Most of the command line options that you can use with GCC are useful 292for C programs; when an option is only useful with another language 293(usually C++), the explanation says so explicitly. If the description 294for a particular option does not mention a source language, you can use 295that option with all supported languages. 296 297 *Note Compiling C++ Programs: Invoking G++, for a summary of special 298options for compiling C++ programs. 299 300 The `gcc' program accepts options and file names as operands. Many 301options have multi-letter names; therefore multiple single-letter 302options may _not_ be grouped: `-dr' is very different from `-d -r'. 303 304 You can mix options and other arguments. For the most part, the order 305you use doesn't matter. Order does matter when you use several options 306of the same kind; for example, if you specify `-L' more than once, the 307directories are searched in the order specified. 308 309 Many options have long names starting with `-f' or with `-W'--for 310example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 311have both positive and negative forms; the negative form of `-ffoo' 312would be `-fno-foo'. This manual documents only one of these two 313forms, whichever one is not the default. 314 315 *Note Option Index::, for an index to GCC's options. 316 317* Menu: 318 319* Option Summary:: Brief list of all options, without explanations. 320* Overall Options:: Controlling the kind of output: 321 an executable, object files, assembler files, 322 or preprocessed source. 323* Invoking G++:: Compiling C++ programs. 324* C Dialect Options:: Controlling the variant of C language compiled. 325* C++ Dialect Options:: Variations on C++. 326* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 327 and Objective-C++. 328* Language Independent Options:: Controlling how diagnostics should be 329 formatted. 330* Warning Options:: How picky should the compiler be? 331* Debugging Options:: Symbol tables, measurements, and debugging dumps. 332* Optimize Options:: How much optimization? 333* Preprocessor Options:: Controlling header files and macro definitions. 334 Also, getting dependency information for Make. 335* Assembler Options:: Passing options to the assembler. 336* Link Options:: Specifying libraries and so on. 337* Directory Options:: Where to find header files and libraries. 338 Where to find the compiler executable files. 339* Spec Files:: How to pass switches to sub-processes. 340* Target Options:: Running a cross-compiler, or an old version of GCC. 341* Submodel Options:: Specifying minor hardware or convention variations, 342 such as 68010 vs 68020. 343* Code Gen Options:: Specifying conventions for function calls, data layout 344 and register usage. 345* Environment Variables:: Env vars that affect GCC. 346* Precompiled Headers:: Compiling a header once, and using it many times. 347* Running Protoize:: Automatically adding or removing function prototypes. 348 349 350File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 351 3523.1 Option Summary 353================== 354 355Here is a summary of all the options, grouped by type. Explanations are 356in the following sections. 357 358_Overall Options_ 359 *Note Options Controlling the Kind of Output: Overall Options. 360 -c -S -E -o FILE -combine -pipe -pass-exit-codes 361 -x LANGUAGE -v -### --help --target-help --version @FILE 362 363_C Language Options_ 364 *Note Options Controlling C Dialect: C Dialect Options. 365 -ansi -std=STANDARD -fgnu89-inline 366 -aux-info FILENAME 367 -fno-asm -fno-builtin -fno-builtin-FUNCTION 368 -fhosted -ffreestanding -fopenmp -fms-extensions 369 -trigraphs -no-integrated-cpp -traditional -traditional-cpp 370 -fallow-single-precision -fcond-mismatch 371 -fsigned-bitfields -fsigned-char 372 -funsigned-bitfields -funsigned-char 373 374_C++ Language Options_ 375 *Note Options Controlling C++ Dialect: C++ Dialect Options. 376 -fabi-version=N -fno-access-control -fcheck-new 377 -fconserve-space -ffriend-injection 378 -fno-elide-constructors 379 -fno-enforce-eh-specs 380 -ffor-scope -fno-for-scope -fno-gnu-keywords 381 -fno-implicit-templates 382 -fno-implicit-inline-templates 383 -fno-implement-inlines -fms-extensions 384 -fno-nonansi-builtins -fno-operator-names 385 -fno-optional-diags -fpermissive 386 -frepo -fno-rtti -fstats -ftemplate-depth-N 387 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 388 -fno-default-inline -fvisibility-inlines-hidden 389 -Wabi -Wctor-dtor-privacy 390 -Wnon-virtual-dtor -Wreorder 391 -Weffc++ -Wno-deprecated -Wstrict-null-sentinel 392 -Wno-non-template-friend -Wold-style-cast 393 -Woverloaded-virtual -Wno-pmf-conversions 394 -Wsign-promo 395 396_Objective-C and Objective-C++ Language Options_ 397 *Note Options Controlling Objective-C and Objective-C++ Dialects: 398 Objective-C and Objective-C++ Dialect Options. 399 -fconstant-string-class=CLASS-NAME 400 -fgnu-runtime -fnext-runtime 401 -fno-nil-receivers 402 -fobjc-call-cxx-cdtors 403 -fobjc-direct-dispatch 404 -fobjc-exceptions 405 -fobjc-gc 406 -freplace-objc-classes 407 -fzero-link 408 -gen-decls 409 -Wassign-intercept 410 -Wno-protocol -Wselector 411 -Wstrict-selector-match 412 -Wundeclared-selector 413 414_Language Independent Options_ 415 *Note Options to Control Diagnostic Messages Formatting: Language 416 Independent Options. 417 -fmessage-length=N 418 -fdiagnostics-show-location=[once|every-line] 419 -fdiagnostics-show-option 420 421_Warning Options_ 422 *Note Options to Request or Suppress Warnings: Warning Options. 423 -fsyntax-only -pedantic -pedantic-errors 424 -w -Wextra -Wall -Waddress -Waggregate-return -Wno-attributes 425 -Wc++-compat -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment 426 -Wconversion -Wno-deprecated-declarations 427 -Wdisabled-optimization -Wno-div-by-zero -Wno-endif-labels 428 -Werror -Werror=* -Werror-implicit-function-declaration 429 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 430 -Wno-format-extra-args -Wformat-nonliteral 431 -Wformat-security -Wformat-y2k 432 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 433 -Wimport -Wno-import -Winit-self -Winline 434 -Wno-int-to-pointer-cast 435 -Wno-invalid-offsetof -Winvalid-pch 436 -Wlarger-than-LEN -Wunsafe-loop-optimizations -Wlong-long 437 -Wmain -Wmissing-braces -Wmissing-field-initializers 438 -Wmissing-format-attribute -Wmissing-include-dirs 439 -Wmissing-noreturn 440 -Wno-multichar -Wnonnull -Wno-overflow 441 -Woverlength-strings -Wpacked -Wpadded 442 -Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast 443 -Wredundant-decls 444 -Wreturn-type -Wsequence-point -Wshadow 445 -Wsign-compare -Wstack-protector 446 -Wstrict-aliasing -Wstrict-aliasing=2 447 -Wstrict-overflow -Wstrict-overflow=N 448 -Wswitch -Wswitch-default -Wswitch-enum 449 -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized 450 -Wunknown-pragmas -Wno-pragmas -Wunreachable-code 451 -Wunused -Wunused-function -Wunused-label -Wunused-parameter 452 -Wunused-value -Wunused-variable -Wvariadic-macros 453 -Wvolatile-register-var -Wwrite-strings 454 455_C-only Warning Options_ 456 -Wbad-function-cast -Wmissing-declarations 457 -Wmissing-prototypes -Wnested-externs -Wold-style-definition 458 -Wstrict-prototypes -Wtraditional 459 -Wdeclaration-after-statement -Wpointer-sign 460 461_Debugging Options_ 462 *Note Options for Debugging Your Program or GCC: Debugging Options. 463 -dLETTERS -dumpspecs -dumpmachine -dumpversion 464 -fdump-noaddr -fdump-unnumbered -fdump-translation-unit[-N] 465 -fdump-class-hierarchy[-N] 466 -fdump-ipa-all -fdump-ipa-cgraph 467 -fdump-tree-all 468 -fdump-tree-original[-N] 469 -fdump-tree-optimized[-N] 470 -fdump-tree-inlined[-N] 471 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias 472 -fdump-tree-ch 473 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 474 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 475 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 476 -fdump-tree-dom[-N] 477 -fdump-tree-dse[-N] 478 -fdump-tree-phiopt[-N] 479 -fdump-tree-forwprop[-N] 480 -fdump-tree-copyrename[-N] 481 -fdump-tree-nrv -fdump-tree-vect 482 -fdump-tree-sink 483 -fdump-tree-sra[-N] 484 -fdump-tree-salias 485 -fdump-tree-fre[-N] 486 -fdump-tree-vrp[-N] 487 -ftree-vectorizer-verbose=N 488 -fdump-tree-storeccp[-N] 489 -feliminate-dwarf2-dups -feliminate-unused-debug-types 490 -feliminate-unused-debug-symbols -femit-class-debug-always 491 -fmem-report -fprofile-arcs 492 -frandom-seed=STRING -fsched-verbose=N 493 -ftest-coverage -ftime-report -fvar-tracking 494 -g -gLEVEL -gcoff -gdwarf-2 495 -ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ 496 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 497 -print-multi-directory -print-multi-lib 498 -print-prog-name=PROGRAM -print-search-dirs -Q 499 -save-temps -time 500 501_Optimization Options_ 502 *Note Options that Control Optimization: Optimize Options. 503 -falign-functions=N -falign-jumps=N 504 -falign-labels=N -falign-loops=N 505 -fbounds-check -fmudflap -fmudflapth -fmudflapir 506 -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize 507 -fbranch-target-load-optimize2 -fbtr-bb-exclusive 508 -fcaller-saves -fcprop-registers -fcse-follow-jumps 509 -fcse-skip-blocks -fcx-limited-range -fdata-sections 510 -fdelayed-branch -fdelete-null-pointer-checks -fearly-inlining 511 -fexpensive-optimizations -ffast-math -ffloat-store 512 -fforce-addr -ffunction-sections 513 -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload 514 -fcrossjumping -fif-conversion -fif-conversion2 515 -finline-functions -finline-functions-called-once 516 -finline-limit=N -fkeep-inline-functions 517 -fkeep-static-consts -fmerge-constants -fmerge-all-constants 518 -fmodulo-sched -fno-branch-count-reg 519 -fno-default-inline -fno-defer-pop -fmove-loop-invariants 520 -fno-function-cse -fno-guess-branch-probability 521 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 522 -funsafe-math-optimizations -funsafe-loop-optimizations -ffinite-math-only 523 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 524 -fomit-frame-pointer -foptimize-register-move 525 -foptimize-sibling-calls -fprefetch-loop-arrays 526 -fprofile-generate -fprofile-use 527 -fregmove -frename-registers 528 -freorder-blocks -freorder-blocks-and-partition -freorder-functions 529 -frerun-cse-after-loop 530 -frounding-math -frtl-abstract-sequences 531 -fschedule-insns -fschedule-insns2 532 -fno-sched-interblock -fno-sched-spec -fsched-spec-load 533 -fsched-spec-load-dangerous 534 -fsched-stalled-insns=N -fsched-stalled-insns-dep=N 535 -fsched2-use-superblocks 536 -fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops 537 -fsection-anchors -fsignaling-nans -fsingle-precision-constant 538 -fstack-protector -fstack-protector-all 539 -fstrict-aliasing -fstrict-overflow -ftracer -fthread-jumps 540 -funroll-all-loops -funroll-loops -fpeel-loops 541 -fsplit-ivs-in-unroller -funswitch-loops 542 -fvariable-expansion-in-unroller 543 -ftree-pre -ftree-ccp -ftree-dce -ftree-loop-optimize 544 -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts 545 -ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink 546 -ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize 547 -ftree-vect-loop-version -ftree-salias -fipa-pta -fweb 548 -ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program 549 --param NAME=VALUE 550 -O -O0 -O1 -O2 -O3 -Os 551 552_Preprocessor Options_ 553 *Note Options Controlling the Preprocessor: Preprocessor Options. 554 -AQUESTION=ANSWER 555 -A-QUESTION[=ANSWER] 556 -C -dD -dI -dM -dN 557 -DMACRO[=DEFN] -E -H 558 -idirafter DIR 559 -include FILE -imacros FILE 560 -iprefix FILE -iwithprefix DIR 561 -iwithprefixbefore DIR -isystem DIR 562 -imultilib DIR -isysroot DIR 563 -M -MM -MF -MG -MP -MQ -MT -nostdinc 564 -P -fworking-directory -remap 565 -trigraphs -undef -UMACRO -Wp,OPTION 566 -Xpreprocessor OPTION 567 568_Assembler Option_ 569 *Note Passing Options to the Assembler: Assembler Options. 570 -Wa,OPTION -Xassembler OPTION 571 572_Linker Options_ 573 *Note Options for Linking: Link Options. 574 OBJECT-FILE-NAME -lLIBRARY 575 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 576 -s -static -static-libgcc -shared -shared-libgcc -symbolic 577 -Wl,OPTION -Xlinker OPTION 578 -u SYMBOL 579 580_Directory Options_ 581 *Note Options for Directory Search: Directory Options. 582 -BPREFIX -IDIR -iquoteDIR -LDIR 583 -specs=FILE -I- --sysroot=DIR 584 585_Target Options_ 586 *Note Target Options::. 587 -V VERSION -b MACHINE 588 589_Machine Dependent Options_ 590 *Note Hardware Models and Configurations: Submodel Options. 591 592 _ARC Options_ 593 -EB -EL 594 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 595 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 596 597 _ARM Options_ 598 -mapcs-frame -mno-apcs-frame 599 -mabi=NAME 600 -mapcs-stack-check -mno-apcs-stack-check 601 -mapcs-float -mno-apcs-float 602 -mapcs-reentrant -mno-apcs-reentrant 603 -msched-prolog -mno-sched-prolog 604 -mlittle-endian -mbig-endian -mwords-little-endian 605 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe 606 -mthumb-interwork -mno-thumb-interwork 607 -mcpu=NAME -march=NAME -mfpu=NAME 608 -mstructure-size-boundary=N 609 -mabort-on-noreturn 610 -mlong-calls -mno-long-calls 611 -msingle-pic-base -mno-single-pic-base 612 -mpic-register=REG 613 -mnop-fun-dllimport 614 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 615 -mpoke-function-name 616 -mthumb -marm 617 -mtpcs-frame -mtpcs-leaf-frame 618 -mcaller-super-interworking -mcallee-super-interworking 619 -mtp=NAME 620 621 _AVR Options_ 622 -mmcu=MCU -msize -minit-stack=N -mno-interrupts 623 -mcall-prologues -mno-tablejump -mtiny-stack -mint8 624 625 _Blackfin Options_ 626 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 627 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 628 -mlow-64k -mno-low64k -mid-shared-library 629 -mno-id-shared-library -mshared-library-id=N 630 -mlong-calls -mno-long-calls 631 632 _CRIS Options_ 633 -mcpu=CPU -march=CPU -mtune=CPU 634 -mmax-stack-frame=N -melinux-stacksize=N 635 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 636 -mstack-align -mdata-align -mconst-align 637 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 638 -melf -maout -melinux -mlinux -sim -sim2 639 -mmul-bug-workaround -mno-mul-bug-workaround 640 641 _CRX Options_ 642 -mmac -mpush-args 643 644 _Darwin Options_ 645 -all_load -allowable_client -arch -arch_errors_fatal 646 -arch_only -bind_at_load -bundle -bundle_loader 647 -client_name -compatibility_version -current_version 648 -dead_strip 649 -dependency-file -dylib_file -dylinker_install_name 650 -dynamic -dynamiclib -exported_symbols_list 651 -filelist -flat_namespace -force_cpusubtype_ALL 652 -force_flat_namespace -headerpad_max_install_names 653 -image_base -init -install_name -keep_private_externs 654 -multi_module -multiply_defined -multiply_defined_unused 655 -noall_load -no_dead_strip_inits_and_terms 656 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 657 -pagezero_size -prebind -prebind_all_twolevel_modules 658 -private_bundle -read_only_relocs -sectalign 659 -sectobjectsymbols -whyload -seg1addr 660 -sectcreate -sectobjectsymbols -sectorder 661 -segaddr -segs_read_only_addr -segs_read_write_addr 662 -seg_addr_table -seg_addr_table_filename -seglinkedit 663 -segprot -segs_read_only_addr -segs_read_write_addr 664 -single_module -static -sub_library -sub_umbrella 665 -twolevel_namespace -umbrella -undefined 666 -unexported_symbols_list -weak_reference_mismatches 667 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 668 -mkernel -mone-byte-bool 669 670 _DEC Alpha Options_ 671 -mno-fp-regs -msoft-float -malpha-as -mgas 672 -mieee -mieee-with-inexact -mieee-conformant 673 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 674 -mtrap-precision=MODE -mbuild-constants 675 -mcpu=CPU-TYPE -mtune=CPU-TYPE 676 -mbwx -mmax -mfix -mcix 677 -mfloat-vax -mfloat-ieee 678 -mexplicit-relocs -msmall-data -mlarge-data 679 -msmall-text -mlarge-text 680 -mmemory-latency=TIME 681 682 _DEC Alpha/VMS Options_ 683 -mvms-return-codes 684 685 _FRV Options_ 686 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 687 -mhard-float -msoft-float 688 -malloc-cc -mfixed-cc -mdword -mno-dword 689 -mdouble -mno-double 690 -mmedia -mno-media -mmuladd -mno-muladd 691 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 692 -mlinked-fp -mlong-calls -malign-labels 693 -mlibrary-pic -macc-4 -macc-8 694 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 695 -moptimize-membar -mno-optimize-membar 696 -mscc -mno-scc -mcond-exec -mno-cond-exec 697 -mvliw-branch -mno-vliw-branch 698 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 699 -mno-nested-cond-exec -mtomcat-stats 700 -mTLS -mtls 701 -mcpu=CPU 702 703 _GNU/Linux Options_ 704 -muclibc 705 706 _H8/300 Options_ 707 -mrelax -mh -ms -mn -mint32 -malign-300 708 709 _HPPA Options_ 710 -march=ARCHITECTURE-TYPE 711 -mbig-switch -mdisable-fpregs -mdisable-indexing 712 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 713 -mfixed-range=REGISTER-RANGE 714 -mjump-in-delay -mlinker-opt -mlong-calls 715 -mlong-load-store -mno-big-switch -mno-disable-fpregs 716 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 717 -mno-jump-in-delay -mno-long-load-store 718 -mno-portable-runtime -mno-soft-float 719 -mno-space-regs -msoft-float -mpa-risc-1-0 720 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 721 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 722 -munix=UNIX-STD -nolibdld -static -threads 723 724 _i386 and x86-64 Options_ 725 -mtune=CPU-TYPE -march=CPU-TYPE 726 -mfpmath=UNIT 727 -masm=DIALECT -mno-fancy-math-387 728 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib 729 -mno-wide-multiply -mrtd -malign-double 730 -mpreferred-stack-boundary=NUM 731 -mmmx -msse -msse2 -msse3 -m3dnow 732 -mthreads -mno-align-stringops -minline-all-stringops 733 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 734 -m96bit-long-double -mregparm=NUM -msseregparm 735 -mstackrealign 736 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 737 -mcmodel=CODE-MODEL 738 -m32 -m64 -mlarge-data-threshold=NUM 739 740 _IA-64 Options_ 741 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 742 -mvolatile-asm-stop -mregister-names -mno-sdata 743 -mconstant-gp -mauto-pic -minline-float-divide-min-latency 744 -minline-float-divide-max-throughput 745 -minline-int-divide-min-latency 746 -minline-int-divide-max-throughput 747 -minline-sqrt-min-latency -minline-sqrt-max-throughput 748 -mno-dwarf2-asm -mearly-stop-bits 749 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 750 -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64 751 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec 752 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 753 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose 754 -mno-sched-prefer-non-data-spec-insns 755 -mno-sched-prefer-non-control-spec-insns 756 -mno-sched-count-spec-in-critical-path 757 758 _M32R/D Options_ 759 -m32r2 -m32rx -m32r 760 -mdebug 761 -malign-loops -mno-align-loops 762 -missue-rate=NUMBER 763 -mbranch-cost=NUMBER 764 -mmodel=CODE-SIZE-MODEL-TYPE 765 -msdata=SDATA-TYPE 766 -mno-flush-func -mflush-func=NAME 767 -mno-flush-trap -mflush-trap=NUMBER 768 -G NUM 769 770 _M32C Options_ 771 -mcpu=CPU -msim -memregs=NUMBER 772 773 _M680x0 Options_ 774 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 775 -m68060 -mcpu32 -m5200 -mcfv4e -m68881 -mbitfield 776 -mc68000 -mc68020 777 -mnobitfield -mrtd -mshort -msoft-float -mpcrel 778 -malign-int -mstrict-align -msep-data -mno-sep-data 779 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 780 781 _M68hc1x Options_ 782 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 783 -mauto-incdec -minmax -mlong-calls -mshort 784 -msoft-reg-count=COUNT 785 786 _MCore Options_ 787 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 788 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 789 -m4byte-functions -mno-4byte-functions -mcallgraph-data 790 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 791 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 792 793 _MIPS Options_ 794 -EL -EB -march=ARCH -mtune=ARCH 795 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 796 -mips16 -mno-mips16 -mabi=ABI -mabicalls -mno-abicalls 797 -mshared -mno-shared -mxgot -mno-xgot -mgp32 -mgp64 798 -mfp32 -mfp64 -mhard-float -msoft-float 799 -msingle-float -mdouble-float -mdsp -mpaired-single -mips3d 800 -mlong64 -mlong32 -msym32 -mno-sym32 801 -GNUM -membedded-data -mno-embedded-data 802 -muninit-const-in-rodata -mno-uninit-const-in-rodata 803 -msplit-addresses -mno-split-addresses 804 -mexplicit-relocs -mno-explicit-relocs 805 -mcheck-zero-division -mno-check-zero-division 806 -mdivide-traps -mdivide-breaks 807 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 808 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 809 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 810 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 811 -mfix-sb1 -mno-fix-sb1 812 -mflush-func=FUNC -mno-flush-func 813 -mbranch-likely -mno-branch-likely 814 -mfp-exceptions -mno-fp-exceptions 815 -mvr4130-align -mno-vr4130-align 816 817 _MMIX Options_ 818 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 819 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 820 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 821 -mno-base-addresses -msingle-exit -mno-single-exit 822 823 _MN10300 Options_ 824 -mmult-bug -mno-mult-bug 825 -mam33 -mno-am33 826 -mam33-2 -mno-am33-2 827 -mreturn-pointer-on-d0 828 -mno-crt0 -mrelax 829 830 _MT Options_ 831 -mno-crt0 -mbacc -msim 832 -march=CPU-TYPE 833 834 _PDP-11 Options_ 835 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 836 -mbcopy -mbcopy-builtin -mint32 -mno-int16 837 -mint16 -mno-int32 -mfloat32 -mno-float64 838 -mfloat64 -mno-float32 -mabshi -mno-abshi 839 -mbranch-expensive -mbranch-cheap 840 -msplit -mno-split -munix-asm -mdec-asm 841 842 _PowerPC Options_ See RS/6000 and PowerPC Options. 843 844 _RS/6000 and PowerPC Options_ 845 -mcpu=CPU-TYPE 846 -mtune=CPU-TYPE 847 -mpower -mno-power -mpower2 -mno-power2 848 -mpowerpc -mpowerpc64 -mno-powerpc 849 -maltivec -mno-altivec 850 -mpowerpc-gpopt -mno-powerpc-gpopt 851 -mpowerpc-gfxopt -mno-powerpc-gfxopt 852 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd 853 -mnew-mnemonics -mold-mnemonics 854 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 855 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 856 -malign-power -malign-natural 857 -msoft-float -mhard-float -mmultiple -mno-multiple 858 -mstring -mno-string -mupdate -mno-update 859 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 860 -mstrict-align -mno-strict-align -mrelocatable 861 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 862 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 863 -mdynamic-no-pic -maltivec -mswdiv 864 -mprioritize-restricted-insns=PRIORITY 865 -msched-costly-dep=DEPENDENCE_TYPE 866 -minsert-sched-nops=SCHEME 867 -mcall-sysv -mcall-netbsd 868 -maix-struct-return -msvr4-struct-return 869 -mabi=ABI-TYPE -msecure-plt -mbss-plt 870 -misel -mno-isel 871 -misel=yes -misel=no 872 -mspe -mno-spe 873 -mspe=yes -mspe=no 874 -mvrsave -mno-vrsave 875 -mmulhw -mno-mulhw 876 -mdlmzb -mno-dlmzb 877 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 878 -mprototype -mno-prototype 879 -msim -mmvme -mads -myellowknife -memb -msdata 880 -msdata=OPT -mvxworks -mwindiss -G NUM -pthread 881 882 _S/390 and zSeries Options_ 883 -mtune=CPU-TYPE -march=CPU-TYPE 884 -mhard-float -msoft-float -mlong-double-64 -mlong-double-128 885 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 886 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 887 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 888 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 889 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 890 891 _Score Options_ 892 -meb -mel 893 -mnhwloop 894 -muls 895 -mmac 896 -mscore5 -mscore5u -mscore7 -mscore7d 897 898 _SH Options_ 899 -m1 -m2 -m2e -m3 -m3e 900 -m4-nofpu -m4-single-only -m4-single -m4 901 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 902 -m5-64media -m5-64media-nofpu 903 -m5-32media -m5-32media-nofpu 904 -m5-compact -m5-compact-nofpu 905 -mb -ml -mdalign -mrelax 906 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 907 -mieee -misize -mpadstruct -mspace 908 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 909 -mdivsi3_libfunc=NAME 910 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 911 -minvalid-symbols 912 913 _SPARC Options_ 914 -mcpu=CPU-TYPE 915 -mtune=CPU-TYPE 916 -mcmodel=CODE-MODEL 917 -m32 -m64 -mapp-regs -mno-app-regs 918 -mfaster-structs -mno-faster-structs 919 -mfpu -mno-fpu -mhard-float -msoft-float 920 -mhard-quad-float -msoft-quad-float 921 -mimpure-text -mno-impure-text -mlittle-endian 922 -mstack-bias -mno-stack-bias 923 -munaligned-doubles -mno-unaligned-doubles 924 -mv8plus -mno-v8plus -mvis -mno-vis 925 -threads -pthreads -pthread 926 927 _System V Options_ 928 -Qy -Qn -YP,PATHS -Ym,DIR 929 930 _TMS320C3x/C4x Options_ 931 -mcpu=CPU -mbig -msmall -mregparm -mmemparm 932 -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload 933 -mrpts=COUNT -mrptb -mdb -mloop-unsigned 934 -mparallel-insns -mparallel-mpy -mpreserve-float 935 936 _V850 Options_ 937 -mlong-calls -mno-long-calls -mep -mno-ep 938 -mprolog-function -mno-prolog-function -mspace 939 -mtda=N -msda=N -mzda=N 940 -mapp-regs -mno-app-regs 941 -mdisable-callt -mno-disable-callt 942 -mv850e1 943 -mv850e 944 -mv850 -mbig-switch 945 946 _VAX Options_ 947 -mg -mgnu -munix 948 949 _x86-64 Options_ See i386 and x86-64 Options. 950 951 _Xstormy16 Options_ 952 -msim 953 954 _Xtensa Options_ 955 -mconst16 -mno-const16 956 -mfused-madd -mno-fused-madd 957 -mtext-section-literals -mno-text-section-literals 958 -mtarget-align -mno-target-align 959 -mlongcalls -mno-longcalls 960 961 _zSeries Options_ See S/390 and zSeries Options. 962 963_Code Generation Options_ 964 *Note Options for Code Generation Conventions: Code Gen Options. 965 -fcall-saved-REG -fcall-used-REG 966 -ffixed-REG -fexceptions 967 -fnon-call-exceptions -funwind-tables 968 -fasynchronous-unwind-tables 969 -finhibit-size-directive -finstrument-functions 970 -fno-common -fno-ident 971 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 972 -fno-jump-tables 973 -freg-struct-return -fshort-enums 974 -fshort-double -fshort-wchar 975 -fverbose-asm -fpack-struct[=N] -fstack-check 976 -fstack-limit-register=REG -fstack-limit-symbol=SYM 977 -fargument-alias -fargument-noalias 978 -fargument-noalias-global -fargument-noalias-anything 979 -fleading-underscore -ftls-model=MODEL 980 -ftrapv -fwrapv -fbounds-check 981 -fvisibility 982 983 984* Menu: 985 986* Overall Options:: Controlling the kind of output: 987 an executable, object files, assembler files, 988 or preprocessed source. 989* C Dialect Options:: Controlling the variant of C language compiled. 990* C++ Dialect Options:: Variations on C++. 991* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 992 and Objective-C++. 993* Language Independent Options:: Controlling how diagnostics should be 994 formatted. 995* Warning Options:: How picky should the compiler be? 996* Debugging Options:: Symbol tables, measurements, and debugging dumps. 997* Optimize Options:: How much optimization? 998* Preprocessor Options:: Controlling header files and macro definitions. 999 Also, getting dependency information for Make. 1000* Assembler Options:: Passing options to the assembler. 1001* Link Options:: Specifying libraries and so on. 1002* Directory Options:: Where to find header files and libraries. 1003 Where to find the compiler executable files. 1004* Spec Files:: How to pass switches to sub-processes. 1005* Target Options:: Running a cross-compiler, or an old version of GCC. 1006 1007 1008File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1009 10103.2 Options Controlling the Kind of Output 1011========================================== 1012 1013Compilation can involve up to four stages: preprocessing, compilation 1014proper, assembly and linking, always in that order. GCC is capable of 1015preprocessing and compiling several files either into several assembler 1016input files, or into one assembler input file; then each assembler 1017input file produces an object file, and linking combines all the object 1018files (those newly compiled, and those specified as input) into an 1019executable file. 1020 1021 For any given input file, the file name suffix determines what kind of 1022compilation is done: 1023 1024`FILE.c' 1025 C source code which must be preprocessed. 1026 1027`FILE.i' 1028 C source code which should not be preprocessed. 1029 1030`FILE.ii' 1031 C++ source code which should not be preprocessed. 1032 1033`FILE.m' 1034 Objective-C source code. Note that you must link with the 1035 `libobjc' library to make an Objective-C program work. 1036 1037`FILE.mi' 1038 Objective-C source code which should not be preprocessed. 1039 1040`FILE.mm' 1041`FILE.M' 1042 Objective-C++ source code. Note that you must link with the 1043 `libobjc' library to make an Objective-C++ program work. Note 1044 that `.M' refers to a literal capital M. 1045 1046`FILE.mii' 1047 Objective-C++ source code which should not be preprocessed. 1048 1049`FILE.h' 1050 C, C++, Objective-C or Objective-C++ header file to be turned into 1051 a precompiled header. 1052 1053`FILE.cc' 1054`FILE.cp' 1055`FILE.cxx' 1056`FILE.cpp' 1057`FILE.CPP' 1058`FILE.c++' 1059`FILE.C' 1060 C++ source code which must be preprocessed. Note that in `.cxx', 1061 the last two letters must both be literally `x'. Likewise, `.C' 1062 refers to a literal capital C. 1063 1064`FILE.mm' 1065`FILE.M' 1066 Objective-C++ source code which must be preprocessed. 1067 1068`FILE.mii' 1069 Objective-C++ source code which should not be preprocessed. 1070 1071`FILE.hh' 1072`FILE.H' 1073 C++ header file to be turned into a precompiled header. 1074 1075`FILE.f' 1076`FILE.for' 1077`FILE.FOR' 1078 Fixed form Fortran source code which should not be preprocessed. 1079 1080`FILE.F' 1081`FILE.fpp' 1082`FILE.FPP' 1083 Fixed form Fortran source code which must be preprocessed (with 1084 the traditional preprocessor). 1085 1086`FILE.f90' 1087`FILE.f95' 1088 Free form Fortran source code which should not be preprocessed. 1089 1090`FILE.F90' 1091`FILE.F95' 1092 Free form Fortran source code which must be preprocessed (with the 1093 traditional preprocessor). 1094 1095`FILE.ads' 1096 Ada source code file which contains a library unit declaration (a 1097 declaration of a package, subprogram, or generic, or a generic 1098 instantiation), or a library unit renaming declaration (a package, 1099 generic, or subprogram renaming declaration). Such files are also 1100 called "specs". 1101 1102`FILE.adb' 1103 Ada source code file containing a library unit body (a subprogram 1104 or package body). Such files are also called "bodies". 1105 1106`FILE.s' 1107 Assembler code. 1108 1109`FILE.S' 1110 Assembler code which must be preprocessed. 1111 1112`OTHER' 1113 An object file to be fed straight into linking. Any file name 1114 with no recognized suffix is treated this way. 1115 1116 You can specify the input language explicitly with the `-x' option: 1117 1118`-x LANGUAGE' 1119 Specify explicitly the LANGUAGE for the following input files 1120 (rather than letting the compiler choose a default based on the 1121 file name suffix). This option applies to all following input 1122 files until the next `-x' option. Possible values for LANGUAGE 1123 are: 1124 c c-header c-cpp-output 1125 c++ c++-header c++-cpp-output 1126 objective-c objective-c-header objective-c-cpp-output 1127 objective-c++ objective-c++-header objective-c++-cpp-output 1128 assembler assembler-with-cpp 1129 ada 1130 f95 f95-cpp-input 1131 java 1132 treelang 1133 1134`-x none' 1135 Turn off any specification of a language, so that subsequent files 1136 are handled according to their file name suffixes (as they are if 1137 `-x' has not been used at all). 1138 1139`-pass-exit-codes' 1140 Normally the `gcc' program will exit with the code of 1 if any 1141 phase of the compiler returns a non-success return code. If you 1142 specify `-pass-exit-codes', the `gcc' program will instead return 1143 with numerically highest error produced by any phase that returned 1144 an error indication. The C, C++, and Fortran frontends return 4, 1145 if an internal compiler error is encountered. 1146 1147 If you only want some of the stages of compilation, you can use `-x' 1148(or filename suffixes) to tell `gcc' where to start, and one of the 1149options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1150some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1151do nothing at all. 1152 1153`-c' 1154 Compile or assemble the source files, but do not link. The linking 1155 stage simply is not done. The ultimate output is in the form of an 1156 object file for each source file. 1157 1158 By default, the object file name for a source file is made by 1159 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1160 1161 Unrecognized input files, not requiring compilation or assembly, 1162 are ignored. 1163 1164`-S' 1165 Stop after the stage of compilation proper; do not assemble. The 1166 output is in the form of an assembler code file for each 1167 non-assembler input file specified. 1168 1169 By default, the assembler file name for a source file is made by 1170 replacing the suffix `.c', `.i', etc., with `.s'. 1171 1172 Input files that don't require compilation are ignored. 1173 1174`-E' 1175 Stop after the preprocessing stage; do not run the compiler 1176 proper. The output is in the form of preprocessed source code, 1177 which is sent to the standard output. 1178 1179 Input files which don't require preprocessing are ignored. 1180 1181`-o FILE' 1182 Place output in file FILE. This applies regardless to whatever 1183 sort of output is being produced, whether it be an executable file, 1184 an object file, an assembler file or preprocessed C code. 1185 1186 If `-o' is not specified, the default is to put an executable file 1187 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1188 assembler file in `SOURCE.s', a precompiled header file in 1189 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1190 output. 1191 1192`-v' 1193 Print (on standard error output) the commands executed to run the 1194 stages of compilation. Also print the version number of the 1195 compiler driver program and of the preprocessor and the compiler 1196 proper. 1197 1198`-###' 1199 Like `-v' except the commands are not executed and all command 1200 arguments are quoted. This is useful for shell scripts to capture 1201 the driver-generated command lines. 1202 1203`-pipe' 1204 Use pipes rather than temporary files for communication between the 1205 various stages of compilation. This fails to work on some systems 1206 where the assembler is unable to read from a pipe; but the GNU 1207 assembler has no trouble. 1208 1209`-combine' 1210 If you are compiling multiple source files, this option tells the 1211 driver to pass all the source files to the compiler at once (for 1212 those languages for which the compiler can handle this). This 1213 will allow intermodule analysis (IMA) to be performed by the 1214 compiler. Currently the only language for which this is supported 1215 is C. If you pass source files for multiple languages to the 1216 driver, using this option, the driver will invoke the compiler(s) 1217 that support IMA once each, passing each compiler all the source 1218 files appropriate for it. For those languages that do not support 1219 IMA this option will be ignored, and the compiler will be invoked 1220 once for each source file in that language. If you use this 1221 option in conjunction with `-save-temps', the compiler will 1222 generate multiple pre-processed files (one for each source file), 1223 but only one (combined) `.o' or `.s' file. 1224 1225`--help' 1226 Print (on the standard output) a description of the command line 1227 options understood by `gcc'. If the `-v' option is also specified 1228 then `--help' will also be passed on to the various processes 1229 invoked by `gcc', so that they can display the command line options 1230 they accept. If the `-Wextra' option is also specified then 1231 command line options which have no documentation associated with 1232 them will also be displayed. 1233 1234`--target-help' 1235 Print (on the standard output) a description of target specific 1236 command line options for each tool. 1237 1238`--version' 1239 Display the version number and copyrights of the invoked GCC. 1240 1241`@FILE' 1242 Read command-line options from FILE. The options read are 1243 inserted in place of the original @FILE option. If FILE does not 1244 exist, or cannot be read, then the option will be treated 1245 literally, and not removed. 1246 1247 Options in FILE are separated by whitespace. A whitespace 1248 character may be included in an option by surrounding the entire 1249 option in either single or double quotes. Any character 1250 (including a backslash) may be included by prefixing the character 1251 to be included with a backslash. The FILE may itself contain 1252 additional @FILE options; any such options will be processed 1253 recursively. 1254 1255 1256File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1257 12583.3 Compiling C++ Programs 1259========================== 1260 1261C++ source files conventionally use one of the suffixes `.C', `.cc', 1262`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1263`.hh' or `.H'; and preprocessed C++ files use the suffix `.ii'. GCC 1264recognizes files with these names and compiles them as C++ programs 1265even if you call the compiler the same way as for compiling C programs 1266(usually with the name `gcc'). 1267 1268 However, the use of `gcc' does not add the C++ library. `g++' is a 1269program that calls GCC and treats `.c', `.h' and `.i' files as C++ 1270source files instead of C source files unless `-x' is used, and 1271automatically specifies linking against the C++ library. This program 1272is also useful when precompiling a C header file with a `.h' extension 1273for use in C++ compilations. On many systems, `g++' is also installed 1274with the name `c++'. 1275 1276 When you compile C++ programs, you may specify many of the same 1277command-line options that you use for compiling programs in any 1278language; or command-line options meaningful for C and related 1279languages; or options that are meaningful only for C++ programs. *Note 1280Options Controlling C Dialect: C Dialect Options, for explanations of 1281options for languages related to C. *Note Options Controlling C++ 1282Dialect: C++ Dialect Options, for explanations of options that are 1283meaningful only for C++ programs. 1284 1285 1286File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1287 12883.4 Options Controlling C Dialect 1289================================= 1290 1291The following options control the dialect of C (or languages derived 1292from C, such as C++, Objective-C and Objective-C++) that the compiler 1293accepts: 1294 1295`-ansi' 1296 In C mode, support all ISO C90 programs. In C++ mode, remove GNU 1297 extensions that conflict with ISO C++. 1298 1299 This turns off certain features of GCC that are incompatible with 1300 ISO C90 (when compiling C code), or of standard C++ (when 1301 compiling C++ code), such as the `asm' and `typeof' keywords, and 1302 predefined macros such as `unix' and `vax' that identify the type 1303 of system you are using. It also enables the undesirable and 1304 rarely used ISO trigraph feature. For the C compiler, it disables 1305 recognition of C++ style `//' comments as well as the `inline' 1306 keyword. 1307 1308 The alternate keywords `__asm__', `__extension__', `__inline__' 1309 and `__typeof__' continue to work despite `-ansi'. You would not 1310 want to use them in an ISO C program, of course, but it is useful 1311 to put them in header files that might be included in compilations 1312 done with `-ansi'. Alternate predefined macros such as `__unix__' 1313 and `__vax__' are also available, with or without `-ansi'. 1314 1315 The `-ansi' option does not cause non-ISO programs to be rejected 1316 gratuitously. For that, `-pedantic' is required in addition to 1317 `-ansi'. *Note Warning Options::. 1318 1319 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1320 is used. Some header files may notice this macro and refrain from 1321 declaring certain functions or defining certain macros that the 1322 ISO standard doesn't call for; this is to avoid interfering with 1323 any programs that might use these names for other things. 1324 1325 Functions which would normally be built in but do not have 1326 semantics defined by ISO C (such as `alloca' and `ffs') are not 1327 built-in functions with `-ansi' is used. *Note Other built-in 1328 functions provided by GCC: Other Builtins, for details of the 1329 functions affected. 1330 1331`-std=' 1332 Determine the language standard. This option is currently only 1333 supported when compiling C or C++. A value for this option must be 1334 provided; possible values are 1335 1336 `c89' 1337 `iso9899:1990' 1338 ISO C90 (same as `-ansi'). 1339 1340 `iso9899:199409' 1341 ISO C90 as modified in amendment 1. 1342 1343 `c99' 1344 `c9x' 1345 `iso9899:1999' 1346 `iso9899:199x' 1347 ISO C99. Note that this standard is not yet fully supported; 1348 see `http://gcc.gnu.org/gcc-4.2/c99status.html' for more 1349 information. The names `c9x' and `iso9899:199x' are 1350 deprecated. 1351 1352 `gnu89' 1353 Default, ISO C90 plus GNU extensions (including some C99 1354 features). 1355 1356 `gnu99' 1357 `gnu9x' 1358 ISO C99 plus GNU extensions. When ISO C99 is fully 1359 implemented in GCC, this will become the default. The name 1360 `gnu9x' is deprecated. 1361 1362 `c++98' 1363 The 1998 ISO C++ standard plus amendments. 1364 1365 `gnu++98' 1366 The same as `-std=c++98' plus GNU extensions. This is the 1367 default for C++ code. 1368 1369 Even when this option is not specified, you can still use some of 1370 the features of newer standards in so far as they do not conflict 1371 with previous C standards. For example, you may use 1372 `__restrict__' even when `-std=c99' is not specified. 1373 1374 The `-std' options specifying some version of ISO C have the same 1375 effects as `-ansi', except that features that were not in ISO C90 1376 but are in the specified version (for example, `//' comments and 1377 the `inline' keyword in ISO C99) are not disabled. 1378 1379 *Note Language Standards Supported by GCC: Standards, for details 1380 of these standard versions. 1381 1382`-fgnu89-inline' 1383 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1384 semantics for `inline' functions when in C99 mode. *Note An 1385 Inline Function is As Fast As a Macro: Inline. Using this option 1386 is roughly equivalent to adding the `gnu_inline' function 1387 attribute to all inline functions (*note Function Attributes::). 1388 1389 This option is accepted by GCC versions 4.1.3 and up. In GCC 1390 versions prior to 4.3, C99 inline semantics are not supported, and 1391 thus this option is effectively assumed to be present regardless 1392 of whether or not it is specified; the only effect of specifying 1393 it explicitly is to disable warnings about using inline functions 1394 in C99 mode. Likewise, the option `-fno-gnu89-inline' is not 1395 supported in versions of GCC before 4.3. It will be supported 1396 only in C99 or gnu99 mode, not in C89 or gnu89 mode. 1397 1398 The preprocesor macros `__GNUC_GNU_INLINE__' and 1399 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1400 effect for `inline' functions. *Note Common Predefined Macros: 1401 (cpp)Common Predefined Macros. 1402 1403`-aux-info FILENAME' 1404 Output to the given filename prototyped declarations for all 1405 functions declared and/or defined in a translation unit, including 1406 those in header files. This option is silently ignored in any 1407 language other than C. 1408 1409 Besides declarations, the file indicates, in comments, the origin 1410 of each declaration (source file and line), whether the 1411 declaration was implicit, prototyped or unprototyped (`I', `N' for 1412 new or `O' for old, respectively, in the first character after the 1413 line number and the colon), and whether it came from a declaration 1414 or a definition (`C' or `F', respectively, in the following 1415 character). In the case of function definitions, a K&R-style list 1416 of arguments followed by their declarations is also provided, 1417 inside comments, after the declaration. 1418 1419`-fno-asm' 1420 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1421 code can use these words as identifiers. You can use the keywords 1422 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1423 `-fno-asm'. 1424 1425 In C++, this switch only affects the `typeof' keyword, since `asm' 1426 and `inline' are standard keywords. You may want to use the 1427 `-fno-gnu-keywords' flag instead, which has the same effect. In 1428 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1429 the `asm' and `typeof' keywords, since `inline' is a standard 1430 keyword in ISO C99. 1431 1432`-fno-builtin' 1433`-fno-builtin-FUNCTION' 1434 Don't recognize built-in functions that do not begin with 1435 `__builtin_' as prefix. *Note Other built-in functions provided 1436 by GCC: Other Builtins, for details of the functions affected, 1437 including those which are not built-in functions when `-ansi' or 1438 `-std' options for strict ISO C conformance are used because they 1439 do not have an ISO standard meaning. 1440 1441 GCC normally generates special code to handle certain built-in 1442 functions more efficiently; for instance, calls to `alloca' may 1443 become single instructions that adjust the stack directly, and 1444 calls to `memcpy' may become inline copy loops. The resulting 1445 code is often both smaller and faster, but since the function 1446 calls no longer appear as such, you cannot set a breakpoint on 1447 those calls, nor can you change the behavior of the functions by 1448 linking with a different library. In addition, when a function is 1449 recognized as a built-in function, GCC may use information about 1450 that function to warn about problems with calls to that function, 1451 or to generate more efficient code, even if the resulting code 1452 still contains calls to that function. For example, warnings are 1453 given with `-Wformat' for bad calls to `printf', when `printf' is 1454 built in, and `strlen' is known not to modify global memory. 1455 1456 With the `-fno-builtin-FUNCTION' option only the built-in function 1457 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1458 If a function is named this is not built-in in this version of 1459 GCC, this option is ignored. There is no corresponding 1460 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1461 functions selectively when using `-fno-builtin' or 1462 `-ffreestanding', you may define macros such as: 1463 1464 #define abs(n) __builtin_abs ((n)) 1465 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1466 1467`-fhosted' 1468 Assert that compilation takes place in a hosted environment. This 1469 implies `-fbuiltin'. A hosted environment is one in which the 1470 entire standard library is available, and in which `main' has a 1471 return type of `int'. Examples are nearly everything except a 1472 kernel. This is equivalent to `-fno-freestanding'. 1473 1474`-ffreestanding' 1475 Assert that compilation takes place in a freestanding environment. 1476 This implies `-fno-builtin'. A freestanding environment is one 1477 in which the standard library may not exist, and program startup 1478 may not necessarily be at `main'. The most obvious example is an 1479 OS kernel. This is equivalent to `-fno-hosted'. 1480 1481 *Note Language Standards Supported by GCC: Standards, for details 1482 of freestanding and hosted environments. 1483 1484`-fopenmp' 1485 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 1486 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 1487 generates parallel code according to the OpenMP Application 1488 Program Interface v2.5 `http://www.openmp.org/'. 1489 1490`-fms-extensions' 1491 Accept some non-standard constructs used in Microsoft header files. 1492 1493 Some cases of unnamed fields in structures and unions are only 1494 accepted with this option. *Note Unnamed struct/union fields 1495 within structs/unions: Unnamed Fields, for details. 1496 1497`-trigraphs' 1498 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1499 for strict ISO C conformance) implies `-trigraphs'. 1500 1501`-no-integrated-cpp' 1502 Performs a compilation in two passes: preprocessing and compiling. 1503 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 1504 via the `-B' option. The user supplied compilation step can then 1505 add in an additional preprocessing step after normal preprocessing 1506 but before compiling. The default is to use the integrated cpp 1507 (internal cpp) 1508 1509 The semantics of this option will change if "cc1", "cc1plus", and 1510 "cc1obj" are merged. 1511 1512`-traditional' 1513`-traditional-cpp' 1514 Formerly, these options caused GCC to attempt to emulate a 1515 pre-standard C compiler. They are now only supported with the 1516 `-E' switch. The preprocessor continues to support a pre-standard 1517 mode. See the GNU CPP manual for details. 1518 1519`-fcond-mismatch' 1520 Allow conditional expressions with mismatched types in the second 1521 and third arguments. The value of such an expression is void. 1522 This option is not supported for C++. 1523 1524`-funsigned-char' 1525 Let the type `char' be unsigned, like `unsigned char'. 1526 1527 Each kind of machine has a default for what `char' should be. It 1528 is either like `unsigned char' by default or like `signed char' by 1529 default. 1530 1531 Ideally, a portable program should always use `signed char' or 1532 `unsigned char' when it depends on the signedness of an object. 1533 But many programs have been written to use plain `char' and expect 1534 it to be signed, or expect it to be unsigned, depending on the 1535 machines they were written for. This option, and its inverse, let 1536 you make such a program work with the opposite default. 1537 1538 The type `char' is always a distinct type from each of `signed 1539 char' or `unsigned char', even though its behavior is always just 1540 like one of those two. 1541 1542`-fsigned-char' 1543 Let the type `char' be signed, like `signed char'. 1544 1545 Note that this is equivalent to `-fno-unsigned-char', which is the 1546 negative form of `-funsigned-char'. Likewise, the option 1547 `-fno-signed-char' is equivalent to `-funsigned-char'. 1548 1549`-fsigned-bitfields' 1550`-funsigned-bitfields' 1551`-fno-signed-bitfields' 1552`-fno-unsigned-bitfields' 1553 These options control whether a bit-field is signed or unsigned, 1554 when the declaration does not use either `signed' or `unsigned'. 1555 By default, such a bit-field is signed, because this is 1556 consistent: the basic integer types such as `int' are signed types. 1557 1558 1559File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 1560 15613.5 Options Controlling C++ Dialect 1562=================================== 1563 1564This section describes the command-line options that are only meaningful 1565for C++ programs; but you can also use most of the GNU compiler options 1566regardless of what language your program is in. For example, you might 1567compile a file `firstClass.C' like this: 1568 1569 g++ -g -frepo -O -c firstClass.C 1570 1571In this example, only `-frepo' is an option meant only for C++ 1572programs; you can use the other options with any language supported by 1573GCC. 1574 1575 Here is a list of options that are _only_ for compiling C++ programs: 1576 1577`-fabi-version=N' 1578 Use version N of the C++ ABI. Version 2 is the version of the C++ 1579 ABI that first appeared in G++ 3.4. Version 1 is the version of 1580 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 1581 be the version that conforms most closely to the C++ ABI 1582 specification. Therefore, the ABI obtained using version 0 will 1583 change as ABI bugs are fixed. 1584 1585 The default is version 2. 1586 1587`-fno-access-control' 1588 Turn off all access checking. This switch is mainly useful for 1589 working around bugs in the access control code. 1590 1591`-fcheck-new' 1592 Check that the pointer returned by `operator new' is non-null 1593 before attempting to modify the storage allocated. This check is 1594 normally unnecessary because the C++ standard specifies that 1595 `operator new' will only return `0' if it is declared `throw()', 1596 in which case the compiler will always check the return value even 1597 without this option. In all other cases, when `operator new' has 1598 a non-empty exception specification, memory exhaustion is 1599 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 1600 1601`-fconserve-space' 1602 Put uninitialized or runtime-initialized global variables into the 1603 common segment, as C does. This saves space in the executable at 1604 the cost of not diagnosing duplicate definitions. If you compile 1605 with this flag and your program mysteriously crashes after 1606 `main()' has completed, you may have an object that is being 1607 destroyed twice because two definitions were merged. 1608 1609 This option is no longer useful on most targets, now that support 1610 has been added for putting variables into BSS without making them 1611 common. 1612 1613`-ffriend-injection' 1614 Inject friend functions into the enclosing namespace, so that they 1615 are visible outside the scope of the class in which they are 1616 declared. Friend functions were documented to work this way in 1617 the old Annotated C++ Reference Manual, and versions of G++ before 1618 4.1 always worked that way. However, in ISO C++ a friend function 1619 which is not declared in an enclosing scope can only be found 1620 using argument dependent lookup. This option causes friends to be 1621 injected as they were in earlier releases. 1622 1623 This option is for compatibility, and may be removed in a future 1624 release of G++. 1625 1626`-fno-elide-constructors' 1627 The C++ standard allows an implementation to omit creating a 1628 temporary which is only used to initialize another object of the 1629 same type. Specifying this option disables that optimization, and 1630 forces G++ to call the copy constructor in all cases. 1631 1632`-fno-enforce-eh-specs' 1633 Don't generate code to check for violation of exception 1634 specifications at runtime. This option violates the C++ standard, 1635 but may be useful for reducing code size in production builds, 1636 much like defining `NDEBUG'. This does not give user code 1637 permission to throw exceptions in violation of the exception 1638 specifications; the compiler will still optimize based on the 1639 specifications, so throwing an unexpected exception will result in 1640 undefined behavior. 1641 1642`-ffor-scope' 1643`-fno-for-scope' 1644 If `-ffor-scope' is specified, the scope of variables declared in 1645 a for-init-statement is limited to the `for' loop itself, as 1646 specified by the C++ standard. If `-fno-for-scope' is specified, 1647 the scope of variables declared in a for-init-statement extends to 1648 the end of the enclosing scope, as was the case in old versions of 1649 G++, and other (traditional) implementations of C++. 1650 1651 The default if neither flag is given to follow the standard, but 1652 to allow and give a warning for old-style code that would 1653 otherwise be invalid, or have different behavior. 1654 1655`-fno-gnu-keywords' 1656 Do not recognize `typeof' as a keyword, so that code can use this 1657 word as an identifier. You can use the keyword `__typeof__' 1658 instead. `-ansi' implies `-fno-gnu-keywords'. 1659 1660`-fno-implicit-templates' 1661 Never emit code for non-inline templates which are instantiated 1662 implicitly (i.e. by use); only emit code for explicit 1663 instantiations. *Note Template Instantiation::, for more 1664 information. 1665 1666`-fno-implicit-inline-templates' 1667 Don't emit code for implicit instantiations of inline templates, 1668 either. The default is to handle inlines differently so that 1669 compiles with and without optimization will need the same set of 1670 explicit instantiations. 1671 1672`-fno-implement-inlines' 1673 To save space, do not emit out-of-line copies of inline functions 1674 controlled by `#pragma implementation'. This will cause linker 1675 errors if these functions are not inlined everywhere they are 1676 called. 1677 1678`-fms-extensions' 1679 Disable pedantic warnings about constructs used in MFC, such as 1680 implicit int and getting a pointer to member function via 1681 non-standard syntax. 1682 1683`-fno-nonansi-builtins' 1684 Disable built-in declarations of functions that are not mandated by 1685 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 1686 `bzero', `conjf', and other related functions. 1687 1688`-fno-operator-names' 1689 Do not treat the operator name keywords `and', `bitand', `bitor', 1690 `compl', `not', `or' and `xor' as synonyms as keywords. 1691 1692`-fno-optional-diags' 1693 Disable diagnostics that the standard says a compiler does not 1694 need to issue. Currently, the only such diagnostic issued by G++ 1695 is the one for a name having multiple meanings within a class. 1696 1697`-fpermissive' 1698 Downgrade some diagnostics about nonconformant code from errors to 1699 warnings. Thus, using `-fpermissive' will allow some 1700 nonconforming code to compile. 1701 1702`-frepo' 1703 Enable automatic template instantiation at link time. This option 1704 also implies `-fno-implicit-templates'. *Note Template 1705 Instantiation::, for more information. 1706 1707`-fno-rtti' 1708 Disable generation of information about every class with virtual 1709 functions for use by the C++ runtime type identification features 1710 (`dynamic_cast' and `typeid'). If you don't use those parts of 1711 the language, you can save some space by using this flag. Note 1712 that exception handling uses the same information, but it will 1713 generate it as needed. The `dynamic_cast' operator can still be 1714 used for casts that do not require runtime type information, i.e. 1715 casts to `void *' or to unambiguous base classes. 1716 1717`-fstats' 1718 Emit statistics about front-end processing at the end of the 1719 compilation. This information is generally only useful to the G++ 1720 development team. 1721 1722`-ftemplate-depth-N' 1723 Set the maximum instantiation depth for template classes to N. A 1724 limit on the template instantiation depth is needed to detect 1725 endless recursions during template class instantiation. ANSI/ISO 1726 C++ conforming programs must not rely on a maximum depth greater 1727 than 17. 1728 1729`-fno-threadsafe-statics' 1730 Do not emit the extra code to use the routines specified in the C++ 1731 ABI for thread-safe initialization of local statics. You can use 1732 this option to reduce code size slightly in code that doesn't need 1733 to be thread-safe. 1734 1735`-fuse-cxa-atexit' 1736 Register destructors for objects with static storage duration with 1737 the `__cxa_atexit' function rather than the `atexit' function. 1738 This option is required for fully standards-compliant handling of 1739 static destructors, but will only work if your C library supports 1740 `__cxa_atexit'. 1741 1742`-fno-use-cxa-get-exception-ptr' 1743 Don't use the `__cxa_get_exception_ptr' runtime routine. This 1744 will cause `std::uncaught_exception' to be incorrect, but is 1745 necessary if the runtime routine is not available. 1746 1747`-fvisibility-inlines-hidden' 1748 This switch declares that the user does not attempt to compare 1749 pointers to inline methods where the addresses of the two functions 1750 were taken in different shared objects. 1751 1752 The effect of this is that GCC may, effectively, mark inline 1753 methods with `__attribute__ ((visibility ("hidden")))' so that 1754 they do not appear in the export table of a DSO and do not require 1755 a PLT indirection when used within the DSO. Enabling this option 1756 can have a dramatic effect on load and link times of a DSO as it 1757 massively reduces the size of the dynamic export table when the 1758 library makes heavy use of templates. 1759 1760 The behaviour of this switch is not quite the same as marking the 1761 methods as hidden directly, because it does not affect static 1762 variables local to the function or cause the compiler to deduce 1763 that the function is defined in only one shared object. 1764 1765 You may mark a method as having a visibility explicitly to negate 1766 the effect of the switch for that method. For example, if you do 1767 want to compare pointers to a particular inline method, you might 1768 mark it as having default visibility. Marking the enclosing class 1769 with explicit visibility will have no effect. 1770 1771 Explicitly instantiated inline methods are unaffected by this 1772 option as their linkage might otherwise cross a shared library 1773 boundary. *Note Template Instantiation::. 1774 1775`-fno-weak' 1776 Do not use weak symbol support, even if it is provided by the 1777 linker. By default, G++ will use weak symbols if they are 1778 available. This option exists only for testing, and should not be 1779 used by end-users; it will result in inferior code and has no 1780 benefits. This option may be removed in a future release of G++. 1781 1782`-nostdinc++' 1783 Do not search for header files in the standard directories 1784 specific to C++, but do still search the other standard 1785 directories. (This option is used when building the C++ library.) 1786 1787 In addition, these optimization, warning, and code generation options 1788have meanings only for C++ programs: 1789 1790`-fno-default-inline' 1791 Do not assume `inline' for functions defined inside a class scope. 1792 *Note Options That Control Optimization: Optimize Options. Note 1793 that these functions will have linkage like inline functions; they 1794 just won't be inlined by default. 1795 1796`-Wabi (C++ only)' 1797 Warn when G++ generates code that is probably not compatible with 1798 the vendor-neutral C++ ABI. Although an effort has been made to 1799 warn about all such cases, there are probably some cases that are 1800 not warned about, even though G++ is generating incompatible code. 1801 There may also be cases where warnings are emitted even though 1802 the code that is generated will be compatible. 1803 1804 You should rewrite your code to avoid these warnings if you are 1805 concerned about the fact that code generated by G++ may not be 1806 binary compatible with code generated by other compilers. 1807 1808 The known incompatibilities at this point include: 1809 1810 * Incorrect handling of tail-padding for bit-fields. G++ may 1811 attempt to pack data into the same byte as a base class. For 1812 example: 1813 1814 struct A { virtual void f(); int f1 : 1; }; 1815 struct B : public A { int f2 : 1; }; 1816 1817 In this case, G++ will place `B::f2' into the same byte 1818 as`A::f1'; other compilers will not. You can avoid this 1819 problem by explicitly padding `A' so that its size is a 1820 multiple of the byte size on your platform; that will cause 1821 G++ and other compilers to layout `B' identically. 1822 1823 * Incorrect handling of tail-padding for virtual bases. G++ 1824 does not use tail padding when laying out virtual bases. For 1825 example: 1826 1827 struct A { virtual void f(); char c1; }; 1828 struct B { B(); char c2; }; 1829 struct C : public A, public virtual B {}; 1830 1831 In this case, G++ will not place `B' into the tail-padding for 1832 `A'; other compilers will. You can avoid this problem by 1833 explicitly padding `A' so that its size is a multiple of its 1834 alignment (ignoring virtual base classes); that will cause 1835 G++ and other compilers to layout `C' identically. 1836 1837 * Incorrect handling of bit-fields with declared widths greater 1838 than that of their underlying types, when the bit-fields 1839 appear in a union. For example: 1840 1841 union U { int i : 4096; }; 1842 1843 Assuming that an `int' does not have 4096 bits, G++ will make 1844 the union too small by the number of bits in an `int'. 1845 1846 * Empty classes can be placed at incorrect offsets. For 1847 example: 1848 1849 struct A {}; 1850 1851 struct B { 1852 A a; 1853 virtual void f (); 1854 }; 1855 1856 struct C : public B, public A {}; 1857 1858 G++ will place the `A' base class of `C' at a nonzero offset; 1859 it should be placed at offset zero. G++ mistakenly believes 1860 that the `A' data member of `B' is already at offset zero. 1861 1862 * Names of template functions whose types involve `typename' or 1863 template template parameters can be mangled incorrectly. 1864 1865 template <typename Q> 1866 void f(typename Q::X) {} 1867 1868 template <template <typename> class Q> 1869 void f(typename Q<int>::X) {} 1870 1871 Instantiations of these templates may be mangled incorrectly. 1872 1873 1874`-Wctor-dtor-privacy (C++ only)' 1875 Warn when a class seems unusable because all the constructors or 1876 destructors in that class are private, and it has neither friends 1877 nor public static member functions. 1878 1879`-Wnon-virtual-dtor (C++ only)' 1880 Warn when a class appears to be polymorphic, thereby requiring a 1881 virtual destructor, yet it declares a non-virtual one. This 1882 warning is also enabled if -Weffc++ is specified. 1883 1884`-Wreorder (C++ only)' 1885 Warn when the order of member initializers given in the code does 1886 not match the order in which they must be executed. For instance: 1887 1888 struct A { 1889 int i; 1890 int j; 1891 A(): j (0), i (1) { } 1892 }; 1893 1894 The compiler will rearrange the member initializers for `i' and 1895 `j' to match the declaration order of the members, emitting a 1896 warning to that effect. This warning is enabled by `-Wall'. 1897 1898 The following `-W...' options are not affected by `-Wall'. 1899 1900`-Weffc++ (C++ only)' 1901 Warn about violations of the following style guidelines from Scott 1902 Meyers' `Effective C++' book: 1903 1904 * Item 11: Define a copy constructor and an assignment 1905 operator for classes with dynamically allocated memory. 1906 1907 * Item 12: Prefer initialization to assignment in constructors. 1908 1909 * Item 14: Make destructors virtual in base classes. 1910 1911 * Item 15: Have `operator=' return a reference to `*this'. 1912 1913 * Item 23: Don't try to return a reference when you must 1914 return an object. 1915 1916 1917 Also warn about violations of the following style guidelines from 1918 Scott Meyers' `More Effective C++' book: 1919 1920 * Item 6: Distinguish between prefix and postfix forms of 1921 increment and decrement operators. 1922 1923 * Item 7: Never overload `&&', `||', or `,'. 1924 1925 1926 When selecting this option, be aware that the standard library 1927 headers do not obey all of these guidelines; use `grep -v' to 1928 filter out those warnings. 1929 1930`-Wno-deprecated (C++ only)' 1931 Do not warn about usage of deprecated features. *Note Deprecated 1932 Features::. 1933 1934`-Wstrict-null-sentinel (C++ only)' 1935 Warn also about the use of an uncasted `NULL' as sentinel. When 1936 compiling only with GCC this is a valid sentinel, as `NULL' is 1937 defined to `__null'. Although it is a null pointer constant not a 1938 null pointer, it is guaranteed to of the same size as a pointer. 1939 But this use is not portable across different compilers. 1940 1941`-Wno-non-template-friend (C++ only)' 1942 Disable warnings when non-templatized friend functions are declared 1943 within a template. Since the advent of explicit template 1944 specification support in G++, if the name of the friend is an 1945 unqualified-id (i.e., `friend foo(int)'), the C++ language 1946 specification demands that the friend declare or define an 1947 ordinary, nontemplate function. (Section 14.5.3). Before G++ 1948 implemented explicit specification, unqualified-ids could be 1949 interpreted as a particular specialization of a templatized 1950 function. Because this non-conforming behavior is no longer the 1951 default behavior for G++, `-Wnon-template-friend' allows the 1952 compiler to check existing code for potential trouble spots and is 1953 on by default. This new compiler behavior can be turned off with 1954 `-Wno-non-template-friend' which keeps the conformant compiler code 1955 but disables the helpful warning. 1956 1957`-Wold-style-cast (C++ only)' 1958 Warn if an old-style (C-style) cast to a non-void type is used 1959 within a C++ program. The new-style casts (`dynamic_cast', 1960 `static_cast', `reinterpret_cast', and `const_cast') are less 1961 vulnerable to unintended effects and much easier to search for. 1962 1963`-Woverloaded-virtual (C++ only)' 1964 Warn when a function declaration hides virtual functions from a 1965 base class. For example, in: 1966 1967 struct A { 1968 virtual void f(); 1969 }; 1970 1971 struct B: public A { 1972 void f(int); 1973 }; 1974 1975 the `A' class version of `f' is hidden in `B', and code like: 1976 1977 B* b; 1978 b->f(); 1979 1980 will fail to compile. 1981 1982`-Wno-pmf-conversions (C++ only)' 1983 Disable the diagnostic for converting a bound pointer to member 1984 function to a plain pointer. 1985 1986`-Wsign-promo (C++ only)' 1987 Warn when overload resolution chooses a promotion from unsigned or 1988 enumerated type to a signed type, over a conversion to an unsigned 1989 type of the same size. Previous versions of G++ would try to 1990 preserve unsignedness, but the standard mandates the current 1991 behavior. 1992 1993 struct A { 1994 operator int (); 1995 A& operator = (int); 1996 }; 1997 1998 main () 1999 { 2000 A a,b; 2001 a = b; 2002 } 2003 2004 In this example, G++ will synthesize a default `A& operator = 2005 (const A&);', while cfront will use the user-defined `operator ='. 2006 2007 2008File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2009 20103.6 Options Controlling Objective-C and Objective-C++ Dialects 2011============================================================== 2012 2013(NOTE: This manual does not describe the Objective-C and Objective-C++ 2014languages themselves. See *Note Language Standards Supported by GCC: 2015Standards, for references.) 2016 2017 This section describes the command-line options that are only 2018meaningful for Objective-C and Objective-C++ programs, but you can also 2019use most of the language-independent GNU compiler options. For 2020example, you might compile a file `some_class.m' like this: 2021 2022 gcc -g -fgnu-runtime -O -c some_class.m 2023 2024In this example, `-fgnu-runtime' is an option meant only for 2025Objective-C and Objective-C++ programs; you can use the other options 2026with any language supported by GCC. 2027 2028 Note that since Objective-C is an extension of the C language, 2029Objective-C compilations may also use options specific to the C 2030front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2031compilations may use C++-specific options (e.g., `-Wabi'). 2032 2033 Here is a list of options that are _only_ for compiling Objective-C 2034and Objective-C++ programs: 2035 2036`-fconstant-string-class=CLASS-NAME' 2037 Use CLASS-NAME as the name of the class to instantiate for each 2038 literal string specified with the syntax `@"..."'. The default 2039 class name is `NXConstantString' if the GNU runtime is being used, 2040 and `NSConstantString' if the NeXT runtime is being used (see 2041 below). The `-fconstant-cfstrings' option, if also present, will 2042 override the `-fconstant-string-class' setting and cause `@"..."' 2043 literals to be laid out as constant CoreFoundation strings. 2044 2045`-fgnu-runtime' 2046 Generate object code compatible with the standard GNU Objective-C 2047 runtime. This is the default for most types of systems. 2048 2049`-fnext-runtime' 2050 Generate output compatible with the NeXT runtime. This is the 2051 default for NeXT-based systems, including Darwin and Mac OS X. 2052 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2053 option is used. 2054 2055`-fno-nil-receivers' 2056 Assume that all Objective-C message dispatches (e.g., `[receiver 2057 message:arg]') in this translation unit ensure that the receiver 2058 is not `nil'. This allows for more efficient entry points in the 2059 runtime to be used. Currently, this option is only available in 2060 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2061 2062`-fobjc-call-cxx-cdtors' 2063 For each Objective-C class, check if any of its instance variables 2064 is a C++ object with a non-trivial default constructor. If so, 2065 synthesize a special `- (id) .cxx_construct' instance method that 2066 will run non-trivial default constructors on any such instance 2067 variables, in order, and then return `self'. Similarly, check if 2068 any instance variable is a C++ object with a non-trivial 2069 destructor, and if so, synthesize a special `- (void) 2070 .cxx_destruct' method that will run all such default destructors, 2071 in reverse order. 2072 2073 The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods 2074 thusly generated will only operate on instance variables declared 2075 in the current Objective-C class, and not those inherited from 2076 superclasses. It is the responsibility of the Objective-C runtime 2077 to invoke all such methods in an object's inheritance hierarchy. 2078 The `- (id) .cxx_construct' methods will be invoked by the runtime 2079 immediately after a new object instance is allocated; the `- 2080 (void) .cxx_destruct' methods will be invoked immediately before 2081 the runtime deallocates an object instance. 2082 2083 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2084 later has support for invoking the `- (id) .cxx_construct' and `- 2085 (void) .cxx_destruct' methods. 2086 2087`-fobjc-direct-dispatch' 2088 Allow fast jumps to the message dispatcher. On Darwin this is 2089 accomplished via the comm page. 2090 2091`-fobjc-exceptions' 2092 Enable syntactic support for structured exception handling in 2093 Objective-C, similar to what is offered by C++ and Java. This 2094 option is unavailable in conjunction with the NeXT runtime on Mac 2095 OS X 10.2 and earlier. 2096 2097 @try { 2098 ... 2099 @throw expr; 2100 ... 2101 } 2102 @catch (AnObjCClass *exc) { 2103 ... 2104 @throw expr; 2105 ... 2106 @throw; 2107 ... 2108 } 2109 @catch (AnotherClass *exc) { 2110 ... 2111 } 2112 @catch (id allOthers) { 2113 ... 2114 } 2115 @finally { 2116 ... 2117 @throw expr; 2118 ... 2119 } 2120 2121 The `@throw' statement may appear anywhere in an Objective-C or 2122 Objective-C++ program; when used inside of a `@catch' block, the 2123 `@throw' may appear without an argument (as shown above), in which 2124 case the object caught by the `@catch' will be rethrown. 2125 2126 Note that only (pointers to) Objective-C objects may be thrown and 2127 caught using this scheme. When an object is thrown, it will be 2128 caught by the nearest `@catch' clause capable of handling objects 2129 of that type, analogously to how `catch' blocks work in C++ and 2130 Java. A `@catch(id ...)' clause (as shown above) may also be 2131 provided to catch any and all Objective-C exceptions not caught by 2132 previous `@catch' clauses (if any). 2133 2134 The `@finally' clause, if present, will be executed upon exit from 2135 the immediately preceding `@try ... @catch' section. This will 2136 happen regardless of whether any exceptions are thrown, caught or 2137 rethrown inside the `@try ... @catch' section, analogously to the 2138 behavior of the `finally' clause in Java. 2139 2140 There are several caveats to using the new exception mechanism: 2141 2142 * Although currently designed to be binary compatible with 2143 `NS_HANDLER'-style idioms provided by the `NSException' 2144 class, the new exceptions can only be used on Mac OS X 10.3 2145 (Panther) and later systems, due to additional functionality 2146 needed in the (NeXT) Objective-C runtime. 2147 2148 * As mentioned above, the new exceptions do not support handling 2149 types other than Objective-C objects. Furthermore, when 2150 used from Objective-C++, the Objective-C exception model does 2151 not interoperate with C++ exceptions at this time. This 2152 means you cannot `@throw' an exception from Objective-C and 2153 `catch' it in C++, or vice versa (i.e., `throw ... @catch'). 2154 2155 The `-fobjc-exceptions' switch also enables the use of 2156 synchronization blocks for thread-safe execution: 2157 2158 @synchronized (ObjCClass *guard) { 2159 ... 2160 } 2161 2162 Upon entering the `@synchronized' block, a thread of execution 2163 shall first check whether a lock has been placed on the 2164 corresponding `guard' object by another thread. If it has, the 2165 current thread shall wait until the other thread relinquishes its 2166 lock. Once `guard' becomes available, the current thread will 2167 place its own lock on it, execute the code contained in the 2168 `@synchronized' block, and finally relinquish the lock (thereby 2169 making `guard' available to other threads). 2170 2171 Unlike Java, Objective-C does not allow for entire methods to be 2172 marked `@synchronized'. Note that throwing exceptions out of 2173 `@synchronized' blocks is allowed, and will cause the guarding 2174 object to be unlocked properly. 2175 2176`-fobjc-gc' 2177 Enable garbage collection (GC) in Objective-C and Objective-C++ 2178 programs. 2179 2180`-freplace-objc-classes' 2181 Emit a special marker instructing `ld(1)' not to statically link in 2182 the resulting object file, and allow `dyld(1)' to load it in at 2183 run time instead. This is used in conjunction with the 2184 Fix-and-Continue debugging mode, where the object file in question 2185 may be recompiled and dynamically reloaded in the course of 2186 program execution, without the need to restart the program itself. 2187 Currently, Fix-and-Continue functionality is only available in 2188 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2189 2190`-fzero-link' 2191 When compiling for the NeXT runtime, the compiler ordinarily 2192 replaces calls to `objc_getClass("...")' (when the name of the 2193 class is known at compile time) with static class references that 2194 get initialized at load time, which improves run-time performance. 2195 Specifying the `-fzero-link' flag suppresses this behavior and 2196 causes calls to `objc_getClass("...")' to be retained. This is 2197 useful in Zero-Link debugging mode, since it allows for individual 2198 class implementations to be modified during program execution. 2199 2200`-gen-decls' 2201 Dump interface declarations for all classes seen in the source 2202 file to a file named `SOURCENAME.decl'. 2203 2204`-Wassign-intercept' 2205 Warn whenever an Objective-C assignment is being intercepted by the 2206 garbage collector. 2207 2208`-Wno-protocol' 2209 If a class is declared to implement a protocol, a warning is 2210 issued for every method in the protocol that is not implemented by 2211 the class. The default behavior is to issue a warning for every 2212 method not explicitly implemented in the class, even if a method 2213 implementation is inherited from the superclass. If you use the 2214 `-Wno-protocol' option, then methods inherited from the superclass 2215 are considered to be implemented, and no warning is issued for 2216 them. 2217 2218`-Wselector' 2219 Warn if multiple methods of different types for the same selector 2220 are found during compilation. The check is performed on the list 2221 of methods in the final stage of compilation. Additionally, a 2222 check is performed for each selector appearing in a 2223 `@selector(...)' expression, and a corresponding method for that 2224 selector has been found during compilation. Because these checks 2225 scan the method table only at the end of compilation, these 2226 warnings are not produced if the final stage of compilation is not 2227 reached, for example because an error is found during compilation, 2228 or because the `-fsyntax-only' option is being used. 2229 2230`-Wstrict-selector-match' 2231 Warn if multiple methods with differing argument and/or return 2232 types are found for a given selector when attempting to send a 2233 message using this selector to a receiver of type `id' or `Class'. 2234 When this flag is off (which is the default behavior), the 2235 compiler will omit such warnings if any differences found are 2236 confined to types which share the same size and alignment. 2237 2238`-Wundeclared-selector' 2239 Warn if a `@selector(...)' expression referring to an undeclared 2240 selector is found. A selector is considered undeclared if no 2241 method with that name has been declared before the 2242 `@selector(...)' expression, either explicitly in an `@interface' 2243 or `@protocol' declaration, or implicitly in an `@implementation' 2244 section. This option always performs its checks as soon as a 2245 `@selector(...)' expression is found, while `-Wselector' only 2246 performs its checks in the final stage of compilation. This also 2247 enforces the coding style convention that methods and selectors 2248 must be declared before being used. 2249 2250`-print-objc-runtime-info' 2251 Generate C header describing the largest structure that is passed 2252 by value, if any. 2253 2254 2255 2256File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2257 22583.7 Options to Control Diagnostic Messages Formatting 2259===================================================== 2260 2261Traditionally, diagnostic messages have been formatted irrespective of 2262the output device's aspect (e.g. its width, ...). The options described 2263below can be used to control the diagnostic messages formatting 2264algorithm, e.g. how many characters per line, how often source location 2265information should be reported. Right now, only the C++ front end can 2266honor these options. However it is expected, in the near future, that 2267the remaining front ends would be able to digest them correctly. 2268 2269`-fmessage-length=N' 2270 Try to format error messages so that they fit on lines of about N 2271 characters. The default is 72 characters for `g++' and 0 for the 2272 rest of the front ends supported by GCC. If N is zero, then no 2273 line-wrapping will be done; each error message will appear on a 2274 single line. 2275 2276`-fdiagnostics-show-location=once' 2277 Only meaningful in line-wrapping mode. Instructs the diagnostic 2278 messages reporter to emit _once_ source location information; that 2279 is, in case the message is too long to fit on a single physical 2280 line and has to be wrapped, the source location won't be emitted 2281 (as prefix) again, over and over, in subsequent continuation 2282 lines. This is the default behavior. 2283 2284`-fdiagnostics-show-location=every-line' 2285 Only meaningful in line-wrapping mode. Instructs the diagnostic 2286 messages reporter to emit the same source location information (as 2287 prefix) for physical lines that result from the process of breaking 2288 a message which is too long to fit on a single line. 2289 2290`-fdiagnostics-show-option' 2291 This option instructs the diagnostic machinery to add text to each 2292 diagnostic emitted, which indicates which command line option 2293 directly controls that diagnostic, when such an option is known to 2294 the diagnostic machinery. 2295 2296 2297 2298File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2299 23003.8 Options to Request or Suppress Warnings 2301=========================================== 2302 2303Warnings are diagnostic messages that report constructions which are 2304not inherently erroneous but which are risky or suggest there may have 2305been an error. 2306 2307 You can request many specific warnings with options beginning `-W', 2308for example `-Wimplicit' to request warnings on implicit declarations. 2309Each of these specific warning options also has a negative form 2310beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2311This manual lists only one of the two forms, whichever is not the 2312default. 2313 2314 The following options control the amount and kinds of warnings produced 2315by GCC; for further, language-specific options also refer to *Note C++ 2316Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 2317Options::. 2318 2319`-fsyntax-only' 2320 Check the code for syntax errors, but don't do anything beyond 2321 that. 2322 2323`-pedantic' 2324 Issue all the warnings demanded by strict ISO C and ISO C++; 2325 reject all programs that use forbidden extensions, and some other 2326 programs that do not follow ISO C and ISO C++. For ISO C, follows 2327 the version of the ISO C standard specified by any `-std' option 2328 used. 2329 2330 Valid ISO C and ISO C++ programs should compile properly with or 2331 without this option (though a rare few will require `-ansi' or a 2332 `-std' option specifying the required version of ISO C). However, 2333 without this option, certain GNU extensions and traditional C and 2334 C++ features are supported as well. With this option, they are 2335 rejected. 2336 2337 `-pedantic' does not cause warning messages for use of the 2338 alternate keywords whose names begin and end with `__'. Pedantic 2339 warnings are also disabled in the expression that follows 2340 `__extension__'. However, only system header files should use 2341 these escape routes; application programs should avoid them. 2342 *Note Alternate Keywords::. 2343 2344 Some users try to use `-pedantic' to check programs for strict ISO 2345 C conformance. They soon find that it does not do quite what they 2346 want: it finds some non-ISO practices, but not all--only those for 2347 which ISO C _requires_ a diagnostic, and some others for which 2348 diagnostics have been added. 2349 2350 A feature to report any failure to conform to ISO C might be 2351 useful in some instances, but would require considerable 2352 additional work and would be quite different from `-pedantic'. We 2353 don't have plans to support such a feature in the near future. 2354 2355 Where the standard specified with `-std' represents a GNU extended 2356 dialect of C, such as `gnu89' or `gnu99', there is a corresponding 2357 "base standard", the version of ISO C on which the GNU extended 2358 dialect is based. Warnings from `-pedantic' are given where they 2359 are required by the base standard. (It would not make sense for 2360 such warnings to be given only for features not in the specified 2361 GNU C dialect, since by definition the GNU dialects of C include 2362 all features the compiler supports with the given option, and 2363 there would be nothing to warn about.) 2364 2365`-pedantic-errors' 2366 Like `-pedantic', except that errors are produced rather than 2367 warnings. 2368 2369`-w' 2370 Inhibit all warning messages. 2371 2372`-Wno-import' 2373 Inhibit warning messages about the use of `#import'. 2374 2375`-Wchar-subscripts' 2376 Warn if an array subscript has type `char'. This is a common cause 2377 of error, as programmers often forget that this type is signed on 2378 some machines. This warning is enabled by `-Wall'. 2379 2380`-Wcomment' 2381 Warn whenever a comment-start sequence `/*' appears in a `/*' 2382 comment, or whenever a Backslash-Newline appears in a `//' comment. 2383 This warning is enabled by `-Wall'. 2384 2385`-Wfatal-errors' 2386 This option causes the compiler to abort compilation on the first 2387 error occurred rather than trying to keep going and printing 2388 further error messages. 2389 2390`-Wformat' 2391 Check calls to `printf' and `scanf', etc., to make sure that the 2392 arguments supplied have types appropriate to the format string 2393 specified, and that the conversions specified in the format string 2394 make sense. This includes standard functions, and others 2395 specified by format attributes (*note Function Attributes::), in 2396 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 2397 extension, not in the C standard) families (or other 2398 target-specific families). Which functions are checked without 2399 format attributes having been specified depends on the standard 2400 version selected, and such checks of functions without the 2401 attribute specified are disabled by `-ffreestanding' or 2402 `-fno-builtin'. 2403 2404 The formats are checked against the format features supported by 2405 GNU libc version 2.2. These include all ISO C90 and C99 features, 2406 as well as features from the Single Unix Specification and some 2407 BSD and GNU extensions. Other library implementations may not 2408 support all these features; GCC does not support warning about 2409 features that go beyond a particular library's limitations. 2410 However, if `-pedantic' is used with `-Wformat', warnings will be 2411 given about format features not in the selected standard version 2412 (but not for `strfmon' formats, since those are not in any version 2413 of the C standard). *Note Options Controlling C Dialect: C 2414 Dialect Options. 2415 2416 Since `-Wformat' also checks for null format arguments for several 2417 functions, `-Wformat' also implies `-Wnonnull'. 2418 2419 `-Wformat' is included in `-Wall'. For more control over some 2420 aspects of format checking, the options `-Wformat-y2k', 2421 `-Wno-format-extra-args', `-Wno-format-zero-length', 2422 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 2423 available, but are not included in `-Wall'. 2424 2425`-Wformat-y2k' 2426 If `-Wformat' is specified, also warn about `strftime' formats 2427 which may yield only a two-digit year. 2428 2429`-Wno-format-extra-args' 2430 If `-Wformat' is specified, do not warn about excess arguments to a 2431 `printf' or `scanf' format function. The C standard specifies 2432 that such arguments are ignored. 2433 2434 Where the unused arguments lie between used arguments that are 2435 specified with `$' operand number specifications, normally 2436 warnings are still given, since the implementation could not know 2437 what type to pass to `va_arg' to skip the unused arguments. 2438 However, in the case of `scanf' formats, this option will suppress 2439 the warning if the unused arguments are all pointers, since the 2440 Single Unix Specification says that such unused arguments are 2441 allowed. 2442 2443`-Wno-format-zero-length' 2444 If `-Wformat' is specified, do not warn about zero-length formats. 2445 The C standard specifies that zero-length formats are allowed. 2446 2447`-Wformat-nonliteral' 2448 If `-Wformat' is specified, also warn if the format string is not a 2449 string literal and so cannot be checked, unless the format function 2450 takes its format arguments as a `va_list'. 2451 2452`-Wformat-security' 2453 If `-Wformat' is specified, also warn about uses of format 2454 functions that represent possible security problems. At present, 2455 this warns about calls to `printf' and `scanf' functions where the 2456 format string is not a string literal and there are no format 2457 arguments, as in `printf (foo);'. This may be a security hole if 2458 the format string came from untrusted input and contains `%n'. 2459 (This is currently a subset of what `-Wformat-nonliteral' warns 2460 about, but in future warnings may be added to `-Wformat-security' 2461 that are not included in `-Wformat-nonliteral'.) 2462 2463`-Wformat=2' 2464 Enable `-Wformat' plus format checks not included in `-Wformat'. 2465 Currently equivalent to `-Wformat -Wformat-nonliteral 2466 -Wformat-security -Wformat-y2k'. 2467 2468`-Wnonnull' 2469 Warn about passing a null pointer for arguments marked as 2470 requiring a non-null value by the `nonnull' function attribute. 2471 2472 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 2473 disabled with the `-Wno-nonnull' option. 2474 2475`-Winit-self (C, C++, Objective-C and Objective-C++ only)' 2476 Warn about uninitialized variables which are initialized with 2477 themselves. Note this option can only be used with the 2478 `-Wuninitialized' option, which in turn only works with `-O1' and 2479 above. 2480 2481 For example, GCC will warn about `i' being uninitialized in the 2482 following snippet only when `-Winit-self' has been specified: 2483 int f() 2484 { 2485 int i = i; 2486 return i; 2487 } 2488 2489`-Wimplicit-int' 2490 Warn when a declaration does not specify a type. This warning is 2491 enabled by `-Wall'. 2492 2493`-Wimplicit-function-declaration' 2494`-Werror-implicit-function-declaration' 2495 Give a warning (or error) whenever a function is used before being 2496 declared. The form `-Wno-error-implicit-function-declaration' is 2497 not supported. This warning is enabled by `-Wall' (as a warning, 2498 not an error). 2499 2500`-Wimplicit' 2501 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 2502 This warning is enabled by `-Wall'. 2503 2504`-Wmain' 2505 Warn if the type of `main' is suspicious. `main' should be a 2506 function with external linkage, returning int, taking either zero 2507 arguments, two, or three arguments of appropriate types. This 2508 warning is enabled by `-Wall'. 2509 2510`-Wmissing-braces' 2511 Warn if an aggregate or union initializer is not fully bracketed. 2512 In the following example, the initializer for `a' is not fully 2513 bracketed, but that for `b' is fully bracketed. 2514 2515 int a[2][2] = { 0, 1, 2, 3 }; 2516 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 2517 2518 This warning is enabled by `-Wall'. 2519 2520`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 2521 Warn if a user-supplied include directory does not exist. 2522 2523`-Wparentheses' 2524 Warn if parentheses are omitted in certain contexts, such as when 2525 there is an assignment in a context where a truth value is 2526 expected, or when operators are nested whose precedence people 2527 often get confused about. Only the warning for an assignment used 2528 as a truth value is supported when compiling C++; the other 2529 warnings are only supported when compiling C. 2530 2531 Also warn if a comparison like `x<=y<=z' appears; this is 2532 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 2533 interpretation from that of ordinary mathematical notation. 2534 2535 Also warn about constructions where there may be confusion to which 2536 `if' statement an `else' branch belongs. Here is an example of 2537 such a case: 2538 2539 { 2540 if (a) 2541 if (b) 2542 foo (); 2543 else 2544 bar (); 2545 } 2546 2547 In C, every `else' branch belongs to the innermost possible `if' 2548 statement, which in this example is `if (b)'. This is often not 2549 what the programmer expected, as illustrated in the above example 2550 by indentation the programmer chose. When there is the potential 2551 for this confusion, GCC will issue a warning when this flag is 2552 specified. To eliminate the warning, add explicit braces around 2553 the innermost `if' statement so there is no way the `else' could 2554 belong to the enclosing `if'. The resulting code would look like 2555 this: 2556 2557 { 2558 if (a) 2559 { 2560 if (b) 2561 foo (); 2562 else 2563 bar (); 2564 } 2565 } 2566 2567 This warning is enabled by `-Wall'. 2568 2569`-Wsequence-point' 2570 Warn about code that may have undefined semantics because of 2571 violations of sequence point rules in the C and C++ standards. 2572 2573 The C and C++ standards defines the order in which expressions in 2574 a C/C++ program are evaluated in terms of "sequence points", which 2575 represent a partial ordering between the execution of parts of the 2576 program: those executed before the sequence point, and those 2577 executed after it. These occur after the evaluation of a full 2578 expression (one which is not part of a larger expression), after 2579 the evaluation of the first operand of a `&&', `||', `? :' or `,' 2580 (comma) operator, before a function is called (but after the 2581 evaluation of its arguments and the expression denoting the called 2582 function), and in certain other places. Other than as expressed 2583 by the sequence point rules, the order of evaluation of 2584 subexpressions of an expression is not specified. All these rules 2585 describe only a partial order rather than a total order, since, 2586 for example, if two functions are called within one expression 2587 with no sequence point between them, the order in which the 2588 functions are called is not specified. However, the standards 2589 committee have ruled that function calls do not overlap. 2590 2591 It is not specified when between sequence points modifications to 2592 the values of objects take effect. Programs whose behavior 2593 depends on this have undefined behavior; the C and C++ standards 2594 specify that "Between the previous and next sequence point an 2595 object shall have its stored value modified at most once by the 2596 evaluation of an expression. Furthermore, the prior value shall 2597 be read only to determine the value to be stored.". If a program 2598 breaks these rules, the results on any particular implementation 2599 are entirely unpredictable. 2600 2601 Examples of code with undefined behavior are `a = a++;', `a[n] = 2602 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 2603 diagnosed by this option, and it may give an occasional false 2604 positive result, but in general it has been found fairly effective 2605 at detecting this sort of problem in programs. 2606 2607 The standard is worded confusingly, therefore there is some debate 2608 over the precise meaning of the sequence point rules in subtle 2609 cases. Links to discussions of the problem, including proposed 2610 formal definitions, may be found on the GCC readings page, at 2611 `http://gcc.gnu.org/readings.html'. 2612 2613 This warning is enabled by `-Wall' for C and C++. 2614 2615`-Wreturn-type' 2616 Warn whenever a function is defined with a return-type that 2617 defaults to `int'. Also warn about any `return' statement with no 2618 return-value in a function whose return-type is not `void'. 2619 2620 For C, also warn if the return type of a function has a type 2621 qualifier such as `const'. Such a type qualifier has no effect, 2622 since the value returned by a function is not an lvalue. ISO C 2623 prohibits qualified `void' return types on function definitions, 2624 so such return types always receive a warning even without this 2625 option. 2626 2627 For C++, a function without return type always produces a 2628 diagnostic message, even when `-Wno-return-type' is specified. 2629 The only exceptions are `main' and functions defined in system 2630 headers. 2631 2632 This warning is enabled by `-Wall'. 2633 2634`-Wswitch' 2635 Warn whenever a `switch' statement has an index of enumerated type 2636 and lacks a `case' for one or more of the named codes of that 2637 enumeration. (The presence of a `default' label prevents this 2638 warning.) `case' labels outside the enumeration range also 2639 provoke warnings when this option is used. This warning is 2640 enabled by `-Wall'. 2641 2642`-Wswitch-default' 2643 Warn whenever a `switch' statement does not have a `default' case. 2644 2645`-Wswitch-enum' 2646 Warn whenever a `switch' statement has an index of enumerated type 2647 and lacks a `case' for one or more of the named codes of that 2648 enumeration. `case' labels outside the enumeration range also 2649 provoke warnings when this option is used. 2650 2651`-Wtrigraphs' 2652 Warn if any trigraphs are encountered that might change the 2653 meaning of the program (trigraphs within comments are not warned 2654 about). This warning is enabled by `-Wall'. 2655 2656`-Wunused-function' 2657 Warn whenever a static function is declared but not defined or a 2658 non-inline static function is unused. This warning is enabled by 2659 `-Wall'. 2660 2661`-Wunused-label' 2662 Warn whenever a label is declared but not used. This warning is 2663 enabled by `-Wall'. 2664 2665 To suppress this warning use the `unused' attribute (*note 2666 Variable Attributes::). 2667 2668`-Wunused-parameter' 2669 Warn whenever a function parameter is unused aside from its 2670 declaration. 2671 2672 To suppress this warning use the `unused' attribute (*note 2673 Variable Attributes::). 2674 2675`-Wunused-variable' 2676 Warn whenever a local variable or non-constant static variable is 2677 unused aside from its declaration. This warning is enabled by 2678 `-Wall'. 2679 2680 To suppress this warning use the `unused' attribute (*note 2681 Variable Attributes::). 2682 2683`-Wunused-value' 2684 Warn whenever a statement computes a result that is explicitly not 2685 used. This warning is enabled by `-Wall'. 2686 2687 To suppress this warning cast the expression to `void'. 2688 2689`-Wunused' 2690 All the above `-Wunused' options combined. 2691 2692 In order to get a warning about an unused function parameter, you 2693 must either specify `-Wextra -Wunused' (note that `-Wall' implies 2694 `-Wunused'), or separately specify `-Wunused-parameter'. 2695 2696`-Wuninitialized' 2697 Warn if an automatic variable is used without first being 2698 initialized or if a variable may be clobbered by a `setjmp' call. 2699 2700 These warnings are possible only in optimizing compilation, 2701 because they require data flow information that is computed only 2702 when optimizing. If you do not specify `-O', you will not get 2703 these warnings. Instead, GCC will issue a warning about 2704 `-Wuninitialized' requiring `-O'. 2705 2706 If you want to warn about code which uses the uninitialized value 2707 of the variable in its own initializer, use the `-Winit-self' 2708 option. 2709 2710 These warnings occur for individual uninitialized or clobbered 2711 elements of structure, union or array variables as well as for 2712 variables which are uninitialized or clobbered as a whole. They do 2713 not occur for variables or elements declared `volatile'. Because 2714 these warnings depend on optimization, the exact variables or 2715 elements for which there are warnings will depend on the precise 2716 optimization options and version of GCC used. 2717 2718 Note that there may be no warning about a variable that is used 2719 only to compute a value that itself is never used, because such 2720 computations may be deleted by data flow analysis before the 2721 warnings are printed. 2722 2723 These warnings are made optional because GCC is not smart enough 2724 to see all the reasons why the code might be correct despite 2725 appearing to have an error. Here is one example of how this can 2726 happen: 2727 2728 { 2729 int x; 2730 switch (y) 2731 { 2732 case 1: x = 1; 2733 break; 2734 case 2: x = 4; 2735 break; 2736 case 3: x = 5; 2737 } 2738 foo (x); 2739 } 2740 2741 If the value of `y' is always 1, 2 or 3, then `x' is always 2742 initialized, but GCC doesn't know this. Here is another common 2743 case: 2744 2745 { 2746 int save_y; 2747 if (change_y) save_y = y, y = new_y; 2748 ... 2749 if (change_y) y = save_y; 2750 } 2751 2752 This has no bug because `save_y' is used only if it is set. 2753 2754 This option also warns when a non-volatile automatic variable 2755 might be changed by a call to `longjmp'. These warnings as well 2756 are possible only in optimizing compilation. 2757 2758 The compiler sees only the calls to `setjmp'. It cannot know 2759 where `longjmp' will be called; in fact, a signal handler could 2760 call it at any point in the code. As a result, you may get a 2761 warning even when there is in fact no problem because `longjmp' 2762 cannot in fact be called at the place which would cause a problem. 2763 2764 Some spurious warnings can be avoided if you declare all the 2765 functions you use that never return as `noreturn'. *Note Function 2766 Attributes::. 2767 2768 This warning is enabled by `-Wall'. 2769 2770`-Wunknown-pragmas' 2771 Warn when a #pragma directive is encountered which is not 2772 understood by GCC. If this command line option is used, warnings 2773 will even be issued for unknown pragmas in system header files. 2774 This is not the case if the warnings were only enabled by the 2775 `-Wall' command line option. 2776 2777`-Wno-pragmas' 2778 Do not warn about misuses of pragmas, such as incorrect parameters, 2779 invalid syntax, or conflicts between pragmas. See also 2780 `-Wunknown-pragmas'. 2781 2782`-Wstrict-aliasing' 2783 This option is only active when `-fstrict-aliasing' is active. It 2784 warns about code which might break the strict aliasing rules that 2785 the compiler is using for optimization. The warning does not 2786 catch all cases, but does attempt to catch the more common 2787 pitfalls. It is included in `-Wall'. 2788 2789`-Wstrict-aliasing=2' 2790 This option is only active when `-fstrict-aliasing' is active. It 2791 warns about code which might break the strict aliasing rules that 2792 the compiler is using for optimization. This warning catches more 2793 cases than `-Wstrict-aliasing', but it will also give a warning 2794 for some ambiguous cases that are safe. 2795 2796`-Wstrict-overflow' 2797 2798`-Wstrict-overflow=N' 2799 This option is only active when `-fstrict-overflow' is active. It 2800 warns about cases where the compiler optimizes based on the 2801 assumption that signed overflow does not occur. Note that it does 2802 not warn about all cases where the code might overflow: it only 2803 warns about cases where the compiler implements some optimization. 2804 Thus this warning depends on the optimization level. 2805 2806 An optimization which assumes that signed overflow does not occur 2807 is perfectly safe if the values of the variables involved are such 2808 that overflow never does, in fact, occur. Therefore this warning 2809 can easily give a false positive: a warning about code which is not 2810 actually a problem. To help focus on important issues, several 2811 warning levels are defined. No warnings are issued for the use of 2812 undefined signed overflow when estimating how many iterations a 2813 loop will require, in particular when determining whether a loop 2814 will be executed at all. 2815 2816 `-Wstrict-overflow=1' 2817 Warn about cases which are both questionable and easy to 2818 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 2819 the compiler will simplify this to `1'. This level of 2820 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 2821 not, and must be explicitly requested. 2822 2823 `-Wstrict-overflow=2' 2824 Also warn about other cases where a comparison is simplified 2825 to a constant. For example: `abs (x) >= 0'. This can only be 2826 simplified when `-fstrict-overflow' is in effect, because 2827 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 2828 zero. `-Wstrict-overflow' (with no level) is the same as 2829 `-Wstrict-overflow=2'. 2830 2831 `-Wstrict-overflow=3' 2832 Also warn about other cases where a comparison is simplified. 2833 For example: `x + 1 > 1' will be simplified to `x > 0'. 2834 2835 `-Wstrict-overflow=4' 2836 Also warn about other simplifications not covered by the 2837 above cases. For example: `(x * 10) / 5' will be simplified 2838 to `x * 2'. 2839 2840 `-Wstrict-overflow=5' 2841 Also warn about cases where the compiler reduces the 2842 magnitude of a constant involved in a comparison. For 2843 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 2844 This is reported only at the highest warning level because 2845 this simplification applies to many comparisons, so this 2846 warning level will give a very large number of false 2847 positives. 2848 2849`-Wall' 2850 All of the above `-W' options combined. This enables all the 2851 warnings about constructions that some users consider 2852 questionable, and that are easy to avoid (or modify to prevent the 2853 warning), even in conjunction with macros. This also enables some 2854 language-specific warnings described in *Note C++ Dialect 2855 Options:: and *Note Objective-C and Objective-C++ Dialect 2856 Options::. 2857 2858 The following `-W...' options are not implied by `-Wall'. Some of 2859them warn about constructions that users generally do not consider 2860questionable, but which occasionally you might wish to check for; 2861others warn about constructions that are necessary or hard to avoid in 2862some cases, and there is no simple way to modify the code to suppress 2863the warning. 2864 2865`-Wextra' 2866 (This option used to be called `-W'. The older name is still 2867 supported, but the newer name is more descriptive.) Print extra 2868 warning messages for these events: 2869 2870 * A function can return either with or without a value. 2871 (Falling off the end of the function body is considered 2872 returning without a value.) For example, this function would 2873 evoke such a warning: 2874 2875 foo (a) 2876 { 2877 if (a > 0) 2878 return a; 2879 } 2880 2881 * An expression-statement or the left-hand side of a comma 2882 expression contains no side effects. To suppress the 2883 warning, cast the unused expression to void. For example, an 2884 expression such as `x[i,j]' will cause a warning, but 2885 `x[(void)i,j]' will not. 2886 2887 * An unsigned value is compared against zero with `<' or `>='. 2888 2889 * Storage-class specifiers like `static' are not the first 2890 things in a declaration. According to the C Standard, this 2891 usage is obsolescent. 2892 2893 * If `-Wall' or `-Wunused' is also specified, warn about unused 2894 arguments. 2895 2896 * A comparison between signed and unsigned values could produce 2897 an incorrect result when the signed value is converted to 2898 unsigned. (But don't warn if `-Wno-sign-compare' is also 2899 specified.) 2900 2901 * An aggregate has an initializer which does not initialize all 2902 members. This warning can be independently controlled by 2903 `-Wmissing-field-initializers'. 2904 2905 * An initialized field without side effects is overridden when 2906 using designated initializers (*note Designated Initializers: 2907 Designated Inits.). This warning can be independently 2908 controlled by `-Woverride-init'. 2909 2910 * A function parameter is declared without a type specifier in 2911 K&R-style functions: 2912 2913 void foo(bar) { } 2914 2915 * An empty body occurs in an `if' or `else' statement. 2916 2917 * A pointer is compared against integer zero with `<', `<=', 2918 `>', or `>='. 2919 2920 * A variable might be changed by `longjmp' or `vfork'. 2921 2922 * (C++ only) An enumerator and a non-enumerator both appear in 2923 a conditional expression. 2924 2925 * (C++ only) A non-static reference or non-static `const' 2926 member appears in a class without constructors. 2927 2928 * (C++ only) Ambiguous virtual bases. 2929 2930 * (C++ only) Subscripting an array which has been declared 2931 `register'. 2932 2933 * (C++ only) Taking the address of a variable which has been 2934 declared `register'. 2935 2936 * (C++ only) A base class is not initialized in a derived 2937 class' copy constructor. 2938 2939`-Wno-div-by-zero' 2940 Do not warn about compile-time integer division by zero. Floating 2941 point division by zero is not warned about, as it can be a 2942 legitimate way of obtaining infinities and NaNs. 2943 2944`-Wsystem-headers' 2945 Print warning messages for constructs found in system header files. 2946 Warnings from system headers are normally suppressed, on the 2947 assumption that they usually do not indicate real problems and 2948 would only make the compiler output harder to read. Using this 2949 command line option tells GCC to emit warnings from system headers 2950 as if they occurred in user code. However, note that using 2951 `-Wall' in conjunction with this option will _not_ warn about 2952 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 2953 must also be used. 2954 2955`-Wfloat-equal' 2956 Warn if floating point values are used in equality comparisons. 2957 2958 The idea behind this is that sometimes it is convenient (for the 2959 programmer) to consider floating-point values as approximations to 2960 infinitely precise real numbers. If you are doing this, then you 2961 need to compute (by analyzing the code, or in some other way) the 2962 maximum or likely maximum error that the computation introduces, 2963 and allow for it when performing comparisons (and when producing 2964 output, but that's a different problem). In particular, instead 2965 of testing for equality, you would check to see whether the two 2966 values have ranges that overlap; and this is done with the 2967 relational operators, so equality comparisons are probably 2968 mistaken. 2969 2970`-Wtraditional (C only)' 2971 Warn about certain constructs that behave differently in 2972 traditional and ISO C. Also warn about ISO C constructs that have 2973 no traditional C equivalent, and/or problematic constructs which 2974 should be avoided. 2975 2976 * Macro parameters that appear within string literals in the 2977 macro body. In traditional C macro replacement takes place 2978 within string literals, but does not in ISO C. 2979 2980 * In traditional C, some preprocessor directives did not exist. 2981 Traditional preprocessors would only consider a line to be a 2982 directive if the `#' appeared in column 1 on the line. 2983 Therefore `-Wtraditional' warns about directives that 2984 traditional C understands but would ignore because the `#' 2985 does not appear as the first character on the line. It also 2986 suggests you hide directives like `#pragma' not understood by 2987 traditional C by indenting them. Some traditional 2988 implementations would not recognize `#elif', so it suggests 2989 avoiding it altogether. 2990 2991 * A function-like macro that appears without arguments. 2992 2993 * The unary plus operator. 2994 2995 * The `U' integer constant suffix, or the `F' or `L' floating 2996 point constant suffixes. (Traditional C does support the `L' 2997 suffix on integer constants.) Note, these suffixes appear in 2998 macros defined in the system headers of most modern systems, 2999 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3000 macros in user code might normally lead to spurious warnings, 3001 however GCC's integrated preprocessor has enough context to 3002 avoid warning in these cases. 3003 3004 * A function declared external in one block and then used after 3005 the end of the block. 3006 3007 * A `switch' statement has an operand of type `long'. 3008 3009 * A non-`static' function declaration follows a `static' one. 3010 This construct is not accepted by some traditional C 3011 compilers. 3012 3013 * The ISO type of an integer constant has a different width or 3014 signedness from its traditional type. This warning is only 3015 issued if the base of the constant is ten. I.e. hexadecimal 3016 or octal values, which typically represent bit patterns, are 3017 not warned about. 3018 3019 * Usage of ISO string concatenation is detected. 3020 3021 * Initialization of automatic aggregates. 3022 3023 * Identifier conflicts with labels. Traditional C lacks a 3024 separate namespace for labels. 3025 3026 * Initialization of unions. If the initializer is zero, the 3027 warning is omitted. This is done under the assumption that 3028 the zero initializer in user code appears conditioned on e.g. 3029 `__STDC__' to avoid missing initializer warnings and relies 3030 on default initialization to zero in the traditional C case. 3031 3032 * Conversions by prototypes between fixed/floating point values 3033 and vice versa. The absence of these prototypes when 3034 compiling with traditional C would cause serious problems. 3035 This is a subset of the possible conversion warnings, for the 3036 full set use `-Wconversion'. 3037 3038 * Use of ISO C style function definitions. This warning 3039 intentionally is _not_ issued for prototype declarations or 3040 variadic functions because these ISO C features will appear 3041 in your code when using libiberty's traditional C 3042 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3043 is also bypassed for nested functions because that feature is 3044 already a GCC extension and thus not relevant to traditional 3045 C compatibility. 3046 3047`-Wdeclaration-after-statement (C only)' 3048 Warn when a declaration is found after a statement in a block. 3049 This construct, known from C++, was introduced with ISO C99 and is 3050 by default allowed in GCC. It is not supported by ISO C90 and was 3051 not supported by GCC versions before GCC 3.0. *Note Mixed 3052 Declarations::. 3053 3054`-Wundef' 3055 Warn if an undefined identifier is evaluated in an `#if' directive. 3056 3057`-Wno-endif-labels' 3058 Do not warn whenever an `#else' or an `#endif' are followed by 3059 text. 3060 3061`-Wshadow' 3062 Warn whenever a local variable shadows another local variable, 3063 parameter or global variable or whenever a built-in function is 3064 shadowed. 3065 3066`-Wlarger-than-LEN' 3067 Warn whenever an object of larger than LEN bytes is defined. 3068 3069`-Wunsafe-loop-optimizations' 3070 Warn if the loop cannot be optimized because the compiler could not 3071 assume anything on the bounds of the loop indices. With 3072 `-funsafe-loop-optimizations' warn if the compiler made such 3073 assumptions. 3074 3075`-Wpointer-arith' 3076 Warn about anything that depends on the "size of" a function type 3077 or of `void'. GNU C assigns these types a size of 1, for 3078 convenience in calculations with `void *' pointers and pointers to 3079 functions. 3080 3081`-Wbad-function-cast (C only)' 3082 Warn whenever a function call is cast to a non-matching type. For 3083 example, warn if `int malloc()' is cast to `anything *'. 3084 3085`-Wc++-compat' 3086 Warn about ISO C constructs that are outside of the common subset 3087 of ISO C and ISO C++, e.g. request for implicit conversion from 3088 `void *' to a pointer to non-`void' type. 3089 3090`-Wcast-qual' 3091 Warn whenever a pointer is cast so as to remove a type qualifier 3092 from the target type. For example, warn if a `const char *' is 3093 cast to an ordinary `char *'. 3094 3095`-Wcast-align' 3096 Warn whenever a pointer is cast such that the required alignment 3097 of the target is increased. For example, warn if a `char *' is 3098 cast to an `int *' on machines where integers can only be accessed 3099 at two- or four-byte boundaries. 3100 3101`-Wwrite-strings' 3102 When compiling C, give string constants the type `const 3103 char[LENGTH]' so that copying the address of one into a 3104 non-`const' `char *' pointer will get a warning; when compiling 3105 C++, warn about the deprecated conversion from string literals to 3106 `char *'. This warning, by default, is enabled for C++ programs. 3107 These warnings will help you find at compile time code that can 3108 try to write into a string constant, but only if you have been 3109 very careful about using `const' in declarations and prototypes. 3110 Otherwise, it will just be a nuisance; this is why we did not make 3111 `-Wall' request these warnings. 3112 3113`-Wconversion' 3114 Warn if a prototype causes a type conversion that is different 3115 from what would happen to the same argument in the absence of a 3116 prototype. This includes conversions of fixed point to floating 3117 and vice versa, and conversions changing the width or signedness 3118 of a fixed point argument except when the same as the default 3119 promotion. 3120 3121 Also, warn if a negative integer constant expression is implicitly 3122 converted to an unsigned type. For example, warn about the 3123 assignment `x = -1' if `x' is unsigned. But do not warn about 3124 explicit casts like `(unsigned) -1'. 3125 3126`-Wsign-compare' 3127 Warn when a comparison between signed and unsigned values could 3128 produce an incorrect result when the signed value is converted to 3129 unsigned. This warning is also enabled by `-Wextra'; to get the 3130 other warnings of `-Wextra' without this warning, use `-Wextra 3131 -Wno-sign-compare'. 3132 3133`-Waddress' 3134 Warn about suspicious uses of memory addresses. These include using 3135 the address of a function in a conditional expression, such as 3136 `void func(void); if (func)', and comparisons against the memory 3137 address of a string literal, such as `if (x == "abc")'. Such uses 3138 typically indicate a programmer error: the address of a function 3139 always evaluates to true, so their use in a conditional usually 3140 indicate that the programmer forgot the parentheses in a function 3141 call; and comparisons against string literals result in unspecified 3142 behavior and are not portable in C, so they usually indicate that 3143 the programmer intended to use `strcmp'. This warning is enabled 3144 by `-Wall'. 3145 3146`-Waggregate-return' 3147 Warn if any functions that return structures or unions are defined 3148 or called. (In languages where you can return an array, this also 3149 elicits a warning.) 3150 3151`-Wno-attributes' 3152 Do not warn if an unexpected `__attribute__' is used, such as 3153 unrecognized attributes, function attributes applied to variables, 3154 etc. This will not stop errors for incorrect use of supported 3155 attributes. 3156 3157`-Wstrict-prototypes (C only)' 3158 Warn if a function is declared or defined without specifying the 3159 argument types. (An old-style function definition is permitted 3160 without a warning if preceded by a declaration which specifies the 3161 argument types.) 3162 3163`-Wold-style-definition (C only)' 3164 Warn if an old-style function definition is used. A warning is 3165 given even if there is a previous prototype. 3166 3167`-Wmissing-prototypes (C only)' 3168 Warn if a global function is defined without a previous prototype 3169 declaration. This warning is issued even if the definition itself 3170 provides a prototype. The aim is to detect global functions that 3171 fail to be declared in header files. 3172 3173`-Wmissing-declarations (C only)' 3174 Warn if a global function is defined without a previous 3175 declaration. Do so even if the definition itself provides a 3176 prototype. Use this option to detect global functions that are 3177 not declared in header files. 3178 3179`-Wmissing-field-initializers' 3180 Warn if a structure's initializer has some fields missing. For 3181 example, the following code would cause such a warning, because 3182 `x.h' is implicitly zero: 3183 3184 struct s { int f, g, h; }; 3185 struct s x = { 3, 4 }; 3186 3187 This option does not warn about designated initializers, so the 3188 following modification would not trigger a warning: 3189 3190 struct s { int f, g, h; }; 3191 struct s x = { .f = 3, .g = 4 }; 3192 3193 This warning is included in `-Wextra'. To get other `-Wextra' 3194 warnings without this one, use `-Wextra 3195 -Wno-missing-field-initializers'. 3196 3197`-Wmissing-noreturn' 3198 Warn about functions which might be candidates for attribute 3199 `noreturn'. Note these are only possible candidates, not absolute 3200 ones. Care should be taken to manually verify functions actually 3201 do not ever return before adding the `noreturn' attribute, 3202 otherwise subtle code generation bugs could be introduced. You 3203 will not get a warning for `main' in hosted C environments. 3204 3205`-Wmissing-format-attribute' 3206 Warn about function pointers which might be candidates for `format' 3207 attributes. Note these are only possible candidates, not absolute 3208 ones. GCC will guess that function pointers with `format' 3209 attributes that are used in assignment, initialization, parameter 3210 passing or return statements should have a corresponding `format' 3211 attribute in the resulting type. I.e. the left-hand side of the 3212 assignment or initialization, the type of the parameter variable, 3213 or the return type of the containing function respectively should 3214 also have a `format' attribute to avoid the warning. 3215 3216 GCC will also warn about function definitions which might be 3217 candidates for `format' attributes. Again, these are only 3218 possible candidates. GCC will guess that `format' attributes 3219 might be appropriate for any function that calls a function like 3220 `vprintf' or `vscanf', but this might not always be the case, and 3221 some functions for which `format' attributes are appropriate may 3222 not be detected. 3223 3224`-Wno-multichar' 3225 Do not warn if a multicharacter constant (`'FOOF'') is used. 3226 Usually they indicate a typo in the user's code, as they have 3227 implementation-defined values, and should not be used in portable 3228 code. 3229 3230`-Wnormalized=<none|id|nfc|nfkc>' 3231 In ISO C and ISO C++, two identifiers are different if they are 3232 different sequences of characters. However, sometimes when 3233 characters outside the basic ASCII character set are used, you can 3234 have two different character sequences that look the same. To 3235 avoid confusion, the ISO 10646 standard sets out some 3236 "normalization rules" which when applied ensure that two sequences 3237 that look the same are turned into the same sequence. GCC can 3238 warn you if you are using identifiers which have not been 3239 normalized; this option controls that warning. 3240 3241 There are four levels of warning that GCC supports. The default is 3242 `-Wnormalized=nfc', which warns about any identifier which is not 3243 in the ISO 10646 "C" normalized form, "NFC". NFC is the 3244 recommended form for most uses. 3245 3246 Unfortunately, there are some characters which ISO C and ISO C++ 3247 allow in identifiers that when turned into NFC aren't allowable as 3248 identifiers. That is, there's no way to use these symbols in 3249 portable ISO C or C++ and have all your identifiers in NFC. 3250 `-Wnormalized=id' suppresses the warning for these characters. It 3251 is hoped that future versions of the standards involved will 3252 correct this, which is why this option is not the default. 3253 3254 You can switch the warning off for all characters by writing 3255 `-Wnormalized=none'. You would only want to do this if you were 3256 using some other normalization scheme (like "D"), because 3257 otherwise you can easily create bugs that are literally impossible 3258 to see. 3259 3260 Some characters in ISO 10646 have distinct meanings but look 3261 identical in some fonts or display methodologies, especially once 3262 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 3263 LATIN SMALL LETTER N", will display just like a regular `n' which 3264 has been placed in a superscript. ISO 10646 defines the "NFKC" 3265 normalization scheme to convert all these into a standard form as 3266 well, and GCC will warn if your code is not in NFKC if you use 3267 `-Wnormalized=nfkc'. This warning is comparable to warning about 3268 every identifier that contains the letter O because it might be 3269 confused with the digit 0, and so is not the default, but may be 3270 useful as a local coding convention if the programming environment 3271 is unable to be fixed to display these characters distinctly. 3272 3273`-Wno-deprecated-declarations' 3274 Do not warn about uses of functions (*note Function Attributes::), 3275 variables (*note Variable Attributes::), and types (*note Type 3276 Attributes::) marked as deprecated by using the `deprecated' 3277 attribute. 3278 3279`-Wno-overflow' 3280 Do not warn about compile-time overflow in constant expressions. 3281 3282`-Woverride-init' 3283 Warn if an initialized field without side effects is overridden 3284 when using designated initializers (*note Designated Initializers: 3285 Designated Inits.). 3286 3287 This warning is included in `-Wextra'. To get other `-Wextra' 3288 warnings without this one, use `-Wextra -Wno-override-init'. 3289 3290`-Wpacked' 3291 Warn if a structure is given the packed attribute, but the packed 3292 attribute has no effect on the layout or size of the structure. 3293 Such structures may be mis-aligned for little benefit. For 3294 instance, in this code, the variable `f.x' in `struct bar' will be 3295 misaligned even though `struct bar' does not itself have the 3296 packed attribute: 3297 3298 struct foo { 3299 int x; 3300 char a, b, c, d; 3301 } __attribute__((packed)); 3302 struct bar { 3303 char z; 3304 struct foo f; 3305 }; 3306 3307`-Wpadded' 3308 Warn if padding is included in a structure, either to align an 3309 element of the structure or to align the whole structure. 3310 Sometimes when this happens it is possible to rearrange the fields 3311 of the structure to reduce the padding and so make the structure 3312 smaller. 3313 3314`-Wredundant-decls' 3315 Warn if anything is declared more than once in the same scope, 3316 even in cases where multiple declaration is valid and changes 3317 nothing. 3318 3319`-Wnested-externs (C only)' 3320 Warn if an `extern' declaration is encountered within a function. 3321 3322`-Wunreachable-code' 3323 Warn if the compiler detects that code will never be executed. 3324 3325 This option is intended to warn when the compiler detects that at 3326 least a whole line of source code will never be executed, because 3327 some condition is never satisfied or because it is after a 3328 procedure that never returns. 3329 3330 It is possible for this option to produce a warning even though 3331 there are circumstances under which part of the affected line can 3332 be executed, so care should be taken when removing 3333 apparently-unreachable code. 3334 3335 For instance, when a function is inlined, a warning may mean that 3336 the line is unreachable in only one inlined copy of the function. 3337 3338 This option is not made part of `-Wall' because in a debugging 3339 version of a program there is often substantial code which checks 3340 correct functioning of the program and is, hopefully, unreachable 3341 because the program does work. Another common use of unreachable 3342 code is to provide behavior which is selectable at compile-time. 3343 3344`-Winline' 3345 Warn if a function can not be inlined and it was declared as 3346 inline. Even with this option, the compiler will not warn about 3347 failures to inline functions declared in system headers. 3348 3349 The compiler uses a variety of heuristics to determine whether or 3350 not to inline a function. For example, the compiler takes into 3351 account the size of the function being inlined and the amount of 3352 inlining that has already been done in the current function. 3353 Therefore, seemingly insignificant changes in the source program 3354 can cause the warnings produced by `-Winline' to appear or 3355 disappear. 3356 3357`-Wno-invalid-offsetof (C++ only)' 3358 Suppress warnings from applying the `offsetof' macro to a non-POD 3359 type. According to the 1998 ISO C++ standard, applying `offsetof' 3360 to a non-POD type is undefined. In existing C++ implementations, 3361 however, `offsetof' typically gives meaningful results even when 3362 applied to certain kinds of non-POD types. (Such as a simple 3363 `struct' that fails to be a POD type only by virtue of having a 3364 constructor.) This flag is for users who are aware that they are 3365 writing nonportable code and who have deliberately chosen to 3366 ignore the warning about it. 3367 3368 The restrictions on `offsetof' may be relaxed in a future version 3369 of the C++ standard. 3370 3371`-Wno-int-to-pointer-cast (C only)' 3372 Suppress warnings from casts to pointer type of an integer of a 3373 different size. 3374 3375`-Wno-pointer-to-int-cast (C only)' 3376 Suppress warnings from casts from a pointer to an integer type of a 3377 different size. 3378 3379`-Winvalid-pch' 3380 Warn if a precompiled header (*note Precompiled Headers::) is 3381 found in the search path but can't be used. 3382 3383`-Wlong-long' 3384 Warn if `long long' type is used. This is default. To inhibit 3385 the warning messages, use `-Wno-long-long'. Flags `-Wlong-long' 3386 and `-Wno-long-long' are taken into account only when `-pedantic' 3387 flag is used. 3388 3389`-Wvariadic-macros' 3390 Warn if variadic macros are used in pedantic ISO C90 mode, or the 3391 GNU alternate syntax when in pedantic ISO C99 mode. This is 3392 default. To inhibit the warning messages, use 3393 `-Wno-variadic-macros'. 3394 3395`-Wvolatile-register-var' 3396 Warn if a register variable is declared volatile. The volatile 3397 modifier does not inhibit all optimizations that may eliminate 3398 reads and/or writes to register variables. 3399 3400`-Wdisabled-optimization' 3401 Warn if a requested optimization pass is disabled. This warning 3402 does not generally indicate that there is anything wrong with your 3403 code; it merely indicates that GCC's optimizers were unable to 3404 handle the code effectively. Often, the problem is that your code 3405 is too big or too complex; GCC will refuse to optimize programs 3406 when the optimization itself is likely to take inordinate amounts 3407 of time. 3408 3409`-Wpointer-sign' 3410 Warn for pointer argument passing or assignment with different 3411 signedness. This option is only supported for C and Objective-C. 3412 It is implied by `-Wall' and by `-pedantic', which can be disabled 3413 with `-Wno-pointer-sign'. 3414 3415`-Werror' 3416 Make all warnings into errors. 3417 3418`-Werror=' 3419 Make the specified warning into an errors. The specifier for a 3420 warning is appended, for example `-Werror=switch' turns the 3421 warnings controlled by `-Wswitch' into errors. This switch takes 3422 a negative form, to be used to negate `-Werror' for specific 3423 warnings, for example `-Wno-error=switch' makes `-Wswitch' 3424 warnings not be errors, even when `-Werror' is in effect. You can 3425 use the `-fdiagnostics-show-option' option to have each 3426 controllable warning amended with the option which controls it, to 3427 determine what to use with this option. 3428 3429 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 3430 However, `-Wno-error='FOO does not imply anything. 3431 3432`-Wstack-protector' 3433 This option is only active when `-fstack-protector' is active. It 3434 warns about functions that will not be protected against stack 3435 smashing. 3436 3437`-Woverlength-strings' 3438 Warn about string constants which are longer than the "minimum 3439 maximum" length specified in the C standard. Modern compilers 3440 generally allow string constants which are much longer than the 3441 standard's minimum limit, but very portable programs should avoid 3442 using longer strings. 3443 3444 The limit applies _after_ string constant concatenation, and does 3445 not count the trailing NUL. In C89, the limit was 509 characters; 3446 in C99, it was raised to 4095. C++98 does not specify a normative 3447 minimum maximum, so we do not diagnose overlength strings in C++. 3448 3449 This option is implied by `-pedantic', and can be disabled with 3450 `-Wno-overlength-strings'. 3451 3452 3453File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 3454 34553.9 Options for Debugging Your Program or GCC 3456============================================= 3457 3458GCC has various special options that are used for debugging either your 3459program or GCC: 3460 3461`-g' 3462 Produce debugging information in the operating system's native 3463 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 3464 debugging information. 3465 3466 On most systems that use stabs format, `-g' enables use of extra 3467 debugging information that only GDB can use; this extra information 3468 makes debugging work better in GDB but will probably make other 3469 debuggers crash or refuse to read the program. If you want to 3470 control for certain whether to generate the extra information, use 3471 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 3472 below). 3473 3474 GCC allows you to use `-g' with `-O'. The shortcuts taken by 3475 optimized code may occasionally produce surprising results: some 3476 variables you declared may not exist at all; flow of control may 3477 briefly move where you did not expect it; some statements may not 3478 be executed because they compute constant results or their values 3479 were already at hand; some statements may execute in different 3480 places because they were moved out of loops. 3481 3482 Nevertheless it proves possible to debug optimized output. This 3483 makes it reasonable to use the optimizer for programs that might 3484 have bugs. 3485 3486 The following options are useful when GCC is generated with the 3487 capability for more than one debugging format. 3488 3489`-ggdb' 3490 Produce debugging information for use by GDB. This means to use 3491 the most expressive format available (DWARF 2, stabs, or the 3492 native format if neither of those are supported), including GDB 3493 extensions if at all possible. 3494 3495`-gstabs' 3496 Produce debugging information in stabs format (if that is 3497 supported), without GDB extensions. This is the format used by 3498 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 3499 systems this option produces stabs debugging output which is not 3500 understood by DBX or SDB. On System V Release 4 systems this 3501 option requires the GNU assembler. 3502 3503`-feliminate-unused-debug-symbols' 3504 Produce debugging information in stabs format (if that is 3505 supported), for only symbols that are actually used. 3506 3507`-femit-class-debug-always' 3508 Instead of emitting debugging information for a C++ class in only 3509 one object file, emit it in all object files using the class. 3510 This option should be used only with debuggers that are unable to 3511 handle the way GCC normally emits debugging information for 3512 classes because using this option will increase the size of 3513 debugging information by as much as a factor of two. 3514 3515`-gstabs+' 3516 Produce debugging information in stabs format (if that is 3517 supported), using GNU extensions understood only by the GNU 3518 debugger (GDB). The use of these extensions is likely to make 3519 other debuggers crash or refuse to read the program. 3520 3521`-gcoff' 3522 Produce debugging information in COFF format (if that is 3523 supported). This is the format used by SDB on most System V 3524 systems prior to System V Release 4. 3525 3526`-gxcoff' 3527 Produce debugging information in XCOFF format (if that is 3528 supported). This is the format used by the DBX debugger on IBM 3529 RS/6000 systems. 3530 3531`-gxcoff+' 3532 Produce debugging information in XCOFF format (if that is 3533 supported), using GNU extensions understood only by the GNU 3534 debugger (GDB). The use of these extensions is likely to make 3535 other debuggers crash or refuse to read the program, and may cause 3536 assemblers other than the GNU assembler (GAS) to fail with an 3537 error. 3538 3539`-gdwarf-2' 3540 Produce debugging information in DWARF version 2 format (if that is 3541 supported). This is the format used by DBX on IRIX 6. With this 3542 option, GCC uses features of DWARF version 3 when they are useful; 3543 version 3 is upward compatible with version 2, but may still cause 3544 problems for older debuggers. 3545 3546`-gvms' 3547 Produce debugging information in VMS debug format (if that is 3548 supported). This is the format used by DEBUG on VMS systems. 3549 3550`-gLEVEL' 3551`-ggdbLEVEL' 3552`-gstabsLEVEL' 3553`-gcoffLEVEL' 3554`-gxcoffLEVEL' 3555`-gvmsLEVEL' 3556 Request debugging information and also use LEVEL to specify how 3557 much information. The default level is 2. 3558 3559 Level 1 produces minimal information, enough for making backtraces 3560 in parts of the program that you don't plan to debug. This 3561 includes descriptions of functions and external variables, but no 3562 information about local variables and no line numbers. 3563 3564 Level 3 includes extra information, such as all the macro 3565 definitions present in the program. Some debuggers support macro 3566 expansion when you use `-g3'. 3567 3568 `-gdwarf-2' does not accept a concatenated debug level, because 3569 GCC used to support an option `-gdwarf' that meant to generate 3570 debug information in version 1 of the DWARF format (which is very 3571 different from version 2), and it would have been too confusing. 3572 That debug format is long obsolete, but the option cannot be 3573 changed now. Instead use an additional `-gLEVEL' option to change 3574 the debug level for DWARF2. 3575 3576`-feliminate-dwarf2-dups' 3577 Compress DWARF2 debugging information by eliminating duplicated 3578 information about each symbol. This option only makes sense when 3579 generating DWARF2 debugging information with `-gdwarf-2'. 3580 3581`-p' 3582 Generate extra code to write profile information suitable for the 3583 analysis program `prof'. You must use this option when compiling 3584 the source files you want data about, and you must also use it when 3585 linking. 3586 3587`-pg' 3588 Generate extra code to write profile information suitable for the 3589 analysis program `gprof'. You must use this option when compiling 3590 the source files you want data about, and you must also use it when 3591 linking. 3592 3593`-Q' 3594 Makes the compiler print out each function name as it is compiled, 3595 and print some statistics about each pass when it finishes. 3596 3597`-ftime-report' 3598 Makes the compiler print some statistics about the time consumed 3599 by each pass when it finishes. 3600 3601`-fmem-report' 3602 Makes the compiler print some statistics about permanent memory 3603 allocation when it finishes. 3604 3605`-fprofile-arcs' 3606 Add code so that program flow "arcs" are instrumented. During 3607 execution the program records how many times each branch and call 3608 is executed and how many times it is taken or returns. When the 3609 compiled program exits it saves this data to a file called 3610 `AUXNAME.gcda' for each source file. The data may be used for 3611 profile-directed optimizations (`-fbranch-probabilities'), or for 3612 test coverage analysis (`-ftest-coverage'). Each object file's 3613 AUXNAME is generated from the name of the output file, if 3614 explicitly specified and it is not the final executable, otherwise 3615 it is the basename of the source file. In both cases any suffix 3616 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 3617 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 3618 *Note Cross-profiling::. 3619 3620`--coverage' 3621 This option is used to compile and link code instrumented for 3622 coverage analysis. The option is a synonym for `-fprofile-arcs' 3623 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 3624 See the documentation for those options for more details. 3625 3626 * Compile the source files with `-fprofile-arcs' plus 3627 optimization and code generation options. For test coverage 3628 analysis, use the additional `-ftest-coverage' option. You 3629 do not need to profile every source file in a program. 3630 3631 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 3632 latter implies the former). 3633 3634 * Run the program on a representative workload to generate the 3635 arc profile information. This may be repeated any number of 3636 times. You can run concurrent instances of your program, and 3637 provided that the file system supports locking, the data 3638 files will be correctly updated. Also `fork' calls are 3639 detected and correctly handled (double counting will not 3640 happen). 3641 3642 * For profile-directed optimizations, compile the source files 3643 again with the same optimization and code generation options 3644 plus `-fbranch-probabilities' (*note Options that Control 3645 Optimization: Optimize Options.). 3646 3647 * For test coverage analysis, use `gcov' to produce human 3648 readable information from the `.gcno' and `.gcda' files. 3649 Refer to the `gcov' documentation for further information. 3650 3651 3652 With `-fprofile-arcs', for each function of your program GCC 3653 creates a program flow graph, then finds a spanning tree for the 3654 graph. Only arcs that are not on the spanning tree have to be 3655 instrumented: the compiler adds code to count the number of times 3656 that these arcs are executed. When an arc is the only exit or 3657 only entrance to a block, the instrumentation code can be added to 3658 the block; otherwise, a new basic block must be created to hold 3659 the instrumentation code. 3660 3661`-ftest-coverage' 3662 Produce a notes file that the `gcov' code-coverage utility (*note 3663 `gcov'--a Test Coverage Program: Gcov.) can use to show program 3664 coverage. Each source file's note file is called `AUXNAME.gcno'. 3665 Refer to the `-fprofile-arcs' option above for a description of 3666 AUXNAME and instructions on how to generate test coverage data. 3667 Coverage data will match the source files more closely, if you do 3668 not optimize. 3669 3670`-dLETTERS' 3671 3672`-fdump-rtl-PASS' 3673 Says to make debugging dumps during compilation at times specified 3674 by LETTERS. This is used for debugging the RTL-based passes of 3675 the compiler. The file names for most of the dumps are made by 3676 appending a pass number and a word to the DUMPNAME. DUMPNAME is 3677 generated from the name of the output file, if explicitly 3678 specified and it is not an executable, otherwise it is the 3679 basename of the source file. 3680 3681 Most debug dumps can be enabled either passing a letter to the `-d' 3682 option, or with a long `-fdump-rtl' switch; here are the possible 3683 letters for use in LETTERS and PASS, and their meanings: 3684 3685 `-dA' 3686 Annotate the assembler output with miscellaneous debugging 3687 information. 3688 3689 `-dB' 3690 `-fdump-rtl-bbro' 3691 Dump after block reordering, to `FILE.148r.bbro'. 3692 3693 `-dc' 3694 `-fdump-rtl-combine' 3695 Dump after instruction combination, to the file 3696 `FILE.129r.combine'. 3697 3698 `-dC' 3699 `-fdump-rtl-ce1' 3700 `-fdump-rtl-ce2' 3701 `-dC' and `-fdump-rtl-ce1' enable dumping after the first if 3702 conversion, to the file `FILE.117r.ce1'. `-dC' and 3703 `-fdump-rtl-ce2' enable dumping after the second if 3704 conversion, to the file `FILE.130r.ce2'. 3705 3706 `-dd' 3707 `-fdump-rtl-btl' 3708 `-fdump-rtl-dbr' 3709 `-dd' and `-fdump-rtl-btl' enable dumping after branch target 3710 load optimization, to `FILE.31.btl'. `-dd' and 3711 `-fdump-rtl-dbr' enable dumping after delayed branch 3712 scheduling, to `FILE.36.dbr'. 3713 3714 `-dD' 3715 Dump all macro definitions, at the end of preprocessing, in 3716 addition to normal output. 3717 3718 `-dE' 3719 `-fdump-rtl-ce3' 3720 Dump after the third if conversion, to `FILE.146r.ce3'. 3721 3722 `-df' 3723 `-fdump-rtl-cfg' 3724 `-fdump-rtl-life' 3725 `-df' and `-fdump-rtl-cfg' enable dumping after control and 3726 data flow analysis, to `FILE.116r.cfg'. `-df' and 3727 `-fdump-rtl-cfg' enable dumping dump after life analysis, to 3728 `FILE.128r.life1' and `FILE.135r.life2'. 3729 3730 `-dg' 3731 `-fdump-rtl-greg' 3732 Dump after global register allocation, to `FILE.139r.greg'. 3733 3734 `-dG' 3735 `-fdump-rtl-gcse' 3736 `-fdump-rtl-bypass' 3737 `-dG' and `-fdump-rtl-gcse' enable dumping after GCSE, to 3738 `FILE.114r.gcse'. `-dG' and `-fdump-rtl-bypass' enable 3739 dumping after jump bypassing and control flow optimizations, 3740 to `FILE.115r.bypass'. 3741 3742 `-dh' 3743 `-fdump-rtl-eh' 3744 Dump after finalization of EH handling code, to `FILE.02.eh'. 3745 3746 `-di' 3747 `-fdump-rtl-sibling' 3748 Dump after sibling call optimizations, to `FILE.106r.sibling'. 3749 3750 `-dj' 3751 `-fdump-rtl-jump' 3752 Dump after the first jump optimization, to `FILE.112r.jump'. 3753 3754 `-dk' 3755 `-fdump-rtl-stack' 3756 Dump after conversion from registers to stack, to 3757 `FILE.152r.stack'. 3758 3759 `-dl' 3760 `-fdump-rtl-lreg' 3761 Dump after local register allocation, to `FILE.138r.lreg'. 3762 3763 `-dL' 3764 `-fdump-rtl-loop2' 3765 `-dL' and `-fdump-rtl-loop2' enable dumping after the loop 3766 optimization pass, to `FILE.119r.loop2', 3767 `FILE.120r.loop2_init', `FILE.121r.loop2_invariant', and 3768 `FILE.125r.loop2_done'. 3769 3770 `-dm' 3771 `-fdump-rtl-sms' 3772 Dump after modulo scheduling, to `FILE.136r.sms'. 3773 3774 `-dM' 3775 `-fdump-rtl-mach' 3776 Dump after performing the machine dependent reorganization 3777 pass, to `FILE.155r.mach'. 3778 3779 `-dn' 3780 `-fdump-rtl-rnreg' 3781 Dump after register renumbering, to `FILE.147r.rnreg'. 3782 3783 `-dN' 3784 `-fdump-rtl-regmove' 3785 Dump after the register move pass, to `FILE.132r.regmove'. 3786 3787 `-do' 3788 `-fdump-rtl-postreload' 3789 Dump after post-reload optimizations, to `FILE.24.postreload'. 3790 3791 `-dr' 3792 `-fdump-rtl-expand' 3793 Dump after RTL generation, to `FILE.104r.expand'. 3794 3795 `-dR' 3796 `-fdump-rtl-sched2' 3797 Dump after the second scheduling pass, to `FILE.150r.sched2'. 3798 3799 `-ds' 3800 `-fdump-rtl-cse' 3801 Dump after CSE (including the jump optimization that 3802 sometimes follows CSE), to `FILE.113r.cse'. 3803 3804 `-dS' 3805 `-fdump-rtl-sched' 3806 Dump after the first scheduling pass, to `FILE.21.sched'. 3807 3808 `-dt' 3809 `-fdump-rtl-cse2' 3810 Dump after the second CSE pass (including the jump 3811 optimization that sometimes follows CSE), to `FILE.127r.cse2'. 3812 3813 `-dT' 3814 `-fdump-rtl-tracer' 3815 Dump after running tracer, to `FILE.118r.tracer'. 3816 3817 `-dV' 3818 `-fdump-rtl-vpt' 3819 `-fdump-rtl-vartrack' 3820 `-dV' and `-fdump-rtl-vpt' enable dumping after the value 3821 profile transformations, to `FILE.10.vpt'. `-dV' and 3822 `-fdump-rtl-vartrack' enable dumping after variable tracking, 3823 to `FILE.154r.vartrack'. 3824 3825 `-dw' 3826 `-fdump-rtl-flow2' 3827 Dump after the second flow pass, to `FILE.142r.flow2'. 3828 3829 `-dz' 3830 `-fdump-rtl-peephole2' 3831 Dump after the peephole pass, to `FILE.145r.peephole2'. 3832 3833 `-dZ' 3834 `-fdump-rtl-web' 3835 Dump after live range splitting, to `FILE.126r.web'. 3836 3837 `-da' 3838 `-fdump-rtl-all' 3839 Produce all the dumps listed above. 3840 3841 `-dH' 3842 Produce a core dump whenever an error occurs. 3843 3844 `-dm' 3845 Print statistics on memory usage, at the end of the run, to 3846 standard error. 3847 3848 `-dp' 3849 Annotate the assembler output with a comment indicating which 3850 pattern and alternative was used. The length of each 3851 instruction is also printed. 3852 3853 `-dP' 3854 Dump the RTL in the assembler output as a comment before each 3855 instruction. Also turns on `-dp' annotation. 3856 3857 `-dv' 3858 For each of the other indicated dump files (either with `-d' 3859 or `-fdump-rtl-PASS'), dump a representation of the control 3860 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 3861 3862 `-dx' 3863 Just generate RTL for a function instead of compiling it. 3864 Usually used with `r' (`-fdump-rtl-expand'). 3865 3866 `-dy' 3867 Dump debugging information during parsing, to standard error. 3868 3869`-fdump-noaddr' 3870 When doing debugging dumps (see `-d' option above), suppress 3871 address output. This makes it more feasible to use diff on 3872 debugging dumps for compiler invocations with different compiler 3873 binaries and/or different text / bss / data / heap / stack / dso 3874 start locations. 3875 3876`-fdump-unnumbered' 3877 When doing debugging dumps (see `-d' option above), suppress 3878 instruction numbers, line number note and address output. This 3879 makes it more feasible to use diff on debugging dumps for compiler 3880 invocations with different options, in particular with and without 3881 `-g'. 3882 3883`-fdump-translation-unit (C++ only)' 3884`-fdump-translation-unit-OPTIONS (C++ only)' 3885 Dump a representation of the tree structure for the entire 3886 translation unit to a file. The file name is made by appending 3887 `.tu' to the source file name. If the `-OPTIONS' form is used, 3888 OPTIONS controls the details of the dump as described for the 3889 `-fdump-tree' options. 3890 3891`-fdump-class-hierarchy (C++ only)' 3892`-fdump-class-hierarchy-OPTIONS (C++ only)' 3893 Dump a representation of each class's hierarchy and virtual 3894 function table layout to a file. The file name is made by 3895 appending `.class' to the source file name. If the `-OPTIONS' 3896 form is used, OPTIONS controls the details of the dump as 3897 described for the `-fdump-tree' options. 3898 3899`-fdump-ipa-SWITCH' 3900 Control the dumping at various stages of inter-procedural analysis 3901 language tree to a file. The file name is generated by appending 3902 a switch specific suffix to the source file name. The following 3903 dumps are possible: 3904 3905 `all' 3906 Enables all inter-procedural analysis dumps; currently the 3907 only produced dump is the `cgraph' dump. 3908 3909 `cgraph' 3910 Dumps information about call-graph optimization, unused 3911 function removal, and inlining decisions. 3912 3913`-fdump-tree-SWITCH' 3914`-fdump-tree-SWITCH-OPTIONS' 3915 Control the dumping at various stages of processing the 3916 intermediate language tree to a file. The file name is generated 3917 by appending a switch specific suffix to the source file name. If 3918 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 3919 options that control the details of the dump. Not all options are 3920 applicable to all dumps, those which are not meaningful will be 3921 ignored. The following options are available 3922 3923 `address' 3924 Print the address of each node. Usually this is not 3925 meaningful as it changes according to the environment and 3926 source file. Its primary use is for tying up a dump file 3927 with a debug environment. 3928 3929 `slim' 3930 Inhibit dumping of members of a scope or body of a function 3931 merely because that scope has been reached. Only dump such 3932 items when they are directly reachable by some other path. 3933 When dumping pretty-printed trees, this option inhibits 3934 dumping the bodies of control structures. 3935 3936 `raw' 3937 Print a raw representation of the tree. By default, trees are 3938 pretty-printed into a C-like representation. 3939 3940 `details' 3941 Enable more detailed dumps (not honored by every dump option). 3942 3943 `stats' 3944 Enable dumping various statistics about the pass (not honored 3945 by every dump option). 3946 3947 `blocks' 3948 Enable showing basic block boundaries (disabled in raw dumps). 3949 3950 `vops' 3951 Enable showing virtual operands for every statement. 3952 3953 `lineno' 3954 Enable showing line numbers for statements. 3955 3956 `uid' 3957 Enable showing the unique ID (`DECL_UID') for each variable. 3958 3959 `all' 3960 Turn on all options, except `raw', `slim' and `lineno'. 3961 3962 The following tree dumps are possible: 3963 `original' 3964 Dump before any tree based optimization, to `FILE.original'. 3965 3966 `optimized' 3967 Dump after all tree based optimization, to `FILE.optimized'. 3968 3969 `inlined' 3970 Dump after function inlining, to `FILE.inlined'. 3971 3972 `gimple' 3973 Dump each function before and after the gimplification pass 3974 to a file. The file name is made by appending `.gimple' to 3975 the source file name. 3976 3977 `cfg' 3978 Dump the control flow graph of each function to a file. The 3979 file name is made by appending `.cfg' to the source file name. 3980 3981 `vcg' 3982 Dump the control flow graph of each function to a file in VCG 3983 format. The file name is made by appending `.vcg' to the 3984 source file name. Note that if the file contains more than 3985 one function, the generated file cannot be used directly by 3986 VCG. You will need to cut and paste each function's graph 3987 into its own separate file first. 3988 3989 `ch' 3990 Dump each function after copying loop headers. The file name 3991 is made by appending `.ch' to the source file name. 3992 3993 `ssa' 3994 Dump SSA related information to a file. The file name is 3995 made by appending `.ssa' to the source file name. 3996 3997 `salias' 3998 Dump structure aliasing variable information to a file. This 3999 file name is made by appending `.salias' to the source file 4000 name. 4001 4002 `alias' 4003 Dump aliasing information for each function. The file name 4004 is made by appending `.alias' to the source file name. 4005 4006 `ccp' 4007 Dump each function after CCP. The file name is made by 4008 appending `.ccp' to the source file name. 4009 4010 `storeccp' 4011 Dump each function after STORE-CCP. The file name is made by 4012 appending `.storeccp' to the source file name. 4013 4014 `pre' 4015 Dump trees after partial redundancy elimination. The file 4016 name is made by appending `.pre' to the source file name. 4017 4018 `fre' 4019 Dump trees after full redundancy elimination. The file name 4020 is made by appending `.fre' to the source file name. 4021 4022 `copyprop' 4023 Dump trees after copy propagation. The file name is made by 4024 appending `.copyprop' to the source file name. 4025 4026 `store_copyprop' 4027 Dump trees after store copy-propagation. The file name is 4028 made by appending `.store_copyprop' to the source file name. 4029 4030 `dce' 4031 Dump each function after dead code elimination. The file 4032 name is made by appending `.dce' to the source file name. 4033 4034 `mudflap' 4035 Dump each function after adding mudflap instrumentation. The 4036 file name is made by appending `.mudflap' to the source file 4037 name. 4038 4039 `sra' 4040 Dump each function after performing scalar replacement of 4041 aggregates. The file name is made by appending `.sra' to the 4042 source file name. 4043 4044 `sink' 4045 Dump each function after performing code sinking. The file 4046 name is made by appending `.sink' to the source file name. 4047 4048 `dom' 4049 Dump each function after applying dominator tree 4050 optimizations. The file name is made by appending `.dom' to 4051 the source file name. 4052 4053 `dse' 4054 Dump each function after applying dead store elimination. 4055 The file name is made by appending `.dse' to the source file 4056 name. 4057 4058 `phiopt' 4059 Dump each function after optimizing PHI nodes into 4060 straightline code. The file name is made by appending 4061 `.phiopt' to the source file name. 4062 4063 `forwprop' 4064 Dump each function after forward propagating single use 4065 variables. The file name is made by appending `.forwprop' to 4066 the source file name. 4067 4068 `copyrename' 4069 Dump each function after applying the copy rename 4070 optimization. The file name is made by appending 4071 `.copyrename' to the source file name. 4072 4073 `nrv' 4074 Dump each function after applying the named return value 4075 optimization on generic trees. The file name is made by 4076 appending `.nrv' to the source file name. 4077 4078 `vect' 4079 Dump each function after applying vectorization of loops. 4080 The file name is made by appending `.vect' to the source file 4081 name. 4082 4083 `vrp' 4084 Dump each function after Value Range Propagation (VRP). The 4085 file name is made by appending `.vrp' to the source file name. 4086 4087 `all' 4088 Enable all the available tree dumps with the flags provided 4089 in this option. 4090 4091`-ftree-vectorizer-verbose=N' 4092 This option controls the amount of debugging output the vectorizer 4093 prints. This information is written to standard error, unless 4094 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 4095 case it is output to the usual dump listing file, `.vect'. For 4096 N=0 no diagnostic information is reported. If N=1 the vectorizer 4097 reports each loop that got vectorized, and the total number of 4098 loops that got vectorized. If N=2 the vectorizer also reports 4099 non-vectorized loops that passed the first analysis phase 4100 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 4101 single-entry/exit loops. This is the same verbosity level that 4102 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 4103 either more information dumped for each reported loop, or same 4104 amount of information reported for more loops: If N=3, alignment 4105 related information is added to the reports. If N=4, 4106 data-references related information (e.g. memory dependences, 4107 memory access-patterns) is added to the reports. If N=5, the 4108 vectorizer reports also non-vectorized inner-most loops that did 4109 not pass the first analysis phase (i.e. may not be countable, or 4110 may have complicated control-flow). If N=6, the vectorizer 4111 reports also non-vectorized nested loops. For N=7, all the 4112 information the vectorizer generates during its analysis and 4113 transformation is reported. This is the same verbosity level that 4114 `-fdump-tree-vect-details' uses. 4115 4116`-frandom-seed=STRING' 4117 This option provides a seed that GCC uses when it would otherwise 4118 use random numbers. It is used to generate certain symbol names 4119 that have to be different in every compiled file. It is also used 4120 to place unique stamps in coverage data files and the object files 4121 that produce them. You can use the `-frandom-seed' option to 4122 produce reproducibly identical object files. 4123 4124 The STRING should be different for every file you compile. 4125 4126`-fsched-verbose=N' 4127 On targets that use instruction scheduling, this option controls 4128 the amount of debugging output the scheduler prints. This 4129 information is written to standard error, unless `-dS' or `-dR' is 4130 specified, in which case it is output to the usual dump listing 4131 file, `.sched' or `.sched2' respectively. However for N greater 4132 than nine, the output is always printed to standard error. 4133 4134 For N greater than zero, `-fsched-verbose' outputs the same 4135 information as `-dRS'. For N greater than one, it also output 4136 basic block probabilities, detailed ready list information and 4137 unit/insn info. For N greater than two, it includes RTL at abort 4138 point, control-flow and regions info. And for N over four, 4139 `-fsched-verbose' also includes dependence info. 4140 4141`-save-temps' 4142 Store the usual "temporary" intermediate files permanently; place 4143 them in the current directory and name them based on the source 4144 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 4145 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 4146 preprocessed `foo.i' output file even though the compiler now 4147 normally uses an integrated preprocessor. 4148 4149 When used in combination with the `-x' command line option, 4150 `-save-temps' is sensible enough to avoid over writing an input 4151 source file with the same extension as an intermediate file. The 4152 corresponding intermediate file may be obtained by renaming the 4153 source file before using `-save-temps'. 4154 4155`-time' 4156 Report the CPU time taken by each subprocess in the compilation 4157 sequence. For C source files, this is the compiler proper and 4158 assembler (plus the linker if linking is done). The output looks 4159 like this: 4160 4161 # cc1 0.12 0.01 4162 # as 0.00 0.01 4163 4164 The first number on each line is the "user time", that is time 4165 spent executing the program itself. The second number is "system 4166 time", time spent executing operating system routines on behalf of 4167 the program. Both numbers are in seconds. 4168 4169`-fvar-tracking' 4170 Run variable tracking pass. It computes where variables are 4171 stored at each position in code. Better debugging information is 4172 then generated (if the debugging information format supports this 4173 information). 4174 4175 It is enabled by default when compiling with optimization (`-Os', 4176 `-O', `-O2', ...), debugging information (`-g') and the debug info 4177 format supports it. 4178 4179`-print-file-name=LIBRARY' 4180 Print the full absolute name of the library file LIBRARY that 4181 would be used when linking--and don't do anything else. With this 4182 option, GCC does not compile or link anything; it just prints the 4183 file name. 4184 4185`-print-multi-directory' 4186 Print the directory name corresponding to the multilib selected by 4187 any other switches present in the command line. This directory is 4188 supposed to exist in `GCC_EXEC_PREFIX'. 4189 4190`-print-multi-lib' 4191 Print the mapping from multilib directory names to compiler 4192 switches that enable them. The directory name is separated from 4193 the switches by `;', and each switch starts with an `@' instead of 4194 the `-', without spaces between multiple switches. This is 4195 supposed to ease shell-processing. 4196 4197`-print-prog-name=PROGRAM' 4198 Like `-print-file-name', but searches for a program such as `cpp'. 4199 4200`-print-libgcc-file-name' 4201 Same as `-print-file-name=libgcc.a'. 4202 4203 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 4204 you do want to link with `libgcc.a'. You can do 4205 4206 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 4207 4208`-print-search-dirs' 4209 Print the name of the configured installation directory and a list 4210 of program and library directories `gcc' will search--and don't do 4211 anything else. 4212 4213 This is useful when `gcc' prints the error message `installation 4214 problem, cannot exec cpp0: No such file or directory'. To resolve 4215 this you either need to put `cpp0' and the other compiler 4216 components where `gcc' expects to find them, or you can set the 4217 environment variable `GCC_EXEC_PREFIX' to the directory where you 4218 installed them. Don't forget the trailing `/'. *Note Environment 4219 Variables::. 4220 4221`-dumpmachine' 4222 Print the compiler's target machine (for example, 4223 `i686-pc-linux-gnu')--and don't do anything else. 4224 4225`-dumpversion' 4226 Print the compiler version (for example, `3.0')--and don't do 4227 anything else. 4228 4229`-dumpspecs' 4230 Print the compiler's built-in specs--and don't do anything else. 4231 (This is used when GCC itself is being built.) *Note Spec Files::. 4232 4233`-feliminate-unused-debug-types' 4234 Normally, when producing DWARF2 output, GCC will emit debugging 4235 information for all types declared in a compilation unit, 4236 regardless of whether or not they are actually used in that 4237 compilation unit. Sometimes this is useful, such as if, in the 4238 debugger, you want to cast a value to a type that is not actually 4239 used in your program (but is declared). More often, however, this 4240 results in a significant amount of wasted space. With this 4241 option, GCC will avoid producing debug symbol output for types 4242 that are nowhere used in the source file being compiled. 4243 4244 4245File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 4246 42473.10 Options That Control Optimization 4248====================================== 4249 4250These options control various sorts of optimizations. 4251 4252 Without any optimization option, the compiler's goal is to reduce the 4253cost of compilation and to make debugging produce the expected results. 4254Statements are independent: if you stop the program with a breakpoint 4255between statements, you can then assign a new value to any variable or 4256change the program counter to any other statement in the function and 4257get exactly the results you would expect from the source code. 4258 4259 Turning on optimization flags makes the compiler attempt to improve 4260the performance and/or code size at the expense of compilation time and 4261possibly the ability to debug the program. 4262 4263 The compiler performs optimization based on the knowledge it has of 4264the program. Optimization levels `-O' and above, in particular, enable 4265_unit-at-a-time_ mode, which allows the compiler to consider 4266information gained from later functions in the file when compiling a 4267function. Compiling multiple files at once to a single output file in 4268_unit-at-a-time_ mode allows the compiler to use information gained 4269from all of the files when compiling each of them. 4270 4271 Not all optimizations are controlled directly by a flag. Only 4272optimizations that have a flag are listed. 4273 4274`-O' 4275`-O1' 4276 Optimize. Optimizing compilation takes somewhat more time, and a 4277 lot more memory for a large function. 4278 4279 With `-O', the compiler tries to reduce code size and execution 4280 time, without performing any optimizations that take a great deal 4281 of compilation time. 4282 4283 `-O' turns on the following optimization flags: 4284 -fdefer-pop 4285 -fdelayed-branch 4286 -fguess-branch-probability 4287 -fcprop-registers 4288 -fif-conversion 4289 -fif-conversion2 4290 -ftree-ccp 4291 -ftree-dce 4292 -ftree-dominator-opts 4293 -ftree-dse 4294 -ftree-ter 4295 -ftree-lrs 4296 -ftree-sra 4297 -ftree-copyrename 4298 -ftree-fre 4299 -ftree-ch 4300 -funit-at-a-time 4301 -fmerge-constants 4302 4303 `-O' also turns on `-fomit-frame-pointer' on machines where doing 4304 so does not interfere with debugging. 4305 4306`-O2' 4307 Optimize even more. GCC performs nearly all supported 4308 optimizations that do not involve a space-speed tradeoff. The 4309 compiler does not perform loop unrolling or function inlining when 4310 you specify `-O2'. As compared to `-O', this option increases 4311 both compilation time and the performance of the generated code. 4312 4313 `-O2' turns on all optimization flags specified by `-O'. It also 4314 turns on the following optimization flags: 4315 -fthread-jumps 4316 -fcrossjumping 4317 -foptimize-sibling-calls 4318 -fcse-follow-jumps -fcse-skip-blocks 4319 -fgcse -fgcse-lm 4320 -fexpensive-optimizations 4321 -frerun-cse-after-loop 4322 -fcaller-saves 4323 -fpeephole2 4324 -fschedule-insns -fschedule-insns2 4325 -fsched-interblock -fsched-spec 4326 -fregmove 4327 -fstrict-aliasing -fstrict-overflow 4328 -fdelete-null-pointer-checks 4329 -freorder-blocks -freorder-functions 4330 -falign-functions -falign-jumps 4331 -falign-loops -falign-labels 4332 -ftree-vrp 4333 -ftree-pre 4334 4335 Please note the warning under `-fgcse' about invoking `-O2' on 4336 programs that use computed gotos. 4337 4338 `-O2' doesn't turn on `-ftree-vrp' for the Ada compiler. This 4339 option must be explicitly specified on the command line to be 4340 enabled for the Ada compiler. 4341 4342`-O3' 4343 Optimize yet more. `-O3' turns on all optimizations specified by 4344 `-O2' and also turns on the `-finline-functions', 4345 `-funswitch-loops' and `-fgcse-after-reload' options. 4346 4347`-O0' 4348 Do not optimize. This is the default. 4349 4350`-Os' 4351 Optimize for size. `-Os' enables all `-O2' optimizations that do 4352 not typically increase code size. It also performs further 4353 optimizations designed to reduce code size. 4354 4355 `-Os' disables the following optimization flags: 4356 -falign-functions -falign-jumps -falign-loops 4357 -falign-labels -freorder-blocks -freorder-blocks-and-partition 4358 -fprefetch-loop-arrays -ftree-vect-loop-version 4359 4360 If you use multiple `-O' options, with or without level numbers, 4361 the last such option is the one that is effective. 4362 4363 Options of the form `-fFLAG' specify machine-independent flags. Most 4364flags have both positive and negative forms; the negative form of 4365`-ffoo' would be `-fno-foo'. In the table below, only one of the forms 4366is listed--the one you typically will use. You can figure out the 4367other form by either removing `no-' or adding it. 4368 4369 The following options control specific optimizations. They are either 4370activated by `-O' options or are related to ones that are. You can use 4371the following flags in the rare cases when "fine-tuning" of 4372optimizations to be performed is desired. 4373 4374`-fno-default-inline' 4375 Do not make member functions inline by default merely because they 4376 are defined inside the class scope (C++ only). Otherwise, when 4377 you specify `-O', member functions defined inside class scope are 4378 compiled inline by default; i.e., you don't need to add `inline' 4379 in front of the member function name. 4380 4381`-fno-defer-pop' 4382 Always pop the arguments to each function call as soon as that 4383 function returns. For machines which must pop arguments after a 4384 function call, the compiler normally lets arguments accumulate on 4385 the stack for several function calls and pops them all at once. 4386 4387 Disabled at levels `-O', `-O2', `-O3', `-Os'. 4388 4389`-fforce-mem' 4390 Force memory operands to be copied into registers before doing 4391 arithmetic on them. This produces better code by making all memory 4392 references potential common subexpressions. When they are not 4393 common subexpressions, instruction combination should eliminate 4394 the separate register-load. This option is now a nop and will be 4395 removed in 4.3. 4396 4397`-fforce-addr' 4398 Force memory address constants to be copied into registers before 4399 doing arithmetic on them. 4400 4401`-fomit-frame-pointer' 4402 Don't keep the frame pointer in a register for functions that 4403 don't need one. This avoids the instructions to save, set up and 4404 restore frame pointers; it also makes an extra register available 4405 in many functions. *It also makes debugging impossible on some 4406 machines.* 4407 4408 On some machines, such as the VAX, this flag has no effect, because 4409 the standard calling sequence automatically handles the frame 4410 pointer and nothing is saved by pretending it doesn't exist. The 4411 machine-description macro `FRAME_POINTER_REQUIRED' controls 4412 whether a target machine supports this flag. *Note Register 4413 Usage: (gccint)Registers. 4414 4415 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4416 4417`-foptimize-sibling-calls' 4418 Optimize sibling and tail recursive calls. 4419 4420 Enabled at levels `-O2', `-O3', `-Os'. 4421 4422`-fno-inline' 4423 Don't pay attention to the `inline' keyword. Normally this option 4424 is used to keep the compiler from expanding any functions inline. 4425 Note that if you are not optimizing, no functions can be expanded 4426 inline. 4427 4428`-finline-functions' 4429 Integrate all simple functions into their callers. The compiler 4430 heuristically decides which functions are simple enough to be worth 4431 integrating in this way. 4432 4433 If all calls to a given function are integrated, and the function 4434 is declared `static', then the function is normally not output as 4435 assembler code in its own right. 4436 4437 Enabled at level `-O3'. 4438 4439`-finline-functions-called-once' 4440 Consider all `static' functions called once for inlining into their 4441 caller even if they are not marked `inline'. If a call to a given 4442 function is integrated, then the function is not output as 4443 assembler code in its own right. 4444 4445 Enabled if `-funit-at-a-time' is enabled. 4446 4447`-fearly-inlining' 4448 Inline functions marked by `always_inline' and functions whose 4449 body seems smaller than the function call overhead early before 4450 doing `-fprofile-generate' instrumentation and real inlining pass. 4451 Doing so makes profiling significantly cheaper and usually 4452 inlining faster on programs having large chains of nested wrapper 4453 functions. 4454 4455 Enabled by default. 4456 4457`-finline-limit=N' 4458 By default, GCC limits the size of functions that can be inlined. 4459 This flag allows the control of this limit for functions that are 4460 explicitly marked as inline (i.e., marked with the inline keyword 4461 or defined within the class definition in c++). N is the size of 4462 functions that can be inlined in number of pseudo instructions 4463 (not counting parameter handling). The default value of N is 600. 4464 Increasing this value can result in more inlined code at the cost 4465 of compilation time and memory consumption. Decreasing usually 4466 makes the compilation faster and less code will be inlined (which 4467 presumably means slower programs). This option is particularly 4468 useful for programs that use inlining heavily such as those based 4469 on recursive templates with C++. 4470 4471 Inlining is actually controlled by a number of parameters, which 4472 may be specified individually by using `--param NAME=VALUE'. The 4473 `-finline-limit=N' option sets some of these parameters as follows: 4474 4475 `max-inline-insns-single' 4476 is set to N/2. 4477 4478 `max-inline-insns-auto' 4479 is set to N/2. 4480 4481 `min-inline-insns' 4482 is set to 130 or N/4, whichever is smaller. 4483 4484 `max-inline-insns-rtl' 4485 is set to N. 4486 4487 See below for a documentation of the individual parameters 4488 controlling inlining. 4489 4490 _Note:_ pseudo instruction represents, in this particular context, 4491 an abstract measurement of function's size. In no way does it 4492 represent a count of assembly instructions and as such its exact 4493 meaning might change from one release to an another. 4494 4495`-fkeep-inline-functions' 4496 In C, emit `static' functions that are declared `inline' into the 4497 object file, even if the function has been inlined into all of its 4498 callers. This switch does not affect functions using the `extern 4499 inline' extension in GNU C. In C++, emit any and all inline 4500 functions into the object file. 4501 4502`-fkeep-static-consts' 4503 Emit variables declared `static const' when optimization isn't 4504 turned on, even if the variables aren't referenced. 4505 4506 GCC enables this option by default. If you want to force the 4507 compiler to check if the variable was referenced, regardless of 4508 whether or not optimization is turned on, use the 4509 `-fno-keep-static-consts' option. 4510 4511`-fmerge-constants' 4512 Attempt to merge identical constants (string constants and 4513 floating point constants) across compilation units. 4514 4515 This option is the default for optimized compilation if the 4516 assembler and linker support it. Use `-fno-merge-constants' to 4517 inhibit this behavior. 4518 4519 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4520 4521`-fmerge-all-constants' 4522 Attempt to merge identical constants and identical variables. 4523 4524 This option implies `-fmerge-constants'. In addition to 4525 `-fmerge-constants' this considers e.g. even constant initialized 4526 arrays or initialized constant variables with integral or floating 4527 point types. Languages like C or C++ require each non-automatic 4528 variable to have distinct location, so using this option will 4529 result in non-conforming behavior. 4530 4531`-fmodulo-sched' 4532 Perform swing modulo scheduling immediately before the first 4533 scheduling pass. This pass looks at innermost loops and reorders 4534 their instructions by overlapping different iterations. 4535 4536`-fno-branch-count-reg' 4537 Do not use "decrement and branch" instructions on a count register, 4538 but instead generate a sequence of instructions that decrement a 4539 register, compare it against zero, then branch based upon the 4540 result. This option is only meaningful on architectures that 4541 support such instructions, which include x86, PowerPC, IA-64 and 4542 S/390. 4543 4544 The default is `-fbranch-count-reg'. 4545 4546`-fno-function-cse' 4547 Do not put function addresses in registers; make each instruction 4548 that calls a constant function contain the function's address 4549 explicitly. 4550 4551 This option results in less efficient code, but some strange hacks 4552 that alter the assembler output may be confused by the 4553 optimizations performed when this option is not used. 4554 4555 The default is `-ffunction-cse' 4556 4557`-fno-zero-initialized-in-bss' 4558 If the target supports a BSS section, GCC by default puts 4559 variables that are initialized to zero into BSS. This can save 4560 space in the resulting code. 4561 4562 This option turns off this behavior because some programs 4563 explicitly rely on variables going to the data section. E.g., so 4564 that the resulting executable can find the beginning of that 4565 section and/or make assumptions based on that. 4566 4567 The default is `-fzero-initialized-in-bss'. 4568 4569`-fbounds-check' 4570 For front-ends that support it, generate additional code to check 4571 that indices used to access arrays are within the declared range. 4572 This is currently only supported by the Java and Fortran 4573 front-ends, where this option defaults to true and false 4574 respectively. 4575 4576`-fmudflap -fmudflapth -fmudflapir' 4577 For front-ends that support it (C and C++), instrument all risky 4578 pointer/array dereferencing operations, some standard library 4579 string/heap functions, and some other associated constructs with 4580 range/validity tests. Modules so instrumented should be immune to 4581 buffer overflows, invalid heap use, and some other classes of C/C++ 4582 programming errors. The instrumentation relies on a separate 4583 runtime library (`libmudflap'), which will be linked into a 4584 program if `-fmudflap' is given at link time. Run-time behavior 4585 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 4586 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 4587 its options. 4588 4589 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 4590 your program is multi-threaded. Use `-fmudflapir', in addition to 4591 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 4592 pointer reads. This produces less instrumentation (and therefore 4593 faster execution) and still provides some protection against 4594 outright memory corrupting writes, but allows erroneously read 4595 data to propagate within a program. 4596 4597`-fthread-jumps' 4598 Perform optimizations where we check to see if a jump branches to a 4599 location where another comparison subsumed by the first is found. 4600 If so, the first branch is redirected to either the destination of 4601 the second branch or a point immediately following it, depending 4602 on whether the condition is known to be true or false. 4603 4604 Enabled at levels `-O2', `-O3', `-Os'. 4605 4606`-fcse-follow-jumps' 4607 In common subexpression elimination, scan through jump instructions 4608 when the target of the jump is not reached by any other path. For 4609 example, when CSE encounters an `if' statement with an `else' 4610 clause, CSE will follow the jump when the condition tested is 4611 false. 4612 4613 Enabled at levels `-O2', `-O3', `-Os'. 4614 4615`-fcse-skip-blocks' 4616 This is similar to `-fcse-follow-jumps', but causes CSE to follow 4617 jumps which conditionally skip over blocks. When CSE encounters a 4618 simple `if' statement with no else clause, `-fcse-skip-blocks' 4619 causes CSE to follow the jump around the body of the `if'. 4620 4621 Enabled at levels `-O2', `-O3', `-Os'. 4622 4623`-frerun-cse-after-loop' 4624 Re-run common subexpression elimination after loop optimizations 4625 has been performed. 4626 4627 Enabled at levels `-O2', `-O3', `-Os'. 4628 4629`-fgcse' 4630 Perform a global common subexpression elimination pass. This pass 4631 also performs global constant and copy propagation. 4632 4633 _Note:_ When compiling a program using computed gotos, a GCC 4634 extension, you may get better runtime performance if you disable 4635 the global common subexpression elimination pass by adding 4636 `-fno-gcse' to the command line. 4637 4638 Enabled at levels `-O2', `-O3', `-Os'. 4639 4640`-fgcse-lm' 4641 When `-fgcse-lm' is enabled, global common subexpression 4642 elimination will attempt to move loads which are only killed by 4643 stores into themselves. This allows a loop containing a 4644 load/store sequence to be changed to a load outside the loop, and 4645 a copy/store within the loop. 4646 4647 Enabled by default when gcse is enabled. 4648 4649`-fgcse-sm' 4650 When `-fgcse-sm' is enabled, a store motion pass is run after 4651 global common subexpression elimination. This pass will attempt 4652 to move stores out of loops. When used in conjunction with 4653 `-fgcse-lm', loops containing a load/store sequence can be changed 4654 to a load before the loop and a store after the loop. 4655 4656 Not enabled at any optimization level. 4657 4658`-fgcse-las' 4659 When `-fgcse-las' is enabled, the global common subexpression 4660 elimination pass eliminates redundant loads that come after stores 4661 to the same memory location (both partial and full redundancies). 4662 4663 Not enabled at any optimization level. 4664 4665`-fgcse-after-reload' 4666 When `-fgcse-after-reload' is enabled, a redundant load elimination 4667 pass is performed after reload. The purpose of this pass is to 4668 cleanup redundant spilling. 4669 4670`-funsafe-loop-optimizations' 4671 If given, the loop optimizer will assume that loop indices do not 4672 overflow, and that the loops with nontrivial exit condition are not 4673 infinite. This enables a wider range of loop optimizations even if 4674 the loop optimizer itself cannot prove that these assumptions are 4675 valid. Using `-Wunsafe-loop-optimizations', the compiler will 4676 warn you if it finds this kind of loop. 4677 4678`-fcrossjumping' 4679 Perform cross-jumping transformation. This transformation unifies 4680 equivalent code and save code size. The resulting code may or may 4681 not perform better than without cross-jumping. 4682 4683 Enabled at levels `-O2', `-O3', `-Os'. 4684 4685`-fif-conversion' 4686 Attempt to transform conditional jumps into branch-less 4687 equivalents. This include use of conditional moves, min, max, set 4688 flags and abs instructions, and some tricks doable by standard 4689 arithmetics. The use of conditional execution on chips where it 4690 is available is controlled by `if-conversion2'. 4691 4692 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4693 4694`-fif-conversion2' 4695 Use conditional execution (where available) to transform 4696 conditional jumps into branch-less equivalents. 4697 4698 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4699 4700`-fdelete-null-pointer-checks' 4701 Use global dataflow analysis to identify and eliminate useless 4702 checks for null pointers. The compiler assumes that dereferencing 4703 a null pointer would have halted the program. If a pointer is 4704 checked after it has already been dereferenced, it cannot be null. 4705 4706 In some environments, this assumption is not true, and programs can 4707 safely dereference null pointers. Use 4708 `-fno-delete-null-pointer-checks' to disable this optimization for 4709 programs which depend on that behavior. 4710 4711 Enabled at levels `-O2', `-O3', `-Os'. 4712 4713`-fexpensive-optimizations' 4714 Perform a number of minor optimizations that are relatively 4715 expensive. 4716 4717 Enabled at levels `-O2', `-O3', `-Os'. 4718 4719`-foptimize-register-move' 4720`-fregmove' 4721 Attempt to reassign register numbers in move instructions and as 4722 operands of other simple instructions in order to maximize the 4723 amount of register tying. This is especially helpful on machines 4724 with two-operand instructions. 4725 4726 Note `-fregmove' and `-foptimize-register-move' are the same 4727 optimization. 4728 4729 Enabled at levels `-O2', `-O3', `-Os'. 4730 4731`-fdelayed-branch' 4732 If supported for the target machine, attempt to reorder 4733 instructions to exploit instruction slots available after delayed 4734 branch instructions. 4735 4736 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4737 4738`-fschedule-insns' 4739 If supported for the target machine, attempt to reorder 4740 instructions to eliminate execution stalls due to required data 4741 being unavailable. This helps machines that have slow floating 4742 point or memory load instructions by allowing other instructions 4743 to be issued until the result of the load or floating point 4744 instruction is required. 4745 4746 Enabled at levels `-O2', `-O3', `-Os'. 4747 4748`-fschedule-insns2' 4749 Similar to `-fschedule-insns', but requests an additional pass of 4750 instruction scheduling after register allocation has been done. 4751 This is especially useful on machines with a relatively small 4752 number of registers and where memory load instructions take more 4753 than one cycle. 4754 4755 Enabled at levels `-O2', `-O3', `-Os'. 4756 4757`-fno-sched-interblock' 4758 Don't schedule instructions across basic blocks. This is normally 4759 enabled by default when scheduling before register allocation, i.e. 4760 with `-fschedule-insns' or at `-O2' or higher. 4761 4762`-fno-sched-spec' 4763 Don't allow speculative motion of non-load instructions. This is 4764 normally enabled by default when scheduling before register 4765 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 4766 4767`-fsched-spec-load' 4768 Allow speculative motion of some load instructions. This only 4769 makes sense when scheduling before register allocation, i.e. with 4770 `-fschedule-insns' or at `-O2' or higher. 4771 4772`-fsched-spec-load-dangerous' 4773 Allow speculative motion of more load instructions. This only 4774 makes sense when scheduling before register allocation, i.e. with 4775 `-fschedule-insns' or at `-O2' or higher. 4776 4777`-fsched-stalled-insns=N' 4778 Define how many insns (if any) can be moved prematurely from the 4779 queue of stalled insns into the ready list, during the second 4780 scheduling pass. 4781 4782`-fsched-stalled-insns-dep=N' 4783 Define how many insn groups (cycles) will be examined for a 4784 dependency on a stalled insn that is candidate for premature 4785 removal from the queue of stalled insns. Has an effect only 4786 during the second scheduling pass, and only if 4787 `-fsched-stalled-insns' is used and its value is not zero. 4788 4789`-fsched2-use-superblocks' 4790 When scheduling after register allocation, do use superblock 4791 scheduling algorithm. Superblock scheduling allows motion across 4792 basic block boundaries resulting on faster schedules. This option 4793 is experimental, as not all machine descriptions used by GCC model 4794 the CPU closely enough to avoid unreliable results from the 4795 algorithm. 4796 4797 This only makes sense when scheduling after register allocation, 4798 i.e. with `-fschedule-insns2' or at `-O2' or higher. 4799 4800`-fsched2-use-traces' 4801 Use `-fsched2-use-superblocks' algorithm when scheduling after 4802 register allocation and additionally perform code duplication in 4803 order to increase the size of superblocks using tracer pass. See 4804 `-ftracer' for details on trace formation. 4805 4806 This mode should produce faster but significantly longer programs. 4807 Also without `-fbranch-probabilities' the traces constructed may 4808 not match the reality and hurt the performance. This only makes 4809 sense when scheduling after register allocation, i.e. with 4810 `-fschedule-insns2' or at `-O2' or higher. 4811 4812`-fsee' 4813 Eliminates redundant extension instructions and move the non 4814 redundant ones to optimal placement using LCM. 4815 4816`-freschedule-modulo-scheduled-loops' 4817 The modulo scheduling comes before the traditional scheduling, if 4818 a loop was modulo scheduled we may want to prevent the later 4819 scheduling passes from changing its schedule, we use this option 4820 to control that. 4821 4822`-fcaller-saves' 4823 Enable values to be allocated in registers that will be clobbered 4824 by function calls, by emitting extra instructions to save and 4825 restore the registers around such calls. Such allocation is done 4826 only when it seems to result in better code than would otherwise 4827 be produced. 4828 4829 This option is always enabled by default on certain machines, 4830 usually those which have no call-preserved registers to use 4831 instead. 4832 4833 Enabled at levels `-O2', `-O3', `-Os'. 4834 4835`-ftree-pre' 4836 Perform Partial Redundancy Elimination (PRE) on trees. This flag 4837 is enabled by default at `-O2' and `-O3'. 4838 4839`-ftree-fre' 4840 Perform Full Redundancy Elimination (FRE) on trees. The difference 4841 between FRE and PRE is that FRE only considers expressions that 4842 are computed on all paths leading to the redundant computation. 4843 This analysis faster than PRE, though it exposes fewer 4844 redundancies. This flag is enabled by default at `-O' and higher. 4845 4846`-ftree-copy-prop' 4847 Perform copy propagation on trees. This pass eliminates 4848 unnecessary copy operations. This flag is enabled by default at 4849 `-O' and higher. 4850 4851`-ftree-store-copy-prop' 4852 Perform copy propagation of memory loads and stores. This pass 4853 eliminates unnecessary copy operations in memory references 4854 (structures, global variables, arrays, etc). This flag is enabled 4855 by default at `-O2' and higher. 4856 4857`-ftree-salias' 4858 Perform structural alias analysis on trees. This flag is enabled 4859 by default at `-O' and higher. 4860 4861`-fipa-pta' 4862 Perform interprocedural pointer analysis. 4863 4864`-ftree-sink' 4865 Perform forward store motion on trees. This flag is enabled by 4866 default at `-O' and higher. 4867 4868`-ftree-ccp' 4869 Perform sparse conditional constant propagation (CCP) on trees. 4870 This pass only operates on local scalar variables and is enabled 4871 by default at `-O' and higher. 4872 4873`-ftree-store-ccp' 4874 Perform sparse conditional constant propagation (CCP) on trees. 4875 This pass operates on both local scalar variables and memory 4876 stores and loads (global variables, structures, arrays, etc). 4877 This flag is enabled by default at `-O2' and higher. 4878 4879`-ftree-dce' 4880 Perform dead code elimination (DCE) on trees. This flag is 4881 enabled by default at `-O' and higher. 4882 4883`-ftree-dominator-opts' 4884 Perform a variety of simple scalar cleanups (constant/copy 4885 propagation, redundancy elimination, range propagation and 4886 expression simplification) based on a dominator tree traversal. 4887 This also performs jump threading (to reduce jumps to jumps). This 4888 flag is enabled by default at `-O' and higher. 4889 4890`-ftree-ch' 4891 Perform loop header copying on trees. This is beneficial since it 4892 increases effectiveness of code motion optimizations. It also 4893 saves one jump. This flag is enabled by default at `-O' and 4894 higher. It is not enabled for `-Os', since it usually increases 4895 code size. 4896 4897`-ftree-loop-optimize' 4898 Perform loop optimizations on trees. This flag is enabled by 4899 default at `-O' and higher. 4900 4901`-ftree-loop-linear' 4902 Perform linear loop transformations on tree. This flag can 4903 improve cache performance and allow further loop optimizations to 4904 take place. 4905 4906`-ftree-loop-im' 4907 Perform loop invariant motion on trees. This pass moves only 4908 invariants that would be hard to handle at RTL level (function 4909 calls, operations that expand to nontrivial sequences of insns). 4910 With `-funswitch-loops' it also moves operands of conditions that 4911 are invariant out of the loop, so that we can use just trivial 4912 invariantness analysis in loop unswitching. The pass also includes 4913 store motion. 4914 4915`-ftree-loop-ivcanon' 4916 Create a canonical counter for number of iterations in the loop 4917 for that determining number of iterations requires complicated 4918 analysis. Later optimizations then may determine the number 4919 easily. Useful especially in connection with unrolling. 4920 4921`-fivopts' 4922 Perform induction variable optimizations (strength reduction, 4923 induction variable merging and induction variable elimination) on 4924 trees. 4925 4926`-ftree-sra' 4927 Perform scalar replacement of aggregates. This pass replaces 4928 structure references with scalars to prevent committing structures 4929 to memory too early. This flag is enabled by default at `-O' and 4930 higher. 4931 4932`-ftree-copyrename' 4933 Perform copy renaming on trees. This pass attempts to rename 4934 compiler temporaries to other variables at copy locations, usually 4935 resulting in variable names which more closely resemble the 4936 original variables. This flag is enabled by default at `-O' and 4937 higher. 4938 4939`-ftree-ter' 4940 Perform temporary expression replacement during the SSA->normal 4941 phase. Single use/single def temporaries are replaced at their 4942 use location with their defining expression. This results in 4943 non-GIMPLE code, but gives the expanders much more complex trees 4944 to work on resulting in better RTL generation. This is enabled by 4945 default at `-O' and higher. 4946 4947`-ftree-lrs' 4948 Perform live range splitting during the SSA->normal phase. 4949 Distinct live ranges of a variable are split into unique 4950 variables, allowing for better optimization later. This is 4951 enabled by default at `-O' and higher. 4952 4953`-ftree-vectorize' 4954 Perform loop vectorization on trees. 4955 4956`-ftree-vect-loop-version' 4957 Perform loop versioning when doing loop vectorization on trees. 4958 When a loop appears to be vectorizable except that data alignment 4959 or data dependence cannot be determined at compile time then 4960 vectorized and non-vectorized versions of the loop are generated 4961 along with runtime checks for alignment or dependence to control 4962 which version is executed. This option is enabled by default 4963 except at level `-Os' where it is disabled. 4964 4965`-ftree-vrp' 4966 Perform Value Range Propagation on trees. This is similar to the 4967 constant propagation pass, but instead of values, ranges of values 4968 are propagated. This allows the optimizers to remove unnecessary 4969 range checks like array bound checks and null pointer checks. 4970 This is enabled by default at `-O2' and higher. Null pointer check 4971 elimination is only done if `-fdelete-null-pointer-checks' is 4972 enabled. 4973 4974`-ftracer' 4975 Perform tail duplication to enlarge superblock size. This 4976 transformation simplifies the control flow of the function 4977 allowing other optimizations to do better job. 4978 4979`-funroll-loops' 4980 Unroll loops whose number of iterations can be determined at 4981 compile time or upon entry to the loop. `-funroll-loops' implies 4982 `-frerun-cse-after-loop'. This option makes code larger, and may 4983 or may not make it run faster. 4984 4985`-funroll-all-loops' 4986 Unroll all loops, even if their number of iterations is uncertain 4987 when the loop is entered. This usually makes programs run more 4988 slowly. `-funroll-all-loops' implies the same options as 4989 `-funroll-loops', 4990 4991`-fsplit-ivs-in-unroller' 4992 Enables expressing of values of induction variables in later 4993 iterations of the unrolled loop using the value in the first 4994 iteration. This breaks long dependency chains, thus improving 4995 efficiency of the scheduling passes. 4996 4997 Combination of `-fweb' and CSE is often sufficient to obtain the 4998 same effect. However in cases the loop body is more complicated 4999 than a single basic block, this is not reliable. It also does not 5000 work at all on some of the architectures due to restrictions in 5001 the CSE pass. 5002 5003 This optimization is enabled by default. 5004 5005`-fvariable-expansion-in-unroller' 5006 With this option, the compiler will create multiple copies of some 5007 local variables when unrolling a loop which can result in superior 5008 code. 5009 5010`-fprefetch-loop-arrays' 5011 If supported by the target machine, generate instructions to 5012 prefetch memory to improve the performance of loops that access 5013 large arrays. 5014 5015 This option may generate better or worse code; results are highly 5016 dependent on the structure of loops within the source code. 5017 5018 Disabled at level `-Os'. 5019 5020`-fno-peephole' 5021`-fno-peephole2' 5022 Disable any machine-specific peephole optimizations. The 5023 difference between `-fno-peephole' and `-fno-peephole2' is in how 5024 they are implemented in the compiler; some targets use one, some 5025 use the other, a few use both. 5026 5027 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 5028 levels `-O2', `-O3', `-Os'. 5029 5030`-fno-guess-branch-probability' 5031 Do not guess branch probabilities using heuristics. 5032 5033 GCC will use heuristics to guess branch probabilities if they are 5034 not provided by profiling feedback (`-fprofile-arcs'). These 5035 heuristics are based on the control flow graph. If some branch 5036 probabilities are specified by `__builtin_expect', then the 5037 heuristics will be used to guess branch probabilities for the rest 5038 of the control flow graph, taking the `__builtin_expect' info into 5039 account. The interactions between the heuristics and 5040 `__builtin_expect' can be complex, and in some cases, it may be 5041 useful to disable the heuristics so that the effects of 5042 `__builtin_expect' are easier to understand. 5043 5044 The default is `-fguess-branch-probability' at levels `-O', `-O2', 5045 `-O3', `-Os'. 5046 5047`-freorder-blocks' 5048 Reorder basic blocks in the compiled function in order to reduce 5049 number of taken branches and improve code locality. 5050 5051 Enabled at levels `-O2', `-O3'. 5052 5053`-freorder-blocks-and-partition' 5054 In addition to reordering basic blocks in the compiled function, 5055 in order to reduce number of taken branches, partitions hot and 5056 cold basic blocks into separate sections of the assembly and .o 5057 files, to improve paging and cache locality performance. 5058 5059 This optimization is automatically turned off in the presence of 5060 exception handling, for linkonce sections, for functions with a 5061 user-defined section attribute and on any architecture that does 5062 not support named sections. 5063 5064`-freorder-functions' 5065 Reorder functions in the object file in order to improve code 5066 locality. This is implemented by using special subsections 5067 `.text.hot' for most frequently executed functions and 5068 `.text.unlikely' for unlikely executed functions. Reordering is 5069 done by the linker so object file format must support named 5070 sections and linker must place them in a reasonable way. 5071 5072 Also profile feedback must be available in to make this option 5073 effective. See `-fprofile-arcs' for details. 5074 5075 Enabled at levels `-O2', `-O3', `-Os'. 5076 5077`-fstrict-aliasing' 5078 Allows the compiler to assume the strictest aliasing rules 5079 applicable to the language being compiled. For C (and C++), this 5080 activates optimizations based on the type of expressions. In 5081 particular, an object of one type is assumed never to reside at 5082 the same address as an object of a different type, unless the 5083 types are almost the same. For example, an `unsigned int' can 5084 alias an `int', but not a `void*' or a `double'. A character type 5085 may alias any other type. 5086 5087 Pay special attention to code like this: 5088 union a_union { 5089 int i; 5090 double d; 5091 }; 5092 5093 int f() { 5094 a_union t; 5095 t.d = 3.0; 5096 return t.i; 5097 } 5098 The practice of reading from a different union member than the one 5099 most recently written to (called "type-punning") is common. Even 5100 with `-fstrict-aliasing', type-punning is allowed, provided the 5101 memory is accessed through the union type. So, the code above 5102 will work as expected. However, this code might not: 5103 int f() { 5104 a_union t; 5105 int* ip; 5106 t.d = 3.0; 5107 ip = &t.i; 5108 return *ip; 5109 } 5110 5111 Every language that wishes to perform language-specific alias 5112 analysis should define a function that computes, given an `tree' 5113 node, an alias set for the node. Nodes in different alias sets 5114 are not allowed to alias. For an example, see the C front-end 5115 function `c_get_alias_set'. 5116 5117 Enabled at levels `-O2', `-O3', `-Os'. 5118 5119`-fstrict-overflow' 5120 Allow the compiler to assume strict signed overflow rules, 5121 depending on the language being compiled. For C (and C++) this 5122 means that overflow when doing arithmetic with signed numbers is 5123 undefined, which means that the compiler may assume that it will 5124 not happen. This permits various optimizations. For example, the 5125 compiler will assume that an expression like `i + 10 > i' will 5126 always be true for signed `i'. This assumption is only valid if 5127 signed overflow is undefined, as the expression is false if `i + 5128 10' overflows when using twos complement arithmetic. When this 5129 option is in effect any attempt to determine whether an operation 5130 on signed numbers will overflow must be written carefully to not 5131 actually involve overflow. 5132 5133 See also the `-fwrapv' option. Using `-fwrapv' means that signed 5134 overflow is fully defined: it wraps. When `-fwrapv' is used, 5135 there is no difference between `-fstrict-overflow' and 5136 `-fno-strict-overflow'. With `-fwrapv' certain types of overflow 5137 are permitted. For example, if the compiler gets an overflow when 5138 doing arithmetic on constants, the overflowed value can still be 5139 used with `-fwrapv', but not otherwise. 5140 5141 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 5142 `-Os'. 5143 5144`-falign-functions' 5145`-falign-functions=N' 5146 Align the start of functions to the next power-of-two greater than 5147 N, skipping up to N bytes. For instance, `-falign-functions=32' 5148 aligns functions to the next 32-byte boundary, but 5149 `-falign-functions=24' would align to the next 32-byte boundary 5150 only if this can be done by skipping 23 bytes or less. 5151 5152 `-fno-align-functions' and `-falign-functions=1' are equivalent 5153 and mean that functions will not be aligned. 5154 5155 Some assemblers only support this flag when N is a power of two; 5156 in that case, it is rounded up. 5157 5158 If N is not specified or is zero, use a machine-dependent default. 5159 5160 Enabled at levels `-O2', `-O3'. 5161 5162`-falign-labels' 5163`-falign-labels=N' 5164 Align all branch targets to a power-of-two boundary, skipping up to 5165 N bytes like `-falign-functions'. This option can easily make 5166 code slower, because it must insert dummy operations for when the 5167 branch target is reached in the usual flow of the code. 5168 5169 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 5170 that labels will not be aligned. 5171 5172 If `-falign-loops' or `-falign-jumps' are applicable and are 5173 greater than this value, then their values are used instead. 5174 5175 If N is not specified or is zero, use a machine-dependent default 5176 which is very likely to be `1', meaning no alignment. 5177 5178 Enabled at levels `-O2', `-O3'. 5179 5180`-falign-loops' 5181`-falign-loops=N' 5182 Align loops to a power-of-two boundary, skipping up to N bytes 5183 like `-falign-functions'. The hope is that the loop will be 5184 executed many times, which will make up for any execution of the 5185 dummy operations. 5186 5187 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 5188 that loops will not be aligned. 5189 5190 If N is not specified or is zero, use a machine-dependent default. 5191 5192 Enabled at levels `-O2', `-O3'. 5193 5194`-falign-jumps' 5195`-falign-jumps=N' 5196 Align branch targets to a power-of-two boundary, for branch targets 5197 where the targets can only be reached by jumping, skipping up to N 5198 bytes like `-falign-functions'. In this case, no dummy operations 5199 need be executed. 5200 5201 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 5202 that loops will not be aligned. 5203 5204 If N is not specified or is zero, use a machine-dependent default. 5205 5206 Enabled at levels `-O2', `-O3'. 5207 5208`-funit-at-a-time' 5209 Parse the whole compilation unit before starting to produce code. 5210 This allows some extra optimizations to take place but consumes 5211 more memory (in general). There are some compatibility issues 5212 with _unit-at-a-time_ mode: 5213 * enabling _unit-at-a-time_ mode may change the order in which 5214 functions, variables, and top-level `asm' statements are 5215 emitted, and will likely break code relying on some particular 5216 ordering. The majority of such top-level `asm' statements, 5217 though, can be replaced by `section' attributes. The 5218 `fno-toplevel-reorder' option may be used to keep the ordering 5219 used in the input file, at the cost of some optimizations. 5220 5221 * _unit-at-a-time_ mode removes unreferenced static variables 5222 and functions. This may result in undefined references when 5223 an `asm' statement refers directly to variables or functions 5224 that are otherwise unused. In that case either the 5225 variable/function shall be listed as an operand of the `asm' 5226 statement operand or, in the case of top-level `asm' 5227 statements the attribute `used' shall be used on the 5228 declaration. 5229 5230 * Static functions now can use non-standard passing conventions 5231 that may break `asm' statements calling functions directly. 5232 Again, attribute `used' will prevent this behavior. 5233 5234 As a temporary workaround, `-fno-unit-at-a-time' can be used, but 5235 this scheme may not be supported by future releases of GCC. 5236 5237 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5238 5239`-fno-toplevel-reorder' 5240 Do not reorder top-level functions, variables, and `asm' 5241 statements. Output them in the same order that they appear in the 5242 input file. When this option is used, unreferenced static 5243 variables will not be removed. This option is intended to support 5244 existing code which relies on a particular ordering. For new 5245 code, it is better to use attributes. 5246 5247`-fweb' 5248 Constructs webs as commonly used for register allocation purposes 5249 and assign each web individual pseudo register. This allows the 5250 register allocation pass to operate on pseudos directly, but also 5251 strengthens several other optimization passes, such as CSE, loop 5252 optimizer and trivial dead code remover. It can, however, make 5253 debugging impossible, since variables will no longer stay in a 5254 "home register". 5255 5256 Enabled by default with `-funroll-loops'. 5257 5258`-fwhole-program' 5259 Assume that the current compilation unit represents whole program 5260 being compiled. All public functions and variables with the 5261 exception of `main' and those merged by attribute 5262 `externally_visible' become static functions and in a affect gets 5263 more aggressively optimized by interprocedural optimizers. While 5264 this option is equivalent to proper use of `static' keyword for 5265 programs consisting of single file, in combination with option 5266 `--combine' this flag can be used to compile most of smaller scale 5267 C programs since the functions and variables become local for the 5268 whole combined compilation unit, not for the single source file 5269 itself. 5270 5271`-fno-cprop-registers' 5272 After register allocation and post-register allocation instruction 5273 splitting, we perform a copy-propagation pass to try to reduce 5274 scheduling dependencies and occasionally eliminate the copy. 5275 5276 Disabled at levels `-O', `-O2', `-O3', `-Os'. 5277 5278`-fprofile-generate' 5279 Enable options usually used for instrumenting application to 5280 produce profile useful for later recompilation with profile 5281 feedback based optimization. You must use `-fprofile-generate' 5282 both when compiling and when linking your program. 5283 5284 The following options are enabled: `-fprofile-arcs', 5285 `-fprofile-values', `-fvpt'. 5286 5287`-fprofile-use' 5288 Enable profile feedback directed optimizations, and optimizations 5289 generally profitable only with profile feedback available. 5290 5291 The following options are enabled: `-fbranch-probabilities', 5292 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer' 5293 5294 5295 The following options control compiler behavior regarding floating 5296point arithmetic. These options trade off between speed and 5297correctness. All must be specifically enabled. 5298 5299`-ffloat-store' 5300 Do not store floating point variables in registers, and inhibit 5301 other options that might change whether a floating point value is 5302 taken from a register or memory. 5303 5304 This option prevents undesirable excess precision on machines such 5305 as the 68000 where the floating registers (of the 68881) keep more 5306 precision than a `double' is supposed to have. Similarly for the 5307 x86 architecture. For most programs, the excess precision does 5308 only good, but a few programs rely on the precise definition of 5309 IEEE floating point. Use `-ffloat-store' for such programs, after 5310 modifying them to store all pertinent intermediate computations 5311 into variables. 5312 5313`-ffast-math' 5314 Sets `-fno-math-errno', `-funsafe-math-optimizations', 5315 `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math', 5316 `-fno-signaling-nans' and `fcx-limited-range'. 5317 5318 This option causes the preprocessor macro `__FAST_MATH__' to be 5319 defined. 5320 5321 This option should never be turned on by any `-O' option since it 5322 can result in incorrect output for programs which depend on an 5323 exact implementation of IEEE or ISO rules/specifications for math 5324 functions. 5325 5326`-fno-math-errno' 5327 Do not set ERRNO after calling math functions that are executed 5328 with a single instruction, e.g., sqrt. A program that relies on 5329 IEEE exceptions for math error handling may want to use this flag 5330 for speed while maintaining IEEE arithmetic compatibility. 5331 5332 This option should never be turned on by any `-O' option since it 5333 can result in incorrect output for programs which depend on an 5334 exact implementation of IEEE or ISO rules/specifications for math 5335 functions. 5336 5337 The default is `-fmath-errno'. 5338 5339 On Darwin systems, the math library never sets `errno'. There is 5340 therefore no reason for the compiler to consider the possibility 5341 that it might, and `-fno-math-errno' is the default. 5342 5343`-funsafe-math-optimizations' 5344 Allow optimizations for floating-point arithmetic that (a) assume 5345 that arguments and results are valid and (b) may violate IEEE or 5346 ANSI standards. When used at link-time, it may include libraries 5347 or startup files that change the default FPU control word or other 5348 similar optimizations. 5349 5350 This option should never be turned on by any `-O' option since it 5351 can result in incorrect output for programs which depend on an 5352 exact implementation of IEEE or ISO rules/specifications for math 5353 functions. 5354 5355 The default is `-fno-unsafe-math-optimizations'. 5356 5357`-ffinite-math-only' 5358 Allow optimizations for floating-point arithmetic that assume that 5359 arguments and results are not NaNs or +-Infs. 5360 5361 This option should never be turned on by any `-O' option since it 5362 can result in incorrect output for programs which depend on an 5363 exact implementation of IEEE or ISO rules/specifications. 5364 5365 The default is `-fno-finite-math-only'. 5366 5367`-fno-trapping-math' 5368 Compile code assuming that floating-point operations cannot 5369 generate user-visible traps. These traps include division by 5370 zero, overflow, underflow, inexact result and invalid operation. 5371 This option implies `-fno-signaling-nans'. Setting this option 5372 may allow faster code if one relies on "non-stop" IEEE arithmetic, 5373 for example. 5374 5375 This option should never be turned on by any `-O' option since it 5376 can result in incorrect output for programs which depend on an 5377 exact implementation of IEEE or ISO rules/specifications for math 5378 functions. 5379 5380 The default is `-ftrapping-math'. 5381 5382`-frounding-math' 5383 Disable transformations and optimizations that assume default 5384 floating point rounding behavior. This is round-to-zero for all 5385 floating point to integer conversions, and round-to-nearest for 5386 all other arithmetic truncations. This option should be specified 5387 for programs that change the FP rounding mode dynamically, or that 5388 may be executed with a non-default rounding mode. This option 5389 disables constant folding of floating point expressions at 5390 compile-time (which may be affected by rounding mode) and 5391 arithmetic transformations that are unsafe in the presence of 5392 sign-dependent rounding modes. 5393 5394 The default is `-fno-rounding-math'. 5395 5396 This option is experimental and does not currently guarantee to 5397 disable all GCC optimizations that are affected by rounding mode. 5398 Future versions of GCC may provide finer control of this setting 5399 using C99's `FENV_ACCESS' pragma. This command line option will 5400 be used to specify the default state for `FENV_ACCESS'. 5401 5402`-frtl-abstract-sequences' 5403 It is a size optimization method. This option is to find identical 5404 sequences of code, which can be turned into pseudo-procedures and 5405 then replace all occurrences with calls to the newly created 5406 subroutine. It is kind of an opposite of `-finline-functions'. 5407 This optimization runs at RTL level. 5408 5409`-fsignaling-nans' 5410 Compile code assuming that IEEE signaling NaNs may generate 5411 user-visible traps during floating-point operations. Setting this 5412 option disables optimizations that may change the number of 5413 exceptions visible with signaling NaNs. This option implies 5414 `-ftrapping-math'. 5415 5416 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 5417 defined. 5418 5419 The default is `-fno-signaling-nans'. 5420 5421 This option is experimental and does not currently guarantee to 5422 disable all GCC optimizations that affect signaling NaN behavior. 5423 5424`-fsingle-precision-constant' 5425 Treat floating point constant as single precision constant instead 5426 of implicitly converting it to double precision constant. 5427 5428`-fcx-limited-range' 5429`-fno-cx-limited-range' 5430 When enabled, this option states that a range reduction step is not 5431 needed when performing complex division. The default is 5432 `-fno-cx-limited-range', but is enabled by `-ffast-math'. 5433 5434 This option controls the default setting of the ISO C99 5435 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 5436 all languages. 5437 5438 5439 The following options control optimizations that may improve 5440performance, but are not enabled by any `-O' options. This section 5441includes experimental options that may produce broken code. 5442 5443`-fbranch-probabilities' 5444 After running a program compiled with `-fprofile-arcs' (*note 5445 Options for Debugging Your Program or `gcc': Debugging Options.), 5446 you can compile it a second time using `-fbranch-probabilities', 5447 to improve optimizations based on the number of times each branch 5448 was taken. When the program compiled with `-fprofile-arcs' exits 5449 it saves arc execution counts to a file called `SOURCENAME.gcda' 5450 for each source file The information in this data file is very 5451 dependent on the structure of the generated code, so you must use 5452 the same source code and the same optimization options for both 5453 compilations. 5454 5455 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 5456 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 5457 optimization. Currently, they are only used in one place: in 5458 `reorg.c', instead of guessing which path a branch is mostly to 5459 take, the `REG_BR_PROB' values are used to exactly determine which 5460 path is taken more often. 5461 5462`-fprofile-values' 5463 If combined with `-fprofile-arcs', it adds code so that some data 5464 about values of expressions in the program is gathered. 5465 5466 With `-fbranch-probabilities', it reads back the data gathered 5467 from profiling values of expressions and adds `REG_VALUE_PROFILE' 5468 notes to instructions for their later usage in optimizations. 5469 5470 Enabled with `-fprofile-generate' and `-fprofile-use'. 5471 5472`-fvpt' 5473 If combined with `-fprofile-arcs', it instructs the compiler to add 5474 a code to gather information about values of expressions. 5475 5476 With `-fbranch-probabilities', it reads back the data gathered and 5477 actually performs the optimizations based on them. Currently the 5478 optimizations include specialization of division operation using 5479 the knowledge about the value of the denominator. 5480 5481`-frename-registers' 5482 Attempt to avoid false dependencies in scheduled code by making use 5483 of registers left over after register allocation. This 5484 optimization will most benefit processors with lots of registers. 5485 Depending on the debug information format adopted by the target, 5486 however, it can make debugging impossible, since variables will no 5487 longer stay in a "home register". 5488 5489 Enabled by default with `-funroll-loops'. 5490 5491`-ftracer' 5492 Perform tail duplication to enlarge superblock size. This 5493 transformation simplifies the control flow of the function 5494 allowing other optimizations to do better job. 5495 5496 Enabled with `-fprofile-use'. 5497 5498`-funroll-loops' 5499 Unroll loops whose number of iterations can be determined at 5500 compile time or upon entry to the loop. `-funroll-loops' implies 5501 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 5502 also turns on complete loop peeling (i.e. complete removal of 5503 loops with small constant number of iterations). This option 5504 makes code larger, and may or may not make it run faster. 5505 5506 Enabled with `-fprofile-use'. 5507 5508`-funroll-all-loops' 5509 Unroll all loops, even if their number of iterations is uncertain 5510 when the loop is entered. This usually makes programs run more 5511 slowly. `-funroll-all-loops' implies the same options as 5512 `-funroll-loops'. 5513 5514`-fpeel-loops' 5515 Peels the loops for that there is enough information that they do 5516 not roll much (from profile feedback). It also turns on complete 5517 loop peeling (i.e. complete removal of loops with small constant 5518 number of iterations). 5519 5520 Enabled with `-fprofile-use'. 5521 5522`-fmove-loop-invariants' 5523 Enables the loop invariant motion pass in the RTL loop optimizer. 5524 Enabled at level `-O1' 5525 5526`-funswitch-loops' 5527 Move branches with loop invariant conditions out of the loop, with 5528 duplicates of the loop on both branches (modified according to 5529 result of the condition). 5530 5531`-ffunction-sections' 5532`-fdata-sections' 5533 Place each function or data item into its own section in the output 5534 file if the target supports arbitrary sections. The name of the 5535 function or the name of the data item determines the section's name 5536 in the output file. 5537 5538 Use these options on systems where the linker can perform 5539 optimizations to improve locality of reference in the instruction 5540 space. Most systems using the ELF object format and SPARC 5541 processors running Solaris 2 have linkers with such optimizations. 5542 AIX may have these optimizations in the future. 5543 5544 Only use these options when there are significant benefits from 5545 doing so. When you specify these options, the assembler and 5546 linker will create larger object and executable files and will 5547 also be slower. You will not be able to use `gprof' on all 5548 systems if you specify this option and you may have problems with 5549 debugging if you specify both this option and `-g'. 5550 5551`-fbranch-target-load-optimize' 5552 Perform branch target register load optimization before prologue / 5553 epilogue threading. The use of target registers can typically be 5554 exposed only during reload, thus hoisting loads out of loops and 5555 doing inter-block scheduling needs a separate optimization pass. 5556 5557`-fbranch-target-load-optimize2' 5558 Perform branch target register load optimization after prologue / 5559 epilogue threading. 5560 5561`-fbtr-bb-exclusive' 5562 When performing branch target register load optimization, don't 5563 reuse branch target registers in within any basic block. 5564 5565`-fstack-protector' 5566 Emit extra code to check for buffer overflows, such as stack 5567 smashing attacks. This is done by adding a guard variable to 5568 functions with vulnerable objects. This includes functions that 5569 call alloca, and functions with buffers larger than 8 bytes. The 5570 guards are initialized when a function is entered and then checked 5571 when the function exits. If a guard check fails, an error message 5572 is printed and the program exits. 5573 5574`-fstack-protector-all' 5575 Like `-fstack-protector' except that all functions are protected. 5576 5577`-fsection-anchors' 5578 Try to reduce the number of symbolic address calculations by using 5579 shared "anchor" symbols to address nearby objects. This 5580 transformation can help to reduce the number of GOT entries and 5581 GOT accesses on some targets. 5582 5583 For example, the implementation of the following function `foo': 5584 5585 static int a, b, c; 5586 int foo (void) { return a + b + c; } 5587 5588 would usually calculate the addresses of all three variables, but 5589 if you compile it with `-fsection-anchors', it will access the 5590 variables from a common anchor point instead. The effect is 5591 similar to the following pseudocode (which isn't valid C): 5592 5593 int foo (void) 5594 { 5595 register int *xr = &x; 5596 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 5597 } 5598 5599 Not all targets support this option. 5600 5601`--param NAME=VALUE' 5602 In some places, GCC uses various constants to control the amount of 5603 optimization that is done. For example, GCC will not inline 5604 functions that contain more that a certain number of instructions. 5605 You can control some of these constants on the command-line using 5606 the `--param' option. 5607 5608 The names of specific parameters, and the meaning of the values, 5609 are tied to the internals of the compiler, and are subject to 5610 change without notice in future releases. 5611 5612 In each case, the VALUE is an integer. The allowable choices for 5613 NAME are given in the following table: 5614 5615 `salias-max-implicit-fields' 5616 The maximum number of fields in a variable without direct 5617 structure accesses for which structure aliasing will consider 5618 trying to track each field. The default is 5 5619 5620 `salias-max-array-elements' 5621 The maximum number of elements an array can have and its 5622 elements still be tracked individually by structure aliasing. 5623 The default is 4 5624 5625 `sra-max-structure-size' 5626 The maximum structure size, in bytes, at which the scalar 5627 replacement of aggregates (SRA) optimization will perform 5628 block copies. The default value, 0, implies that GCC will 5629 select the most appropriate size itself. 5630 5631 `sra-field-structure-ratio' 5632 The threshold ratio (as a percentage) between instantiated 5633 fields and the complete structure size. We say that if the 5634 ratio of the number of bytes in instantiated fields to the 5635 number of bytes in the complete structure exceeds this 5636 parameter, then block copies are not used. The default is 75. 5637 5638 `max-crossjump-edges' 5639 The maximum number of incoming edges to consider for 5640 crossjumping. The algorithm used by `-fcrossjumping' is 5641 O(N^2) in the number of edges incoming to each block. 5642 Increasing values mean more aggressive optimization, making 5643 the compile time increase with probably small improvement in 5644 executable size. 5645 5646 `min-crossjump-insns' 5647 The minimum number of instructions which must be matched at 5648 the end of two blocks before crossjumping will be performed 5649 on them. This value is ignored in the case where all 5650 instructions in the block being crossjumped from are matched. 5651 The default value is 5. 5652 5653 `max-grow-copy-bb-insns' 5654 The maximum code size expansion factor when copying basic 5655 blocks instead of jumping. The expansion is relative to a 5656 jump instruction. The default value is 8. 5657 5658 `max-goto-duplication-insns' 5659 The maximum number of instructions to duplicate to a block 5660 that jumps to a computed goto. To avoid O(N^2) behavior in a 5661 number of passes, GCC factors computed gotos early in the 5662 compilation process, and unfactors them as late as possible. 5663 Only computed jumps at the end of a basic blocks with no more 5664 than max-goto-duplication-insns are unfactored. The default 5665 value is 8. 5666 5667 `max-delay-slot-insn-search' 5668 The maximum number of instructions to consider when looking 5669 for an instruction to fill a delay slot. If more than this 5670 arbitrary number of instructions is searched, the time 5671 savings from filling the delay slot will be minimal so stop 5672 searching. Increasing values mean more aggressive 5673 optimization, making the compile time increase with probably 5674 small improvement in executable run time. 5675 5676 `max-delay-slot-live-search' 5677 When trying to fill delay slots, the maximum number of 5678 instructions to consider when searching for a block with 5679 valid live register information. Increasing this arbitrarily 5680 chosen value means more aggressive optimization, increasing 5681 the compile time. This parameter should be removed when the 5682 delay slot code is rewritten to maintain the control-flow 5683 graph. 5684 5685 `max-gcse-memory' 5686 The approximate maximum amount of memory that will be 5687 allocated in order to perform the global common subexpression 5688 elimination optimization. If more memory than specified is 5689 required, the optimization will not be done. 5690 5691 `max-gcse-passes' 5692 The maximum number of passes of GCSE to run. The default is 5693 1. 5694 5695 `max-pending-list-length' 5696 The maximum number of pending dependencies scheduling will 5697 allow before flushing the current state and starting over. 5698 Large functions with few branches or calls can create 5699 excessively large lists which needlessly consume memory and 5700 resources. 5701 5702 `max-inline-insns-single' 5703 Several parameters control the tree inliner used in gcc. 5704 This number sets the maximum number of instructions (counted 5705 in GCC's internal representation) in a single function that 5706 the tree inliner will consider for inlining. This only 5707 affects functions declared inline and methods implemented in 5708 a class declaration (C++). The default value is 450. 5709 5710 `max-inline-insns-auto' 5711 When you use `-finline-functions' (included in `-O3'), a lot 5712 of functions that would otherwise not be considered for 5713 inlining by the compiler will be investigated. To those 5714 functions, a different (more restrictive) limit compared to 5715 functions declared inline can be applied. The default value 5716 is 90. 5717 5718 `large-function-insns' 5719 The limit specifying really large functions. For functions 5720 larger than this limit after inlining inlining is constrained 5721 by `--param large-function-growth'. This parameter is useful 5722 primarily to avoid extreme compilation time caused by 5723 non-linear algorithms used by the backend. This parameter is 5724 ignored when `-funit-at-a-time' is not used. The default 5725 value is 2700. 5726 5727 `large-function-growth' 5728 Specifies maximal growth of large function caused by inlining 5729 in percents. This parameter is ignored when 5730 `-funit-at-a-time' is not used. The default value is 100 5731 which limits large function growth to 2.0 times the original 5732 size. 5733 5734 `large-unit-insns' 5735 The limit specifying large translation unit. Growth caused 5736 by inlining of units larger than this limit is limited by 5737 `--param inline-unit-growth'. For small units this might be 5738 too tight (consider unit consisting of function A that is 5739 inline and B that just calls A three time. If B is small 5740 relative to A, the growth of unit is 300\% and yet such 5741 inlining is very sane. For very large units consisting of 5742 small inlininable functions however the overall unit growth 5743 limit is needed to avoid exponential explosion of code size. 5744 Thus for smaller units, the size is increased to `--param 5745 large-unit-insns' before applying `--param 5746 inline-unit-growth'. The default is 10000 5747 5748 `inline-unit-growth' 5749 Specifies maximal overall growth of the compilation unit 5750 caused by inlining. This parameter is ignored when 5751 `-funit-at-a-time' is not used. The default value is 50 5752 which limits unit growth to 1.5 times the original size. 5753 5754 `max-inline-insns-recursive' 5755 `max-inline-insns-recursive-auto' 5756 Specifies maximum number of instructions out-of-line copy of 5757 self recursive inline function can grow into by performing 5758 recursive inlining. 5759 5760 For functions declared inline `--param 5761 max-inline-insns-recursive' is taken into account. For 5762 function not declared inline, recursive inlining happens only 5763 when `-finline-functions' (included in `-O3') is enabled and 5764 `--param max-inline-insns-recursive-auto' is used. The 5765 default value is 450. 5766 5767 `max-inline-recursive-depth' 5768 `max-inline-recursive-depth-auto' 5769 Specifies maximum recursion depth used by the recursive 5770 inlining. 5771 5772 For functions declared inline `--param 5773 max-inline-recursive-depth' is taken into account. For 5774 function not declared inline, recursive inlining happens only 5775 when `-finline-functions' (included in `-O3') is enabled and 5776 `--param max-inline-recursive-depth-auto' is used. The 5777 default value is 450. 5778 5779 `min-inline-recursive-probability' 5780 Recursive inlining is profitable only for function having 5781 deep recursion in average and can hurt for function having 5782 little recursion depth by increasing the prologue size or 5783 complexity of function body to other optimizers. 5784 5785 When profile feedback is available (see `-fprofile-generate') 5786 the actual recursion depth can be guessed from probability 5787 that function will recurse via given call expression. This 5788 parameter limits inlining only to call expression whose 5789 probability exceeds given threshold (in percents). The 5790 default value is 10. 5791 5792 `inline-call-cost' 5793 Specify cost of call instruction relative to simple 5794 arithmetics operations (having cost of 1). Increasing this 5795 cost disqualifies inlining of non-leaf functions and at the 5796 same time increases size of leaf function that is believed to 5797 reduce function size by being inlined. In effect it 5798 increases amount of inlining for code having large 5799 abstraction penalty (many functions that just pass the 5800 arguments to other functions) and decrease inlining for code 5801 with low abstraction penalty. The default value is 16. 5802 5803 `max-unrolled-insns' 5804 The maximum number of instructions that a loop should have if 5805 that loop is unrolled, and if the loop is unrolled, it 5806 determines how many times the loop code is unrolled. 5807 5808 `max-average-unrolled-insns' 5809 The maximum number of instructions biased by probabilities of 5810 their execution that a loop should have if that loop is 5811 unrolled, and if the loop is unrolled, it determines how many 5812 times the loop code is unrolled. 5813 5814 `max-unroll-times' 5815 The maximum number of unrollings of a single loop. 5816 5817 `max-peeled-insns' 5818 The maximum number of instructions that a loop should have if 5819 that loop is peeled, and if the loop is peeled, it determines 5820 how many times the loop code is peeled. 5821 5822 `max-peel-times' 5823 The maximum number of peelings of a single loop. 5824 5825 `max-completely-peeled-insns' 5826 The maximum number of insns of a completely peeled loop. 5827 5828 `max-completely-peel-times' 5829 The maximum number of iterations of a loop to be suitable for 5830 complete peeling. 5831 5832 `max-unswitch-insns' 5833 The maximum number of insns of an unswitched loop. 5834 5835 `max-unswitch-level' 5836 The maximum number of branches unswitched in a single loop. 5837 5838 `lim-expensive' 5839 The minimum cost of an expensive expression in the loop 5840 invariant motion. 5841 5842 `iv-consider-all-candidates-bound' 5843 Bound on number of candidates for induction variables below 5844 that all candidates are considered for each use in induction 5845 variable optimizations. Only the most relevant candidates 5846 are considered if there are more candidates, to avoid 5847 quadratic time complexity. 5848 5849 `iv-max-considered-uses' 5850 The induction variable optimizations give up on loops that 5851 contain more induction variable uses. 5852 5853 `iv-always-prune-cand-set-bound' 5854 If number of candidates in the set is smaller than this value, 5855 we always try to remove unnecessary ivs from the set during 5856 its optimization when a new iv is added to the set. 5857 5858 `scev-max-expr-size' 5859 Bound on size of expressions used in the scalar evolutions 5860 analyzer. Large expressions slow the analyzer. 5861 5862 `vect-max-version-checks' 5863 The maximum number of runtime checks that can be performed 5864 when doing loop versioning in the vectorizer. See option 5865 ftree-vect-loop-version for more information. 5866 5867 `max-iterations-to-track' 5868 The maximum number of iterations of a loop the brute force 5869 algorithm for analysis of # of iterations of the loop tries 5870 to evaluate. 5871 5872 `hot-bb-count-fraction' 5873 Select fraction of the maximal count of repetitions of basic 5874 block in program given basic block needs to have to be 5875 considered hot. 5876 5877 `hot-bb-frequency-fraction' 5878 Select fraction of the maximal frequency of executions of 5879 basic block in function given basic block needs to have to be 5880 considered hot 5881 5882 `max-predicted-iterations' 5883 The maximum number of loop iterations we predict statically. 5884 This is useful in cases where function contain single loop 5885 with known bound and other loop with unknown. We predict the 5886 known number of iterations correctly, while the unknown 5887 number of iterations average to roughly 10. This means that 5888 the loop without bounds would appear artificially cold 5889 relative to the other one. 5890 5891 `tracer-dynamic-coverage' 5892 `tracer-dynamic-coverage-feedback' 5893 This value is used to limit superblock formation once the 5894 given percentage of executed instructions is covered. This 5895 limits unnecessary code size expansion. 5896 5897 The `tracer-dynamic-coverage-feedback' is used only when 5898 profile feedback is available. The real profiles (as opposed 5899 to statically estimated ones) are much less balanced allowing 5900 the threshold to be larger value. 5901 5902 `tracer-max-code-growth' 5903 Stop tail duplication once code growth has reached given 5904 percentage. This is rather hokey argument, as most of the 5905 duplicates will be eliminated later in cross jumping, so it 5906 may be set to much higher values than is the desired code 5907 growth. 5908 5909 `tracer-min-branch-ratio' 5910 Stop reverse growth when the reverse probability of best edge 5911 is less than this threshold (in percent). 5912 5913 `tracer-min-branch-ratio' 5914 `tracer-min-branch-ratio-feedback' 5915 Stop forward growth if the best edge do have probability 5916 lower than this threshold. 5917 5918 Similarly to `tracer-dynamic-coverage' two values are 5919 present, one for compilation for profile feedback and one for 5920 compilation without. The value for compilation with profile 5921 feedback needs to be more conservative (higher) in order to 5922 make tracer effective. 5923 5924 `max-cse-path-length' 5925 Maximum number of basic blocks on path that cse considers. 5926 The default is 10. 5927 5928 `max-cse-insns' 5929 The maximum instructions CSE process before flushing. The 5930 default is 1000. 5931 5932 `global-var-threshold' 5933 Counts the number of function calls (N) and the number of 5934 call-clobbered variables (V). If NxV is larger than this 5935 limit, a single artificial variable will be created to 5936 represent all the call-clobbered variables at function call 5937 sites. This artificial variable will then be made to alias 5938 every call-clobbered variable. (done as `int * size_t' on 5939 the host machine; beware overflow). 5940 5941 `max-aliased-vops' 5942 Maximum number of virtual operands allowed to represent 5943 aliases before triggering the alias grouping heuristic. 5944 Alias grouping reduces compile times and memory consumption 5945 needed for aliasing at the expense of precision loss in alias 5946 information. 5947 5948 `ggc-min-expand' 5949 GCC uses a garbage collector to manage its own memory 5950 allocation. This parameter specifies the minimum percentage 5951 by which the garbage collector's heap should be allowed to 5952 expand between collections. Tuning this may improve 5953 compilation speed; it has no effect on code generation. 5954 5955 The default is 30% + 70% * (RAM/1GB) with an upper bound of 5956 100% when RAM >= 1GB. If `getrlimit' is available, the 5957 notion of "RAM" is the smallest of actual RAM and 5958 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 5959 calculate RAM on a particular platform, the lower bound of 5960 30% is used. Setting this parameter and `ggc-min-heapsize' 5961 to zero causes a full collection to occur at every 5962 opportunity. This is extremely slow, but can be useful for 5963 debugging. 5964 5965 `ggc-min-heapsize' 5966 Minimum size of the garbage collector's heap before it begins 5967 bothering to collect garbage. The first collection occurs 5968 after the heap expands by `ggc-min-expand'% beyond 5969 `ggc-min-heapsize'. Again, tuning this may improve 5970 compilation speed, and has no effect on code generation. 5971 5972 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 5973 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 5974 exceeded, but with a lower bound of 4096 (four megabytes) and 5975 an upper bound of 131072 (128 megabytes). If GCC is not able 5976 to calculate RAM on a particular platform, the lower bound is 5977 used. Setting this parameter very large effectively disables 5978 garbage collection. Setting this parameter and 5979 `ggc-min-expand' to zero causes a full collection to occur at 5980 every opportunity. 5981 5982 `max-reload-search-insns' 5983 The maximum number of instruction reload should look backward 5984 for equivalent register. Increasing values mean more 5985 aggressive optimization, making the compile time increase 5986 with probably slightly better performance. The default value 5987 is 100. 5988 5989 `max-cselib-memory-locations' 5990 The maximum number of memory locations cselib should take 5991 into account. Increasing values mean more aggressive 5992 optimization, making the compile time increase with probably 5993 slightly better performance. The default value is 500. 5994 5995 `max-flow-memory-locations' 5996 Similar as `max-cselib-memory-locations' but for dataflow 5997 liveness. The default value is 100. 5998 5999 `reorder-blocks-duplicate' 6000 `reorder-blocks-duplicate-feedback' 6001 Used by basic block reordering pass to decide whether to use 6002 unconditional branch or duplicate the code on its 6003 destination. Code is duplicated when its estimated size is 6004 smaller than this value multiplied by the estimated size of 6005 unconditional jump in the hot spots of the program. 6006 6007 The `reorder-block-duplicate-feedback' is used only when 6008 profile feedback is available and may be set to higher values 6009 than `reorder-block-duplicate' since information about the 6010 hot spots is more accurate. 6011 6012 `max-sched-ready-insns' 6013 The maximum number of instructions ready to be issued the 6014 scheduler should consider at any given time during the first 6015 scheduling pass. Increasing values mean more thorough 6016 searches, making the compilation time increase with probably 6017 little benefit. The default value is 100. 6018 6019 `max-sched-region-blocks' 6020 The maximum number of blocks in a region to be considered for 6021 interblock scheduling. The default value is 10. 6022 6023 `max-sched-region-insns' 6024 The maximum number of insns in a region to be considered for 6025 interblock scheduling. The default value is 100. 6026 6027 `min-spec-prob' 6028 The minimum probability (in percents) of reaching a source 6029 block for interblock speculative scheduling. The default 6030 value is 40. 6031 6032 `max-sched-extend-regions-iters' 6033 The maximum number of iterations through CFG to extend 6034 regions. 0 - disable region extension, N - do at most N 6035 iterations. The default value is 0. 6036 6037 `max-sched-insn-conflict-delay' 6038 The maximum conflict delay for an insn to be considered for 6039 speculative motion. The default value is 3. 6040 6041 `sched-spec-prob-cutoff' 6042 The minimal probability of speculation success (in percents), 6043 so that speculative insn will be scheduled. The default 6044 value is 40. 6045 6046 `max-last-value-rtl' 6047 The maximum size measured as number of RTLs that can be 6048 recorded in an expression in combiner for a pseudo register 6049 as last known value of that register. The default is 10000. 6050 6051 `integer-share-limit' 6052 Small integer constants can use a shared data structure, 6053 reducing the compiler's memory usage and increasing its 6054 speed. This sets the maximum value of a shared integer 6055 constant's. The default value is 256. 6056 6057 `min-virtual-mappings' 6058 Specifies the minimum number of virtual mappings in the 6059 incremental SSA updater that should be registered to trigger 6060 the virtual mappings heuristic defined by 6061 virtual-mappings-ratio. The default value is 100. 6062 6063 `virtual-mappings-ratio' 6064 If the number of virtual mappings is virtual-mappings-ratio 6065 bigger than the number of virtual symbols to be updated, then 6066 the incremental SSA updater switches to a full update for 6067 those symbols. The default ratio is 3. 6068 6069 `ssp-buffer-size' 6070 The minimum size of buffers (i.e. arrays) that will receive 6071 stack smashing protection when `-fstack-protection' is used. 6072 6073 `max-jump-thread-duplication-stmts' 6074 Maximum number of statements allowed in a block that needs to 6075 be duplicated when threading jumps. 6076 6077 `max-fields-for-field-sensitive' 6078 Maximum number of fields in a structure we will treat in a 6079 field sensitive manner during pointer analysis. 6080 6081 6082 6083File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 6084 60853.11 Options Controlling the Preprocessor 6086========================================= 6087 6088These options control the C preprocessor, which is run on each C source 6089file before actual compilation. 6090 6091 If you use the `-E' option, nothing is done except preprocessing. 6092Some of these options make sense only together with `-E' because they 6093cause the preprocessor output to be unsuitable for actual compilation. 6094 6095 You can use `-Wp,OPTION' to bypass the compiler driver and pass 6096 OPTION directly through to the preprocessor. If OPTION contains 6097 commas, it is split into multiple options at the commas. However, 6098 many options are modified, translated or interpreted by the 6099 compiler driver before being passed to the preprocessor, and `-Wp' 6100 forcibly bypasses this phase. The preprocessor's direct interface 6101 is undocumented and subject to change, so whenever possible you 6102 should avoid using `-Wp' and let the driver handle the options 6103 instead. 6104 6105`-Xpreprocessor OPTION' 6106 Pass OPTION as an option to the preprocessor. You can use this to 6107 supply system-specific preprocessor options which GCC does not 6108 know how to recognize. 6109 6110 If you want to pass an option that takes an argument, you must use 6111 `-Xpreprocessor' twice, once for the option and once for the 6112 argument. 6113 6114`-D NAME' 6115 Predefine NAME as a macro, with definition `1'. 6116 6117`-D NAME=DEFINITION' 6118 The contents of DEFINITION are tokenized and processed as if they 6119 appeared during translation phase three in a `#define' directive. 6120 In particular, the definition will be truncated by embedded 6121 newline characters. 6122 6123 If you are invoking the preprocessor from a shell or shell-like 6124 program you may need to use the shell's quoting syntax to protect 6125 characters such as spaces that have a meaning in the shell syntax. 6126 6127 If you wish to define a function-like macro on the command line, 6128 write its argument list with surrounding parentheses before the 6129 equals sign (if any). Parentheses are meaningful to most shells, 6130 so you will need to quote the option. With `sh' and `csh', 6131 `-D'NAME(ARGS...)=DEFINITION'' works. 6132 6133 `-D' and `-U' options are processed in the order they are given on 6134 the command line. All `-imacros FILE' and `-include FILE' options 6135 are processed after all `-D' and `-U' options. 6136 6137`-U NAME' 6138 Cancel any previous definition of NAME, either built in or 6139 provided with a `-D' option. 6140 6141`-undef' 6142 Do not predefine any system-specific or GCC-specific macros. The 6143 standard predefined macros remain defined. 6144 6145`-I DIR' 6146 Add the directory DIR to the list of directories to be searched 6147 for header files. Directories named by `-I' are searched before 6148 the standard system include directories. If the directory DIR is 6149 a standard system include directory, the option is ignored to 6150 ensure that the default search order for system directories and 6151 the special treatment of system headers are not defeated . 6152 6153`-o FILE' 6154 Write output to FILE. This is the same as specifying FILE as the 6155 second non-option argument to `cpp'. `gcc' has a different 6156 interpretation of a second non-option argument, so you must use 6157 `-o' to specify the output file. 6158 6159`-Wall' 6160 Turns on all optional warnings which are desirable for normal code. 6161 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 6162 warning about integer promotion causing a change of sign in `#if' 6163 expressions. Note that many of the preprocessor's warnings are on 6164 by default and have no options to control them. 6165 6166`-Wcomment' 6167`-Wcomments' 6168 Warn whenever a comment-start sequence `/*' appears in a `/*' 6169 comment, or whenever a backslash-newline appears in a `//' comment. 6170 (Both forms have the same effect.) 6171 6172`-Wtrigraphs' 6173 Most trigraphs in comments cannot affect the meaning of the 6174 program. However, a trigraph that would form an escaped newline 6175 (`??/' at the end of a line) can, by changing where the comment 6176 begins or ends. Therefore, only trigraphs that would form escaped 6177 newlines produce warnings inside a comment. 6178 6179 This option is implied by `-Wall'. If `-Wall' is not given, this 6180 option is still enabled unless trigraphs are enabled. To get 6181 trigraph conversion without warnings, but get the other `-Wall' 6182 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 6183 6184`-Wtraditional' 6185 Warn about certain constructs that behave differently in 6186 traditional and ISO C. Also warn about ISO C constructs that have 6187 no traditional C equivalent, and problematic constructs which 6188 should be avoided. 6189 6190`-Wimport' 6191 Warn the first time `#import' is used. 6192 6193`-Wundef' 6194 Warn whenever an identifier which is not a macro is encountered in 6195 an `#if' directive, outside of `defined'. Such identifiers are 6196 replaced with zero. 6197 6198`-Wunused-macros' 6199 Warn about macros defined in the main file that are unused. A 6200 macro is "used" if it is expanded or tested for existence at least 6201 once. The preprocessor will also warn if the macro has not been 6202 used at the time it is redefined or undefined. 6203 6204 Built-in macros, macros defined on the command line, and macros 6205 defined in include files are not warned about. 6206 6207 _Note:_ If a macro is actually used, but only used in skipped 6208 conditional blocks, then CPP will report it as unused. To avoid 6209 the warning in such a case, you might improve the scope of the 6210 macro's definition by, for example, moving it into the first 6211 skipped block. Alternatively, you could provide a dummy use with 6212 something like: 6213 6214 #if defined the_macro_causing_the_warning 6215 #endif 6216 6217`-Wendif-labels' 6218 Warn whenever an `#else' or an `#endif' are followed by text. 6219 This usually happens in code of the form 6220 6221 #if FOO 6222 ... 6223 #else FOO 6224 ... 6225 #endif FOO 6226 6227 The second and third `FOO' should be in comments, but often are not 6228 in older programs. This warning is on by default. 6229 6230`-Werror' 6231 Make all warnings into hard errors. Source code which triggers 6232 warnings will be rejected. 6233 6234`-Wsystem-headers' 6235 Issue warnings for code in system headers. These are normally 6236 unhelpful in finding bugs in your own code, therefore suppressed. 6237 If you are responsible for the system library, you may want to see 6238 them. 6239 6240`-w' 6241 Suppress all warnings, including those which GNU CPP issues by 6242 default. 6243 6244`-pedantic' 6245 Issue all the mandatory diagnostics listed in the C standard. 6246 Some of them are left out by default, since they trigger 6247 frequently on harmless code. 6248 6249`-pedantic-errors' 6250 Issue all the mandatory diagnostics, and make all mandatory 6251 diagnostics into errors. This includes mandatory diagnostics that 6252 GCC issues without `-pedantic' but treats as warnings. 6253 6254`-M' 6255 Instead of outputting the result of preprocessing, output a rule 6256 suitable for `make' describing the dependencies of the main source 6257 file. The preprocessor outputs one `make' rule containing the 6258 object file name for that source file, a colon, and the names of 6259 all the included files, including those coming from `-include' or 6260 `-imacros' command line options. 6261 6262 Unless specified explicitly (with `-MT' or `-MQ'), the object file 6263 name consists of the basename of the source file with any suffix 6264 replaced with object file suffix. If there are many included 6265 files then the rule is split into several lines using `\'-newline. 6266 The rule has no commands. 6267 6268 This option does not suppress the preprocessor's debug output, 6269 such as `-dM'. To avoid mixing such debug output with the 6270 dependency rules you should explicitly specify the dependency 6271 output file with `-MF', or use an environment variable like 6272 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 6273 output will still be sent to the regular output stream as normal. 6274 6275 Passing `-M' to the driver implies `-E', and suppresses warnings 6276 with an implicit `-w'. 6277 6278`-MM' 6279 Like `-M' but do not mention header files that are found in system 6280 header directories, nor header files that are included, directly 6281 or indirectly, from such a header. 6282 6283 This implies that the choice of angle brackets or double quotes in 6284 an `#include' directive does not in itself determine whether that 6285 header will appear in `-MM' dependency output. This is a slight 6286 change in semantics from GCC versions 3.0 and earlier. 6287 6288`-MF FILE' 6289 When used with `-M' or `-MM', specifies a file to write the 6290 dependencies to. If no `-MF' switch is given the preprocessor 6291 sends the rules to the same place it would have sent preprocessed 6292 output. 6293 6294 When used with the driver options `-MD' or `-MMD', `-MF' overrides 6295 the default dependency output file. 6296 6297`-MG' 6298 In conjunction with an option such as `-M' requesting dependency 6299 generation, `-MG' assumes missing header files are generated files 6300 and adds them to the dependency list without raising an error. 6301 The dependency filename is taken directly from the `#include' 6302 directive without prepending any path. `-MG' also suppresses 6303 preprocessed output, as a missing header file renders this useless. 6304 6305 This feature is used in automatic updating of makefiles. 6306 6307`-MP' 6308 This option instructs CPP to add a phony target for each dependency 6309 other than the main file, causing each to depend on nothing. These 6310 dummy rules work around errors `make' gives if you remove header 6311 files without updating the `Makefile' to match. 6312 6313 This is typical output: 6314 6315 test.o: test.c test.h 6316 6317 test.h: 6318 6319`-MT TARGET' 6320 Change the target of the rule emitted by dependency generation. By 6321 default CPP takes the name of the main input file, including any 6322 path, deletes any file suffix such as `.c', and appends the 6323 platform's usual object suffix. The result is the target. 6324 6325 An `-MT' option will set the target to be exactly the string you 6326 specify. If you want multiple targets, you can specify them as a 6327 single argument to `-MT', or use multiple `-MT' options. 6328 6329 For example, `-MT '$(objpfx)foo.o'' might give 6330 6331 $(objpfx)foo.o: foo.c 6332 6333`-MQ TARGET' 6334 Same as `-MT', but it quotes any characters which are special to 6335 Make. `-MQ '$(objpfx)foo.o'' gives 6336 6337 $$(objpfx)foo.o: foo.c 6338 6339 The default target is automatically quoted, as if it were given 6340 with `-MQ'. 6341 6342`-MD' 6343 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 6344 implied. The driver determines FILE based on whether an `-o' 6345 option is given. If it is, the driver uses its argument but with 6346 a suffix of `.d', otherwise it take the basename of the input file 6347 and applies a `.d' suffix. 6348 6349 If `-MD' is used in conjunction with `-E', any `-o' switch is 6350 understood to specify the dependency output file (*note -MF: 6351 dashMF.), but if used without `-E', each `-o' is understood to 6352 specify a target object file. 6353 6354 Since `-E' is not implied, `-MD' can be used to generate a 6355 dependency output file as a side-effect of the compilation process. 6356 6357`-MMD' 6358 Like `-MD' except mention only user header files, not system 6359 header files. 6360 6361`-fpch-deps' 6362 When using precompiled headers (*note Precompiled Headers::), this 6363 flag will cause the dependency-output flags to also list the files 6364 from the precompiled header's dependencies. If not specified only 6365 the precompiled header would be listed and not the files that were 6366 used to create it because those files are not consulted when a 6367 precompiled header is used. 6368 6369`-fpch-preprocess' 6370 This option allows use of a precompiled header (*note Precompiled 6371 Headers::) together with `-E'. It inserts a special `#pragma', 6372 `#pragma GCC pch_preprocess "<filename>"' in the output to mark 6373 the place where the precompiled header was found, and its 6374 filename. When `-fpreprocessed' is in use, GCC recognizes this 6375 `#pragma' and loads the PCH. 6376 6377 This option is off by default, because the resulting preprocessed 6378 output is only really suitable as input to GCC. It is switched on 6379 by `-save-temps'. 6380 6381 You should not write this `#pragma' in your own code, but it is 6382 safe to edit the filename if the PCH file is available in a 6383 different location. The filename may be absolute or it may be 6384 relative to GCC's current directory. 6385 6386`-x c' 6387`-x c++' 6388`-x objective-c' 6389`-x assembler-with-cpp' 6390 Specify the source language: C, C++, Objective-C, or assembly. 6391 This has nothing to do with standards conformance or extensions; 6392 it merely selects which base syntax to expect. If you give none 6393 of these options, cpp will deduce the language from the extension 6394 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 6395 extensions for C++ and assembly are also recognized. If cpp does 6396 not recognize the extension, it will treat the file as C; this is 6397 the most generic mode. 6398 6399 _Note:_ Previous versions of cpp accepted a `-lang' option which 6400 selected both the language and the standards conformance level. 6401 This option has been removed, because it conflicts with the `-l' 6402 option. 6403 6404`-std=STANDARD' 6405`-ansi' 6406 Specify the standard to which the code should conform. Currently 6407 CPP knows about C and C++ standards; others may be added in the 6408 future. 6409 6410 STANDARD may be one of: 6411 `iso9899:1990' 6412 `c89' 6413 The ISO C standard from 1990. `c89' is the customary 6414 shorthand for this version of the standard. 6415 6416 The `-ansi' option is equivalent to `-std=c89'. 6417 6418 `iso9899:199409' 6419 The 1990 C standard, as amended in 1994. 6420 6421 `iso9899:1999' 6422 `c99' 6423 `iso9899:199x' 6424 `c9x' 6425 The revised ISO C standard, published in December 1999. 6426 Before publication, this was known as C9X. 6427 6428 `gnu89' 6429 The 1990 C standard plus GNU extensions. This is the default. 6430 6431 `gnu99' 6432 `gnu9x' 6433 The 1999 C standard plus GNU extensions. 6434 6435 `c++98' 6436 The 1998 ISO C++ standard plus amendments. 6437 6438 `gnu++98' 6439 The same as `-std=c++98' plus GNU extensions. This is the 6440 default for C++ code. 6441 6442`-I-' 6443 Split the include path. Any directories specified with `-I' 6444 options before `-I-' are searched only for headers requested with 6445 `#include "FILE"'; they are not searched for `#include <FILE>'. 6446 If additional directories are specified with `-I' options after 6447 the `-I-', those directories are searched for all `#include' 6448 directives. 6449 6450 In addition, `-I-' inhibits the use of the directory of the current 6451 file directory as the first search directory for `#include "FILE"'. 6452 This option has been deprecated. 6453 6454`-nostdinc' 6455 Do not search the standard system directories for header files. 6456 Only the directories you have specified with `-I' options (and the 6457 directory of the current file, if appropriate) are searched. 6458 6459`-nostdinc++' 6460 Do not search for header files in the C++-specific standard 6461 directories, but do still search the other standard directories. 6462 (This option is used when building the C++ library.) 6463 6464`-include FILE' 6465 Process FILE as if `#include "file"' appeared as the first line of 6466 the primary source file. However, the first directory searched 6467 for FILE is the preprocessor's working directory _instead of_ the 6468 directory containing the main source file. If not found there, it 6469 is searched for in the remainder of the `#include "..."' search 6470 chain as normal. 6471 6472 If multiple `-include' options are given, the files are included 6473 in the order they appear on the command line. 6474 6475`-imacros FILE' 6476 Exactly like `-include', except that any output produced by 6477 scanning FILE is thrown away. Macros it defines remain defined. 6478 This allows you to acquire all the macros from a header without 6479 also processing its declarations. 6480 6481 All files specified by `-imacros' are processed before all files 6482 specified by `-include'. 6483 6484`-idirafter DIR' 6485 Search DIR for header files, but do it _after_ all directories 6486 specified with `-I' and the standard system directories have been 6487 exhausted. DIR is treated as a system include directory. 6488 6489`-iprefix PREFIX' 6490 Specify PREFIX as the prefix for subsequent `-iwithprefix' 6491 options. If the prefix represents a directory, you should include 6492 the final `/'. 6493 6494`-iwithprefix DIR' 6495`-iwithprefixbefore DIR' 6496 Append DIR to the prefix specified previously with `-iprefix', and 6497 add the resulting directory to the include search path. 6498 `-iwithprefixbefore' puts it in the same place `-I' would; 6499 `-iwithprefix' puts it where `-idirafter' would. 6500 6501`-isysroot DIR' 6502 This option is like the `--sysroot' option, but applies only to 6503 header files. See the `--sysroot' option for more information. 6504 6505`-imultilib DIR' 6506 Use DIR as a subdirectory of the directory containing 6507 target-specific C++ headers. 6508 6509`-isystem DIR' 6510 Search DIR for header files, after all directories specified by 6511 `-I' but before the standard system directories. Mark it as a 6512 system directory, so that it gets the same special treatment as is 6513 applied to the standard system directories. 6514 6515`-iquote DIR' 6516 Search DIR only for header files requested with `#include "FILE"'; 6517 they are not searched for `#include <FILE>', before all 6518 directories specified by `-I' and before the standard system 6519 directories. 6520 6521`-fdollars-in-identifiers' 6522 Accept `$' in identifiers. 6523 6524`-fextended-identifiers' 6525 Accept universal character names in identifiers. This option is 6526 experimental; in a future version of GCC, it will be enabled by 6527 default for C99 and C++. 6528 6529`-fpreprocessed' 6530 Indicate to the preprocessor that the input file has already been 6531 preprocessed. This suppresses things like macro expansion, 6532 trigraph conversion, escaped newline splicing, and processing of 6533 most directives. The preprocessor still recognizes and removes 6534 comments, so that you can pass a file preprocessed with `-C' to 6535 the compiler without problems. In this mode the integrated 6536 preprocessor is little more than a tokenizer for the front ends. 6537 6538 `-fpreprocessed' is implicit if the input file has one of the 6539 extensions `.i', `.ii' or `.mi'. These are the extensions that 6540 GCC uses for preprocessed files created by `-save-temps'. 6541 6542`-ftabstop=WIDTH' 6543 Set the distance between tab stops. This helps the preprocessor 6544 report correct column numbers in warnings or errors, even if tabs 6545 appear on the line. If the value is less than 1 or greater than 6546 100, the option is ignored. The default is 8. 6547 6548`-fexec-charset=CHARSET' 6549 Set the execution character set, used for string and character 6550 constants. The default is UTF-8. CHARSET can be any encoding 6551 supported by the system's `iconv' library routine. 6552 6553`-fwide-exec-charset=CHARSET' 6554 Set the wide execution character set, used for wide string and 6555 character constants. The default is UTF-32 or UTF-16, whichever 6556 corresponds to the width of `wchar_t'. As with `-fexec-charset', 6557 CHARSET can be any encoding supported by the system's `iconv' 6558 library routine; however, you will have problems with encodings 6559 that do not fit exactly in `wchar_t'. 6560 6561`-finput-charset=CHARSET' 6562 Set the input character set, used for translation from the 6563 character set of the input file to the source character set used 6564 by GCC. If the locale does not specify, or GCC cannot get this 6565 information from the locale, the default is UTF-8. This can be 6566 overridden by either the locale or this command line option. 6567 Currently the command line option takes precedence if there's a 6568 conflict. CHARSET can be any encoding supported by the system's 6569 `iconv' library routine. 6570 6571`-fworking-directory' 6572 Enable generation of linemarkers in the preprocessor output that 6573 will let the compiler know the current working directory at the 6574 time of preprocessing. When this option is enabled, the 6575 preprocessor will emit, after the initial linemarker, a second 6576 linemarker with the current working directory followed by two 6577 slashes. GCC will use this directory, when it's present in the 6578 preprocessed input, as the directory emitted as the current 6579 working directory in some debugging information formats. This 6580 option is implicitly enabled if debugging information is enabled, 6581 but this can be inhibited with the negated form 6582 `-fno-working-directory'. If the `-P' flag is present in the 6583 command line, this option has no effect, since no `#line' 6584 directives are emitted whatsoever. 6585 6586`-fno-show-column' 6587 Do not print column numbers in diagnostics. This may be necessary 6588 if diagnostics are being scanned by a program that does not 6589 understand the column numbers, such as `dejagnu'. 6590 6591`-A PREDICATE=ANSWER' 6592 Make an assertion with the predicate PREDICATE and answer ANSWER. 6593 This form is preferred to the older form `-A PREDICATE(ANSWER)', 6594 which is still supported, because it does not use shell special 6595 characters. 6596 6597`-A -PREDICATE=ANSWER' 6598 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 6599 6600`-dCHARS' 6601 CHARS is a sequence of one or more of the following characters, 6602 and must not be preceded by a space. Other characters are 6603 interpreted by the compiler proper, or reserved for future 6604 versions of GCC, and so are silently ignored. If you specify 6605 characters whose behavior conflicts, the result is undefined. 6606 6607 `M' 6608 Instead of the normal output, generate a list of `#define' 6609 directives for all the macros defined during the execution of 6610 the preprocessor, including predefined macros. This gives 6611 you a way of finding out what is predefined in your version 6612 of the preprocessor. Assuming you have no file `foo.h', the 6613 command 6614 6615 touch foo.h; cpp -dM foo.h 6616 6617 will show all the predefined macros. 6618 6619 `D' 6620 Like `M' except in two respects: it does _not_ include the 6621 predefined macros, and it outputs _both_ the `#define' 6622 directives and the result of preprocessing. Both kinds of 6623 output go to the standard output file. 6624 6625 `N' 6626 Like `D', but emit only the macro names, not their expansions. 6627 6628 `I' 6629 Output `#include' directives in addition to the result of 6630 preprocessing. 6631 6632`-P' 6633 Inhibit generation of linemarkers in the output from the 6634 preprocessor. This might be useful when running the preprocessor 6635 on something that is not C code, and will be sent to a program 6636 which might be confused by the linemarkers. 6637 6638`-C' 6639 Do not discard comments. All comments are passed through to the 6640 output file, except for comments in processed directives, which 6641 are deleted along with the directive. 6642 6643 You should be prepared for side effects when using `-C'; it causes 6644 the preprocessor to treat comments as tokens in their own right. 6645 For example, comments appearing at the start of what would be a 6646 directive line have the effect of turning that line into an 6647 ordinary source line, since the first token on the line is no 6648 longer a `#'. 6649 6650`-CC' 6651 Do not discard comments, including during macro expansion. This is 6652 like `-C', except that comments contained within macros are also 6653 passed through to the output file where the macro is expanded. 6654 6655 In addition to the side-effects of the `-C' option, the `-CC' 6656 option causes all C++-style comments inside a macro to be 6657 converted to C-style comments. This is to prevent later use of 6658 that macro from inadvertently commenting out the remainder of the 6659 source line. 6660 6661 The `-CC' option is generally used to support lint comments. 6662 6663`-traditional-cpp' 6664 Try to imitate the behavior of old-fashioned C preprocessors, as 6665 opposed to ISO C preprocessors. 6666 6667`-trigraphs' 6668 Process trigraph sequences. These are three-character sequences, 6669 all starting with `??', that are defined by ISO C to stand for 6670 single characters. For example, `??/' stands for `\', so `'??/n'' 6671 is a character constant for a newline. By default, GCC ignores 6672 trigraphs, but in standard-conforming modes it converts them. See 6673 the `-std' and `-ansi' options. 6674 6675 The nine trigraphs and their replacements are 6676 6677 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 6678 Replacement: [ ] { } # \ ^ | ~ 6679 6680`-remap' 6681 Enable special code to work around file systems which only permit 6682 very short file names, such as MS-DOS. 6683 6684`--help' 6685`--target-help' 6686 Print text describing all the command line options instead of 6687 preprocessing anything. 6688 6689`-v' 6690 Verbose mode. Print out GNU CPP's version number at the beginning 6691 of execution, and report the final form of the include path. 6692 6693`-H' 6694 Print the name of each header file used, in addition to other 6695 normal activities. Each name is indented to show how deep in the 6696 `#include' stack it is. Precompiled header files are also 6697 printed, even if they are found to be invalid; an invalid 6698 precompiled header file is printed with `...x' and a valid one 6699 with `...!' . 6700 6701`-version' 6702`--version' 6703 Print out GNU CPP's version number. With one dash, proceed to 6704 preprocess as normal. With two dashes, exit immediately. 6705 6706 6707File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 6708 67093.12 Passing Options to the Assembler 6710===================================== 6711 6712You can pass options to the assembler. 6713 6714`-Wa,OPTION' 6715 Pass OPTION as an option to the assembler. If OPTION contains 6716 commas, it is split into multiple options at the commas. 6717 6718`-Xassembler OPTION' 6719 Pass OPTION as an option to the assembler. You can use this to 6720 supply system-specific assembler options which GCC does not know 6721 how to recognize. 6722 6723 If you want to pass an option that takes an argument, you must use 6724 `-Xassembler' twice, once for the option and once for the argument. 6725 6726 6727 6728File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 6729 67303.13 Options for Linking 6731======================== 6732 6733These options come into play when the compiler links object files into 6734an executable output file. They are meaningless if the compiler is not 6735doing a link step. 6736 6737`OBJECT-FILE-NAME' 6738 A file name that does not end in a special recognized suffix is 6739 considered to name an object file or library. (Object files are 6740 distinguished from libraries by the linker according to the file 6741 contents.) If linking is done, these object files are used as 6742 input to the linker. 6743 6744`-c' 6745`-S' 6746`-E' 6747 If any of these options is used, then the linker is not run, and 6748 object file names should not be used as arguments. *Note Overall 6749 Options::. 6750 6751`-lLIBRARY' 6752`-l LIBRARY' 6753 Search the library named LIBRARY when linking. (The second 6754 alternative with the library as a separate argument is only for 6755 POSIX compliance and is not recommended.) 6756 6757 It makes a difference where in the command you write this option; 6758 the linker searches and processes libraries and object files in 6759 the order they are specified. Thus, `foo.o -lz bar.o' searches 6760 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 6761 refers to functions in `z', those functions may not be loaded. 6762 6763 The linker searches a standard list of directories for the library, 6764 which is actually a file named `libLIBRARY.a'. The linker then 6765 uses this file as if it had been specified precisely by name. 6766 6767 The directories searched include several standard system 6768 directories plus any that you specify with `-L'. 6769 6770 Normally the files found this way are library files--archive files 6771 whose members are object files. The linker handles an archive 6772 file by scanning through it for members which define symbols that 6773 have so far been referenced but not defined. But if the file that 6774 is found is an ordinary object file, it is linked in the usual 6775 fashion. The only difference between using an `-l' option and 6776 specifying a file name is that `-l' surrounds LIBRARY with `lib' 6777 and `.a' and searches several directories. 6778 6779`-lobjc' 6780 You need this special case of the `-l' option in order to link an 6781 Objective-C or Objective-C++ program. 6782 6783`-nostartfiles' 6784 Do not use the standard system startup files when linking. The 6785 standard system libraries are used normally, unless `-nostdlib' or 6786 `-nodefaultlibs' is used. 6787 6788`-nodefaultlibs' 6789 Do not use the standard system libraries when linking. Only the 6790 libraries you specify will be passed to the linker. The standard 6791 startup files are used normally, unless `-nostartfiles' is used. 6792 The compiler may generate calls to `memcmp', `memset', `memcpy' 6793 and `memmove'. These entries are usually resolved by entries in 6794 libc. These entry points should be supplied through some other 6795 mechanism when this option is specified. 6796 6797`-nostdlib' 6798 Do not use the standard system startup files or libraries when 6799 linking. No startup files and only the libraries you specify will 6800 be passed to the linker. The compiler may generate calls to 6801 `memcmp', `memset', `memcpy' and `memmove'. These entries are 6802 usually resolved by entries in libc. These entry points should be 6803 supplied through some other mechanism when this option is 6804 specified. 6805 6806 One of the standard libraries bypassed by `-nostdlib' and 6807 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 6808 that GCC uses to overcome shortcomings of particular machines, or 6809 special needs for some languages. (*Note Interfacing to GCC 6810 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 6811 most cases, you need `libgcc.a' even when you want to avoid other 6812 standard libraries. In other words, when you specify `-nostdlib' 6813 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 6814 This ensures that you have no unresolved references to internal GCC 6815 library subroutines. (For example, `__main', used to ensure C++ 6816 constructors will be called; *note `collect2': (gccint)Collect2.) 6817 6818`-pie' 6819 Produce a position independent executable on targets which support 6820 it. For predictable results, you must also specify the same set 6821 of options that were used to generate code (`-fpie', `-fPIE', or 6822 model suboptions) when you specify this option. 6823 6824`-rdynamic' 6825 Pass the flag `-export-dynamic' to the ELF linker, on targets that 6826 support it. This instructs the linker to add all symbols, not only 6827 used ones, to the dynamic symbol table. This option is needed for 6828 some uses of `dlopen' or to allow obtaining backtraces from within 6829 a program. 6830 6831`-s' 6832 Remove all symbol table and relocation information from the 6833 executable. 6834 6835`-static' 6836 On systems that support dynamic linking, this prevents linking 6837 with the shared libraries. On other systems, this option has no 6838 effect. 6839 6840`-shared' 6841 Produce a shared object which can then be linked with other 6842 objects to form an executable. Not all systems support this 6843 option. For predictable results, you must also specify the same 6844 set of options that were used to generate code (`-fpic', `-fPIC', 6845 or model suboptions) when you specify this option.(1) 6846 6847`-shared-libgcc' 6848`-static-libgcc' 6849 On systems that provide `libgcc' as a shared library, these options 6850 force the use of either the shared or static version respectively. 6851 If no shared version of `libgcc' was built when the compiler was 6852 configured, these options have no effect. 6853 6854 There are several situations in which an application should use the 6855 shared `libgcc' instead of the static version. The most common of 6856 these is when the application wishes to throw and catch exceptions 6857 across different shared libraries. In that case, each of the 6858 libraries as well as the application itself should use the shared 6859 `libgcc'. 6860 6861 Therefore, the G++ and GCJ drivers automatically add 6862 `-shared-libgcc' whenever you build a shared library or a main 6863 executable, because C++ and Java programs typically use 6864 exceptions, so this is the right thing to do. 6865 6866 If, instead, you use the GCC driver to create shared libraries, 6867 you may find that they will not always be linked with the shared 6868 `libgcc'. If GCC finds, at its configuration time, that you have 6869 a non-GNU linker or a GNU linker that does not support option 6870 `--eh-frame-hdr', it will link the shared version of `libgcc' into 6871 shared libraries by default. Otherwise, it will take advantage of 6872 the linker and optimize away the linking with the shared version 6873 of `libgcc', linking with the static version of libgcc by default. 6874 This allows exceptions to propagate through such shared 6875 libraries, without incurring relocation costs at library load time. 6876 6877 However, if a library or main executable is supposed to throw or 6878 catch exceptions, you must link it using the G++ or GCJ driver, as 6879 appropriate for the languages used in the program, or using the 6880 option `-shared-libgcc', such that it is linked with the shared 6881 `libgcc'. 6882 6883`-symbolic' 6884 Bind references to global symbols when building a shared object. 6885 Warn about any unresolved references (unless overridden by the 6886 link editor option `-Xlinker -z -Xlinker defs'). Only a few 6887 systems support this option. 6888 6889`-Xlinker OPTION' 6890 Pass OPTION as an option to the linker. You can use this to 6891 supply system-specific linker options which GCC does not know how 6892 to recognize. 6893 6894 If you want to pass an option that takes an argument, you must use 6895 `-Xlinker' twice, once for the option and once for the argument. 6896 For example, to pass `-assert definitions', you must write 6897 `-Xlinker -assert -Xlinker definitions'. It does not work to write 6898 `-Xlinker "-assert definitions"', because this passes the entire 6899 string as a single argument, which is not what the linker expects. 6900 6901`-Wl,OPTION' 6902 Pass OPTION as an option to the linker. If OPTION contains 6903 commas, it is split into multiple options at the commas. 6904 6905`-u SYMBOL' 6906 Pretend the symbol SYMBOL is undefined, to force linking of 6907 library modules to define it. You can use `-u' multiple times with 6908 different symbols to force loading of additional library modules. 6909 6910 ---------- Footnotes ---------- 6911 6912 (1) On some systems, `gcc -shared' needs to build supplementary stub 6913code for constructors to work. On multi-libbed systems, `gcc -shared' 6914must select the correct support libraries to link against. Failing to 6915supply the correct flags may lead to subtle defects. Supplying them in 6916cases where they are not necessary is innocuous. 6917 6918 6919File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 6920 69213.14 Options for Directory Search 6922================================= 6923 6924These options specify directories to search for header files, for 6925libraries and for parts of the compiler: 6926 6927`-IDIR' 6928 Add the directory DIR to the head of the list of directories to be 6929 searched for header files. This can be used to override a system 6930 header file, substituting your own version, since these 6931 directories are searched before the system header file 6932 directories. However, you should not use this option to add 6933 directories that contain vendor-supplied system header files (use 6934 `-isystem' for that). If you use more than one `-I' option, the 6935 directories are scanned in left-to-right order; the standard 6936 system directories come after. 6937 6938 If a standard system include directory, or a directory specified 6939 with `-isystem', is also specified with `-I', the `-I' option will 6940 be ignored. The directory will still be searched but as a system 6941 directory at its normal position in the system include chain. 6942 This is to ensure that GCC's procedure to fix buggy system headers 6943 and the ordering for the include_next directive are not 6944 inadvertently changed. If you really need to change the search 6945 order for system directories, use the `-nostdinc' and/or 6946 `-isystem' options. 6947 6948`-iquoteDIR' 6949 Add the directory DIR to the head of the list of directories to be 6950 searched for header files only for the case of `#include "FILE"'; 6951 they are not searched for `#include <FILE>', otherwise just like 6952 `-I'. 6953 6954`-LDIR' 6955 Add directory DIR to the list of directories to be searched for 6956 `-l'. 6957 6958`-BPREFIX' 6959 This option specifies where to find the executables, libraries, 6960 include files, and data files of the compiler itself. 6961 6962 The compiler driver program runs one or more of the subprograms 6963 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 6964 program it tries to run, both with and without `MACHINE/VERSION/' 6965 (*note Target Options::). 6966 6967 For each subprogram to be run, the compiler driver first tries the 6968 `-B' prefix, if any. If that name is not found, or if `-B' was 6969 not specified, the driver tries two standard prefixes, which are 6970 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 6971 results in a file name that is found, the unmodified program name 6972 is searched for using the directories specified in your `PATH' 6973 environment variable. 6974 6975 The compiler will check to see if the path provided by the `-B' 6976 refers to a directory, and if necessary it will add a directory 6977 separator character at the end of the path. 6978 6979 `-B' prefixes that effectively specify directory names also apply 6980 to libraries in the linker, because the compiler translates these 6981 options into `-L' options for the linker. They also apply to 6982 includes files in the preprocessor, because the compiler 6983 translates these options into `-isystem' options for the 6984 preprocessor. In this case, the compiler appends `include' to the 6985 prefix. 6986 6987 The run-time support file `libgcc.a' can also be searched for using 6988 the `-B' prefix, if needed. If it is not found there, the two 6989 standard prefixes above are tried, and that is all. The file is 6990 left out of the link if it is not found by those means. 6991 6992 Another way to specify a prefix much like the `-B' prefix is to use 6993 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 6994 Variables::. 6995 6996 As a special kludge, if the path provided by `-B' is 6997 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 6998 will be replaced by `[dir/]include'. This is to help with 6999 boot-strapping the compiler. 7000 7001`-specs=FILE' 7002 Process FILE after the compiler reads in the standard `specs' 7003 file, in order to override the defaults that the `gcc' driver 7004 program uses when determining what switches to pass to `cc1', 7005 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 7006 specified on the command line, and they are processed in order, 7007 from left to right. 7008 7009`--sysroot=DIR' 7010 Use DIR as the logical root directory for headers and libraries. 7011 For example, if the compiler would normally search for headers in 7012 `/usr/include' and libraries in `/usr/lib', it will instead search 7013 `DIR/usr/include' and `DIR/usr/lib'. 7014 7015 If you use both this option and the `-isysroot' option, then the 7016 `--sysroot' option will apply to libraries, but the `-isysroot' 7017 option will apply to header files. 7018 7019 The GNU linker (beginning with version 2.16) has the necessary 7020 support for this option. If your linker does not support this 7021 option, the header file aspect of `--sysroot' will still work, but 7022 the library aspect will not. 7023 7024`-I-' 7025 This option has been deprecated. Please use `-iquote' instead for 7026 `-I' directories before the `-I-' and remove the `-I-'. Any 7027 directories you specify with `-I' options before the `-I-' option 7028 are searched only for the case of `#include "FILE"'; they are not 7029 searched for `#include <FILE>'. 7030 7031 If additional directories are specified with `-I' options after 7032 the `-I-', these directories are searched for all `#include' 7033 directives. (Ordinarily _all_ `-I' directories are used this way.) 7034 7035 In addition, the `-I-' option inhibits the use of the current 7036 directory (where the current input file came from) as the first 7037 search directory for `#include "FILE"'. There is no way to 7038 override this effect of `-I-'. With `-I.' you can specify 7039 searching the directory which was current when the compiler was 7040 invoked. That is not exactly the same as what the preprocessor 7041 does by default, but it is often satisfactory. 7042 7043 `-I-' does not inhibit the use of the standard system directories 7044 for header files. Thus, `-I-' and `-nostdinc' are independent. 7045 7046 7047File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 7048 70493.15 Specifying subprocesses and the switches to pass to them 7050============================================================= 7051 7052`gcc' is a driver program. It performs its job by invoking a sequence 7053of other programs to do the work of compiling, assembling and linking. 7054GCC interprets its command-line parameters and uses these to deduce 7055which programs it should invoke, and which command-line options it 7056ought to place on their command lines. This behavior is controlled by 7057"spec strings". In most cases there is one spec string for each 7058program that GCC can invoke, but a few programs have multiple spec 7059strings to control their behavior. The spec strings built into GCC can 7060be overridden by using the `-specs=' command-line switch to specify a 7061spec file. 7062 7063 "Spec files" are plaintext files that are used to construct spec 7064strings. They consist of a sequence of directives separated by blank 7065lines. The type of directive is determined by the first non-whitespace 7066character on the line and it can be one of the following: 7067 7068`%COMMAND' 7069 Issues a COMMAND to the spec file processor. The commands that can 7070 appear here are: 7071 7072 `%include <FILE>' 7073 Search for FILE and insert its text at the current point in 7074 the specs file. 7075 7076 `%include_noerr <FILE>' 7077 Just like `%include', but do not generate an error message if 7078 the include file cannot be found. 7079 7080 `%rename OLD_NAME NEW_NAME' 7081 Rename the spec string OLD_NAME to NEW_NAME. 7082 7083 7084`*[SPEC_NAME]:' 7085 This tells the compiler to create, override or delete the named 7086 spec string. All lines after this directive up to the next 7087 directive or blank line are considered to be the text for the spec 7088 string. If this results in an empty string then the spec will be 7089 deleted. (Or, if the spec did not exist, then nothing will 7090 happened.) Otherwise, if the spec does not currently exist a new 7091 spec will be created. If the spec does exist then its contents 7092 will be overridden by the text of this directive, unless the first 7093 character of that text is the `+' character, in which case the 7094 text will be appended to the spec. 7095 7096`[SUFFIX]:' 7097 Creates a new `[SUFFIX] spec' pair. All lines after this directive 7098 and up to the next directive or blank line are considered to make 7099 up the spec string for the indicated suffix. When the compiler 7100 encounters an input file with the named suffix, it will processes 7101 the spec string in order to work out how to compile that file. 7102 For example: 7103 7104 .ZZ: 7105 z-compile -input %i 7106 7107 This says that any input file whose name ends in `.ZZ' should be 7108 passed to the program `z-compile', which should be invoked with the 7109 command-line switch `-input' and with the result of performing the 7110 `%i' substitution. (See below.) 7111 7112 As an alternative to providing a spec string, the text that 7113 follows a suffix directive can be one of the following: 7114 7115 `@LANGUAGE' 7116 This says that the suffix is an alias for a known LANGUAGE. 7117 This is similar to using the `-x' command-line switch to GCC 7118 to specify a language explicitly. For example: 7119 7120 .ZZ: 7121 @c++ 7122 7123 Says that .ZZ files are, in fact, C++ source files. 7124 7125 `#NAME' 7126 This causes an error messages saying: 7127 7128 NAME compiler not installed on this system. 7129 7130 GCC already has an extensive list of suffixes built into it. This 7131 directive will add an entry to the end of the list of suffixes, but 7132 since the list is searched from the end backwards, it is 7133 effectively possible to override earlier entries using this 7134 technique. 7135 7136 7137 GCC has the following spec strings built into it. Spec files can 7138override these strings or create their own. Note that individual 7139targets can also add their own spec strings to this list. 7140 7141 asm Options to pass to the assembler 7142 asm_final Options to pass to the assembler post-processor 7143 cpp Options to pass to the C preprocessor 7144 cc1 Options to pass to the C compiler 7145 cc1plus Options to pass to the C++ compiler 7146 endfile Object files to include at the end of the link 7147 link Options to pass to the linker 7148 lib Libraries to include on the command line to the linker 7149 libgcc Decides which GCC support library to pass to the linker 7150 linker Sets the name of the linker 7151 predefines Defines to be passed to the C preprocessor 7152 signed_char Defines to pass to CPP to say whether `char' is signed 7153 by default 7154 startfile Object files to include at the start of the link 7155 7156 Here is a small example of a spec file: 7157 7158 %rename lib old_lib 7159 7160 *lib: 7161 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 7162 7163 This example renames the spec called `lib' to `old_lib' and then 7164overrides the previous definition of `lib' with a new one. The new 7165definition adds in some extra command-line options before including the 7166text of the old definition. 7167 7168 "Spec strings" are a list of command-line options to be passed to their 7169corresponding program. In addition, the spec strings can contain 7170`%'-prefixed sequences to substitute variable text or to conditionally 7171insert text into the command line. Using these constructs it is 7172possible to generate quite complex command lines. 7173 7174 Here is a table of all defined `%'-sequences for spec strings. Note 7175that spaces are not generated automatically around the results of 7176expanding these sequences. Therefore you can concatenate them together 7177or combine them with constant text in a single argument. 7178 7179`%%' 7180 Substitute one `%' into the program name or argument. 7181 7182`%i' 7183 Substitute the name of the input file being processed. 7184 7185`%b' 7186 Substitute the basename of the input file being processed. This 7187 is the substring up to (and not including) the last period and not 7188 including the directory. 7189 7190`%B' 7191 This is the same as `%b', but include the file suffix (text after 7192 the last period). 7193 7194`%d' 7195 Marks the argument containing or following the `%d' as a temporary 7196 file name, so that that file will be deleted if GCC exits 7197 successfully. Unlike `%g', this contributes no text to the 7198 argument. 7199 7200`%gSUFFIX' 7201 Substitute a file name that has suffix SUFFIX and is chosen once 7202 per compilation, and mark the argument in the same way as `%d'. 7203 To reduce exposure to denial-of-service attacks, the file name is 7204 now chosen in a way that is hard to predict even when previously 7205 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 7206 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 7207 matches the regexp `[.A-Za-z]*' or the special string `%O', which 7208 is treated exactly as if `%O' had been preprocessed. Previously, 7209 `%g' was simply substituted with a file name chosen once per 7210 compilation, without regard to any appended suffix (which was 7211 therefore treated just like ordinary text), making such attacks 7212 more likely to succeed. 7213 7214`%uSUFFIX' 7215 Like `%g', but generates a new temporary file name even if 7216 `%uSUFFIX' was already seen. 7217 7218`%USUFFIX' 7219 Substitutes the last file name generated with `%uSUFFIX', 7220 generating a new one if there is no such last file name. In the 7221 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 7222 they don't share the same suffix _space_, so `%g.s ... %U.s ... 7223 %g.s ... %U.s' would involve the generation of two distinct file 7224 names, one for each `%g.s' and another for each `%U.s'. 7225 Previously, `%U' was simply substituted with a file name chosen 7226 for the previous `%u', without regard to any appended suffix. 7227 7228`%jSUFFIX' 7229 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 7230 writable, and if save-temps is off; otherwise, substitute the name 7231 of a temporary file, just like `%u'. This temporary file is not 7232 meant for communication between processes, but rather as a junk 7233 disposal mechanism. 7234 7235`%|SUFFIX' 7236`%mSUFFIX' 7237 Like `%g', except if `-pipe' is in effect. In that case `%|' 7238 substitutes a single dash and `%m' substitutes nothing at all. 7239 These are the two most common ways to instruct a program that it 7240 should read from standard input or write to standard output. If 7241 you need something more elaborate you can use an `%{pipe:`X'}' 7242 construct: see for example `f/lang-specs.h'. 7243 7244`%.SUFFIX' 7245 Substitutes .SUFFIX for the suffixes of a matched switch's args 7246 when it is subsequently output with `%*'. SUFFIX is terminated by 7247 the next space or %. 7248 7249`%w' 7250 Marks the argument containing or following the `%w' as the 7251 designated output file of this compilation. This puts the argument 7252 into the sequence of arguments that `%o' will substitute later. 7253 7254`%o' 7255 Substitutes the names of all the output files, with spaces 7256 automatically placed around them. You should write spaces around 7257 the `%o' as well or the results are undefined. `%o' is for use in 7258 the specs for running the linker. Input files whose names have no 7259 recognized suffix are not compiled at all, but they are included 7260 among the output files, so they will be linked. 7261 7262`%O' 7263 Substitutes the suffix for object files. Note that this is 7264 handled specially when it immediately follows `%g, %u, or %U', 7265 because of the need for those to form complete file names. The 7266 handling is such that `%O' is treated exactly as if it had already 7267 been substituted, except that `%g, %u, and %U' do not currently 7268 support additional SUFFIX characters following `%O' as they would 7269 following, for example, `.o'. 7270 7271`%p' 7272 Substitutes the standard macro predefinitions for the current 7273 target machine. Use this when running `cpp'. 7274 7275`%P' 7276 Like `%p', but puts `__' before and after the name of each 7277 predefined macro, except for macros that start with `__' or with 7278 `_L', where L is an uppercase letter. This is for ISO C. 7279 7280`%I' 7281 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 7282 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 7283 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 7284 necessary. 7285 7286`%s' 7287 Current argument is the name of a library or startup file of some 7288 sort. Search for that file in a standard list of directories and 7289 substitute the full name found. 7290 7291`%eSTR' 7292 Print STR as an error message. STR is terminated by a newline. 7293 Use this when inconsistent options are detected. 7294 7295`%(NAME)' 7296 Substitute the contents of spec string NAME at this point. 7297 7298`%[NAME]' 7299 Like `%(...)' but put `__' around `-D' arguments. 7300 7301`%x{OPTION}' 7302 Accumulate an option for `%X'. 7303 7304`%X' 7305 Output the accumulated linker options specified by `-Wl' or a `%x' 7306 spec string. 7307 7308`%Y' 7309 Output the accumulated assembler options specified by `-Wa'. 7310 7311`%Z' 7312 Output the accumulated preprocessor options specified by `-Wp'. 7313 7314`%a' 7315 Process the `asm' spec. This is used to compute the switches to 7316 be passed to the assembler. 7317 7318`%A' 7319 Process the `asm_final' spec. This is a spec string for passing 7320 switches to an assembler post-processor, if such a program is 7321 needed. 7322 7323`%l' 7324 Process the `link' spec. This is the spec for computing the 7325 command line passed to the linker. Typically it will make use of 7326 the `%L %G %S %D and %E' sequences. 7327 7328`%D' 7329 Dump out a `-L' option for each directory that GCC believes might 7330 contain startup files. If the target supports multilibs then the 7331 current multilib directory will be prepended to each of these 7332 paths. 7333 7334`%L' 7335 Process the `lib' spec. This is a spec string for deciding which 7336 libraries should be included on the command line to the linker. 7337 7338`%G' 7339 Process the `libgcc' spec. This is a spec string for deciding 7340 which GCC support library should be included on the command line 7341 to the linker. 7342 7343`%S' 7344 Process the `startfile' spec. This is a spec for deciding which 7345 object files should be the first ones passed to the linker. 7346 Typically this might be a file named `crt0.o'. 7347 7348`%E' 7349 Process the `endfile' spec. This is a spec string that specifies 7350 the last object files that will be passed to the linker. 7351 7352`%C' 7353 Process the `cpp' spec. This is used to construct the arguments 7354 to be passed to the C preprocessor. 7355 7356`%1' 7357 Process the `cc1' spec. This is used to construct the options to 7358 be passed to the actual C compiler (`cc1'). 7359 7360`%2' 7361 Process the `cc1plus' spec. This is used to construct the options 7362 to be passed to the actual C++ compiler (`cc1plus'). 7363 7364`%*' 7365 Substitute the variable part of a matched option. See below. 7366 Note that each comma in the substituted string is replaced by a 7367 single space. 7368 7369`%<`S'' 7370 Remove all occurrences of `-S' from the command line. Note--this 7371 command is position dependent. `%' commands in the spec string 7372 before this one will see `-S', `%' commands in the spec string 7373 after this one will not. 7374 7375`%:FUNCTION(ARGS)' 7376 Call the named function FUNCTION, passing it ARGS. ARGS is first 7377 processed as a nested spec string, then split into an argument 7378 vector in the usual fashion. The function returns a string which 7379 is processed as if it had appeared literally as part of the 7380 current spec. 7381 7382 The following built-in spec functions are provided: 7383 7384 ``if-exists'' 7385 The `if-exists' spec function takes one argument, an absolute 7386 pathname to a file. If the file exists, `if-exists' returns 7387 the pathname. Here is a small example of its usage: 7388 7389 *startfile: 7390 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 7391 7392 ``if-exists-else'' 7393 The `if-exists-else' spec function is similar to the 7394 `if-exists' spec function, except that it takes two 7395 arguments. The first argument is an absolute pathname to a 7396 file. If the file exists, `if-exists-else' returns the 7397 pathname. If it does not exist, it returns the second 7398 argument. This way, `if-exists-else' can be used to select 7399 one file or another, based on the existence of the first. 7400 Here is a small example of its usage: 7401 7402 *startfile: 7403 crt0%O%s %:if-exists(crti%O%s) \ 7404 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 7405 7406 ``replace-outfile'' 7407 The `replace-outfile' spec function takes two arguments. It 7408 looks for the first argument in the outfiles array and 7409 replaces it with the second argument. Here is a small 7410 example of its usage: 7411 7412 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 7413 7414 7415`%{`S'}' 7416 Substitutes the `-S' switch, if that switch was given to GCC. If 7417 that switch was not specified, this substitutes nothing. Note that 7418 the leading dash is omitted when specifying this option, and it is 7419 automatically inserted if the substitution is performed. Thus the 7420 spec string `%{foo}' would match the command-line option `-foo' 7421 and would output the command line option `-foo'. 7422 7423`%W{`S'}' 7424 Like %{`S'} but mark last argument supplied within as a file to be 7425 deleted on failure. 7426 7427`%{`S'*}' 7428 Substitutes all the switches specified to GCC whose names start 7429 with `-S', but which also take an argument. This is used for 7430 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 7431 being one switch whose names starts with `o'. %{o*} would 7432 substitute this text, including the space. Thus two arguments 7433 would be generated. 7434 7435`%{`S'*&`T'*}' 7436 Like %{`S'*}, but preserve order of `S' and `T' options (the order 7437 of `S' and `T' in the spec is not significant). There can be any 7438 number of ampersand-separated variables; for each the wild card is 7439 optional. Useful for CPP as `%{D*&U*&A*}'. 7440 7441`%{`S':`X'}' 7442 Substitutes `X', if the `-S' switch was given to GCC. 7443 7444`%{!`S':`X'}' 7445 Substitutes `X', if the `-S' switch was _not_ given to GCC. 7446 7447`%{`S'*:`X'}' 7448 Substitutes `X' if one or more switches whose names start with 7449 `-S' are specified to GCC. Normally `X' is substituted only once, 7450 no matter how many such switches appeared. However, if `%*' 7451 appears somewhere in `X', then `X' will be substituted once for 7452 each matching switch, with the `%*' replaced by the part of that 7453 switch that matched the `*'. 7454 7455`%{.`S':`X'}' 7456 Substitutes `X', if processing a file with suffix `S'. 7457 7458`%{!.`S':`X'}' 7459 Substitutes `X', if _not_ processing a file with suffix `S'. 7460 7461`%{`S'|`P':`X'}' 7462 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 7463 be combined with `!', `.', and `*' sequences as well, although 7464 they have a stronger binding than the `|'. If `%*' appears in 7465 `X', all of the alternatives must be starred, and only the first 7466 matching alternative is substituted. 7467 7468 For example, a spec string like this: 7469 7470 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 7471 7472 will output the following command-line options from the following 7473 input command-line options: 7474 7475 fred.c -foo -baz 7476 jim.d -bar -boggle 7477 -d fred.c -foo -baz -boggle 7478 -d jim.d -bar -baz -boggle 7479 7480`%{S:X; T:Y; :D}' 7481 If `S' was given to GCC, substitutes `X'; else if `T' was given to 7482 GCC, substitutes `Y'; else substitutes `D'. There can be as many 7483 clauses as you need. This may be combined with `.', `!', `|', and 7484 `*' as needed. 7485 7486 7487 The conditional text `X' in a %{`S':`X'} or similar construct may 7488contain other nested `%' constructs or spaces, or even newlines. They 7489are processed as usual, as described above. Trailing white space in 7490`X' is ignored. White space may also appear anywhere on the left side 7491of the colon in these constructs, except between `.' or `*' and the 7492corresponding word. 7493 7494 The `-O', `-f', `-m', and `-W' switches are handled specifically in 7495these constructs. If another value of `-O' or the negated form of a 7496`-f', `-m', or `-W' switch is found later in the command line, the 7497earlier switch value is ignored, except with {`S'*} where `S' is just 7498one letter, which passes all matching options. 7499 7500 The character `|' at the beginning of the predicate text is used to 7501indicate that a command should be piped to the following command, but 7502only if `-pipe' is specified. 7503 7504 It is built into GCC which switches take arguments and which do not. 7505(You might think it would be useful to generalize this to allow each 7506compiler's spec to say which switches take arguments. But this cannot 7507be done in a consistent fashion. GCC cannot even decide which input 7508files have been specified without knowing which switches take arguments, 7509and it must know which input files to compile in order to tell which 7510compilers to run). 7511 7512 GCC also knows implicitly that arguments starting in `-l' are to be 7513treated as compiler output files, and passed to the linker in their 7514proper position among the other output files. 7515 7516 7517File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 7518 75193.16 Specifying Target Machine and Compiler Version 7520=================================================== 7521 7522The usual way to run GCC is to run the executable called `gcc', or 7523`<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to 7524run a version other than the one that was installed last. Sometimes 7525this is inconvenient, so GCC provides options that will switch to 7526another cross-compiler or version. 7527 7528`-b MACHINE' 7529 The argument MACHINE specifies the target machine for compilation. 7530 7531 The value to use for MACHINE is the same as was specified as the 7532 machine type when configuring GCC as a cross-compiler. For 7533 example, if a cross-compiler was configured with `configure 7534 arm-elf', meaning to compile for an arm processor with elf 7535 binaries, then you would specify `-b arm-elf' to run that cross 7536 compiler. Because there are other options beginning with `-b', the 7537 configuration must contain a hyphen. 7538 7539`-V VERSION' 7540 The argument VERSION specifies which version of GCC to run. This 7541 is useful when multiple versions are installed. For example, 7542 VERSION might be `4.0', meaning to run GCC version 4.0. 7543 7544 The `-V' and `-b' options work by running the 7545`<machine>-gcc-<version>' executable, so there's no real reason to use 7546them if you can just run that directly. 7547 7548 7549File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 7550 75513.17 Hardware Models and Configurations 7552======================================= 7553 7554Earlier we discussed the standard option `-b' which chooses among 7555different installed compilers for completely different target machines, 7556such as VAX vs. 68000 vs. 80386. 7557 7558 In addition, each of these target machine types can have its own 7559special options, starting with `-m', to choose among various hardware 7560models or configurations--for example, 68010 vs 68020, floating 7561coprocessor or none. A single installed version of the compiler can 7562compile for any model or configuration, according to the options 7563specified. 7564 7565 Some configurations of the compiler also support additional special 7566options, usually for compatibility with other compilers on the same 7567platform. 7568 7569* Menu: 7570 7571* ARC Options:: 7572* ARM Options:: 7573* AVR Options:: 7574* Blackfin Options:: 7575* CRIS Options:: 7576* CRX Options:: 7577* Darwin Options:: 7578* DEC Alpha Options:: 7579* DEC Alpha/VMS Options:: 7580* FRV Options:: 7581* GNU/Linux Options:: 7582* H8/300 Options:: 7583* HPPA Options:: 7584* i386 and x86-64 Options:: 7585* IA-64 Options:: 7586* M32C Options:: 7587* M32R/D Options:: 7588* M680x0 Options:: 7589* M68hc1x Options:: 7590* MCore Options:: 7591* MIPS Options:: 7592* MMIX Options:: 7593* MN10300 Options:: 7594* MT Options:: 7595* PDP-11 Options:: 7596* PowerPC Options:: 7597* RS/6000 and PowerPC Options:: 7598* S/390 and zSeries Options:: 7599* Score Options:: 7600* SH Options:: 7601* SPARC Options:: 7602* System V Options:: 7603* TMS320C3x/C4x Options:: 7604* V850 Options:: 7605* VAX Options:: 7606* x86-64 Options:: 7607* Xstormy16 Options:: 7608* Xtensa Options:: 7609* zSeries Options:: 7610 7611 7612File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 7613 76143.17.1 ARC Options 7615------------------ 7616 7617These options are defined for ARC implementations: 7618 7619`-EL' 7620 Compile code for little endian mode. This is the default. 7621 7622`-EB' 7623 Compile code for big endian mode. 7624 7625`-mmangle-cpu' 7626 Prepend the name of the cpu to all public symbol names. In 7627 multiple-processor systems, there are many ARC variants with 7628 different instruction and register set characteristics. This flag 7629 prevents code compiled for one cpu to be linked with code compiled 7630 for another. No facility exists for handling variants that are 7631 "almost identical". This is an all or nothing option. 7632 7633`-mcpu=CPU' 7634 Compile code for ARC variant CPU. Which variants are supported 7635 depend on the configuration. All variants support `-mcpu=base', 7636 this is the default. 7637 7638`-mtext=TEXT-SECTION' 7639`-mdata=DATA-SECTION' 7640`-mrodata=READONLY-DATA-SECTION' 7641 Put functions, data, and readonly data in TEXT-SECTION, 7642 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 7643 This can be overridden with the `section' attribute. *Note 7644 Variable Attributes::. 7645 7646 7647 7648File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 7649 76503.17.2 ARM Options 7651------------------ 7652 7653These `-m' options are defined for Advanced RISC Machines (ARM) 7654architectures: 7655 7656`-mabi=NAME' 7657 Generate code for the specified ABI. Permissible values are: 7658 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 7659 7660`-mapcs-frame' 7661 Generate a stack frame that is compliant with the ARM Procedure 7662 Call Standard for all functions, even if this is not strictly 7663 necessary for correct execution of the code. Specifying 7664 `-fomit-frame-pointer' with this option will cause the stack 7665 frames not to be generated for leaf functions. The default is 7666 `-mno-apcs-frame'. 7667 7668`-mapcs' 7669 This is a synonym for `-mapcs-frame'. 7670 7671`-mthumb-interwork' 7672 Generate code which supports calling between the ARM and Thumb 7673 instruction sets. Without this option the two instruction sets 7674 cannot be reliably used inside one program. The default is 7675 `-mno-thumb-interwork', since slightly larger code is generated 7676 when `-mthumb-interwork' is specified. 7677 7678`-mno-sched-prolog' 7679 Prevent the reordering of instructions in the function prolog, or 7680 the merging of those instruction with the instructions in the 7681 function's body. This means that all functions will start with a 7682 recognizable set of instructions (or in fact one of a choice from 7683 a small set of different function prologues), and this information 7684 can be used to locate the start if functions inside an executable 7685 piece of code. The default is `-msched-prolog'. 7686 7687`-mhard-float' 7688 Generate output containing floating point instructions. This is 7689 the default. 7690 7691`-msoft-float' 7692 Generate output containing library calls for floating point. 7693 *Warning:* the requisite libraries are not available for all ARM 7694 targets. Normally the facilities of the machine's usual C 7695 compiler are used, but this cannot be done directly in 7696 cross-compilation. You must make your own arrangements to provide 7697 suitable library functions for cross-compilation. 7698 7699 `-msoft-float' changes the calling convention in the output file; 7700 therefore, it is only useful if you compile _all_ of a program with 7701 this option. In particular, you need to compile `libgcc.a', the 7702 library that comes with GCC, with `-msoft-float' in order for this 7703 to work. 7704 7705`-mfloat-abi=NAME' 7706 Specifies which ABI to use for floating point values. Permissible 7707 values are: `soft', `softfp' and `hard'. 7708 7709 `soft' and `hard' are equivalent to `-msoft-float' and 7710 `-mhard-float' respectively. `softfp' allows the generation of 7711 floating point instructions, but still uses the soft-float calling 7712 conventions. 7713 7714`-mlittle-endian' 7715 Generate code for a processor running in little-endian mode. This 7716 is the default for all standard configurations. 7717 7718`-mbig-endian' 7719 Generate code for a processor running in big-endian mode; the 7720 default is to compile code for a little-endian processor. 7721 7722`-mwords-little-endian' 7723 This option only applies when generating code for big-endian 7724 processors. Generate code for a little-endian word order but a 7725 big-endian byte order. That is, a byte order of the form 7726 `32107654'. Note: this option should only be used if you require 7727 compatibility with code for big-endian ARM processors generated by 7728 versions of the compiler prior to 2.8. 7729 7730`-mcpu=NAME' 7731 This specifies the name of the target ARM processor. GCC uses 7732 this name to determine what kind of instructions it can emit when 7733 generating assembly code. Permissible names are: `arm2', `arm250', 7734 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 7735 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 7736 `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe', 7737 `arm7tdmi', `arm7tdmi-s', `arm8', `strongarm', `strongarm110', 7738 `strongarm1100', `arm8', `arm810', `arm9', `arm9e', `arm920', 7739 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 7740 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 7741 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 7742 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1176jz-s', 7743 `arm1176jzf-s', `xscale', `iwmmxt', `ep9312'. 7744 7745`-mtune=NAME' 7746 This option is very similar to the `-mcpu=' option, except that 7747 instead of specifying the actual target processor type, and hence 7748 restricting which instructions can be used, it specifies that GCC 7749 should tune the performance of the code as if the target were of 7750 the type specified in this option, but still choosing the 7751 instructions that it will generate based on the cpu specified by a 7752 `-mcpu=' option. For some ARM implementations better performance 7753 can be obtained by using this option. 7754 7755`-march=NAME' 7756 This specifies the name of the target ARM architecture. GCC uses 7757 this name to determine what kind of instructions it can emit when 7758 generating assembly code. This option can be used in conjunction 7759 with or instead of the `-mcpu=' option. Permissible names are: 7760 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 7761 `armv5t', `armv5te', `armv6', `armv6j', `iwmmxt', `ep9312'. 7762 7763`-mfpu=NAME' 7764`-mfpe=NUMBER' 7765`-mfp=NUMBER' 7766 This specifies what floating point hardware (or hardware 7767 emulation) is available on the target. Permissible names are: 7768 `fpa', `fpe2', `fpe3', `maverick', `vfp'. `-mfp' and `-mfpe' are 7769 synonyms for `-mfpu'=`fpe'NUMBER, for compatibility with older 7770 versions of GCC. 7771 7772 If `-msoft-float' is specified this specifies the format of 7773 floating point values. 7774 7775`-mstructure-size-boundary=N' 7776 The size of all structures and unions will be rounded up to a 7777 multiple of the number of bits set by this option. Permissible 7778 values are 8, 32 and 64. The default value varies for different 7779 toolchains. For the COFF targeted toolchain the default value is 7780 8. A value of 64 is only allowed if the underlying ABI supports 7781 it. 7782 7783 Specifying the larger number can produce faster, more efficient 7784 code, but can also increase the size of the program. Different 7785 values are potentially incompatible. Code compiled with one value 7786 cannot necessarily expect to work with code or libraries compiled 7787 with another value, if they exchange information using structures 7788 or unions. 7789 7790`-mabort-on-noreturn' 7791 Generate a call to the function `abort' at the end of a `noreturn' 7792 function. It will be executed if the function tries to return. 7793 7794`-mlong-calls' 7795`-mno-long-calls' 7796 Tells the compiler to perform function calls by first loading the 7797 address of the function into a register and then performing a 7798 subroutine call on this register. This switch is needed if the 7799 target function will lie outside of the 64 megabyte addressing 7800 range of the offset based version of subroutine call instruction. 7801 7802 Even if this switch is enabled, not all function calls will be 7803 turned into long calls. The heuristic is that static functions, 7804 functions which have the `short-call' attribute, functions that 7805 are inside the scope of a `#pragma no_long_calls' directive and 7806 functions whose definitions have already been compiled within the 7807 current compilation unit, will not be turned into long calls. The 7808 exception to this rule is that weak function definitions, 7809 functions with the `long-call' attribute or the `section' 7810 attribute, and functions that are within the scope of a `#pragma 7811 long_calls' directive, will always be turned into long calls. 7812 7813 This feature is not enabled by default. Specifying 7814 `-mno-long-calls' will restore the default behavior, as will 7815 placing the function calls within the scope of a `#pragma 7816 long_calls_off' directive. Note these switches have no effect on 7817 how the compiler generates code to handle function calls via 7818 function pointers. 7819 7820`-mnop-fun-dllimport' 7821 Disable support for the `dllimport' attribute. 7822 7823`-msingle-pic-base' 7824 Treat the register used for PIC addressing as read-only, rather 7825 than loading it in the prologue for each function. The run-time 7826 system is responsible for initializing this register with an 7827 appropriate value before execution begins. 7828 7829`-mpic-register=REG' 7830 Specify the register to be used for PIC addressing. The default 7831 is R10 unless stack-checking is enabled, when R9 is used. 7832 7833`-mcirrus-fix-invalid-insns' 7834 Insert NOPs into the instruction stream to in order to work around 7835 problems with invalid Maverick instruction combinations. This 7836 option is only valid if the `-mcpu=ep9312' option has been used to 7837 enable generation of instructions for the Cirrus Maverick floating 7838 point co-processor. This option is not enabled by default, since 7839 the problem is only present in older Maverick implementations. 7840 The default can be re-enabled by use of the 7841 `-mno-cirrus-fix-invalid-insns' switch. 7842 7843`-mpoke-function-name' 7844 Write the name of each function into the text section, directly 7845 preceding the function prologue. The generated code is similar to 7846 this: 7847 7848 t0 7849 .ascii "arm_poke_function_name", 0 7850 .align 7851 t1 7852 .word 0xff000000 + (t1 - t0) 7853 arm_poke_function_name 7854 mov ip, sp 7855 stmfd sp!, {fp, ip, lr, pc} 7856 sub fp, ip, #4 7857 7858 When performing a stack backtrace, code can inspect the value of 7859 `pc' stored at `fp + 0'. If the trace function then looks at 7860 location `pc - 12' and the top 8 bits are set, then we know that 7861 there is a function name embedded immediately preceding this 7862 location and has length `((pc[-3]) & 0xff000000)'. 7863 7864`-mthumb' 7865 Generate code for the 16-bit Thumb instruction set. The default 7866 is to use the 32-bit ARM instruction set. 7867 7868`-mtpcs-frame' 7869 Generate a stack frame that is compliant with the Thumb Procedure 7870 Call Standard for all non-leaf functions. (A leaf function is one 7871 that does not call any other functions.) The default is 7872 `-mno-tpcs-frame'. 7873 7874`-mtpcs-leaf-frame' 7875 Generate a stack frame that is compliant with the Thumb Procedure 7876 Call Standard for all leaf functions. (A leaf function is one 7877 that does not call any other functions.) The default is 7878 `-mno-apcs-leaf-frame'. 7879 7880`-mcallee-super-interworking' 7881 Gives all externally visible functions in the file being compiled 7882 an ARM instruction set header which switches to Thumb mode before 7883 executing the rest of the function. This allows these functions 7884 to be called from non-interworking code. 7885 7886`-mcaller-super-interworking' 7887 Allows calls via function pointers (including virtual functions) to 7888 execute correctly regardless of whether the target code has been 7889 compiled for interworking or not. There is a small overhead in 7890 the cost of executing a function pointer if this option is enabled. 7891 7892`-mtp=NAME' 7893 Specify the access model for the thread local storage pointer. 7894 The valid models are `soft', which generates calls to 7895 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 7896 `cp15' directly (supported in the arm6k architecture), and `auto', 7897 which uses the best available method for the selected processor. 7898 The default setting is `auto'. 7899 7900 7901 7902File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 7903 79043.17.3 AVR Options 7905------------------ 7906 7907These options are defined for AVR implementations: 7908 7909`-mmcu=MCU' 7910 Specify ATMEL AVR instruction set or MCU type. 7911 7912 Instruction set avr1 is for the minimal AVR core, not supported by 7913 the C compiler, only for assembler programs (MCU types: at90s1200, 7914 attiny10, attiny11, attiny12, attiny15, attiny28). 7915 7916 Instruction set avr2 (default) is for the classic AVR core with up 7917 to 8K program memory space (MCU types: at90s2313, at90s2323, 7918 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 7919 at90s8515, at90c8534, at90s8535). 7920 7921 Instruction set avr3 is for the classic AVR core with up to 128K 7922 program memory space (MCU types: atmega103, atmega603, at43usb320, 7923 at76c711). 7924 7925 Instruction set avr4 is for the enhanced AVR core with up to 8K 7926 program memory space (MCU types: atmega8, atmega83, atmega85). 7927 7928 Instruction set avr5 is for the enhanced AVR core with up to 128K 7929 program memory space (MCU types: atmega16, atmega161, atmega163, 7930 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 7931 7932`-msize' 7933 Output instruction sizes to the asm file. 7934 7935`-minit-stack=N' 7936 Specify the initial stack address, which may be a symbol or 7937 numeric value, `__stack' is the default. 7938 7939`-mno-interrupts' 7940 Generated code is not compatible with hardware interrupts. Code 7941 size will be smaller. 7942 7943`-mcall-prologues' 7944 Functions prologues/epilogues expanded as call to appropriate 7945 subroutines. Code size will be smaller. 7946 7947`-mno-tablejump' 7948 Do not generate tablejump insns which sometimes increase code size. 7949 7950`-mtiny-stack' 7951 Change only the low 8 bits of the stack pointer. 7952 7953`-mint8' 7954 Assume int to be 8 bit integer. This affects the sizes of all 7955 types: A char will be 1 byte, an int will be 1 byte, an long will 7956 be 2 bytes and long long will be 4 bytes. Please note that this 7957 option does not comply to the C standards, but it will provide you 7958 with smaller code size. 7959 7960 7961File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 7962 79633.17.4 Blackfin Options 7964----------------------- 7965 7966`-momit-leaf-frame-pointer' 7967 Don't keep the frame pointer in a register for leaf functions. 7968 This avoids the instructions to save, set up and restore frame 7969 pointers and makes an extra register available in leaf functions. 7970 The option `-fomit-frame-pointer' removes the frame pointer for 7971 all functions which might make debugging harder. 7972 7973`-mspecld-anomaly' 7974 When enabled, the compiler will ensure that the generated code 7975 does not contain speculative loads after jump instructions. This 7976 option is enabled by default. 7977 7978`-mno-specld-anomaly' 7979 Don't generate extra code to prevent speculative loads from 7980 occurring. 7981 7982`-mcsync-anomaly' 7983 When enabled, the compiler will ensure that the generated code 7984 does not contain CSYNC or SSYNC instructions too soon after 7985 conditional branches. This option is enabled by default. 7986 7987`-mno-csync-anomaly' 7988 Don't generate extra code to prevent CSYNC or SSYNC instructions 7989 from occurring too soon after a conditional branch. 7990 7991`-mlow-64k' 7992 When enabled, the compiler is free to take advantage of the 7993 knowledge that the entire program fits into the low 64k of memory. 7994 7995`-mno-low-64k' 7996 Assume that the program is arbitrarily large. This is the default. 7997 7998`-mid-shared-library' 7999 Generate code that supports shared libraries via the library ID 8000 method. This allows for execute in place and shared libraries in 8001 an environment without virtual memory management. This option 8002 implies `-fPIC'. 8003 8004`-mno-id-shared-library' 8005 Generate code that doesn't assume ID based shared libraries are 8006 being used. This is the default. 8007 8008`-mshared-library-id=n' 8009 Specified the identification number of the ID based shared library 8010 being compiled. Specifying a value of 0 will generate more 8011 compact code, specifying other values will force the allocation of 8012 that number to the current library but is no more space or time 8013 efficient than omitting this option. 8014 8015`-mlong-calls' 8016`-mno-long-calls' 8017 Tells the compiler to perform function calls by first loading the 8018 address of the function into a register and then performing a 8019 subroutine call on this register. This switch is needed if the 8020 target function will lie outside of the 24 bit addressing range of 8021 the offset based version of subroutine call instruction. 8022 8023 This feature is not enabled by default. Specifying 8024 `-mno-long-calls' will restore the default behavior. Note these 8025 switches have no effect on how the compiler generates code to 8026 handle function calls via function pointers. 8027 8028 8029File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 8030 80313.17.5 CRIS Options 8032------------------- 8033 8034These options are defined specifically for the CRIS ports. 8035 8036`-march=ARCHITECTURE-TYPE' 8037`-mcpu=ARCHITECTURE-TYPE' 8038 Generate code for the specified architecture. The choices for 8039 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 8040 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 8041 cris-axis-linux-gnu, where the default is `v10'. 8042 8043`-mtune=ARCHITECTURE-TYPE' 8044 Tune to ARCHITECTURE-TYPE everything applicable about the generated 8045 code, except for the ABI and the set of available instructions. 8046 The choices for ARCHITECTURE-TYPE are the same as for 8047 `-march=ARCHITECTURE-TYPE'. 8048 8049`-mmax-stack-frame=N' 8050 Warn when the stack frame of a function exceeds N bytes. 8051 8052`-melinux-stacksize=N' 8053 Only available with the `cris-axis-aout' target. Arranges for 8054 indications in the program to the kernel loader that the stack of 8055 the program should be set to N bytes. 8056 8057`-metrax4' 8058`-metrax100' 8059 The options `-metrax4' and `-metrax100' are synonyms for 8060 `-march=v3' and `-march=v8' respectively. 8061 8062`-mmul-bug-workaround' 8063`-mno-mul-bug-workaround' 8064 Work around a bug in the `muls' and `mulu' instructions for CPU 8065 models where it applies. This option is active by default. 8066 8067`-mpdebug' 8068 Enable CRIS-specific verbose debug-related information in the 8069 assembly code. This option also has the effect to turn off the 8070 `#NO_APP' formatted-code indicator to the assembler at the 8071 beginning of the assembly file. 8072 8073`-mcc-init' 8074 Do not use condition-code results from previous instruction; 8075 always emit compare and test instructions before use of condition 8076 codes. 8077 8078`-mno-side-effects' 8079 Do not emit instructions with side-effects in addressing modes 8080 other than post-increment. 8081 8082`-mstack-align' 8083`-mno-stack-align' 8084`-mdata-align' 8085`-mno-data-align' 8086`-mconst-align' 8087`-mno-const-align' 8088 These options (no-options) arranges (eliminate arrangements) for 8089 the stack-frame, individual data and constants to be aligned for 8090 the maximum single data access size for the chosen CPU model. The 8091 default is to arrange for 32-bit alignment. ABI details such as 8092 structure layout are not affected by these options. 8093 8094`-m32-bit' 8095`-m16-bit' 8096`-m8-bit' 8097 Similar to the stack- data- and const-align options above, these 8098 options arrange for stack-frame, writable data and constants to 8099 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 8100 alignment. 8101 8102`-mno-prologue-epilogue' 8103`-mprologue-epilogue' 8104 With `-mno-prologue-epilogue', the normal function prologue and 8105 epilogue that sets up the stack-frame are omitted and no return 8106 instructions or return sequences are generated in the code. Use 8107 this option only together with visual inspection of the compiled 8108 code: no warnings or errors are generated when call-saved 8109 registers must be saved, or storage for local variable needs to be 8110 allocated. 8111 8112`-mno-gotplt' 8113`-mgotplt' 8114 With `-fpic' and `-fPIC', don't generate (do generate) instruction 8115 sequences that load addresses for functions from the PLT part of 8116 the GOT rather than (traditional on other architectures) calls to 8117 the PLT. The default is `-mgotplt'. 8118 8119`-maout' 8120 Legacy no-op option only recognized with the cris-axis-aout target. 8121 8122`-melf' 8123 Legacy no-op option only recognized with the cris-axis-elf and 8124 cris-axis-linux-gnu targets. 8125 8126`-melinux' 8127 Only recognized with the cris-axis-aout target, where it selects a 8128 GNU/linux-like multilib, include files and instruction set for 8129 `-march=v8'. 8130 8131`-mlinux' 8132 Legacy no-op option only recognized with the cris-axis-linux-gnu 8133 target. 8134 8135`-sim' 8136 This option, recognized for the cris-axis-aout and cris-axis-elf 8137 arranges to link with input-output functions from a simulator 8138 library. Code, initialized data and zero-initialized data are 8139 allocated consecutively. 8140 8141`-sim2' 8142 Like `-sim', but pass linker options to locate initialized data at 8143 0x40000000 and zero-initialized data at 0x80000000. 8144 8145 8146File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 8147 81483.17.6 CRX Options 8149------------------ 8150 8151These options are defined specifically for the CRX ports. 8152 8153`-mmac' 8154 Enable the use of multiply-accumulate instructions. Disabled by 8155 default. 8156 8157`-mpush-args' 8158 Push instructions will be used to pass outgoing arguments when 8159 functions are called. Enabled by default. 8160 8161 8162File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 8163 81643.17.7 Darwin Options 8165--------------------- 8166 8167These options are defined for all architectures running the Darwin 8168operating system. 8169 8170 FSF GCC on Darwin does not create "fat" object files; it will create 8171an object file for the single architecture that it was built to target. 8172Apple's GCC on Darwin does create "fat" files if multiple `-arch' 8173options are used; it does so by running the compiler or linker multiple 8174times and joining the results together with `lipo'. 8175 8176 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 8177is determined by the flags that specify the ISA that GCC is targetting, 8178like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 8179used to override this. 8180 8181 The Darwin tools vary in their behavior when presented with an ISA 8182mismatch. The assembler, `as', will only permit instructions to be 8183used that are valid for the subtype of the file it is generating, so 8184you cannot put 64-bit instructions in an `ppc750' object file. The 8185linker for shared libraries, `/usr/bin/libtool', will fail and print an 8186error if asked to create a shared library with a less restrictive 8187subtype than its input files (for instance, trying to put a `ppc970' 8188object file in a `ppc7400' library). The linker for executables, `ld', 8189will quietly give the executable the most restrictive subtype of any of 8190its input files. 8191 8192`-FDIR' 8193 Add the framework directory DIR to the head of the list of 8194 directories to be searched for header files. These directories are 8195 interleaved with those specified by `-I' options and are scanned 8196 in a left-to-right order. 8197 8198 A framework directory is a directory with frameworks in it. A 8199 framework is a directory with a `"Headers"' and/or 8200 `"PrivateHeaders"' directory contained directly in it that ends in 8201 `".framework"'. The name of a framework is the name of this 8202 directory excluding the `".framework"'. Headers associated with 8203 the framework are found in one of those two directories, with 8204 `"Headers"' being searched first. A subframework is a framework 8205 directory that is in a framework's `"Frameworks"' directory. 8206 Includes of subframework headers can only appear in a header of a 8207 framework that contains the subframework, or in a sibling 8208 subframework header. Two subframeworks are siblings if they occur 8209 in the same framework. A subframework should not have the same 8210 name as a framework, a warning will be issued if this is violated. 8211 Currently a subframework cannot have subframeworks, in the 8212 future, the mechanism may be extended to support this. The 8213 standard frameworks can be found in `"/System/Library/Frameworks"' 8214 and `"/Library/Frameworks"'. An example include looks like 8215 `#include <Framework/header.h>', where `Framework' denotes the 8216 name of the framework and header.h is found in the 8217 `"PrivateHeaders"' or `"Headers"' directory. 8218 8219`-gused' 8220 Emit debugging information for symbols that are used. For STABS 8221 debugging format, this enables `-feliminate-unused-debug-symbols'. 8222 This is by default ON. 8223 8224`-gfull' 8225 Emit debugging information for all symbols and types. 8226 8227`-mmacosx-version-min=VERSION' 8228 The earliest version of MacOS X that this executable will run on 8229 is VERSION. Typical values of VERSION include `10.1', `10.2', and 8230 `10.3.9'. 8231 8232 The default for this option is to make choices that seem to be most 8233 useful. 8234 8235`-mkernel' 8236 Enable kernel development mode. The `-mkernel' option sets 8237 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 8238 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 8239 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 8240 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 8241 targets. 8242 8243`-mone-byte-bool' 8244 Override the defaults for `bool' so that `sizeof(bool)==1'. By 8245 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 8246 and `1' when compiling for Darwin/x86, so this option has no 8247 effect on x86. 8248 8249 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 8250 code that is not binary compatible with code generated without 8251 that switch. Using this switch may require recompiling all other 8252 modules in a program, including system libraries. Use this switch 8253 to conform to a non-default data model. 8254 8255`-mfix-and-continue' 8256`-ffix-and-continue' 8257`-findirect-data' 8258 Generate code suitable for fast turn around development. Needed to 8259 enable gdb to dynamically load `.o' files into already running 8260 programs. `-findirect-data' and `-ffix-and-continue' are provided 8261 for backwards compatibility. 8262 8263`-all_load' 8264 Loads all members of static archive libraries. See man ld(1) for 8265 more information. 8266 8267`-arch_errors_fatal' 8268 Cause the errors having to do with files that have the wrong 8269 architecture to be fatal. 8270 8271`-bind_at_load' 8272 Causes the output file to be marked such that the dynamic linker 8273 will bind all undefined references when the file is loaded or 8274 launched. 8275 8276`-bundle' 8277 Produce a Mach-o bundle format file. See man ld(1) for more 8278 information. 8279 8280`-bundle_loader EXECUTABLE' 8281 This option specifies the EXECUTABLE that will be loading the build 8282 output file being linked. See man ld(1) for more information. 8283 8284`-dynamiclib' 8285 When passed this option, GCC will produce a dynamic library 8286 instead of an executable when linking, using the Darwin `libtool' 8287 command. 8288 8289`-force_cpusubtype_ALL' 8290 This causes GCC's output file to have the ALL subtype, instead of 8291 one controlled by the `-mcpu' or `-march' option. 8292 8293`-allowable_client CLIENT_NAME' 8294`-client_name' 8295`-compatibility_version' 8296`-current_version' 8297`-dead_strip' 8298`-dependency-file' 8299`-dylib_file' 8300`-dylinker_install_name' 8301`-dynamic' 8302`-exported_symbols_list' 8303`-filelist' 8304`-flat_namespace' 8305`-force_flat_namespace' 8306`-headerpad_max_install_names' 8307`-image_base' 8308`-init' 8309`-install_name' 8310`-keep_private_externs' 8311`-multi_module' 8312`-multiply_defined' 8313`-multiply_defined_unused' 8314`-noall_load' 8315`-no_dead_strip_inits_and_terms' 8316`-nofixprebinding' 8317`-nomultidefs' 8318`-noprebind' 8319`-noseglinkedit' 8320`-pagezero_size' 8321`-prebind' 8322`-prebind_all_twolevel_modules' 8323`-private_bundle' 8324`-read_only_relocs' 8325`-sectalign' 8326`-sectobjectsymbols' 8327`-whyload' 8328`-seg1addr' 8329`-sectcreate' 8330`-sectobjectsymbols' 8331`-sectorder' 8332`-segaddr' 8333`-segs_read_only_addr' 8334`-segs_read_write_addr' 8335`-seg_addr_table' 8336`-seg_addr_table_filename' 8337`-seglinkedit' 8338`-segprot' 8339`-segs_read_only_addr' 8340`-segs_read_write_addr' 8341`-single_module' 8342`-static' 8343`-sub_library' 8344`-sub_umbrella' 8345`-twolevel_namespace' 8346`-umbrella' 8347`-undefined' 8348`-unexported_symbols_list' 8349`-weak_reference_mismatches' 8350`-whatsloaded' 8351 These options are passed to the Darwin linker. The Darwin linker 8352 man page describes them in detail. 8353 8354 8355File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 8356 83573.17.8 DEC Alpha Options 8358------------------------ 8359 8360These `-m' options are defined for the DEC Alpha implementations: 8361 8362`-mno-soft-float' 8363`-msoft-float' 8364 Use (do not use) the hardware floating-point instructions for 8365 floating-point operations. When `-msoft-float' is specified, 8366 functions in `libgcc.a' will be used to perform floating-point 8367 operations. Unless they are replaced by routines that emulate the 8368 floating-point operations, or compiled in such a way as to call 8369 such emulations routines, these routines will issue floating-point 8370 operations. If you are compiling for an Alpha without 8371 floating-point operations, you must ensure that the library is 8372 built so as not to call them. 8373 8374 Note that Alpha implementations without floating-point operations 8375 are required to have floating-point registers. 8376 8377`-mfp-reg' 8378`-mno-fp-regs' 8379 Generate code that uses (does not use) the floating-point register 8380 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 8381 register set is not used, floating point operands are passed in 8382 integer registers as if they were integers and floating-point 8383 results are passed in `$0' instead of `$f0'. This is a 8384 non-standard calling sequence, so any function with a 8385 floating-point argument or return value called by code compiled 8386 with `-mno-fp-regs' must also be compiled with that option. 8387 8388 A typical use of this option is building a kernel that does not 8389 use, and hence need not save and restore, any floating-point 8390 registers. 8391 8392`-mieee' 8393 The Alpha architecture implements floating-point hardware 8394 optimized for maximum performance. It is mostly compliant with 8395 the IEEE floating point standard. However, for full compliance, 8396 software assistance is required. This option generates code fully 8397 IEEE compliant code _except_ that the INEXACT-FLAG is not 8398 maintained (see below). If this option is turned on, the 8399 preprocessor macro `_IEEE_FP' is defined during compilation. The 8400 resulting code is less efficient but is able to correctly support 8401 denormalized numbers and exceptional IEEE values such as 8402 not-a-number and plus/minus infinity. Other Alpha compilers call 8403 this option `-ieee_with_no_inexact'. 8404 8405`-mieee-with-inexact' 8406 This is like `-mieee' except the generated code also maintains the 8407 IEEE INEXACT-FLAG. Turning on this option causes the generated 8408 code to implement fully-compliant IEEE math. In addition to 8409 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 8410 On some Alpha implementations the resulting code may execute 8411 significantly slower than the code generated by default. Since 8412 there is very little code that depends on the INEXACT-FLAG, you 8413 should normally not specify this option. Other Alpha compilers 8414 call this option `-ieee_with_inexact'. 8415 8416`-mfp-trap-mode=TRAP-MODE' 8417 This option controls what floating-point related traps are enabled. 8418 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 8419 trap mode can be set to one of four values: 8420 8421 `n' 8422 This is the default (normal) setting. The only traps that 8423 are enabled are the ones that cannot be disabled in software 8424 (e.g., division by zero trap). 8425 8426 `u' 8427 In addition to the traps enabled by `n', underflow traps are 8428 enabled as well. 8429 8430 `su' 8431 Like `u', but the instructions are marked to be safe for 8432 software completion (see Alpha architecture manual for 8433 details). 8434 8435 `sui' 8436 Like `su', but inexact traps are enabled as well. 8437 8438`-mfp-rounding-mode=ROUNDING-MODE' 8439 Selects the IEEE rounding mode. Other Alpha compilers call this 8440 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 8441 8442 `n' 8443 Normal IEEE rounding mode. Floating point numbers are 8444 rounded towards the nearest machine number or towards the 8445 even machine number in case of a tie. 8446 8447 `m' 8448 Round towards minus infinity. 8449 8450 `c' 8451 Chopped rounding mode. Floating point numbers are rounded 8452 towards zero. 8453 8454 `d' 8455 Dynamic rounding mode. A field in the floating point control 8456 register (FPCR, see Alpha architecture reference manual) 8457 controls the rounding mode in effect. The C library 8458 initializes this register for rounding towards plus infinity. 8459 Thus, unless your program modifies the FPCR, `d' corresponds 8460 to round towards plus infinity. 8461 8462`-mtrap-precision=TRAP-PRECISION' 8463 In the Alpha architecture, floating point traps are imprecise. 8464 This means without software assistance it is impossible to recover 8465 from a floating trap and program execution normally needs to be 8466 terminated. GCC can generate code that can assist operating 8467 system trap handlers in determining the exact location that caused 8468 a floating point trap. Depending on the requirements of an 8469 application, different levels of precisions can be selected: 8470 8471 `p' 8472 Program precision. This option is the default and means a 8473 trap handler can only identify which program caused a 8474 floating point exception. 8475 8476 `f' 8477 Function precision. The trap handler can determine the 8478 function that caused a floating point exception. 8479 8480 `i' 8481 Instruction precision. The trap handler can determine the 8482 exact instruction that caused a floating point exception. 8483 8484 Other Alpha compilers provide the equivalent options called 8485 `-scope_safe' and `-resumption_safe'. 8486 8487`-mieee-conformant' 8488 This option marks the generated code as IEEE conformant. You must 8489 not use this option unless you also specify `-mtrap-precision=i' 8490 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 8491 effect is to emit the line `.eflag 48' in the function prologue of 8492 the generated assembly file. Under DEC Unix, this has the effect 8493 that IEEE-conformant math library routines will be linked in. 8494 8495`-mbuild-constants' 8496 Normally GCC examines a 32- or 64-bit integer constant to see if 8497 it can construct it from smaller constants in two or three 8498 instructions. If it cannot, it will output the constant as a 8499 literal and generate code to load it from the data segment at 8500 runtime. 8501 8502 Use this option to require GCC to construct _all_ integer constants 8503 using code, even if it takes more instructions (the maximum is 8504 six). 8505 8506 You would typically use this option to build a shared library 8507 dynamic loader. Itself a shared library, it must relocate itself 8508 in memory before it can find the variables and constants in its 8509 own data segment. 8510 8511`-malpha-as' 8512`-mgas' 8513 Select whether to generate code to be assembled by the 8514 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 8515 `-mgas'. 8516 8517`-mbwx' 8518`-mno-bwx' 8519`-mcix' 8520`-mno-cix' 8521`-mfix' 8522`-mno-fix' 8523`-mmax' 8524`-mno-max' 8525 Indicate whether GCC should generate code to use the optional BWX, 8526 CIX, FIX and MAX instruction sets. The default is to use the 8527 instruction sets supported by the CPU type specified via `-mcpu=' 8528 option or that of the CPU on which GCC was built if none was 8529 specified. 8530 8531`-mfloat-vax' 8532`-mfloat-ieee' 8533 Generate code that uses (does not use) VAX F and G floating point 8534 arithmetic instead of IEEE single and double precision. 8535 8536`-mexplicit-relocs' 8537`-mno-explicit-relocs' 8538 Older Alpha assemblers provided no way to generate symbol 8539 relocations except via assembler macros. Use of these macros does 8540 not allow optimal instruction scheduling. GNU binutils as of 8541 version 2.12 supports a new syntax that allows the compiler to 8542 explicitly mark which relocations should apply to which 8543 instructions. This option is mostly useful for debugging, as GCC 8544 detects the capabilities of the assembler when it is built and 8545 sets the default accordingly. 8546 8547`-msmall-data' 8548`-mlarge-data' 8549 When `-mexplicit-relocs' is in effect, static data is accessed via 8550 "gp-relative" relocations. When `-msmall-data' is used, objects 8 8551 bytes long or smaller are placed in a "small data area" (the 8552 `.sdata' and `.sbss' sections) and are accessed via 16-bit 8553 relocations off of the `$gp' register. This limits the size of 8554 the small data area to 64KB, but allows the variables to be 8555 directly accessed via a single instruction. 8556 8557 The default is `-mlarge-data'. With this option the data area is 8558 limited to just below 2GB. Programs that require more than 2GB of 8559 data must use `malloc' or `mmap' to allocate the data in the heap 8560 instead of in the program's data segment. 8561 8562 When generating code for shared libraries, `-fpic' implies 8563 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 8564 8565`-msmall-text' 8566`-mlarge-text' 8567 When `-msmall-text' is used, the compiler assumes that the code of 8568 the entire program (or shared library) fits in 4MB, and is thus 8569 reachable with a branch instruction. When `-msmall-data' is used, 8570 the compiler can assume that all local symbols share the same 8571 `$gp' value, and thus reduce the number of instructions required 8572 for a function call from 4 to 1. 8573 8574 The default is `-mlarge-text'. 8575 8576`-mcpu=CPU_TYPE' 8577 Set the instruction set and instruction scheduling parameters for 8578 machine type CPU_TYPE. You can specify either the `EV' style name 8579 or the corresponding chip number. GCC supports scheduling 8580 parameters for the EV4, EV5 and EV6 family of processors and will 8581 choose the default values for the instruction set from the 8582 processor you specify. If you do not specify a processor type, 8583 GCC will default to the processor on which the compiler was built. 8584 8585 Supported values for CPU_TYPE are 8586 8587 `ev4' 8588 `ev45' 8589 `21064' 8590 Schedules as an EV4 and has no instruction set extensions. 8591 8592 `ev5' 8593 `21164' 8594 Schedules as an EV5 and has no instruction set extensions. 8595 8596 `ev56' 8597 `21164a' 8598 Schedules as an EV5 and supports the BWX extension. 8599 8600 `pca56' 8601 `21164pc' 8602 `21164PC' 8603 Schedules as an EV5 and supports the BWX and MAX extensions. 8604 8605 `ev6' 8606 `21264' 8607 Schedules as an EV6 and supports the BWX, FIX, and MAX 8608 extensions. 8609 8610 `ev67' 8611 `21264a' 8612 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 8613 extensions. 8614 8615`-mtune=CPU_TYPE' 8616 Set only the instruction scheduling parameters for machine type 8617 CPU_TYPE. The instruction set is not changed. 8618 8619`-mmemory-latency=TIME' 8620 Sets the latency the scheduler should assume for typical memory 8621 references as seen by the application. This number is highly 8622 dependent on the memory access patterns used by the application 8623 and the size of the external cache on the machine. 8624 8625 Valid options for TIME are 8626 8627 `NUMBER' 8628 A decimal number representing clock cycles. 8629 8630 `L1' 8631 `L2' 8632 `L3' 8633 `main' 8634 The compiler contains estimates of the number of clock cycles 8635 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 8636 (also called Dcache, Scache, and Bcache), as well as to main 8637 memory. Note that L3 is only valid for EV5. 8638 8639 8640 8641File: gcc.info, Node: DEC Alpha/VMS Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 8642 86433.17.9 DEC Alpha/VMS Options 8644---------------------------- 8645 8646These `-m' options are defined for the DEC Alpha/VMS implementations: 8647 8648`-mvms-return-codes' 8649 Return VMS condition codes from main. The default is to return 8650 POSIX style condition (e.g. error) codes. 8651 8652 8653File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 8654 86553.17.10 FRV Options 8656------------------- 8657 8658`-mgpr-32' 8659 Only use the first 32 general purpose registers. 8660 8661`-mgpr-64' 8662 Use all 64 general purpose registers. 8663 8664`-mfpr-32' 8665 Use only the first 32 floating point registers. 8666 8667`-mfpr-64' 8668 Use all 64 floating point registers 8669 8670`-mhard-float' 8671 Use hardware instructions for floating point operations. 8672 8673`-msoft-float' 8674 Use library routines for floating point operations. 8675 8676`-malloc-cc' 8677 Dynamically allocate condition code registers. 8678 8679`-mfixed-cc' 8680 Do not try to dynamically allocate condition code registers, only 8681 use `icc0' and `fcc0'. 8682 8683`-mdword' 8684 Change ABI to use double word insns. 8685 8686`-mno-dword' 8687 Do not use double word instructions. 8688 8689`-mdouble' 8690 Use floating point double instructions. 8691 8692`-mno-double' 8693 Do not use floating point double instructions. 8694 8695`-mmedia' 8696 Use media instructions. 8697 8698`-mno-media' 8699 Do not use media instructions. 8700 8701`-mmuladd' 8702 Use multiply and add/subtract instructions. 8703 8704`-mno-muladd' 8705 Do not use multiply and add/subtract instructions. 8706 8707`-mfdpic' 8708 Select the FDPIC ABI, that uses function descriptors to represent 8709 pointers to functions. Without any PIC/PIE-related options, it 8710 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 8711 and small data are within a 12-bit range from the GOT base 8712 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 8713 bits. 8714 8715`-minline-plt' 8716 Enable inlining of PLT entries in function calls to functions that 8717 are not known to bind locally. It has no effect without `-mfdpic'. 8718 It's enabled by default if optimizing for speed and compiling for 8719 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 8720 optimization option such as `-O3' or above is present in the 8721 command line. 8722 8723`-mTLS' 8724 Assume a large TLS segment when generating thread-local code. 8725 8726`-mtls' 8727 Do not assume a large TLS segment when generating thread-local 8728 code. 8729 8730`-mgprel-ro' 8731 Enable the use of `GPREL' relocations in the FDPIC ABI for data 8732 that is known to be in read-only sections. It's enabled by 8733 default, except for `-fpic' or `-fpie': even though it may help 8734 make the global offset table smaller, it trades 1 instruction for 8735 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 8736 of which may be shared by multiple symbols, and it avoids the need 8737 for a GOT entry for the referenced symbol, so it's more likely to 8738 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 8739 8740`-multilib-library-pic' 8741 Link with the (library, not FD) pic libraries. It's implied by 8742 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 8743 `-mfdpic'. You should never have to use it explicitly. 8744 8745`-mlinked-fp' 8746 Follow the EABI requirement of always creating a frame pointer 8747 whenever a stack frame is allocated. This option is enabled by 8748 default and can be disabled with `-mno-linked-fp'. 8749 8750`-mlong-calls' 8751 Use indirect addressing to call functions outside the current 8752 compilation unit. This allows the functions to be placed anywhere 8753 within the 32-bit address space. 8754 8755`-malign-labels' 8756 Try to align labels to an 8-byte boundary by inserting nops into 8757 the previous packet. This option only has an effect when VLIW 8758 packing is enabled. It doesn't create new packets; it merely adds 8759 nops to existing ones. 8760 8761`-mlibrary-pic' 8762 Generate position-independent EABI code. 8763 8764`-macc-4' 8765 Use only the first four media accumulator registers. 8766 8767`-macc-8' 8768 Use all eight media accumulator registers. 8769 8770`-mpack' 8771 Pack VLIW instructions. 8772 8773`-mno-pack' 8774 Do not pack VLIW instructions. 8775 8776`-mno-eflags' 8777 Do not mark ABI switches in e_flags. 8778 8779`-mcond-move' 8780 Enable the use of conditional-move instructions (default). 8781 8782 This switch is mainly for debugging the compiler and will likely 8783 be removed in a future version. 8784 8785`-mno-cond-move' 8786 Disable the use of conditional-move instructions. 8787 8788 This switch is mainly for debugging the compiler and will likely 8789 be removed in a future version. 8790 8791`-mscc' 8792 Enable the use of conditional set instructions (default). 8793 8794 This switch is mainly for debugging the compiler and will likely 8795 be removed in a future version. 8796 8797`-mno-scc' 8798 Disable the use of conditional set instructions. 8799 8800 This switch is mainly for debugging the compiler and will likely 8801 be removed in a future version. 8802 8803`-mcond-exec' 8804 Enable the use of conditional execution (default). 8805 8806 This switch is mainly for debugging the compiler and will likely 8807 be removed in a future version. 8808 8809`-mno-cond-exec' 8810 Disable the use of conditional execution. 8811 8812 This switch is mainly for debugging the compiler and will likely 8813 be removed in a future version. 8814 8815`-mvliw-branch' 8816 Run a pass to pack branches into VLIW instructions (default). 8817 8818 This switch is mainly for debugging the compiler and will likely 8819 be removed in a future version. 8820 8821`-mno-vliw-branch' 8822 Do not run a pass to pack branches into VLIW instructions. 8823 8824 This switch is mainly for debugging the compiler and will likely 8825 be removed in a future version. 8826 8827`-mmulti-cond-exec' 8828 Enable optimization of `&&' and `||' in conditional execution 8829 (default). 8830 8831 This switch is mainly for debugging the compiler and will likely 8832 be removed in a future version. 8833 8834`-mno-multi-cond-exec' 8835 Disable optimization of `&&' and `||' in conditional execution. 8836 8837 This switch is mainly for debugging the compiler and will likely 8838 be removed in a future version. 8839 8840`-mnested-cond-exec' 8841 Enable nested conditional execution optimizations (default). 8842 8843 This switch is mainly for debugging the compiler and will likely 8844 be removed in a future version. 8845 8846`-mno-nested-cond-exec' 8847 Disable nested conditional execution optimizations. 8848 8849 This switch is mainly for debugging the compiler and will likely 8850 be removed in a future version. 8851 8852`-moptimize-membar' 8853 This switch removes redundant `membar' instructions from the 8854 compiler generated code. It is enabled by default. 8855 8856`-mno-optimize-membar' 8857 This switch disables the automatic removal of redundant `membar' 8858 instructions from the generated code. 8859 8860`-mtomcat-stats' 8861 Cause gas to print out tomcat statistics. 8862 8863`-mcpu=CPU' 8864 Select the processor type for which to generate code. Possible 8865 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 8866 `fr400', `fr300' and `simple'. 8867 8868 8869 8870File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 8871 88723.17.11 GNU/Linux Options 8873------------------------- 8874 8875These `-m' options are defined for GNU/Linux targets: 8876 8877`-mglibc' 8878 Use the GNU C library instead of uClibc. This is the default 8879 except on `*-*-linux-*uclibc*' targets. 8880 8881`-muclibc' 8882 Use uClibc instead of the GNU C library. This is the default on 8883 `*-*-linux-*uclibc*' targets. 8884 8885 8886File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 8887 88883.17.12 H8/300 Options 8889---------------------- 8890 8891These `-m' options are defined for the H8/300 implementations: 8892 8893`-mrelax' 8894 Shorten some address references at link time, when possible; uses 8895 the linker option `-relax'. *Note `ld' and the H8/300: 8896 (ld)H8/300, for a fuller description. 8897 8898`-mh' 8899 Generate code for the H8/300H. 8900 8901`-ms' 8902 Generate code for the H8S. 8903 8904`-mn' 8905 Generate code for the H8S and H8/300H in the normal mode. This 8906 switch must be used either with `-mh' or `-ms'. 8907 8908`-ms2600' 8909 Generate code for the H8S/2600. This switch must be used with 8910 `-ms'. 8911 8912`-mint32' 8913 Make `int' data 32 bits by default. 8914 8915`-malign-300' 8916 On the H8/300H and H8S, use the same alignment rules as for the 8917 H8/300. The default for the H8/300H and H8S is to align longs and 8918 floats on 4 byte boundaries. `-malign-300' causes them to be 8919 aligned on 2 byte boundaries. This option has no effect on the 8920 H8/300. 8921 8922 8923File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 8924 89253.17.13 HPPA Options 8926-------------------- 8927 8928These `-m' options are defined for the HPPA family of computers: 8929 8930`-march=ARCHITECTURE-TYPE' 8931 Generate code for the specified architecture. The choices for 8932 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 8933 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 8934 an HP-UX system to determine the proper architecture option for 8935 your machine. Code compiled for lower numbered architectures will 8936 run on higher numbered architectures, but not the other way around. 8937 8938`-mpa-risc-1-0' 8939`-mpa-risc-1-1' 8940`-mpa-risc-2-0' 8941 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 8942 respectively. 8943 8944`-mbig-switch' 8945 Generate code suitable for big switch tables. Use this option 8946 only if the assembler/linker complain about out of range branches 8947 within a switch table. 8948 8949`-mjump-in-delay' 8950 Fill delay slots of function calls with unconditional jump 8951 instructions by modifying the return pointer for the function call 8952 to be the target of the conditional jump. 8953 8954`-mdisable-fpregs' 8955 Prevent floating point registers from being used in any manner. 8956 This is necessary for compiling kernels which perform lazy context 8957 switching of floating point registers. If you use this option and 8958 attempt to perform floating point operations, the compiler will 8959 abort. 8960 8961`-mdisable-indexing' 8962 Prevent the compiler from using indexing address modes. This 8963 avoids some rather obscure problems when compiling MIG generated 8964 code under MACH. 8965 8966`-mno-space-regs' 8967 Generate code that assumes the target has no space registers. 8968 This allows GCC to generate faster indirect calls and use unscaled 8969 index address modes. 8970 8971 Such code is suitable for level 0 PA systems and kernels. 8972 8973`-mfast-indirect-calls' 8974 Generate code that assumes calls never cross space boundaries. 8975 This allows GCC to emit code which performs faster indirect calls. 8976 8977 This option will not work in the presence of shared libraries or 8978 nested functions. 8979 8980`-mfixed-range=REGISTER-RANGE' 8981 Generate code treating the given register range as fixed registers. 8982 A fixed register is one that the register allocator can not use. 8983 This is useful when compiling kernel code. A register range is 8984 specified as two registers separated by a dash. Multiple register 8985 ranges can be specified separated by a comma. 8986 8987`-mlong-load-store' 8988 Generate 3-instruction load and store sequences as sometimes 8989 required by the HP-UX 10 linker. This is equivalent to the `+k' 8990 option to the HP compilers. 8991 8992`-mportable-runtime' 8993 Use the portable calling conventions proposed by HP for ELF 8994 systems. 8995 8996`-mgas' 8997 Enable the use of assembler directives only GAS understands. 8998 8999`-mschedule=CPU-TYPE' 9000 Schedule code according to the constraints for the machine type 9001 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 9002 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 9003 HP-UX system to determine the proper scheduling option for your 9004 machine. The default scheduling is `8000'. 9005 9006`-mlinker-opt' 9007 Enable the optimization pass in the HP-UX linker. Note this makes 9008 symbolic debugging impossible. It also triggers a bug in the 9009 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 9010 messages when linking some programs. 9011 9012`-msoft-float' 9013 Generate output containing library calls for floating point. 9014 *Warning:* the requisite libraries are not available for all HPPA 9015 targets. Normally the facilities of the machine's usual C 9016 compiler are used, but this cannot be done directly in 9017 cross-compilation. You must make your own arrangements to provide 9018 suitable library functions for cross-compilation. The embedded 9019 target `hppa1.1-*-pro' does provide software floating point 9020 support. 9021 9022 `-msoft-float' changes the calling convention in the output file; 9023 therefore, it is only useful if you compile _all_ of a program with 9024 this option. In particular, you need to compile `libgcc.a', the 9025 library that comes with GCC, with `-msoft-float' in order for this 9026 to work. 9027 9028`-msio' 9029 Generate the predefine, `_SIO', for server IO. The default is 9030 `-mwsio'. This generates the predefines, `__hp9000s700', 9031 `__hp9000s700__' and `_WSIO', for workstation IO. These options 9032 are available under HP-UX and HI-UX. 9033 9034`-mgnu-ld' 9035 Use GNU ld specific options. This passes `-shared' to ld when 9036 building a shared library. It is the default when GCC is 9037 configured, explicitly or implicitly, with the GNU linker. This 9038 option does not have any affect on which ld is called, it only 9039 changes what parameters are passed to that ld. The ld that is 9040 called is determined by the `--with-ld' configure option, GCC's 9041 program search path, and finally by the user's `PATH'. The linker 9042 used by GCC can be printed using `which `gcc 9043 -print-prog-name=ld`'. This option is only available on the 64 9044 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 9045 9046`-mhp-ld' 9047 Use HP ld specific options. This passes `-b' to ld when building 9048 a shared library and passes `+Accept TypeMismatch' to ld on all 9049 links. It is the default when GCC is configured, explicitly or 9050 implicitly, with the HP linker. This option does not have any 9051 affect on which ld is called, it only changes what parameters are 9052 passed to that ld. The ld that is called is determined by the 9053 `--with-ld' configure option, GCC's program search path, and 9054 finally by the user's `PATH'. The linker used by GCC can be 9055 printed using `which `gcc -print-prog-name=ld`'. This option is 9056 only available on the 64 bit HP-UX GCC, i.e. configured with 9057 `hppa*64*-*-hpux*'. 9058 9059`-mlong-calls' 9060 Generate code that uses long call sequences. This ensures that a 9061 call is always able to reach linker generated stubs. The default 9062 is to generate long calls only when the distance from the call 9063 site to the beginning of the function or translation unit, as the 9064 case may be, exceeds a predefined limit set by the branch type 9065 being used. The limits for normal calls are 7,600,000 and 240,000 9066 bytes, respectively for the PA 2.0 and PA 1.X architectures. 9067 Sibcalls are always limited at 240,000 bytes. 9068 9069 Distances are measured from the beginning of functions when using 9070 the `-ffunction-sections' option, or when using the `-mgas' and 9071 `-mno-portable-runtime' options together under HP-UX with the SOM 9072 linker. 9073 9074 It is normally not desirable to use this option as it will degrade 9075 performance. However, it may be useful in large applications, 9076 particularly when partial linking is used to build the application. 9077 9078 The types of long calls used depends on the capabilities of the 9079 assembler and linker, and the type of code being generated. The 9080 impact on systems that support long absolute calls, and long pic 9081 symbol-difference or pc-relative calls should be relatively small. 9082 However, an indirect call is used on 32-bit ELF systems in pic code 9083 and it is quite long. 9084 9085`-munix=UNIX-STD' 9086 Generate compiler predefines and select a startfile for the 9087 specified UNIX standard. The choices for UNIX-STD are `93', `95' 9088 and `98'. `93' is supported on all HP-UX versions. `95' is 9089 available on HP-UX 10.10 and later. `98' is available on HP-UX 9090 11.11 and later. The default values are `93' for HP-UX 10.00, 9091 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 9092 later. 9093 9094 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 9095 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 9096 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 9097 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 9098 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 9099 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 9100 9101 It is _important_ to note that this option changes the interfaces 9102 for various library routines. It also affects the operational 9103 behavior of the C library. Thus, _extreme_ care is needed in 9104 using this option. 9105 9106 Library code that is intended to operate with more than one UNIX 9107 standard must test, set and restore the variable 9108 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 9109 provide this capability. 9110 9111`-nolibdld' 9112 Suppress the generation of link options to search libdld.sl when 9113 the `-static' option is specified on HP-UX 10 and later. 9114 9115`-static' 9116 The HP-UX implementation of setlocale in libc has a dependency on 9117 libdld.sl. There isn't an archive version of libdld.sl. Thus, 9118 when the `-static' option is specified, special link options are 9119 needed to resolve this dependency. 9120 9121 On HP-UX 10 and later, the GCC driver adds the necessary options to 9122 link with libdld.sl when the `-static' option is specified. This 9123 causes the resulting binary to be dynamic. On the 64-bit port, 9124 the linkers generate dynamic binaries by default in any case. The 9125 `-nolibdld' option can be used to prevent the GCC driver from 9126 adding these link options. 9127 9128`-threads' 9129 Add support for multithreading with the "dce thread" library under 9130 HP-UX. This option sets flags for both the preprocessor and 9131 linker. 9132 9133 9134File: gcc.info, Node: i386 and x86-64 Options, Next: IA-64 Options, Prev: HPPA Options, Up: Submodel Options 9135 91363.17.14 Intel 386 and AMD x86-64 Options 9137---------------------------------------- 9138 9139These `-m' options are defined for the i386 and x86-64 family of 9140computers: 9141 9142`-mtune=CPU-TYPE' 9143 Tune to CPU-TYPE everything applicable about the generated code, 9144 except for the ABI and the set of available instructions. The 9145 choices for CPU-TYPE are: 9146 _generic_ 9147 Produce code optimized for the most common IA32/AMD64/EM64T 9148 processors. If you know the CPU on which your code will run, 9149 then you should use the corresponding `-mtune' option instead 9150 of `-mtune=generic'. But, if you do not know exactly what 9151 CPU users of your application will have, then you should use 9152 this option. 9153 9154 As new processors are deployed in the marketplace, the 9155 behavior of this option will change. Therefore, if you 9156 upgrade to a newer version of GCC, the code generated option 9157 will change to reflect the processors that were most common 9158 when that version of GCC was released. 9159 9160 There is no `-march=generic' option because `-march' 9161 indicates the instruction set the compiler can use, and there 9162 is no generic instruction set applicable to all processors. 9163 In contrast, `-mtune' indicates the processor (or, in this 9164 case, collection of processors) for which the code is 9165 optimized. 9166 9167 _native_ 9168 This selects the CPU to tune for at compilation time by 9169 determining the processor type of the compiling machine. 9170 Using `-mtune=native' will produce code optimized for the 9171 local machine under the constraints of the selected 9172 instruction set. Using `-march=native' will enable all 9173 instruction subsets supported by the local machine (hence the 9174 result might not run on different machines). 9175 9176 _i386_ 9177 Original Intel's i386 CPU. 9178 9179 _i486_ 9180 Intel's i486 CPU. (No scheduling is implemented for this 9181 chip.) 9182 9183 _i586, pentium_ 9184 Intel Pentium CPU with no MMX support. 9185 9186 _pentium-mmx_ 9187 Intel PentiumMMX CPU based on Pentium core with MMX 9188 instruction set support. 9189 9190 _pentiumpro_ 9191 Intel PentiumPro CPU. 9192 9193 _i686_ 9194 Same as `generic', but when used as `march' option, PentiumPro 9195 instruction set will be used, so the code will run on all 9196 i686 family chips. 9197 9198 _pentium2_ 9199 Intel Pentium2 CPU based on PentiumPro core with MMX 9200 instruction set support. 9201 9202 _pentium3, pentium3m_ 9203 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 9204 instruction set support. 9205 9206 _pentium-m_ 9207 Low power version of Intel Pentium3 CPU with MMX, SSE and 9208 SSE2 instruction set support. Used by Centrino notebooks. 9209 9210 _pentium4, pentium4m_ 9211 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 9212 support. 9213 9214 _prescott_ 9215 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 9216 and SSE3 instruction set support. 9217 9218 _nocona_ 9219 Improved version of Intel Pentium4 CPU with 64-bit 9220 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 9221 9222 _k6_ 9223 AMD K6 CPU with MMX instruction set support. 9224 9225 _k6-2, k6-3_ 9226 Improved versions of AMD K6 CPU with MMX and 3dNOW! 9227 instruction set support. 9228 9229 _athlon, athlon-tbird_ 9230 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE 9231 prefetch instructions support. 9232 9233 _athlon-4, athlon-xp, athlon-mp_ 9234 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and 9235 full SSE instruction set support. 9236 9237 _k8, opteron, athlon64, athlon-fx_ 9238 AMD K8 core based CPUs with x86-64 instruction set support. 9239 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 9240 64-bit instruction set extensions.) 9241 9242 _winchip-c6_ 9243 IDT Winchip C6 CPU, dealt in same way as i486 with additional 9244 MMX instruction set support. 9245 9246 _winchip2_ 9247 IDT Winchip2 CPU, dealt in same way as i486 with additional 9248 MMX and 3dNOW! instruction set support. 9249 9250 _c3_ 9251 Via C3 CPU with MMX and 3dNOW! instruction set support. (No 9252 scheduling is implemented for this chip.) 9253 9254 _c3-2_ 9255 Via C3-2 CPU with MMX and SSE instruction set support. (No 9256 scheduling is implemented for this chip.) 9257 9258 While picking a specific CPU-TYPE will schedule things 9259 appropriately for that particular chip, the compiler will not 9260 generate any code that does not run on the i386 without the 9261 `-march=CPU-TYPE' option being used. 9262 9263`-march=CPU-TYPE' 9264 Generate instructions for the machine type CPU-TYPE. The choices 9265 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 9266 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 9267 9268`-mcpu=CPU-TYPE' 9269 A deprecated synonym for `-mtune'. 9270 9271`-m386' 9272`-m486' 9273`-mpentium' 9274`-mpentiumpro' 9275 These options are synonyms for `-mtune=i386', `-mtune=i486', 9276 `-mtune=pentium', and `-mtune=pentiumpro' respectively. These 9277 synonyms are deprecated. 9278 9279`-mfpmath=UNIT' 9280 Generate floating point arithmetics for selected unit UNIT. The 9281 choices for UNIT are: 9282 9283 `387' 9284 Use the standard 387 floating point coprocessor present 9285 majority of chips and emulated otherwise. Code compiled with 9286 this option will run almost everywhere. The temporary 9287 results are computed in 80bit precision instead of precision 9288 specified by the type resulting in slightly different results 9289 compared to most of other chips. See `-ffloat-store' for 9290 more detailed description. 9291 9292 This is the default choice for i386 compiler. 9293 9294 `sse' 9295 Use scalar floating point instructions present in the SSE 9296 instruction set. This instruction set is supported by 9297 Pentium3 and newer chips, in the AMD line by Athlon-4, 9298 Athlon-xp and Athlon-mp chips. The earlier version of SSE 9299 instruction set supports only single precision arithmetics, 9300 thus the double and extended precision arithmetics is still 9301 done using 387. Later version, present only in Pentium4 and 9302 the future AMD x86-64 chips supports double precision 9303 arithmetics too. 9304 9305 For the i386 compiler, you need to use `-march=CPU-TYPE', 9306 `-msse' or `-msse2' switches to enable SSE extensions and 9307 make this option effective. For the x86-64 compiler, these 9308 extensions are enabled by default. 9309 9310 The resulting code should be considerably faster in the 9311 majority of cases and avoid the numerical instability 9312 problems of 387 code, but may break some existing code that 9313 expects temporaries to be 80bit. 9314 9315 This is the default choice for the x86-64 compiler. 9316 9317 `sse,387' 9318 Attempt to utilize both instruction sets at once. This 9319 effectively double the amount of available registers and on 9320 chips with separate execution units for 387 and SSE the 9321 execution resources too. Use this option with care, as it is 9322 still experimental, because the GCC register allocator does 9323 not model separate functional units well resulting in 9324 instable performance. 9325 9326`-masm=DIALECT' 9327 Output asm instructions using selected DIALECT. Supported choices 9328 are `intel' or `att' (the default one). Darwin does not support 9329 `intel'. 9330 9331`-mieee-fp' 9332`-mno-ieee-fp' 9333 Control whether or not the compiler uses IEEE floating point 9334 comparisons. These handle correctly the case where the result of a 9335 comparison is unordered. 9336 9337`-msoft-float' 9338 Generate output containing library calls for floating point. 9339 *Warning:* the requisite libraries are not part of GCC. Normally 9340 the facilities of the machine's usual C compiler are used, but 9341 this can't be done directly in cross-compilation. You must make 9342 your own arrangements to provide suitable library functions for 9343 cross-compilation. 9344 9345 On machines where a function returns floating point results in the 9346 80387 register stack, some floating point opcodes may be emitted 9347 even if `-msoft-float' is used. 9348 9349`-mno-fp-ret-in-387' 9350 Do not use the FPU registers for return values of functions. 9351 9352 The usual calling convention has functions return values of types 9353 `float' and `double' in an FPU register, even if there is no FPU. 9354 The idea is that the operating system should emulate an FPU. 9355 9356 The option `-mno-fp-ret-in-387' causes such values to be returned 9357 in ordinary CPU registers instead. 9358 9359`-mno-fancy-math-387' 9360 Some 387 emulators do not support the `sin', `cos' and `sqrt' 9361 instructions for the 387. Specify this option to avoid generating 9362 those instructions. This option is the default on FreeBSD, 9363 OpenBSD and NetBSD. This option is overridden when `-march' 9364 indicates that the target cpu will always have an FPU and so the 9365 instruction will not need emulation. As of revision 2.6.1, these 9366 instructions are not generated unless you also use the 9367 `-funsafe-math-optimizations' switch. 9368 9369`-malign-double' 9370`-mno-align-double' 9371 Control whether GCC aligns `double', `long double', and `long 9372 long' variables on a two word boundary or a one word boundary. 9373 Aligning `double' variables on a two word boundary will produce 9374 code that runs somewhat faster on a `Pentium' at the expense of 9375 more memory. 9376 9377 On x86-64, `-malign-double' is enabled by default. 9378 9379 *Warning:* if you use the `-malign-double' switch, structures 9380 containing the above types will be aligned differently than the 9381 published application binary interface specifications for the 386 9382 and will not be binary compatible with structures in code compiled 9383 without that switch. 9384 9385`-m96bit-long-double' 9386`-m128bit-long-double' 9387 These switches control the size of `long double' type. The i386 9388 application binary interface specifies the size to be 96 bits, so 9389 `-m96bit-long-double' is the default in 32 bit mode. 9390 9391 Modern architectures (Pentium and newer) would prefer `long double' 9392 to be aligned to an 8 or 16 byte boundary. In arrays or structures 9393 conforming to the ABI, this would not be possible. So specifying a 9394 `-m128bit-long-double' will align `long double' to a 16 byte 9395 boundary by padding the `long double' with an additional 32 bit 9396 zero. 9397 9398 In the x86-64 compiler, `-m128bit-long-double' is the default 9399 choice as its ABI specifies that `long double' is to be aligned on 9400 16 byte boundary. 9401 9402 Notice that neither of these options enable any extra precision 9403 over the x87 standard of 80 bits for a `long double'. 9404 9405 *Warning:* if you override the default value for your target ABI, 9406 the structures and arrays containing `long double' variables will 9407 change their size as well as function calling convention for 9408 function taking `long double' will be modified. Hence they will 9409 not be binary compatible with arrays or structures in code 9410 compiled without that switch. 9411 9412`-mmlarge-data-threshold=NUMBER' 9413 When `-mcmodel=medium' is specified, the data greater than 9414 THRESHOLD are placed in large data section. This value must be the 9415 same across all object linked into the binary and defaults to 9416 65535. 9417 9418`-msvr3-shlib' 9419`-mno-svr3-shlib' 9420 Control whether GCC places uninitialized local variables into the 9421 `bss' or `data' segments. `-msvr3-shlib' places them into `bss'. 9422 These options are meaningful only on System V Release 3. 9423 9424`-mrtd' 9425 Use a different function-calling convention, in which functions 9426 that take a fixed number of arguments return with the `ret' NUM 9427 instruction, which pops their arguments while returning. This 9428 saves one instruction in the caller since there is no need to pop 9429 the arguments there. 9430 9431 You can specify that an individual function is called with this 9432 calling sequence with the function attribute `stdcall'. You can 9433 also override the `-mrtd' option by using the function attribute 9434 `cdecl'. *Note Function Attributes::. 9435 9436 *Warning:* this calling convention is incompatible with the one 9437 normally used on Unix, so you cannot use it if you need to call 9438 libraries compiled with the Unix compiler. 9439 9440 Also, you must provide function prototypes for all functions that 9441 take variable numbers of arguments (including `printf'); otherwise 9442 incorrect code will be generated for calls to those functions. 9443 9444 In addition, seriously incorrect code will result if you call a 9445 function with too many arguments. (Normally, extra arguments are 9446 harmlessly ignored.) 9447 9448`-mregparm=NUM' 9449 Control how many registers are used to pass integer arguments. By 9450 default, no registers are used to pass arguments, and at most 3 9451 registers can be used. You can control this behavior for a 9452 specific function by using the function attribute `regparm'. 9453 *Note Function Attributes::. 9454 9455 *Warning:* if you use this switch, and NUM is nonzero, then you 9456 must build all modules with the same value, including any 9457 libraries. This includes the system libraries and startup modules. 9458 9459`-msseregparm' 9460 Use SSE register passing conventions for float and double arguments 9461 and return values. You can control this behavior for a specific 9462 function by using the function attribute `sseregparm'. *Note 9463 Function Attributes::. 9464 9465 *Warning:* if you use this switch then you must build all modules 9466 with the same value, including any libraries. This includes the 9467 system libraries and startup modules. 9468 9469`-mstackrealign' 9470 Realign the stack at entry. On the Intel x86, the 9471 `-mstackrealign' option will generate an alternate prologue and 9472 epilogue that realigns the runtime stack. This supports mixing 9473 legacy codes that keep a 4-byte aligned stack with modern codes 9474 that keep a 16-byte stack for SSE compatibility. The alternate 9475 prologue and epilogue are slower and bigger than the regular ones, 9476 and the alternate prologue requires an extra scratch register; 9477 this lowers the number of registers available if used in 9478 conjunction with the `regparm' attribute. The `-mstackrealign' 9479 option is incompatible with the nested function prologue; this is 9480 considered a hard error. See also the attribute 9481 `force_align_arg_pointer', applicable to individual functions. 9482 9483`-mpreferred-stack-boundary=NUM' 9484 Attempt to keep the stack boundary aligned to a 2 raised to NUM 9485 byte boundary. If `-mpreferred-stack-boundary' is not specified, 9486 the default is 4 (16 bytes or 128 bits). 9487 9488 On Pentium and PentiumPro, `double' and `long double' values 9489 should be aligned to an 8 byte boundary (see `-malign-double') or 9490 suffer significant run time performance penalties. On Pentium 9491 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 9492 work properly if it is not 16 byte aligned. 9493 9494 To ensure proper alignment of this values on the stack, the stack 9495 boundary must be as aligned as that required by any value stored 9496 on the stack. Further, every function must be generated such that 9497 it keeps the stack aligned. Thus calling a function compiled with 9498 a higher preferred stack boundary from a function compiled with a 9499 lower preferred stack boundary will most likely misalign the 9500 stack. It is recommended that libraries that use callbacks always 9501 use the default setting. 9502 9503 This extra alignment does consume extra stack space, and generally 9504 increases code size. Code that is sensitive to stack space usage, 9505 such as embedded systems and operating system kernels, may want to 9506 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 9507 9508`-mmmx' 9509`-mno-mmx' 9510 9511`-msse' 9512`-mno-sse' 9513 9514`-msse2' 9515`-mno-sse2' 9516 9517`-msse3' 9518`-mno-sse3' 9519 9520`-m3dnow' 9521`-mno-3dnow' 9522 These switches enable or disable the use of instructions in the 9523 MMX, SSE, SSE2 or 3DNow! extended instruction sets. These 9524 extensions are also available as built-in functions: see *Note X86 9525 Built-in Functions::, for details of the functions enabled and 9526 disabled by these switches. 9527 9528 To have SSE/SSE2 instructions generated automatically from 9529 floating-point code (as opposed to 387 instructions), see 9530 `-mfpmath=sse'. 9531 9532 These options will enable GCC to use these extended instructions in 9533 generated code, even without `-mfpmath=sse'. Applications which 9534 perform runtime CPU detection must compile separate files for each 9535 supported architecture, using the appropriate flags. In 9536 particular, the file containing the CPU detection code should be 9537 compiled without these options. 9538 9539`-mpush-args' 9540`-mno-push-args' 9541 Use PUSH operations to store outgoing parameters. This method is 9542 shorter and usually equally fast as method using SUB/MOV 9543 operations and is enabled by default. In some cases disabling it 9544 may improve performance because of improved scheduling and reduced 9545 dependencies. 9546 9547`-maccumulate-outgoing-args' 9548 If enabled, the maximum amount of space required for outgoing 9549 arguments will be computed in the function prologue. This is 9550 faster on most modern CPUs because of reduced dependencies, 9551 improved scheduling and reduced stack usage when preferred stack 9552 boundary is not equal to 2. The drawback is a notable increase in 9553 code size. This switch implies `-mno-push-args'. 9554 9555`-mthreads' 9556 Support thread-safe exception handling on `Mingw32'. Code that 9557 relies on thread-safe exception handling must compile and link all 9558 code with the `-mthreads' option. When compiling, `-mthreads' 9559 defines `-D_MT'; when linking, it links in a special thread helper 9560 library `-lmingwthrd' which cleans up per thread exception 9561 handling data. 9562 9563`-mno-align-stringops' 9564 Do not align destination of inlined string operations. This 9565 switch reduces code size and improves performance in case the 9566 destination is already aligned, but GCC doesn't know about it. 9567 9568`-minline-all-stringops' 9569 By default GCC inlines string operations only when destination is 9570 known to be aligned at least to 4 byte boundary. This enables 9571 more inlining, increase code size, but may improve performance of 9572 code that depends on fast memcpy, strlen and memset for short 9573 lengths. 9574 9575`-momit-leaf-frame-pointer' 9576 Don't keep the frame pointer in a register for leaf functions. 9577 This avoids the instructions to save, set up and restore frame 9578 pointers and makes an extra register available in leaf functions. 9579 The option `-fomit-frame-pointer' removes the frame pointer for 9580 all functions which might make debugging harder. 9581 9582`-mtls-direct-seg-refs' 9583`-mno-tls-direct-seg-refs' 9584 Controls whether TLS variables may be accessed with offsets from 9585 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 9586 whether the thread base pointer must be added. Whether or not this 9587 is legal depends on the operating system, and whether it maps the 9588 segment to cover the entire TLS area. 9589 9590 For systems that use GNU libc, the default is on. 9591 9592 These `-m' switches are supported in addition to the above on AMD 9593x86-64 processors in 64-bit environments. 9594 9595`-m32' 9596`-m64' 9597 Generate code for a 32-bit or 64-bit environment. The 32-bit 9598 environment sets int, long and pointer to 32 bits and generates 9599 code that runs on any i386 system. The 64-bit environment sets 9600 int to 32 bits and long and pointer to 64 bits and generates code 9601 for AMD's x86-64 architecture. For darwin only the -m64 option 9602 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 9603 9604`-mno-red-zone' 9605 Do not use a so called red zone for x86-64 code. The red zone is 9606 mandated by the x86-64 ABI, it is a 128-byte area beyond the 9607 location of the stack pointer that will not be modified by signal 9608 or interrupt handlers and therefore can be used for temporary data 9609 without adjusting the stack pointer. The flag `-mno-red-zone' 9610 disables this red zone. 9611 9612`-mcmodel=small' 9613 Generate code for the small code model: the program and its 9614 symbols must be linked in the lower 2 GB of the address space. 9615 Pointers are 64 bits. Programs can be statically or dynamically 9616 linked. This is the default code model. 9617 9618`-mcmodel=kernel' 9619 Generate code for the kernel code model. The kernel runs in the 9620 negative 2 GB of the address space. This model has to be used for 9621 Linux kernel code. 9622 9623`-mcmodel=medium' 9624 Generate code for the medium model: The program is linked in the 9625 lower 2 GB of the address space but symbols can be located 9626 anywhere in the address space. Programs can be statically or 9627 dynamically linked, but building of shared libraries are not 9628 supported with the medium model. 9629 9630`-mcmodel=large' 9631 Generate code for the large model: This model makes no assumptions 9632 about addresses and sizes of sections. Currently GCC does not 9633 implement this model. 9634 9635 9636File: gcc.info, Node: IA-64 Options, Next: M32C Options, Prev: i386 and x86-64 Options, Up: Submodel Options 9637 96383.17.15 IA-64 Options 9639--------------------- 9640 9641These are the `-m' options defined for the Intel IA-64 architecture. 9642 9643`-mbig-endian' 9644 Generate code for a big endian target. This is the default for 9645 HP-UX. 9646 9647`-mlittle-endian' 9648 Generate code for a little endian target. This is the default for 9649 AIX5 and GNU/Linux. 9650 9651`-mgnu-as' 9652`-mno-gnu-as' 9653 Generate (or don't) code for the GNU assembler. This is the 9654 default. 9655 9656`-mgnu-ld' 9657`-mno-gnu-ld' 9658 Generate (or don't) code for the GNU linker. This is the default. 9659 9660`-mno-pic' 9661 Generate code that does not use a global pointer register. The 9662 result is not position independent code, and violates the IA-64 9663 ABI. 9664 9665`-mvolatile-asm-stop' 9666`-mno-volatile-asm-stop' 9667 Generate (or don't) a stop bit immediately before and after 9668 volatile asm statements. 9669 9670`-mregister-names' 9671`-mno-register-names' 9672 Generate (or don't) `in', `loc', and `out' register names for the 9673 stacked registers. This may make assembler output more readable. 9674 9675`-mno-sdata' 9676`-msdata' 9677 Disable (or enable) optimizations that use the small data section. 9678 This may be useful for working around optimizer bugs. 9679 9680`-mconstant-gp' 9681 Generate code that uses a single constant global pointer value. 9682 This is useful when compiling kernel code. 9683 9684`-mauto-pic' 9685 Generate code that is self-relocatable. This implies 9686 `-mconstant-gp'. This is useful when compiling firmware code. 9687 9688`-minline-float-divide-min-latency' 9689 Generate code for inline divides of floating point values using 9690 the minimum latency algorithm. 9691 9692`-minline-float-divide-max-throughput' 9693 Generate code for inline divides of floating point values using 9694 the maximum throughput algorithm. 9695 9696`-minline-int-divide-min-latency' 9697 Generate code for inline divides of integer values using the 9698 minimum latency algorithm. 9699 9700`-minline-int-divide-max-throughput' 9701 Generate code for inline divides of integer values using the 9702 maximum throughput algorithm. 9703 9704`-minline-sqrt-min-latency' 9705 Generate code for inline square roots using the minimum latency 9706 algorithm. 9707 9708`-minline-sqrt-max-throughput' 9709 Generate code for inline square roots using the maximum throughput 9710 algorithm. 9711 9712`-mno-dwarf2-asm' 9713`-mdwarf2-asm' 9714 Don't (or do) generate assembler code for the DWARF2 line number 9715 debugging info. This may be useful when not using the GNU 9716 assembler. 9717 9718`-mearly-stop-bits' 9719`-mno-early-stop-bits' 9720 Allow stop bits to be placed earlier than immediately preceding the 9721 instruction that triggered the stop bit. This can improve 9722 instruction scheduling, but does not always do so. 9723 9724`-mfixed-range=REGISTER-RANGE' 9725 Generate code treating the given register range as fixed registers. 9726 A fixed register is one that the register allocator can not use. 9727 This is useful when compiling kernel code. A register range is 9728 specified as two registers separated by a dash. Multiple register 9729 ranges can be specified separated by a comma. 9730 9731`-mtls-size=TLS-SIZE' 9732 Specify bit size of immediate TLS offsets. Valid values are 14, 9733 22, and 64. 9734 9735`-mtune=CPU-TYPE' 9736 Tune the instruction scheduling for a particular CPU, Valid values 9737 are itanium, itanium1, merced, itanium2, and mckinley. 9738 9739`-mt' 9740`-pthread' 9741 Add support for multithreading using the POSIX threads library. 9742 This option sets flags for both the preprocessor and linker. It 9743 does not affect the thread safety of object code produced by the 9744 compiler or that of libraries supplied with it. These are HP-UX 9745 specific flags. 9746 9747`-milp32' 9748`-mlp64' 9749 Generate code for a 32-bit or 64-bit environment. The 32-bit 9750 environment sets int, long and pointer to 32 bits. The 64-bit 9751 environment sets int to 32 bits and long and pointer to 64 bits. 9752 These are HP-UX specific flags. 9753 9754`-mno-sched-br-data-spec' 9755`-msched-br-data-spec' 9756 (Dis/En)able data speculative scheduling before reload. This will 9757 result in generation of the ld.a instructions and the 9758 corresponding check instructions (ld.c / chk.a). The default is 9759 'disable'. 9760 9761`-msched-ar-data-spec' 9762`-mno-sched-ar-data-spec' 9763 (En/Dis)able data speculative scheduling after reload. This will 9764 result in generation of the ld.a instructions and the 9765 corresponding check instructions (ld.c / chk.a). The default is 9766 'enable'. 9767 9768`-mno-sched-control-spec' 9769`-msched-control-spec' 9770 (Dis/En)able control speculative scheduling. This feature is 9771 available only during region scheduling (i.e. before reload). 9772 This will result in generation of the ld.s instructions and the 9773 corresponding check instructions chk.s . The default is 'disable'. 9774 9775`-msched-br-in-data-spec' 9776`-mno-sched-br-in-data-spec' 9777 (En/Dis)able speculative scheduling of the instructions that are 9778 dependent on the data speculative loads before reload. This is 9779 effective only with `-msched-br-data-spec' enabled. The default 9780 is 'enable'. 9781 9782`-msched-ar-in-data-spec' 9783`-mno-sched-ar-in-data-spec' 9784 (En/Dis)able speculative scheduling of the instructions that are 9785 dependent on the data speculative loads after reload. This is 9786 effective only with `-msched-ar-data-spec' enabled. The default 9787 is 'enable'. 9788 9789`-msched-in-control-spec' 9790`-mno-sched-in-control-spec' 9791 (En/Dis)able speculative scheduling of the instructions that are 9792 dependent on the control speculative loads. This is effective 9793 only with `-msched-control-spec' enabled. The default is 'enable'. 9794 9795`-msched-ldc' 9796`-mno-sched-ldc' 9797 (En/Dis)able use of simple data speculation checks ld.c . If 9798 disabled, only chk.a instructions will be emitted to check data 9799 speculative loads. The default is 'enable'. 9800 9801`-mno-sched-control-ldc' 9802`-msched-control-ldc' 9803 (Dis/En)able use of ld.c instructions to check control speculative 9804 loads. If enabled, in case of control speculative load with no 9805 speculatively scheduled dependent instructions this load will be 9806 emitted as ld.sa and ld.c will be used to check it. The default 9807 is 'disable'. 9808 9809`-mno-sched-spec-verbose' 9810`-msched-spec-verbose' 9811 (Dis/En)able printing of the information about speculative motions. 9812 9813`-mno-sched-prefer-non-data-spec-insns' 9814`-msched-prefer-non-data-spec-insns' 9815 If enabled, data speculative instructions will be chosen for 9816 schedule only if there are no other choices at the moment. This 9817 will make the use of the data speculation much more conservative. 9818 The default is 'disable'. 9819 9820`-mno-sched-prefer-non-control-spec-insns' 9821`-msched-prefer-non-control-spec-insns' 9822 If enabled, control speculative instructions will be chosen for 9823 schedule only if there are no other choices at the moment. This 9824 will make the use of the control speculation much more 9825 conservative. The default is 'disable'. 9826 9827`-mno-sched-count-spec-in-critical-path' 9828`-msched-count-spec-in-critical-path' 9829 If enabled, speculative dependencies will be considered during 9830 computation of the instructions priorities. This will make the 9831 use of the speculation a bit more conservative. The default is 9832 'disable'. 9833 9834 9835 9836File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: IA-64 Options, Up: Submodel Options 9837 98383.17.16 M32C Options 9839-------------------- 9840 9841`-mcpu=NAME' 9842 Select the CPU for which code is generated. NAME may be one of 9843 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 9844 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 9845 series. 9846 9847`-msim' 9848 Specifies that the program will be run on the simulator. This 9849 causes an alternate runtime library to be linked in which 9850 supports, for example, file I/O. You must not use this option 9851 when generating programs that will run on real hardware; you must 9852 provide your own runtime library for whatever I/O functions are 9853 needed. 9854 9855`-memregs=NUMBER' 9856 Specifies the number of memory-based pseudo-registers GCC will use 9857 during code generation. These pseudo-registers will be used like 9858 real registers, so there is a tradeoff between GCC's ability to 9859 fit the code into available registers, and the performance penalty 9860 of using memory instead of registers. Note that all modules in a 9861 program must be compiled with the same value for this option. 9862 Because of that, you must not use this option with the default 9863 runtime libraries gcc builds. 9864 9865 9866 9867File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 9868 98693.17.17 M32R/D Options 9870---------------------- 9871 9872These `-m' options are defined for Renesas M32R/D architectures: 9873 9874`-m32r2' 9875 Generate code for the M32R/2. 9876 9877`-m32rx' 9878 Generate code for the M32R/X. 9879 9880`-m32r' 9881 Generate code for the M32R. This is the default. 9882 9883`-mmodel=small' 9884 Assume all objects live in the lower 16MB of memory (so that their 9885 addresses can be loaded with the `ld24' instruction), and assume 9886 all subroutines are reachable with the `bl' instruction. This is 9887 the default. 9888 9889 The addressability of a particular object can be set with the 9890 `model' attribute. 9891 9892`-mmodel=medium' 9893 Assume objects may be anywhere in the 32-bit address space (the 9894 compiler will generate `seth/add3' instructions to load their 9895 addresses), and assume all subroutines are reachable with the `bl' 9896 instruction. 9897 9898`-mmodel=large' 9899 Assume objects may be anywhere in the 32-bit address space (the 9900 compiler will generate `seth/add3' instructions to load their 9901 addresses), and assume subroutines may not be reachable with the 9902 `bl' instruction (the compiler will generate the much slower 9903 `seth/add3/jl' instruction sequence). 9904 9905`-msdata=none' 9906 Disable use of the small data area. Variables will be put into 9907 one of `.data', `bss', or `.rodata' (unless the `section' 9908 attribute has been specified). This is the default. 9909 9910 The small data area consists of sections `.sdata' and `.sbss'. 9911 Objects may be explicitly put in the small data area with the 9912 `section' attribute using one of these sections. 9913 9914`-msdata=sdata' 9915 Put small global and static data in the small data area, but do not 9916 generate special code to reference them. 9917 9918`-msdata=use' 9919 Put small global and static data in the small data area, and 9920 generate special instructions to reference them. 9921 9922`-G NUM' 9923 Put global and static objects less than or equal to NUM bytes into 9924 the small data or bss sections instead of the normal data or bss 9925 sections. The default value of NUM is 8. The `-msdata' option 9926 must be set to one of `sdata' or `use' for this option to have any 9927 effect. 9928 9929 All modules should be compiled with the same `-G NUM' value. 9930 Compiling with different values of NUM may or may not work; if it 9931 doesn't the linker will give an error message--incorrect code will 9932 not be generated. 9933 9934`-mdebug' 9935 Makes the M32R specific code in the compiler display some 9936 statistics that might help in debugging programs. 9937 9938`-malign-loops' 9939 Align all loops to a 32-byte boundary. 9940 9941`-mno-align-loops' 9942 Do not enforce a 32-byte alignment for loops. This is the default. 9943 9944`-missue-rate=NUMBER' 9945 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 9946 9947`-mbranch-cost=NUMBER' 9948 NUMBER can only be 1 or 2. If it is 1 then branches will be 9949 preferred over conditional code, if it is 2, then the opposite will 9950 apply. 9951 9952`-mflush-trap=NUMBER' 9953 Specifies the trap number to use to flush the cache. The default 9954 is 12. Valid numbers are between 0 and 15 inclusive. 9955 9956`-mno-flush-trap' 9957 Specifies that the cache cannot be flushed by using a trap. 9958 9959`-mflush-func=NAME' 9960 Specifies the name of the operating system function to call to 9961 flush the cache. The default is __flush_cache_, but a function 9962 call will only be used if a trap is not available. 9963 9964`-mno-flush-func' 9965 Indicates that there is no OS function for flushing the cache. 9966 9967 9968 9969File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 9970 99713.17.18 M680x0 Options 9972---------------------- 9973 9974These are the `-m' options defined for the 68000 series. The default 9975values for these options depends on which style of 68000 was selected 9976when the compiler was configured; the defaults for the most common 9977choices are given below. 9978 9979`-m68000' 9980`-mc68000' 9981 Generate output for a 68000. This is the default when the 9982 compiler is configured for 68000-based systems. 9983 9984 Use this option for microcontrollers with a 68000 or EC000 core, 9985 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 9986 9987`-m68020' 9988`-mc68020' 9989 Generate output for a 68020. This is the default when the 9990 compiler is configured for 68020-based systems. 9991 9992`-m68881' 9993 Generate output containing 68881 instructions for floating point. 9994 This is the default for most 68020 systems unless `--nfp' was 9995 specified when the compiler was configured. 9996 9997`-m68030' 9998 Generate output for a 68030. This is the default when the 9999 compiler is configured for 68030-based systems. 10000 10001`-m68040' 10002 Generate output for a 68040. This is the default when the 10003 compiler is configured for 68040-based systems. 10004 10005 This option inhibits the use of 68881/68882 instructions that have 10006 to be emulated by software on the 68040. Use this option if your 10007 68040 does not have code to emulate those instructions. 10008 10009`-m68060' 10010 Generate output for a 68060. This is the default when the 10011 compiler is configured for 68060-based systems. 10012 10013 This option inhibits the use of 68020 and 68881/68882 instructions 10014 that have to be emulated by software on the 68060. Use this 10015 option if your 68060 does not have code to emulate those 10016 instructions. 10017 10018`-mcpu32' 10019 Generate output for a CPU32. This is the default when the 10020 compiler is configured for CPU32-based systems. 10021 10022 Use this option for microcontrollers with a CPU32 or CPU32+ core, 10023 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 10024 68341, 68349 and 68360. 10025 10026`-m5200' 10027 Generate output for a 520X "coldfire" family cpu. This is the 10028 default when the compiler is configured for 520X-based systems. 10029 10030 Use this option for microcontroller with a 5200 core, including 10031 the MCF5202, MCF5203, MCF5204 and MCF5202. 10032 10033`-mcfv4e' 10034 Generate output for a ColdFire V4e family cpu (e.g. 547x/548x). 10035 This includes use of hardware floating point instructions. 10036 10037`-m68020-40' 10038 Generate output for a 68040, without using any of the new 10039 instructions. This results in code which can run relatively 10040 efficiently on either a 68020/68881 or a 68030 or a 68040. The 10041 generated code does use the 68881 instructions that are emulated 10042 on the 68040. 10043 10044`-m68020-60' 10045 Generate output for a 68060, without using any of the new 10046 instructions. This results in code which can run relatively 10047 efficiently on either a 68020/68881 or a 68030 or a 68040. The 10048 generated code does use the 68881 instructions that are emulated 10049 on the 68060. 10050 10051`-msoft-float' 10052 Generate output containing library calls for floating point. 10053 *Warning:* the requisite libraries are not available for all m68k 10054 targets. Normally the facilities of the machine's usual C 10055 compiler are used, but this can't be done directly in 10056 cross-compilation. You must make your own arrangements to provide 10057 suitable library functions for cross-compilation. The embedded 10058 targets `m68k-*-aout' and `m68k-*-coff' do provide software 10059 floating point support. 10060 10061`-mshort' 10062 Consider type `int' to be 16 bits wide, like `short int'. 10063 Additionally, parameters passed on the stack are also aligned to a 10064 16-bit boundary even on targets whose API mandates promotion to 10065 32-bit. 10066 10067`-mnobitfield' 10068 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 10069 and `-m5200' options imply `-mnobitfield'. 10070 10071`-mbitfield' 10072 Do use the bit-field instructions. The `-m68020' option implies 10073 `-mbitfield'. This is the default if you use a configuration 10074 designed for a 68020. 10075 10076`-mrtd' 10077 Use a different function-calling convention, in which functions 10078 that take a fixed number of arguments return with the `rtd' 10079 instruction, which pops their arguments while returning. This 10080 saves one instruction in the caller since there is no need to pop 10081 the arguments there. 10082 10083 This calling convention is incompatible with the one normally used 10084 on Unix, so you cannot use it if you need to call libraries 10085 compiled with the Unix compiler. 10086 10087 Also, you must provide function prototypes for all functions that 10088 take variable numbers of arguments (including `printf'); otherwise 10089 incorrect code will be generated for calls to those functions. 10090 10091 In addition, seriously incorrect code will result if you call a 10092 function with too many arguments. (Normally, extra arguments are 10093 harmlessly ignored.) 10094 10095 The `rtd' instruction is supported by the 68010, 68020, 68030, 10096 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 10097 10098`-malign-int' 10099`-mno-align-int' 10100 Control whether GCC aligns `int', `long', `long long', `float', 10101 `double', and `long double' variables on a 32-bit boundary 10102 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 10103 variables on 32-bit boundaries produces code that runs somewhat 10104 faster on processors with 32-bit busses at the expense of more 10105 memory. 10106 10107 *Warning:* if you use the `-malign-int' switch, GCC will align 10108 structures containing the above types differently than most 10109 published application binary interface specifications for the m68k. 10110 10111`-mpcrel' 10112 Use the pc-relative addressing mode of the 68000 directly, instead 10113 of using a global offset table. At present, this option implies 10114 `-fpic', allowing at most a 16-bit offset for pc-relative 10115 addressing. `-fPIC' is not presently supported with `-mpcrel', 10116 though this could be supported for 68020 and higher processors. 10117 10118`-mno-strict-align' 10119`-mstrict-align' 10120 Do not (do) assume that unaligned memory references will be 10121 handled by the system. 10122 10123`-msep-data' 10124 Generate code that allows the data segment to be located in a 10125 different area of memory from the text segment. This allows for 10126 execute in place in an environment without virtual memory 10127 management. This option implies `-fPIC'. 10128 10129`-mno-sep-data' 10130 Generate code that assumes that the data segment follows the text 10131 segment. This is the default. 10132 10133`-mid-shared-library' 10134 Generate code that supports shared libraries via the library ID 10135 method. This allows for execute in place and shared libraries in 10136 an environment without virtual memory management. This option 10137 implies `-fPIC'. 10138 10139`-mno-id-shared-library' 10140 Generate code that doesn't assume ID based shared libraries are 10141 being used. This is the default. 10142 10143`-mshared-library-id=n' 10144 Specified the identification number of the ID based shared library 10145 being compiled. Specifying a value of 0 will generate more 10146 compact code, specifying other values will force the allocation of 10147 that number to the current library but is no more space or time 10148 efficient than omitting this option. 10149 10150 10151 10152File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 10153 101543.17.19 M68hc1x Options 10155----------------------- 10156 10157These are the `-m' options defined for the 68hc11 and 68hc12 10158microcontrollers. The default values for these options depends on 10159which style of microcontroller was selected when the compiler was 10160configured; the defaults for the most common choices are given below. 10161 10162`-m6811' 10163`-m68hc11' 10164 Generate output for a 68HC11. This is the default when the 10165 compiler is configured for 68HC11-based systems. 10166 10167`-m6812' 10168`-m68hc12' 10169 Generate output for a 68HC12. This is the default when the 10170 compiler is configured for 68HC12-based systems. 10171 10172`-m68S12' 10173`-m68hcs12' 10174 Generate output for a 68HCS12. 10175 10176`-mauto-incdec' 10177 Enable the use of 68HC12 pre and post auto-increment and 10178 auto-decrement addressing modes. 10179 10180`-minmax' 10181`-nominmax' 10182 Enable the use of 68HC12 min and max instructions. 10183 10184`-mlong-calls' 10185`-mno-long-calls' 10186 Treat all calls as being far away (near). If calls are assumed to 10187 be far away, the compiler will use the `call' instruction to call 10188 a function and the `rtc' instruction for returning. 10189 10190`-mshort' 10191 Consider type `int' to be 16 bits wide, like `short int'. 10192 10193`-msoft-reg-count=COUNT' 10194 Specify the number of pseudo-soft registers which are used for the 10195 code generation. The maximum number is 32. Using more pseudo-soft 10196 register may or may not result in better code depending on the 10197 program. The default is 4 for 68HC11 and 2 for 68HC12. 10198 10199 10200 10201File: gcc.info, Node: MCore Options, Next: MIPS Options, Prev: M68hc1x Options, Up: Submodel Options 10202 102033.17.20 MCore Options 10204--------------------- 10205 10206These are the `-m' options defined for the Motorola M*Core processors. 10207 10208`-mhardlit' 10209`-mno-hardlit' 10210 Inline constants into the code stream if it can be done in two 10211 instructions or less. 10212 10213`-mdiv' 10214`-mno-div' 10215 Use the divide instruction. (Enabled by default). 10216 10217`-mrelax-immediate' 10218`-mno-relax-immediate' 10219 Allow arbitrary sized immediates in bit operations. 10220 10221`-mwide-bitfields' 10222`-mno-wide-bitfields' 10223 Always treat bit-fields as int-sized. 10224 10225`-m4byte-functions' 10226`-mno-4byte-functions' 10227 Force all functions to be aligned to a four byte boundary. 10228 10229`-mcallgraph-data' 10230`-mno-callgraph-data' 10231 Emit callgraph information. 10232 10233`-mslow-bytes' 10234`-mno-slow-bytes' 10235 Prefer word access when reading byte quantities. 10236 10237`-mlittle-endian' 10238`-mbig-endian' 10239 Generate code for a little endian target. 10240 10241`-m210' 10242`-m340' 10243 Generate code for the 210 processor. 10244 10245 10246File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MCore Options, Up: Submodel Options 10247 102483.17.21 MIPS Options 10249-------------------- 10250 10251`-EB' 10252 Generate big-endian code. 10253 10254`-EL' 10255 Generate little-endian code. This is the default for `mips*el-*-*' 10256 configurations. 10257 10258`-march=ARCH' 10259 Generate code that will run on ARCH, which can be the name of a 10260 generic MIPS ISA, or the name of a particular processor. The ISA 10261 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 10262 `mips32r2', and `mips64'. The processor names are: `4kc', `4km', 10263 `4kp', `5kc', `5kf', `20kc', `24k', `24kc', `24kf', `24kx', `m4k', 10264 `orion', `r2000', `r3000', `r3900', `r4000', `r4400', `r4600', 10265 `r4650', `r6000', `r8000', `rm7000', `rm9000', `sb1', `sr71000', 10266 `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', 10267 `vr5400' and `vr5500'. The special value `from-abi' selects the 10268 most compatible architecture for the selected ABI (that is, 10269 `mips1' for 32-bit ABIs and `mips3' for 64-bit ABIs). 10270 10271 In processor names, a final `000' can be abbreviated as `k' (for 10272 example, `-march=r2k'). Prefixes are optional, and `vr' may be 10273 written `r'. 10274 10275 GCC defines two macros based on the value of this option. The 10276 first is `_MIPS_ARCH', which gives the name of target 10277 architecture, as a string. The second has the form 10278 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 10279 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 10280 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 10281 10282 Note that the `_MIPS_ARCH' macro uses the processor names given 10283 above. In other words, it will have the full prefix and will not 10284 abbreviate `000' as `k'. In the case of `from-abi', the macro 10285 names the resolved architecture (either `"mips1"' or `"mips3"'). 10286 It names the default architecture when no `-march' option is given. 10287 10288`-mtune=ARCH' 10289 Optimize for ARCH. Among other things, this option controls the 10290 way instructions are scheduled, and the perceived cost of 10291 arithmetic operations. The list of ARCH values is the same as for 10292 `-march'. 10293 10294 When this option is not used, GCC will optimize for the processor 10295 specified by `-march'. By using `-march' and `-mtune' together, 10296 it is possible to generate code that will run on a family of 10297 processors, but optimize the code for one particular member of 10298 that family. 10299 10300 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 10301 which work in the same way as the `-march' ones described above. 10302 10303`-mips1' 10304 Equivalent to `-march=mips1'. 10305 10306`-mips2' 10307 Equivalent to `-march=mips2'. 10308 10309`-mips3' 10310 Equivalent to `-march=mips3'. 10311 10312`-mips4' 10313 Equivalent to `-march=mips4'. 10314 10315`-mips32' 10316 Equivalent to `-march=mips32'. 10317 10318`-mips32r2' 10319 Equivalent to `-march=mips32r2'. 10320 10321`-mips64' 10322 Equivalent to `-march=mips64'. 10323 10324`-mips16' 10325`-mno-mips16' 10326 Generate (do not generate) MIPS16 code. If GCC is targetting a 10327 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 10328 10329`-mabi=32' 10330`-mabi=o64' 10331`-mabi=n32' 10332`-mabi=64' 10333`-mabi=eabi' 10334 Generate code for the given ABI. 10335 10336 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 10337 generates 64-bit code when you select a 64-bit architecture, but 10338 you can use `-mgp32' to get 32-bit code instead. 10339 10340 For information about the O64 ABI, see 10341 `http://gcc.gnu.org/projects/mipso64-abi.html'. 10342 10343`-mabicalls' 10344`-mno-abicalls' 10345 Generate (do not generate) code that is suitable for SVR4-style 10346 dynamic objects. `-mabicalls' is the default for SVR4-based 10347 systems. 10348 10349`-mshared' 10350`-mno-shared' 10351 Generate (do not generate) code that is fully position-independent, 10352 and that can therefore be linked into shared libraries. This 10353 option only affects `-mabicalls'. 10354 10355 All `-mabicalls' code has traditionally been position-independent, 10356 regardless of options like `-fPIC' and `-fpic'. However, as an 10357 extension, the GNU toolchain allows executables to use absolute 10358 accesses for locally-binding symbols. It can also use shorter GP 10359 initialization sequences and generate direct calls to 10360 locally-defined functions. This mode is selected by `-mno-shared'. 10361 10362 `-mno-shared' depends on binutils 2.16 or higher and generates 10363 objects that can only be linked by the GNU linker. However, the 10364 option does not affect the ABI of the final executable; it only 10365 affects the ABI of relocatable objects. Using `-mno-shared' will 10366 generally make executables both smaller and quicker. 10367 10368 `-mshared' is the default. 10369 10370`-mxgot' 10371`-mno-xgot' 10372 Lift (do not lift) the usual restrictions on the size of the global 10373 offset table. 10374 10375 GCC normally uses a single instruction to load values from the GOT. 10376 While this is relatively efficient, it will only work if the GOT 10377 is smaller than about 64k. Anything larger will cause the linker 10378 to report an error such as: 10379 10380 relocation truncated to fit: R_MIPS_GOT16 foobar 10381 10382 If this happens, you should recompile your code with `-mxgot'. It 10383 should then work with very large GOTs, although it will also be 10384 less efficient, since it will take three instructions to fetch the 10385 value of a global symbol. 10386 10387 Note that some linkers can create multiple GOTs. If you have such 10388 a linker, you should only need to use `-mxgot' when a single object 10389 file accesses more than 64k's worth of GOT entries. Very few do. 10390 10391 These options have no effect unless GCC is generating position 10392 independent code. 10393 10394`-mgp32' 10395 Assume that general-purpose registers are 32 bits wide. 10396 10397`-mgp64' 10398 Assume that general-purpose registers are 64 bits wide. 10399 10400`-mfp32' 10401 Assume that floating-point registers are 32 bits wide. 10402 10403`-mfp64' 10404 Assume that floating-point registers are 64 bits wide. 10405 10406`-mhard-float' 10407 Use floating-point coprocessor instructions. 10408 10409`-msoft-float' 10410 Do not use floating-point coprocessor instructions. Implement 10411 floating-point calculations using library calls instead. 10412 10413`-msingle-float' 10414 Assume that the floating-point coprocessor only supports 10415 single-precision operations. 10416 10417`-mdouble-float' 10418 Assume that the floating-point coprocessor supports 10419 double-precision operations. This is the default. 10420 10421`-mdsp' 10422`-mno-dsp' 10423 Use (do not use) the MIPS DSP ASE. *Note MIPS DSP Built-in 10424 Functions::. 10425 10426`-mpaired-single' 10427`-mno-paired-single' 10428 Use (do not use) paired-single floating-point instructions. *Note 10429 MIPS Paired-Single Support::. This option can only be used when 10430 generating 64-bit code and requires hardware floating-point 10431 support to be enabled. 10432 10433`-mips3d' 10434`-mno-mips3d' 10435 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 10436 Functions::. The option `-mips3d' implies `-mpaired-single'. 10437 10438`-mlong64' 10439 Force `long' types to be 64 bits wide. See `-mlong32' for an 10440 explanation of the default and the way that the pointer size is 10441 determined. 10442 10443`-mlong32' 10444 Force `long', `int', and pointer types to be 32 bits wide. 10445 10446 The default size of `int's, `long's and pointers depends on the 10447 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 10448 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 10449 `long's. Pointers are the same size as `long's, or the same size 10450 as integer registers, whichever is smaller. 10451 10452`-msym32' 10453`-mno-sym32' 10454 Assume (do not assume) that all symbols have 32-bit values, 10455 regardless of the selected ABI. This option is useful in 10456 combination with `-mabi=64' and `-mno-abicalls' because it allows 10457 GCC to generate shorter and faster references to symbolic 10458 addresses. 10459 10460`-G NUM' 10461 Put global and static items less than or equal to NUM bytes into 10462 the small data or bss section instead of the normal data or bss 10463 section. This allows the data to be accessed using a single 10464 instruction. 10465 10466 All modules should be compiled with the same `-G NUM' value. 10467 10468`-membedded-data' 10469`-mno-embedded-data' 10470 Allocate variables to the read-only data section first if 10471 possible, then next in the small data section if possible, 10472 otherwise in data. This gives slightly slower code than the 10473 default, but reduces the amount of RAM required when executing, 10474 and thus may be preferred for some embedded systems. 10475 10476`-muninit-const-in-rodata' 10477`-mno-uninit-const-in-rodata' 10478 Put uninitialized `const' variables in the read-only data section. 10479 This option is only meaningful in conjunction with 10480 `-membedded-data'. 10481 10482`-msplit-addresses' 10483`-mno-split-addresses' 10484 Enable (disable) use of the `%hi()' and `%lo()' assembler 10485 relocation operators. This option has been superseded by 10486 `-mexplicit-relocs' but is retained for backwards compatibility. 10487 10488`-mexplicit-relocs' 10489`-mno-explicit-relocs' 10490 Use (do not use) assembler relocation operators when dealing with 10491 symbolic addresses. The alternative, selected by 10492 `-mno-explicit-relocs', is to use assembler macros instead. 10493 10494 `-mexplicit-relocs' is the default if GCC was configured to use an 10495 assembler that supports relocation operators. 10496 10497`-mcheck-zero-division' 10498`-mno-check-zero-division' 10499 Trap (do not trap) on integer division by zero. The default is 10500 `-mcheck-zero-division'. 10501 10502`-mdivide-traps' 10503`-mdivide-breaks' 10504 MIPS systems check for division by zero by generating either a 10505 conditional trap or a break instruction. Using traps results in 10506 smaller code, but is only supported on MIPS II and later. Also, 10507 some versions of the Linux kernel have a bug that prevents trap 10508 from generating the proper signal (`SIGFPE'). Use 10509 `-mdivide-traps' to allow conditional traps on architectures that 10510 support them and `-mdivide-breaks' to force the use of breaks. 10511 10512 The default is usually `-mdivide-traps', but this can be 10513 overridden at configure time using `--with-divide=breaks'. 10514 Divide-by-zero checks can be completely disabled using 10515 `-mno-check-zero-division'. 10516 10517`-mmemcpy' 10518`-mno-memcpy' 10519 Force (do not force) the use of `memcpy()' for non-trivial block 10520 moves. The default is `-mno-memcpy', which allows GCC to inline 10521 most constant-sized copies. 10522 10523`-mlong-calls' 10524`-mno-long-calls' 10525 Disable (do not disable) use of the `jal' instruction. Calling 10526 functions using `jal' is more efficient but requires the caller 10527 and callee to be in the same 256 megabyte segment. 10528 10529 This option has no effect on abicalls code. The default is 10530 `-mno-long-calls'. 10531 10532`-mmad' 10533`-mno-mad' 10534 Enable (disable) use of the `mad', `madu' and `mul' instructions, 10535 as provided by the R4650 ISA. 10536 10537`-mfused-madd' 10538`-mno-fused-madd' 10539 Enable (disable) use of the floating point multiply-accumulate 10540 instructions, when they are available. The default is 10541 `-mfused-madd'. 10542 10543 When multiply-accumulate instructions are used, the intermediate 10544 product is calculated to infinite precision and is not subject to 10545 the FCSR Flush to Zero bit. This may be undesirable in some 10546 circumstances. 10547 10548`-nocpp' 10549 Tell the MIPS assembler to not run its preprocessor over user 10550 assembler files (with a `.s' suffix) when assembling them. 10551 10552`-mfix-r4000' 10553`-mno-fix-r4000' 10554 Work around certain R4000 CPU errata: 10555 - A double-word or a variable shift may give an incorrect 10556 result if executed immediately after starting an integer 10557 division. 10558 10559 - A double-word or a variable shift may give an incorrect 10560 result if executed while an integer multiplication is in 10561 progress. 10562 10563 - An integer division may give an incorrect result if started 10564 in a delay slot of a taken branch or a jump. 10565 10566`-mfix-r4400' 10567`-mno-fix-r4400' 10568 Work around certain R4400 CPU errata: 10569 - A double-word or a variable shift may give an incorrect 10570 result if executed immediately after starting an integer 10571 division. 10572 10573`-mfix-vr4120' 10574`-mno-fix-vr4120' 10575 Work around certain VR4120 errata: 10576 - `dmultu' does not always produce the correct result. 10577 10578 - `div' and `ddiv' do not always produce the correct result if 10579 one of the operands is negative. 10580 The workarounds for the division errata rely on special functions 10581 in `libgcc.a'. At present, these functions are only provided by 10582 the `mips64vr*-elf' configurations. 10583 10584 Other VR4120 errata require a nop to be inserted between certain 10585 pairs of instructions. These errata are handled by the assembler, 10586 not by GCC itself. 10587 10588`-mfix-vr4130' 10589 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 10590 implemented by the assembler rather than by GCC, although GCC will 10591 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 10592 `dmacc' and `dmacchi' instructions are available instead. 10593 10594`-mfix-sb1' 10595`-mno-fix-sb1' 10596 Work around certain SB-1 CPU core errata. (This flag currently 10597 works around the SB-1 revision 2 "F1" and "F2" floating point 10598 errata.) 10599 10600`-mflush-func=FUNC' 10601`-mno-flush-func' 10602 Specifies the function to call to flush the I and D caches, or to 10603 not call any such function. If called, the function must take the 10604 same arguments as the common `_flush_func()', that is, the address 10605 of the memory range for which the cache is being flushed, the size 10606 of the memory range, and the number 3 (to flush both caches). The 10607 default depends on the target GCC was configured for, but commonly 10608 is either `_flush_func' or `__cpu_flush'. 10609 10610`-mbranch-likely' 10611`-mno-branch-likely' 10612 Enable or disable use of Branch Likely instructions, regardless of 10613 the default for the selected architecture. By default, Branch 10614 Likely instructions may be generated if they are supported by the 10615 selected architecture. An exception is for the MIPS32 and MIPS64 10616 architectures and processors which implement those architectures; 10617 for those, Branch Likely instructions will not be generated by 10618 default because the MIPS32 and MIPS64 architectures specifically 10619 deprecate their use. 10620 10621`-mfp-exceptions' 10622`-mno-fp-exceptions' 10623 Specifies whether FP exceptions are enabled. This affects how we 10624 schedule FP instructions for some processors. The default is that 10625 FP exceptions are enabled. 10626 10627 For instance, on the SB-1, if FP exceptions are disabled, and we 10628 are emitting 64-bit code, then we can use both FP pipes. 10629 Otherwise, we can only use one FP pipe. 10630 10631`-mvr4130-align' 10632`-mno-vr4130-align' 10633 The VR4130 pipeline is two-way superscalar, but can only issue two 10634 instructions together if the first one is 8-byte aligned. When 10635 this option is enabled, GCC will align pairs of instructions that 10636 it thinks should execute in parallel. 10637 10638 This option only has an effect when optimizing for the VR4130. It 10639 normally makes code faster, but at the expense of making it bigger. 10640 It is enabled by default at optimization level `-O3'. 10641 10642 10643File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 10644 106453.17.22 MMIX Options 10646-------------------- 10647 10648These options are defined for the MMIX: 10649 10650`-mlibfuncs' 10651`-mno-libfuncs' 10652 Specify that intrinsic library functions are being compiled, 10653 passing all values in registers, no matter the size. 10654 10655`-mepsilon' 10656`-mno-epsilon' 10657 Generate floating-point comparison instructions that compare with 10658 respect to the `rE' epsilon register. 10659 10660`-mabi=mmixware' 10661`-mabi=gnu' 10662 Generate code that passes function parameters and return values 10663 that (in the called function) are seen as registers `$0' and up, 10664 as opposed to the GNU ABI which uses global registers `$231' and 10665 up. 10666 10667`-mzero-extend' 10668`-mno-zero-extend' 10669 When reading data from memory in sizes shorter than 64 bits, use 10670 (do not use) zero-extending load instructions by default, rather 10671 than sign-extending ones. 10672 10673`-mknuthdiv' 10674`-mno-knuthdiv' 10675 Make the result of a division yielding a remainder have the same 10676 sign as the divisor. With the default, `-mno-knuthdiv', the sign 10677 of the remainder follows the sign of the dividend. Both methods 10678 are arithmetically valid, the latter being almost exclusively used. 10679 10680`-mtoplevel-symbols' 10681`-mno-toplevel-symbols' 10682 Prepend (do not prepend) a `:' to all global symbols, so the 10683 assembly code can be used with the `PREFIX' assembly directive. 10684 10685`-melf' 10686 Generate an executable in the ELF format, rather than the default 10687 `mmo' format used by the `mmix' simulator. 10688 10689`-mbranch-predict' 10690`-mno-branch-predict' 10691 Use (do not use) the probable-branch instructions, when static 10692 branch prediction indicates a probable branch. 10693 10694`-mbase-addresses' 10695`-mno-base-addresses' 10696 Generate (do not generate) code that uses _base addresses_. Using 10697 a base address automatically generates a request (handled by the 10698 assembler and the linker) for a constant to be set up in a global 10699 register. The register is used for one or more base address 10700 requests within the range 0 to 255 from the value held in the 10701 register. The generally leads to short and fast code, but the 10702 number of different data items that can be addressed is limited. 10703 This means that a program that uses lots of static data may 10704 require `-mno-base-addresses'. 10705 10706`-msingle-exit' 10707`-mno-single-exit' 10708 Force (do not force) generated code to have a single exit point in 10709 each function. 10710 10711 10712File: gcc.info, Node: MN10300 Options, Next: MT Options, Prev: MMIX Options, Up: Submodel Options 10713 107143.17.23 MN10300 Options 10715----------------------- 10716 10717These `-m' options are defined for Matsushita MN10300 architectures: 10718 10719`-mmult-bug' 10720 Generate code to avoid bugs in the multiply instructions for the 10721 MN10300 processors. This is the default. 10722 10723`-mno-mult-bug' 10724 Do not generate code to avoid bugs in the multiply instructions 10725 for the MN10300 processors. 10726 10727`-mam33' 10728 Generate code which uses features specific to the AM33 processor. 10729 10730`-mno-am33' 10731 Do not generate code which uses features specific to the AM33 10732 processor. This is the default. 10733 10734`-mreturn-pointer-on-d0' 10735 When generating a function which returns a pointer, return the 10736 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 10737 only in a0, and attempts to call such functions without a prototype 10738 would result in errors. Note that this option is on by default; 10739 use `-mno-return-pointer-on-d0' to disable it. 10740 10741`-mno-crt0' 10742 Do not link in the C run-time initialization object file. 10743 10744`-mrelax' 10745 Indicate to the linker that it should perform a relaxation 10746 optimization pass to shorten branches, calls and absolute memory 10747 addresses. This option only has an effect when used on the 10748 command line for the final link step. 10749 10750 This option makes symbolic debugging impossible. 10751 10752 10753File: gcc.info, Node: MT Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options 10754 107553.17.24 MT Options 10756------------------ 10757 10758These `-m' options are defined for Morpho MT architectures: 10759 10760`-march=CPU-TYPE' 10761 Generate code that will run on CPU-TYPE, which is the name of a 10762 system representing a certain processor type. Possible values for 10763 CPU-TYPE are `ms1-64-001', `ms1-16-002', `ms1-16-003' and `ms2'. 10764 10765 When this option is not used, the default is `-march=ms1-16-002'. 10766 10767`-mbacc' 10768 Use byte loads and stores when generating code. 10769 10770`-mno-bacc' 10771 Do not use byte loads and stores when generating code. 10772 10773`-msim' 10774 Use simulator runtime 10775 10776`-mno-crt0' 10777 Do not link in the C run-time initialization object file `crti.o'. 10778 Other run-time initialization and termination files such as 10779 `startup.o' and `exit.o' are still included on the linker command 10780 line. 10781 10782 10783 10784File: gcc.info, Node: PDP-11 Options, Next: PowerPC Options, Prev: MT Options, Up: Submodel Options 10785 107863.17.25 PDP-11 Options 10787---------------------- 10788 10789These options are defined for the PDP-11: 10790 10791`-mfpu' 10792 Use hardware FPP floating point. This is the default. (FIS 10793 floating point on the PDP-11/40 is not supported.) 10794 10795`-msoft-float' 10796 Do not use hardware floating point. 10797 10798`-mac0' 10799 Return floating-point results in ac0 (fr0 in Unix assembler 10800 syntax). 10801 10802`-mno-ac0' 10803 Return floating-point results in memory. This is the default. 10804 10805`-m40' 10806 Generate code for a PDP-11/40. 10807 10808`-m45' 10809 Generate code for a PDP-11/45. This is the default. 10810 10811`-m10' 10812 Generate code for a PDP-11/10. 10813 10814`-mbcopy-builtin' 10815 Use inline `movmemhi' patterns for copying memory. This is the 10816 default. 10817 10818`-mbcopy' 10819 Do not use inline `movmemhi' patterns for copying memory. 10820 10821`-mint16' 10822`-mno-int32' 10823 Use 16-bit `int'. This is the default. 10824 10825`-mint32' 10826`-mno-int16' 10827 Use 32-bit `int'. 10828 10829`-mfloat64' 10830`-mno-float32' 10831 Use 64-bit `float'. This is the default. 10832 10833`-mfloat32' 10834`-mno-float64' 10835 Use 32-bit `float'. 10836 10837`-mabshi' 10838 Use `abshi2' pattern. This is the default. 10839 10840`-mno-abshi' 10841 Do not use `abshi2' pattern. 10842 10843`-mbranch-expensive' 10844 Pretend that branches are expensive. This is for experimenting 10845 with code generation only. 10846 10847`-mbranch-cheap' 10848 Do not pretend that branches are expensive. This is the default. 10849 10850`-msplit' 10851 Generate code for a system with split I&D. 10852 10853`-mno-split' 10854 Generate code for a system without split I&D. This is the default. 10855 10856`-munix-asm' 10857 Use Unix assembler syntax. This is the default when configured for 10858 `pdp11-*-bsd'. 10859 10860`-mdec-asm' 10861 Use DEC assembler syntax. This is the default when configured for 10862 any PDP-11 target other than `pdp11-*-bsd'. 10863 10864 10865File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 10866 108673.17.26 PowerPC Options 10868----------------------- 10869 10870These are listed under *Note RS/6000 and PowerPC Options::. 10871 10872 10873File: gcc.info, Node: RS/6000 and PowerPC Options, Next: S/390 and zSeries Options, Prev: PowerPC Options, Up: Submodel Options 10874 108753.17.27 IBM RS/6000 and PowerPC Options 10876--------------------------------------- 10877 10878These `-m' options are defined for the IBM RS/6000 and PowerPC: 10879`-mpower' 10880`-mno-power' 10881`-mpower2' 10882`-mno-power2' 10883`-mpowerpc' 10884`-mno-powerpc' 10885`-mpowerpc-gpopt' 10886`-mno-powerpc-gpopt' 10887`-mpowerpc-gfxopt' 10888`-mno-powerpc-gfxopt' 10889`-mpowerpc64' 10890`-mno-powerpc64' 10891`-mmfcrf' 10892`-mno-mfcrf' 10893`-mpopcntb' 10894`-mno-popcntb' 10895`-mfprnd' 10896`-mno-fprnd' 10897 GCC supports two related instruction set architectures for the 10898 RS/6000 and PowerPC. The "POWER" instruction set are those 10899 instructions supported by the `rios' chip set used in the original 10900 RS/6000 systems and the "PowerPC" instruction set is the 10901 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 10902 microprocessors, and the IBM 4xx, 6xx, and follow-on 10903 microprocessors. 10904 10905 Neither architecture is a subset of the other. However there is a 10906 large common subset of instructions supported by both. An MQ 10907 register is included in processors supporting the POWER 10908 architecture. 10909 10910 You use these options to specify which instructions are available 10911 on the processor you are using. The default value of these 10912 options is determined when configuring GCC. Specifying the 10913 `-mcpu=CPU_TYPE' overrides the specification of these options. We 10914 recommend you use the `-mcpu=CPU_TYPE' option rather than the 10915 options listed above. 10916 10917 The `-mpower' option allows GCC to generate instructions that are 10918 found only in the POWER architecture and to use the MQ register. 10919 Specifying `-mpower2' implies `-power' and also allows GCC to 10920 generate instructions that are present in the POWER2 architecture 10921 but not the original POWER architecture. 10922 10923 The `-mpowerpc' option allows GCC to generate instructions that 10924 are found only in the 32-bit subset of the PowerPC architecture. 10925 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 10926 GCC to use the optional PowerPC architecture instructions in the 10927 General Purpose group, including floating-point square root. 10928 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 10929 GCC to use the optional PowerPC architecture instructions in the 10930 Graphics group, including floating-point select. 10931 10932 The `-mmfcrf' option allows GCC to generate the move from 10933 condition register field instruction implemented on the POWER4 10934 processor and other processors that support the PowerPC V2.01 10935 architecture. The `-mpopcntb' option allows GCC to generate the 10936 popcount and double precision FP reciprocal estimate instruction 10937 implemented on the POWER5 processor and other processors that 10938 support the PowerPC V2.02 architecture. The `-mfprnd' option 10939 allows GCC to generate the FP round to integer instructions 10940 implemented on the POWER5+ processor and other processors that 10941 support the PowerPC V2.03 architecture. 10942 10943 The `-mpowerpc64' option allows GCC to generate the additional 10944 64-bit instructions that are found in the full PowerPC64 10945 architecture and to treat GPRs as 64-bit, doubleword quantities. 10946 GCC defaults to `-mno-powerpc64'. 10947 10948 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 10949 only the instructions in the common subset of both architectures 10950 plus some special AIX common-mode calls, and will not use the MQ 10951 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 10952 to use any instruction from either architecture and to allow use 10953 of the MQ register; specify this for the Motorola MPC601. 10954 10955`-mnew-mnemonics' 10956`-mold-mnemonics' 10957 Select which mnemonics to use in the generated assembler code. 10958 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 10959 for the PowerPC architecture. With `-mold-mnemonics' it uses the 10960 assembler mnemonics defined for the POWER architecture. 10961 Instructions defined in only one architecture have only one 10962 mnemonic; GCC uses that mnemonic irrespective of which of these 10963 options is specified. 10964 10965 GCC defaults to the mnemonics appropriate for the architecture in 10966 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 10967 these option. Unless you are building a cross-compiler, you 10968 should normally not specify either `-mnew-mnemonics' or 10969 `-mold-mnemonics', but should instead accept the default. 10970 10971`-mcpu=CPU_TYPE' 10972 Set architecture type, register usage, choice of mnemonics, and 10973 instruction scheduling parameters for machine type CPU_TYPE. 10974 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 10975 `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e', 10976 `620', `630', `740', `7400', `7450', `750', `801', `821', `823', 10977 `860', `970', `8540', `ec603e', `G3', `G4', `G5', `power', 10978 `power2', `power3', `power4', `power5', `power5+', `power6', 10979 `common', `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc', 10980 and `rs64'. 10981 10982 `-mcpu=common' selects a completely generic processor. Code 10983 generated under this option will run on any POWER or PowerPC 10984 processor. GCC will use only the instructions in the common 10985 subset of both architectures, and will not use the MQ register. 10986 GCC assumes a generic processor model for scheduling purposes. 10987 10988 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 10989 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 10990 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 10991 types, with an appropriate, generic processor model assumed for 10992 scheduling purposes. 10993 10994 The other options specify a specific processor. Code generated 10995 under those options will run best on that processor, and may not 10996 run at all on others. 10997 10998 The `-mcpu' options automatically enable or disable the following 10999 options: `-maltivec', `-mfprnd', `-mhard-float', `-mmfcrf', 11000 `-mmultiple', `-mnew-mnemonics', `-mpopcntb', `-mpower', 11001 `-mpower2', `-mpowerpc64', `-mpowerpc-gpopt', `-mpowerpc-gfxopt', 11002 `-mstring', `-mmulhw', `-mdlmzb'. The particular options set for 11003 any particular CPU will vary between compiler versions, depending 11004 on what setting seems to produce optimal code for that CPU; it 11005 doesn't necessarily reflect the actual hardware's capabilities. If 11006 you wish to set an individual option to a particular value, you may 11007 specify it after the `-mcpu' option, like `-mcpu=970 -mno-altivec'. 11008 11009 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 11010 or disabled by the `-mcpu' option at present because AIX does not 11011 have full support for these options. You may still enable or 11012 disable them individually if you're sure it'll work in your 11013 environment. 11014 11015`-mtune=CPU_TYPE' 11016 Set the instruction scheduling parameters for machine type 11017 CPU_TYPE, but do not set the architecture type, register usage, or 11018 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 11019 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 11020 specified, the code generated will use the architecture, 11021 registers, and mnemonics set by `-mcpu', but the scheduling 11022 parameters set by `-mtune'. 11023 11024`-mswdiv' 11025`-mno-swdiv' 11026 Generate code to compute division as reciprocal estimate and 11027 iterative refinement, creating opportunities for increased 11028 throughput. This feature requires: optional PowerPC Graphics 11029 instruction set for single precision and FRE instruction for 11030 double precision, assuming divides cannot generate user-visible 11031 traps, and the domain values not include Infinities, denormals or 11032 zero denominator. 11033 11034`-maltivec' 11035`-mno-altivec' 11036 Generate code that uses (does not use) AltiVec instructions, and 11037 also enable the use of built-in functions that allow more direct 11038 access to the AltiVec instruction set. You may also need to set 11039 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 11040 enhancements. 11041 11042`-mvrsave' 11043 11044`-mno-vrsave' 11045 Generate VRSAVE instructions when generating AltiVec code. 11046 11047`-msecure-plt' 11048 Generate code that allows ld and ld.so to build executables and 11049 shared libraries with non-exec .plt and .got sections. This is a 11050 PowerPC 32-bit SYSV ABI option. 11051 11052`-mbss-plt' 11053 Generate code that uses a BSS .plt section that ld.so fills in, and 11054 requires .plt and .got sections that are both writable and 11055 executable. This is a PowerPC 32-bit SYSV ABI option. 11056 11057`-misel' 11058`-mno-isel' 11059 This switch enables or disables the generation of ISEL 11060 instructions. 11061 11062`-misel=YES/NO' 11063 This switch has been deprecated. Use `-misel' and `-mno-isel' 11064 instead. 11065 11066`-mspe' 11067`-mno-spe' 11068 This switch enables or disables the generation of SPE simd 11069 instructions. 11070 11071`-mspe=YES/NO' 11072 This option has been deprecated. Use `-mspe' and `-mno-spe' 11073 instead. 11074 11075`-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 11076`-mfloat-gprs' 11077 This switch enables or disables the generation of floating point 11078 operations on the general purpose registers for architectures that 11079 support it. 11080 11081 The argument YES or SINGLE enables the use of single-precision 11082 floating point operations. 11083 11084 The argument DOUBLE enables the use of single and double-precision 11085 floating point operations. 11086 11087 The argument NO disables floating point operations on the general 11088 purpose registers. 11089 11090 This option is currently only available on the MPC854x. 11091 11092`-m32' 11093`-m64' 11094 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 11095 targets (including GNU/Linux). The 32-bit environment sets int, 11096 long and pointer to 32 bits and generates code that runs on any 11097 PowerPC variant. The 64-bit environment sets int to 32 bits and 11098 long and pointer to 64 bits, and generates code for PowerPC64, as 11099 for `-mpowerpc64'. 11100 11101`-mfull-toc' 11102`-mno-fp-in-toc' 11103`-mno-sum-in-toc' 11104`-mminimal-toc' 11105 Modify generation of the TOC (Table Of Contents), which is created 11106 for every executable file. The `-mfull-toc' option is selected by 11107 default. In that case, GCC will allocate at least one TOC entry 11108 for each unique non-automatic variable reference in your program. 11109 GCC will also place floating-point constants in the TOC. However, 11110 only 16,384 entries are available in the TOC. 11111 11112 If you receive a linker error message that saying you have 11113 overflowed the available TOC space, you can reduce the amount of 11114 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 11115 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 11116 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 11117 code to calculate the sum of an address and a constant at run-time 11118 instead of putting that sum into the TOC. You may specify one or 11119 both of these options. Each causes GCC to produce very slightly 11120 slower and larger code at the expense of conserving TOC space. 11121 11122 If you still run out of space in the TOC even when you specify 11123 both of these options, specify `-mminimal-toc' instead. This 11124 option causes GCC to make only one TOC entry for every file. When 11125 you specify this option, GCC will produce code that is slower and 11126 larger but which uses extremely little TOC space. You may wish to 11127 use this option only on files that contain less frequently 11128 executed code. 11129 11130`-maix64' 11131`-maix32' 11132 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 11133 64-bit `long' type, and the infrastructure needed to support them. 11134 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 11135 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 11136 GCC defaults to `-maix32'. 11137 11138`-mxl-compat' 11139`-mno-xl-compat' 11140 Produce code that conforms more closely to IBM XL compiler 11141 semantics when using AIX-compatible ABI. Pass floating-point 11142 arguments to prototyped functions beyond the register save area 11143 (RSA) on the stack in addition to argument FPRs. Do not assume 11144 that most significant double in 128-bit long double value is 11145 properly rounded when comparing values and converting to double. 11146 Use XL symbol names for long double support routines. 11147 11148 The AIX calling convention was extended but not initially 11149 documented to handle an obscure K&R C case of calling a function 11150 that takes the address of its arguments with fewer arguments than 11151 declared. IBM XL compilers access floating point arguments which 11152 do not fit in the RSA from the stack when a subroutine is compiled 11153 without optimization. Because always storing floating-point 11154 arguments on the stack is inefficient and rarely needed, this 11155 option is not enabled by default and only is necessary when 11156 calling subroutines compiled by IBM XL compilers without 11157 optimization. 11158 11159`-mpe' 11160 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 11161 application written to use message passing with special startup 11162 code to enable the application to run. The system must have PE 11163 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 11164 `specs' file must be overridden with the `-specs=' option to 11165 specify the appropriate directory location. The Parallel 11166 Environment does not support threads, so the `-mpe' option and the 11167 `-pthread' option are incompatible. 11168 11169`-malign-natural' 11170`-malign-power' 11171 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 11172 `-malign-natural' overrides the ABI-defined alignment of larger 11173 types, such as floating-point doubles, on their natural size-based 11174 boundary. The option `-malign-power' instructs GCC to follow the 11175 ABI-specified alignment rules. GCC defaults to the standard 11176 alignment defined in the ABI. 11177 11178 On 64-bit Darwin, natural alignment is the default, and 11179 `-malign-power' is not supported. 11180 11181`-msoft-float' 11182`-mhard-float' 11183 Generate code that does not use (uses) the floating-point register 11184 set. Software floating point emulation is provided if you use the 11185 `-msoft-float' option, and pass the option to GCC when linking. 11186 11187`-mmultiple' 11188`-mno-multiple' 11189 Generate code that uses (does not use) the load multiple word 11190 instructions and the store multiple word instructions. These 11191 instructions are generated by default on POWER systems, and not 11192 generated on PowerPC systems. Do not use `-mmultiple' on little 11193 endian PowerPC systems, since those instructions do not work when 11194 the processor is in little endian mode. The exceptions are PPC740 11195 and PPC750 which permit the instructions usage in little endian 11196 mode. 11197 11198`-mstring' 11199`-mno-string' 11200 Generate code that uses (does not use) the load string instructions 11201 and the store string word instructions to save multiple registers 11202 and do small block moves. These instructions are generated by 11203 default on POWER systems, and not generated on PowerPC systems. 11204 Do not use `-mstring' on little endian PowerPC systems, since those 11205 instructions do not work when the processor is in little endian 11206 mode. The exceptions are PPC740 and PPC750 which permit the 11207 instructions usage in little endian mode. 11208 11209`-mupdate' 11210`-mno-update' 11211 Generate code that uses (does not use) the load or store 11212 instructions that update the base register to the address of the 11213 calculated memory location. These instructions are generated by 11214 default. If you use `-mno-update', there is a small window 11215 between the time that the stack pointer is updated and the address 11216 of the previous frame is stored, which means code that walks the 11217 stack frame across interrupts or signals may get corrupted data. 11218 11219`-mfused-madd' 11220`-mno-fused-madd' 11221 Generate code that uses (does not use) the floating point multiply 11222 and accumulate instructions. These instructions are generated by 11223 default if hardware floating is used. 11224 11225`-mmulhw' 11226`-mno-mulhw' 11227 Generate code that uses (does not use) the half-word multiply and 11228 multiply-accumulate instructions on the IBM 405 and 440 processors. 11229 These instructions are generated by default when targetting those 11230 processors. 11231 11232`-mdlmzb' 11233`-mno-dlmzb' 11234 Generate code that uses (does not use) the string-search `dlmzb' 11235 instruction on the IBM 405 and 440 processors. This instruction is 11236 generated by default when targetting those processors. 11237 11238`-mno-bit-align' 11239`-mbit-align' 11240 On System V.4 and embedded PowerPC systems do not (do) force 11241 structures and unions that contain bit-fields to be aligned to the 11242 base type of the bit-field. 11243 11244 For example, by default a structure containing nothing but 8 11245 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 11246 boundary and have a size of 4 bytes. By using `-mno-bit-align', 11247 the structure would be aligned to a 1 byte boundary and be one 11248 byte in size. 11249 11250`-mno-strict-align' 11251`-mstrict-align' 11252 On System V.4 and embedded PowerPC systems do not (do) assume that 11253 unaligned memory references will be handled by the system. 11254 11255`-mrelocatable' 11256`-mno-relocatable' 11257 On embedded PowerPC systems generate code that allows (does not 11258 allow) the program to be relocated to a different address at 11259 runtime. If you use `-mrelocatable' on any module, all objects 11260 linked together must be compiled with `-mrelocatable' or 11261 `-mrelocatable-lib'. 11262 11263`-mrelocatable-lib' 11264`-mno-relocatable-lib' 11265 On embedded PowerPC systems generate code that allows (does not 11266 allow) the program to be relocated to a different address at 11267 runtime. Modules compiled with `-mrelocatable-lib' can be linked 11268 with either modules compiled without `-mrelocatable' and 11269 `-mrelocatable-lib' or with modules compiled with the 11270 `-mrelocatable' options. 11271 11272`-mno-toc' 11273`-mtoc' 11274 On System V.4 and embedded PowerPC systems do not (do) assume that 11275 register 2 contains a pointer to a global area pointing to the 11276 addresses used in the program. 11277 11278`-mlittle' 11279`-mlittle-endian' 11280 On System V.4 and embedded PowerPC systems compile code for the 11281 processor in little endian mode. The `-mlittle-endian' option is 11282 the same as `-mlittle'. 11283 11284`-mbig' 11285`-mbig-endian' 11286 On System V.4 and embedded PowerPC systems compile code for the 11287 processor in big endian mode. The `-mbig-endian' option is the 11288 same as `-mbig'. 11289 11290`-mdynamic-no-pic' 11291 On Darwin and Mac OS X systems, compile code so that it is not 11292 relocatable, but that its external references are relocatable. The 11293 resulting code is suitable for applications, but not shared 11294 libraries. 11295 11296`-mprioritize-restricted-insns=PRIORITY' 11297 This option controls the priority that is assigned to 11298 dispatch-slot restricted instructions during the second scheduling 11299 pass. The argument PRIORITY takes the value 0/1/2 to assign 11300 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 11301 instructions. 11302 11303`-msched-costly-dep=DEPENDENCE_TYPE' 11304 This option controls which dependences are considered costly by 11305 the target during instruction scheduling. The argument 11306 DEPENDENCE_TYPE takes one of the following values: NO: no 11307 dependence is costly, ALL: all dependences are costly, 11308 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 11309 STORE_TO_LOAD: any dependence from store to load is costly, 11310 NUMBER: any dependence which latency >= NUMBER is costly. 11311 11312`-minsert-sched-nops=SCHEME' 11313 This option controls which nop insertion scheme will be used during 11314 the second scheduling pass. The argument SCHEME takes one of the 11315 following values: NO: Don't insert nops. PAD: Pad with nops any 11316 dispatch group which has vacant issue slots, according to the 11317 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 11318 dependent insns into separate groups. Insert exactly as many nops 11319 as needed to force an insn to a new group, according to the 11320 estimated processor grouping. NUMBER: Insert nops to force costly 11321 dependent insns into separate groups. Insert NUMBER nops to force 11322 an insn to a new group. 11323 11324`-mcall-sysv' 11325 On System V.4 and embedded PowerPC systems compile code using 11326 calling conventions that adheres to the March 1995 draft of the 11327 System V Application Binary Interface, PowerPC processor 11328 supplement. This is the default unless you configured GCC using 11329 `powerpc-*-eabiaix'. 11330 11331`-mcall-sysv-eabi' 11332 Specify both `-mcall-sysv' and `-meabi' options. 11333 11334`-mcall-sysv-noeabi' 11335 Specify both `-mcall-sysv' and `-mno-eabi' options. 11336 11337`-mcall-solaris' 11338 On System V.4 and embedded PowerPC systems compile code for the 11339 Solaris operating system. 11340 11341`-mcall-linux' 11342 On System V.4 and embedded PowerPC systems compile code for the 11343 Linux-based GNU system. 11344 11345`-mcall-gnu' 11346 On System V.4 and embedded PowerPC systems compile code for the 11347 Hurd-based GNU system. 11348 11349`-mcall-netbsd' 11350 On System V.4 and embedded PowerPC systems compile code for the 11351 NetBSD operating system. 11352 11353`-maix-struct-return' 11354 Return all structures in memory (as specified by the AIX ABI). 11355 11356`-msvr4-struct-return' 11357 Return structures smaller than 8 bytes in registers (as specified 11358 by the SVR4 ABI). 11359 11360`-mabi=ABI-TYPE' 11361 Extend the current ABI with a particular extension, or remove such 11362 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 11363 IBMLONGDOUBLE, IEEELONGDOUBLE. 11364 11365`-mabi=spe' 11366 Extend the current ABI with SPE ABI extensions. This does not 11367 change the default ABI, instead it adds the SPE ABI extensions to 11368 the current ABI. 11369 11370`-mabi=no-spe' 11371 Disable Booke SPE ABI extensions for the current ABI. 11372 11373`-mabi=ibmlongdouble' 11374 Change the current ABI to use IBM extended precision long double. 11375 This is a PowerPC 32-bit SYSV ABI option. 11376 11377`-mabi=ieeelongdouble' 11378 Change the current ABI to use IEEE extended precision long double. 11379 This is a PowerPC 32-bit Linux ABI option. 11380 11381`-mprototype' 11382`-mno-prototype' 11383 On System V.4 and embedded PowerPC systems assume that all calls to 11384 variable argument functions are properly prototyped. Otherwise, 11385 the compiler must insert an instruction before every non 11386 prototyped call to set or clear bit 6 of the condition code 11387 register (CR) to indicate whether floating point values were 11388 passed in the floating point registers in case the function takes 11389 a variable arguments. With `-mprototype', only calls to 11390 prototyped variable argument functions will set or clear the bit. 11391 11392`-msim' 11393 On embedded PowerPC systems, assume that the startup module is 11394 called `sim-crt0.o' and that the standard C libraries are 11395 `libsim.a' and `libc.a'. This is the default for 11396 `powerpc-*-eabisim'. configurations. 11397 11398`-mmvme' 11399 On embedded PowerPC systems, assume that the startup module is 11400 called `crt0.o' and the standard C libraries are `libmvme.a' and 11401 `libc.a'. 11402 11403`-mads' 11404 On embedded PowerPC systems, assume that the startup module is 11405 called `crt0.o' and the standard C libraries are `libads.a' and 11406 `libc.a'. 11407 11408`-myellowknife' 11409 On embedded PowerPC systems, assume that the startup module is 11410 called `crt0.o' and the standard C libraries are `libyk.a' and 11411 `libc.a'. 11412 11413`-mvxworks' 11414 On System V.4 and embedded PowerPC systems, specify that you are 11415 compiling for a VxWorks system. 11416 11417`-mwindiss' 11418 Specify that you are compiling for the WindISS simulation 11419 environment. 11420 11421`-memb' 11422 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 11423 header to indicate that `eabi' extended relocations are used. 11424 11425`-meabi' 11426`-mno-eabi' 11427 On System V.4 and embedded PowerPC systems do (do not) adhere to 11428 the Embedded Applications Binary Interface (eabi) which is a set of 11429 modifications to the System V.4 specifications. Selecting `-meabi' 11430 means that the stack is aligned to an 8 byte boundary, a function 11431 `__eabi' is called to from `main' to set up the eabi environment, 11432 and the `-msdata' option can use both `r2' and `r13' to point to 11433 two separate small data areas. Selecting `-mno-eabi' means that 11434 the stack is aligned to a 16 byte boundary, do not call an 11435 initialization function from `main', and the `-msdata' option will 11436 only use `r13' to point to a single small data area. The `-meabi' 11437 option is on by default if you configured GCC using one of the 11438 `powerpc*-*-eabi*' options. 11439 11440`-msdata=eabi' 11441 On System V.4 and embedded PowerPC systems, put small initialized 11442 `const' global and static data in the `.sdata2' section, which is 11443 pointed to by register `r2'. Put small initialized non-`const' 11444 global and static data in the `.sdata' section, which is pointed 11445 to by register `r13'. Put small uninitialized global and static 11446 data in the `.sbss' section, which is adjacent to the `.sdata' 11447 section. The `-msdata=eabi' option is incompatible with the 11448 `-mrelocatable' option. The `-msdata=eabi' option also sets the 11449 `-memb' option. 11450 11451`-msdata=sysv' 11452 On System V.4 and embedded PowerPC systems, put small global and 11453 static data in the `.sdata' section, which is pointed to by 11454 register `r13'. Put small uninitialized global and static data in 11455 the `.sbss' section, which is adjacent to the `.sdata' section. 11456 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 11457 option. 11458 11459`-msdata=default' 11460`-msdata' 11461 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 11462 compile code the same as `-msdata=eabi', otherwise compile code the 11463 same as `-msdata=sysv'. 11464 11465`-msdata-data' 11466 On System V.4 and embedded PowerPC systems, put small global data 11467 in the `.sdata' section. Put small uninitialized global data in 11468 the `.sbss' section. Do not use register `r13' to address small 11469 data however. This is the default behavior unless other `-msdata' 11470 options are used. 11471 11472`-msdata=none' 11473`-mno-sdata' 11474 On embedded PowerPC systems, put all initialized global and static 11475 data in the `.data' section, and all uninitialized data in the 11476 `.bss' section. 11477 11478`-G NUM' 11479 On embedded PowerPC systems, put global and static items less than 11480 or equal to NUM bytes into the small data or bss sections instead 11481 of the normal data or bss section. By default, NUM is 8. The `-G 11482 NUM' switch is also passed to the linker. All modules should be 11483 compiled with the same `-G NUM' value. 11484 11485`-mregnames' 11486`-mno-regnames' 11487 On System V.4 and embedded PowerPC systems do (do not) emit 11488 register names in the assembly language output using symbolic 11489 forms. 11490 11491`-mlongcall' 11492`-mno-longcall' 11493 By default assume that all calls are far away so that a longer more 11494 expensive calling sequence is required. This is required for calls 11495 further than 32 megabytes (33,554,432 bytes) from the current 11496 location. A short call will be generated if the compiler knows 11497 the call cannot be that far away. This setting can be overridden 11498 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 11499 11500 Some linkers are capable of detecting out-of-range calls and 11501 generating glue code on the fly. On these systems, long calls are 11502 unnecessary and generate slower code. As of this writing, the AIX 11503 linker can do this, as can the GNU linker for PowerPC/64. It is 11504 planned to add this feature to the GNU linker for 32-bit PowerPC 11505 systems as well. 11506 11507 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 11508 callee, L42", plus a "branch island" (glue code). The two target 11509 addresses represent the callee and the "branch island". The 11510 Darwin/PPC linker will prefer the first address and generate a "bl 11511 callee" if the PPC "bl" instruction will reach the callee directly; 11512 otherwise, the linker will generate "bl L42" to call the "branch 11513 island". The "branch island" is appended to the body of the 11514 calling function; it computes the full 32-bit address of the callee 11515 and jumps to it. 11516 11517 On Mach-O (Darwin) systems, this option directs the compiler emit 11518 to the glue for every direct call, and the Darwin linker decides 11519 whether to use or discard it. 11520 11521 In the future, we may cause GCC to ignore all longcall 11522 specifications when the linker is known to generate glue. 11523 11524`-pthread' 11525 Adds support for multithreading with the "pthreads" library. This 11526 option sets flags for both the preprocessor and linker. 11527 11528 11529 11530File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 11531 115323.17.28 S/390 and zSeries Options 11533--------------------------------- 11534 11535These are the `-m' options defined for the S/390 and zSeries 11536architecture. 11537 11538`-mhard-float' 11539`-msoft-float' 11540 Use (do not use) the hardware floating-point instructions and 11541 registers for floating-point operations. When `-msoft-float' is 11542 specified, functions in `libgcc.a' will be used to perform 11543 floating-point operations. When `-mhard-float' is specified, the 11544 compiler generates IEEE floating-point instructions. This is the 11545 default. 11546 11547`-mlong-double-64' 11548`-mlong-double-128' 11549 These switches control the size of `long double' type. A size of 11550 64bit makes the `long double' type equivalent to the `double' 11551 type. This is the default. 11552 11553`-mbackchain' 11554`-mno-backchain' 11555 Store (do not store) the address of the caller's frame as 11556 backchain pointer into the callee's stack frame. A backchain may 11557 be needed to allow debugging using tools that do not understand 11558 DWARF-2 call frame information. When `-mno-packed-stack' is in 11559 effect, the backchain pointer is stored at the bottom of the stack 11560 frame; when `-mpacked-stack' is in effect, the backchain is placed 11561 into the topmost word of the 96/160 byte register save area. 11562 11563 In general, code compiled with `-mbackchain' is call-compatible 11564 with code compiled with `-mmo-backchain'; however, use of the 11565 backchain for debugging purposes usually requires that the whole 11566 binary is built with `-mbackchain'. Note that the combination of 11567 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 11568 supported. In order to build a linux kernel use `-msoft-float'. 11569 11570 The default is to not maintain the backchain. 11571 11572`-mpacked-stack' 11573 11574`-mno-packed-stack' 11575 Use (do not use) the packed stack layout. When 11576 `-mno-packed-stack' is specified, the compiler uses the all fields 11577 of the 96/160 byte register save area only for their default 11578 purpose; unused fields still take up stack space. When 11579 `-mpacked-stack' is specified, register save slots are densely 11580 packed at the top of the register save area; unused space is 11581 reused for other purposes, allowing for more efficient use of the 11582 available stack space. However, when `-mbackchain' is also in 11583 effect, the topmost word of the save area is always used to store 11584 the backchain, and the return address register is always saved two 11585 words below the backchain. 11586 11587 As long as the stack frame backchain is not used, code generated 11588 with `-mpacked-stack' is call-compatible with code generated with 11589 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 11590 for S/390 or zSeries generated code that uses the stack frame 11591 backchain at run time, not just for debugging purposes. Such code 11592 is not call-compatible with code compiled with `-mpacked-stack'. 11593 Also, note that the combination of `-mbackchain', `-mpacked-stack' 11594 and `-mhard-float' is not supported. In order to build a linux 11595 kernel use `-msoft-float'. 11596 11597 The default is to not use the packed stack layout. 11598 11599`-msmall-exec' 11600`-mno-small-exec' 11601 Generate (or do not generate) code using the `bras' instruction to 11602 do subroutine calls. This only works reliably if the total 11603 executable size does not exceed 64k. The default is to use the 11604 `basr' instruction instead, which does not have this limitation. 11605 11606`-m64' 11607`-m31' 11608 When `-m31' is specified, generate code compliant to the GNU/Linux 11609 for S/390 ABI. When `-m64' is specified, generate code compliant 11610 to the GNU/Linux for zSeries ABI. This allows GCC in particular 11611 to generate 64-bit instructions. For the `s390' targets, the 11612 default is `-m31', while the `s390x' targets default to `-m64'. 11613 11614`-mzarch' 11615`-mesa' 11616 When `-mzarch' is specified, generate code using the instructions 11617 available on z/Architecture. When `-mesa' is specified, generate 11618 code using the instructions available on ESA/390. Note that 11619 `-mesa' is not possible with `-m64'. When generating code 11620 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 11621 When generating code compliant to the GNU/Linux for zSeries ABI, 11622 the default is `-mzarch'. 11623 11624`-mmvcle' 11625`-mno-mvcle' 11626 Generate (or do not generate) code using the `mvcle' instruction 11627 to perform block moves. When `-mno-mvcle' is specified, use a 11628 `mvc' loop instead. This is the default unless optimizing for 11629 size. 11630 11631`-mdebug' 11632`-mno-debug' 11633 Print (or do not print) additional debug information when 11634 compiling. The default is to not print debug information. 11635 11636`-march=CPU-TYPE' 11637 Generate code that will run on CPU-TYPE, which is the name of a 11638 system representing a certain processor type. Possible values for 11639 CPU-TYPE are `g5', `g6', `z900', and `z990'. When generating code 11640 using the instructions available on z/Architecture, the default is 11641 `-march=z900'. Otherwise, the default is `-march=g5'. 11642 11643`-mtune=CPU-TYPE' 11644 Tune to CPU-TYPE everything applicable about the generated code, 11645 except for the ABI and the set of available instructions. The 11646 list of CPU-TYPE values is the same as for `-march'. The default 11647 is the value used for `-march'. 11648 11649`-mtpf-trace' 11650`-mno-tpf-trace' 11651 Generate code that adds (does not add) in TPF OS specific branches 11652 to trace routines in the operating system. This option is off by 11653 default, even when compiling for the TPF OS. 11654 11655`-mfused-madd' 11656`-mno-fused-madd' 11657 Generate code that uses (does not use) the floating point multiply 11658 and accumulate instructions. These instructions are generated by 11659 default if hardware floating point is used. 11660 11661`-mwarn-framesize=FRAMESIZE' 11662 Emit a warning if the current function exceeds the given frame 11663 size. Because this is a compile time check it doesn't need to be 11664 a real problem when the program runs. It is intended to identify 11665 functions which most probably cause a stack overflow. It is 11666 useful to be used in an environment with limited stack size e.g. 11667 the linux kernel. 11668 11669`-mwarn-dynamicstack' 11670 Emit a warning if the function calls alloca or uses dynamically 11671 sized arrays. This is generally a bad idea with a limited stack 11672 size. 11673 11674`-mstack-guard=STACK-GUARD' 11675 11676`-mstack-size=STACK-SIZE' 11677 These arguments always have to be used in conjunction. If they 11678 are present the s390 back end emits additional instructions in the 11679 function prologue which trigger a trap if the stack size is 11680 STACK-GUARD bytes above the STACK-SIZE (remember that the stack on 11681 s390 grows downward). These options are intended to be used to 11682 help debugging stack overflow problems. The additionally emitted 11683 code causes only little overhead and hence can also be used in 11684 production like systems without greater performance degradation. 11685 The given values have to be exact powers of 2 and STACK-SIZE has 11686 to be greater than STACK-GUARD without exceeding 64k. In order to 11687 be efficient the extra code makes the assumption that the stack 11688 starts at an address aligned to the value given by STACK-SIZE. 11689 11690 11691File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 11692 116933.17.29 Score Options 11694--------------------- 11695 11696These options are defined for Score implementations: 11697 11698`-meb' 11699 Compile code for big endian mode. This is the default. 11700 11701`-mel' 11702 Compile code for little endian mode. 11703 11704`-mnhwloop' 11705 Disable generate bcnz instruction. 11706 11707`-muls' 11708 Enable generate unaligned load and store instruction. 11709 11710`-mmac' 11711 Enable the use of multiply-accumulate instructions. Disabled by 11712 default. 11713 11714`-mscore5' 11715 Specify the SCORE5 as the target architecture. 11716 11717`-mscore5u' 11718 Specify the SCORE5U of the target architecture. 11719 11720`-mscore7' 11721 Specify the SCORE7 as the target architecture. This is the default. 11722 11723`-mscore7d' 11724 Specify the SCORE7D as the target architecture. 11725 11726 11727File: gcc.info, Node: SH Options, Next: SPARC Options, Prev: Score Options, Up: Submodel Options 11728 117293.17.30 SH Options 11730------------------ 11731 11732These `-m' options are defined for the SH implementations: 11733 11734`-m1' 11735 Generate code for the SH1. 11736 11737`-m2' 11738 Generate code for the SH2. 11739 11740`-m2e' 11741 Generate code for the SH2e. 11742 11743`-m3' 11744 Generate code for the SH3. 11745 11746`-m3e' 11747 Generate code for the SH3e. 11748 11749`-m4-nofpu' 11750 Generate code for the SH4 without a floating-point unit. 11751 11752`-m4-single-only' 11753 Generate code for the SH4 with a floating-point unit that only 11754 supports single-precision arithmetic. 11755 11756`-m4-single' 11757 Generate code for the SH4 assuming the floating-point unit is in 11758 single-precision mode by default. 11759 11760`-m4' 11761 Generate code for the SH4. 11762 11763`-m4a-nofpu' 11764 Generate code for the SH4al-dsp, or for a SH4a in such a way that 11765 the floating-point unit is not used. 11766 11767`-m4a-single-only' 11768 Generate code for the SH4a, in such a way that no double-precision 11769 floating point operations are used. 11770 11771`-m4a-single' 11772 Generate code for the SH4a assuming the floating-point unit is in 11773 single-precision mode by default. 11774 11775`-m4a' 11776 Generate code for the SH4a. 11777 11778`-m4al' 11779 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 11780 the assembler. GCC doesn't generate any DSP instructions at the 11781 moment. 11782 11783`-mb' 11784 Compile code for the processor in big endian mode. 11785 11786`-ml' 11787 Compile code for the processor in little endian mode. 11788 11789`-mdalign' 11790 Align doubles at 64-bit boundaries. Note that this changes the 11791 calling conventions, and thus some functions from the standard C 11792 library will not work unless you recompile it first with 11793 `-mdalign'. 11794 11795`-mrelax' 11796 Shorten some address references at link time, when possible; uses 11797 the linker option `-relax'. 11798 11799`-mbigtable' 11800 Use 32-bit offsets in `switch' tables. The default is to use 11801 16-bit offsets. 11802 11803`-mfmovd' 11804 Enable the use of the instruction `fmovd'. 11805 11806`-mhitachi' 11807 Comply with the calling conventions defined by Renesas. 11808 11809`-mrenesas' 11810 Comply with the calling conventions defined by Renesas. 11811 11812`-mno-renesas' 11813 Comply with the calling conventions defined for GCC before the 11814 Renesas conventions were available. This option is the default 11815 for all targets of the SH toolchain except for `sh-symbianelf'. 11816 11817`-mnomacsave' 11818 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 11819 given. 11820 11821`-mieee' 11822 Increase IEEE-compliance of floating-point code. At the moment, 11823 this is equivalent to `-fno-finite-math-only'. When generating 16 11824 bit SH opcodes, getting IEEE-conforming results for comparisons of 11825 NANs / infinities incurs extra overhead in every floating point 11826 comparison, therefore the default is set to `-ffinite-math-only'. 11827 11828`-misize' 11829 Dump instruction size and location in the assembly code. 11830 11831`-mpadstruct' 11832 This option is deprecated. It pads structures to multiple of 4 11833 bytes, which is incompatible with the SH ABI. 11834 11835`-mspace' 11836 Optimize for space instead of speed. Implied by `-Os'. 11837 11838`-mprefergot' 11839 When generating position-independent code, emit function calls 11840 using the Global Offset Table instead of the Procedure Linkage 11841 Table. 11842 11843`-musermode' 11844 Generate a library function call to invalidate instruction cache 11845 entries, after fixing up a trampoline. This library function call 11846 doesn't assume it can write to the whole memory address space. 11847 This is the default when the target is `sh-*-linux*'. 11848 11849`-multcost=NUMBER' 11850 Set the cost to assume for a multiply insn. 11851 11852`-mdiv=STRATEGY' 11853 Set the division strategy to use for SHmedia code. STRATEGY must 11854 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 11855 inv:call, inv:call2, inv:fp . "fp" performs the operation in 11856 floating point. This has a very high latency, but needs only a 11857 few instructions, so it might be a good choice if your code has 11858 enough easily exploitable ILP to allow the compiler to schedule 11859 the floating point instructions together with other instructions. 11860 Division by zero causes a floating point exception. "inv" uses 11861 integer operations to calculate the inverse of the divisor, and 11862 then multiplies the dividend with the inverse. This strategy 11863 allows cse and hoisting of the inverse calculation. Division by 11864 zero calculates an unspecified result, but does not trap. 11865 "inv:minlat" is a variant of "inv" where if no cse / hoisting 11866 opportunities have been found, or if the entire operation has been 11867 hoisted to the same place, the last stages of the inverse 11868 calculation are intertwined with the final multiply to reduce the 11869 overall latency, at the expense of using a few more instructions, 11870 and thus offering fewer scheduling opportunities with other code. 11871 "call" calls a library function that usually implements the 11872 inv:minlat strategy. This gives high code density for 11873 m5-*media-nofpu compilations. "call2" uses a different entry 11874 point of the same library function, where it assumes that a 11875 pointer to a lookup table has already been set up, which exposes 11876 the pointer load to cse / code hoisting optimizations. 11877 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 11878 for initial code generation, but if the code stays unoptimized, 11879 revert to the "call", "call2", or "fp" strategies, respectively. 11880 Note that the potentially-trapping side effect of division by zero 11881 is carried by a separate instruction, so it is possible that all 11882 the integer instructions are hoisted out, but the marker for the 11883 side effect stays where it is. A recombination to fp operations 11884 or a call is not possible in that case. "inv20u" and "inv20l" are 11885 variants of the "inv:minlat" strategy. In the case that the 11886 inverse calculation was nor separated from the multiply, they speed 11887 up division where the dividend fits into 20 bits (plus sign where 11888 applicable), by inserting a test to skip a number of operations in 11889 this case; this test slows down the case of larger dividends. 11890 inv20u assumes the case of a such a small dividend to be unlikely, 11891 and inv20l assumes it to be likely. 11892 11893`-mdivsi3_libfunc=NAME' 11894 Set the name of the library function used for 32 bit signed 11895 division to NAME. This only affect the name used in the call and 11896 inv:call division strategies, and the compiler will still expect 11897 the same sets of input/output/clobbered registers as if this 11898 option was not present. 11899 11900`-madjust-unroll' 11901 Throttle unrolling to avoid thrashing target registers. This 11902 option only has an effect if the gcc code base supports the 11903 TARGET_ADJUST_UNROLL_MAX target hook. 11904 11905`-mindexed-addressing' 11906 Enable the use of the indexed addressing mode for 11907 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 11908 implement 32 bit wrap-around semantics for the indexed addressing 11909 mode. The architecture allows the implementation of processors 11910 with 64 bit MMU, which the OS could use to get 32 bit addressing, 11911 but since no current hardware implementation supports this or any 11912 other way to make the indexed addressing mode safe to use in the 11913 32 bit ABI, the default is -mno-indexed-addressing. 11914 11915`-mgettrcost=NUMBER' 11916 Set the cost assumed for the gettr instruction to NUMBER. The 11917 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 11918 11919`-mpt-fixed' 11920 Assume pt* instructions won't trap. This will generally generate 11921 better scheduled code, but is unsafe on current hardware. The 11922 current architecture definition says that ptabs and ptrel trap 11923 when the target anded with 3 is 3. This has the unintentional 11924 effect of making it unsafe to schedule ptabs / ptrel before a 11925 branch, or hoist it out of a loop. For example, 11926 __do_global_ctors, a part of libgcc that runs constructors at 11927 program startup, calls functions in a list which is delimited by 11928 -1. With the -mpt-fixed option, the ptabs will be done before 11929 testing against -1. That means that all the constructors will be 11930 run a bit quicker, but when the loop comes to the end of the list, 11931 the program crashes because ptabs loads -1 into a target register. 11932 Since this option is unsafe for any hardware implementing the 11933 current architecture specification, the default is -mno-pt-fixed. 11934 Unless the user specifies a specific cost with `-mgettrcost', 11935 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 11936 allocation using target registers for storing ordinary integers. 11937 11938`-minvalid-symbols' 11939 Assume symbols might be invalid. Ordinary function symbols 11940 generated by the compiler will always be valid to load with 11941 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 11942 linker tricks it is possible to generate symbols that will cause 11943 ptabs / ptrel to trap. This option is only meaningful when 11944 `-mno-pt-fixed' is in effect. It will then prevent 11945 cross-basic-block cse, hoisting and most scheduling of symbol 11946 loads. The default is `-mno-invalid-symbols'. 11947 11948 11949File: gcc.info, Node: SPARC Options, Next: System V Options, Prev: SH Options, Up: Submodel Options 11950 119513.17.31 SPARC Options 11952--------------------- 11953 11954These `-m' options are supported on the SPARC: 11955 11956`-mno-app-regs' 11957`-mapp-regs' 11958 Specify `-mapp-regs' to generate output using the global registers 11959 2 through 4, which the SPARC SVR4 ABI reserves for applications. 11960 This is the default. 11961 11962 To be fully SVR4 ABI compliant at the cost of some performance 11963 loss, specify `-mno-app-regs'. You should compile libraries and 11964 system software with this option. 11965 11966`-mfpu' 11967`-mhard-float' 11968 Generate output containing floating point instructions. This is 11969 the default. 11970 11971`-mno-fpu' 11972`-msoft-float' 11973 Generate output containing library calls for floating point. 11974 *Warning:* the requisite libraries are not available for all SPARC 11975 targets. Normally the facilities of the machine's usual C 11976 compiler are used, but this cannot be done directly in 11977 cross-compilation. You must make your own arrangements to provide 11978 suitable library functions for cross-compilation. The embedded 11979 targets `sparc-*-aout' and `sparclite-*-*' do provide software 11980 floating point support. 11981 11982 `-msoft-float' changes the calling convention in the output file; 11983 therefore, it is only useful if you compile _all_ of a program with 11984 this option. In particular, you need to compile `libgcc.a', the 11985 library that comes with GCC, with `-msoft-float' in order for this 11986 to work. 11987 11988`-mhard-quad-float' 11989 Generate output containing quad-word (long double) floating point 11990 instructions. 11991 11992`-msoft-quad-float' 11993 Generate output containing library calls for quad-word (long 11994 double) floating point instructions. The functions called are 11995 those specified in the SPARC ABI. This is the default. 11996 11997 As of this writing, there are no SPARC implementations that have 11998 hardware support for the quad-word floating point instructions. 11999 They all invoke a trap handler for one of these instructions, and 12000 then the trap handler emulates the effect of the instruction. 12001 Because of the trap handler overhead, this is much slower than 12002 calling the ABI library routines. Thus the `-msoft-quad-float' 12003 option is the default. 12004 12005`-mno-unaligned-doubles' 12006`-munaligned-doubles' 12007 Assume that doubles have 8 byte alignment. This is the default. 12008 12009 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 12010 alignment only if they are contained in another type, or if they 12011 have an absolute address. Otherwise, it assumes they have 4 byte 12012 alignment. Specifying this option avoids some rare compatibility 12013 problems with code generated by other compilers. It is not the 12014 default because it results in a performance loss, especially for 12015 floating point code. 12016 12017`-mno-faster-structs' 12018`-mfaster-structs' 12019 With `-mfaster-structs', the compiler assumes that structures 12020 should have 8 byte alignment. This enables the use of pairs of 12021 `ldd' and `std' instructions for copies in structure assignment, 12022 in place of twice as many `ld' and `st' pairs. However, the use 12023 of this changed alignment directly violates the SPARC ABI. Thus, 12024 it's intended only for use on targets where the developer 12025 acknowledges that their resulting code will not be directly in 12026 line with the rules of the ABI. 12027 12028`-mimpure-text' 12029 `-mimpure-text', used in addition to `-shared', tells the compiler 12030 to not pass `-z text' to the linker when linking a shared object. 12031 Using this option, you can link position-dependent code into a 12032 shared object. 12033 12034 `-mimpure-text' suppresses the "relocations remain against 12035 allocatable but non-writable sections" linker error message. 12036 However, the necessary relocations will trigger copy-on-write, and 12037 the shared object is not actually shared across processes. 12038 Instead of using `-mimpure-text', you should compile all source 12039 code with `-fpic' or `-fPIC'. 12040 12041 This option is only available on SunOS and Solaris. 12042 12043`-mcpu=CPU_TYPE' 12044 Set the instruction set, register set, and instruction scheduling 12045 parameters for machine type CPU_TYPE. Supported values for 12046 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', 12047 `f930', `f934', `hypersparc', `sparclite86x', `sparclet', 12048 `tsc701', `v9', `ultrasparc', `ultrasparc3', and `niagara'. 12049 12050 Default instruction scheduling parameters are used for values that 12051 select an architecture and not an implementation. These are `v7', 12052 `v8', `sparclite', `sparclet', `v9'. 12053 12054 Here is a list of each supported architecture and their supported 12055 implementations. 12056 12057 v7: cypress 12058 v8: supersparc, hypersparc 12059 sparclite: f930, f934, sparclite86x 12060 sparclet: tsc701 12061 v9: ultrasparc, ultrasparc3, niagara 12062 12063 By default (unless configured otherwise), GCC generates code for 12064 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 12065 the compiler additionally optimizes it for the Cypress CY7C602 12066 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 12067 also appropriate for the older SPARCStation 1, 2, IPX etc. 12068 12069 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 12070 architecture. The only difference from V7 code is that the 12071 compiler emits the integer multiply and integer divide 12072 instructions which exist in SPARC-V8 but not in SPARC-V7. With 12073 `-mcpu=supersparc', the compiler additionally optimizes it for the 12074 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 12075 series. 12076 12077 With `-mcpu=sparclite', GCC generates code for the SPARClite 12078 variant of the SPARC architecture. This adds the integer 12079 multiply, integer divide step and scan (`ffs') instructions which 12080 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 12081 compiler additionally optimizes it for the Fujitsu MB86930 chip, 12082 which is the original SPARClite, with no FPU. With `-mcpu=f934', 12083 the compiler additionally optimizes it for the Fujitsu MB86934 12084 chip, which is the more recent SPARClite with FPU. 12085 12086 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 12087 of the SPARC architecture. This adds the integer multiply, 12088 multiply/accumulate, integer divide step and scan (`ffs') 12089 instructions which exist in SPARClet but not in SPARC-V7. With 12090 `-mcpu=tsc701', the compiler additionally optimizes it for the 12091 TEMIC SPARClet chip. 12092 12093 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 12094 architecture. This adds 64-bit integer and floating-point move 12095 instructions, 3 additional floating-point condition code registers 12096 and conditional move instructions. With `-mcpu=ultrasparc', the 12097 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 12098 chips. With `-mcpu=ultrasparc3', the compiler additionally 12099 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 12100 chips. With `-mcpu=niagara', the compiler additionally optimizes 12101 it for Sun UltraSPARC T1 chips. 12102 12103`-mtune=CPU_TYPE' 12104 Set the instruction scheduling parameters for machine type 12105 CPU_TYPE, but do not set the instruction set or register set that 12106 the option `-mcpu=CPU_TYPE' would. 12107 12108 The same values for `-mcpu=CPU_TYPE' can be used for 12109 `-mtune=CPU_TYPE', but the only useful values are those that 12110 select a particular cpu implementation. Those are `cypress', 12111 `supersparc', `hypersparc', `f930', `f934', `sparclite86x', 12112 `tsc701', `ultrasparc', `ultrasparc3', and `niagara'. 12113 12114`-mv8plus' 12115`-mno-v8plus' 12116 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 12117 difference from the V8 ABI is that the global and out registers are 12118 considered 64-bit wide. This is enabled by default on Solaris in 12119 32-bit mode for all SPARC-V9 processors. 12120 12121`-mvis' 12122`-mno-vis' 12123 With `-mvis', GCC generates code that takes advantage of the 12124 UltraSPARC Visual Instruction Set extensions. The default is 12125 `-mno-vis'. 12126 12127 These `-m' options are supported in addition to the above on SPARC-V9 12128processors in 64-bit environments: 12129 12130`-mlittle-endian' 12131 Generate code for a processor running in little-endian mode. It 12132 is only available for a few configurations and most notably not on 12133 Solaris and Linux. 12134 12135`-m32' 12136`-m64' 12137 Generate code for a 32-bit or 64-bit environment. The 32-bit 12138 environment sets int, long and pointer to 32 bits. The 64-bit 12139 environment sets int to 32 bits and long and pointer to 64 bits. 12140 12141`-mcmodel=medlow' 12142 Generate code for the Medium/Low code model: 64-bit addresses, 12143 programs must be linked in the low 32 bits of memory. Programs 12144 can be statically or dynamically linked. 12145 12146`-mcmodel=medmid' 12147 Generate code for the Medium/Middle code model: 64-bit addresses, 12148 programs must be linked in the low 44 bits of memory, the text and 12149 data segments must be less than 2GB in size and the data segment 12150 must be located within 2GB of the text segment. 12151 12152`-mcmodel=medany' 12153 Generate code for the Medium/Anywhere code model: 64-bit 12154 addresses, programs may be linked anywhere in memory, the text and 12155 data segments must be less than 2GB in size and the data segment 12156 must be located within 2GB of the text segment. 12157 12158`-mcmodel=embmedany' 12159 Generate code for the Medium/Anywhere code model for embedded 12160 systems: 64-bit addresses, the text and data segments must be less 12161 than 2GB in size, both starting anywhere in memory (determined at 12162 link time). The global register %g4 points to the base of the 12163 data segment. Programs are statically linked and PIC is not 12164 supported. 12165 12166`-mstack-bias' 12167`-mno-stack-bias' 12168 With `-mstack-bias', GCC assumes that the stack pointer, and frame 12169 pointer if present, are offset by -2047 which must be added back 12170 when making stack frame references. This is the default in 64-bit 12171 mode. Otherwise, assume no such offset is present. 12172 12173 These switches are supported in addition to the above on Solaris: 12174 12175`-threads' 12176 Add support for multithreading using the Solaris threads library. 12177 This option sets flags for both the preprocessor and linker. This 12178 option does not affect the thread safety of object code produced 12179 by the compiler or that of libraries supplied with it. 12180 12181`-pthreads' 12182 Add support for multithreading using the POSIX threads library. 12183 This option sets flags for both the preprocessor and linker. This 12184 option does not affect the thread safety of object code produced 12185 by the compiler or that of libraries supplied with it. 12186 12187`-pthread' 12188 This is a synonym for `-pthreads'. 12189 12190 12191File: gcc.info, Node: System V Options, Next: TMS320C3x/C4x Options, Prev: SPARC Options, Up: Submodel Options 12192 121933.17.32 Options for System V 12194---------------------------- 12195 12196These additional options are available on System V Release 4 for 12197compatibility with other compilers on those systems: 12198 12199`-G' 12200 Create a shared object. It is recommended that `-symbolic' or 12201 `-shared' be used instead. 12202 12203`-Qy' 12204 Identify the versions of each tool used by the compiler, in a 12205 `.ident' assembler directive in the output. 12206 12207`-Qn' 12208 Refrain from adding `.ident' directives to the output file (this is 12209 the default). 12210 12211`-YP,DIRS' 12212 Search the directories DIRS, and no others, for libraries 12213 specified with `-l'. 12214 12215`-Ym,DIR' 12216 Look in the directory DIR to find the M4 preprocessor. The 12217 assembler uses this option. 12218 12219 12220File: gcc.info, Node: TMS320C3x/C4x Options, Next: V850 Options, Prev: System V Options, Up: Submodel Options 12221 122223.17.33 TMS320C3x/C4x Options 12223----------------------------- 12224 12225These `-m' options are defined for TMS320C3x/C4x implementations: 12226 12227`-mcpu=CPU_TYPE' 12228 Set the instruction set, register set, and instruction scheduling 12229 parameters for machine type CPU_TYPE. Supported values for 12230 CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'. The default 12231 is `c40' to generate code for the TMS320C40. 12232 12233`-mbig-memory' 12234`-mbig' 12235`-msmall-memory' 12236`-msmall' 12237 Generates code for the big or small memory model. The small memory 12238 model assumed that all data fits into one 64K word page. At 12239 run-time the data page (DP) register must be set to point to the 12240 64K page containing the .bss and .data program sections. The big 12241 memory model is the default and requires reloading of the DP 12242 register for every direct memory access. 12243 12244`-mbk' 12245`-mno-bk' 12246 Allow (disallow) allocation of general integer operands into the 12247 block count register BK. 12248 12249`-mdb' 12250`-mno-db' 12251 Enable (disable) generation of code using decrement and branch, 12252 DBcond(D), instructions. This is enabled by default for the C4x. 12253 To be on the safe side, this is disabled for the C3x, since the 12254 maximum iteration count on the C3x is 2^23 + 1 (but who iterates 12255 loops more than 2^23 times on the C3x?). Note that GCC will try 12256 to reverse a loop so that it can utilize the decrement and branch 12257 instruction, but will give up if there is more than one memory 12258 reference in the loop. Thus a loop where the loop counter is 12259 decremented can generate slightly more efficient code, in cases 12260 where the RPTB instruction cannot be utilized. 12261 12262`-mdp-isr-reload' 12263`-mparanoid' 12264 Force the DP register to be saved on entry to an interrupt service 12265 routine (ISR), reloaded to point to the data section, and restored 12266 on exit from the ISR. This should not be required unless someone 12267 has violated the small memory model by modifying the DP register, 12268 say within an object library. 12269 12270`-mmpyi' 12271`-mno-mpyi' 12272 For the C3x use the 24-bit MPYI instruction for integer multiplies 12273 instead of a library call to guarantee 32-bit results. Note that 12274 if one of the operands is a constant, then the multiplication will 12275 be performed using shifts and adds. If the `-mmpyi' option is not 12276 specified for the C3x, then squaring operations are performed 12277 inline instead of a library call. 12278 12279`-mfast-fix' 12280`-mno-fast-fix' 12281 The C3x/C4x FIX instruction to convert a floating point value to an 12282 integer value chooses the nearest integer less than or equal to the 12283 floating point value rather than to the nearest integer. Thus if 12284 the floating point number is negative, the result will be 12285 incorrectly truncated an additional code is necessary to detect 12286 and correct this case. This option can be used to disable 12287 generation of the additional code required to correct the result. 12288 12289`-mrptb' 12290`-mno-rptb' 12291 Enable (disable) generation of repeat block sequences using the 12292 RPTB instruction for zero overhead looping. The RPTB construct is 12293 only used for innermost loops that do not call functions or jump 12294 across the loop boundaries. There is no advantage having nested 12295 RPTB loops due to the overhead required to save and restore the 12296 RC, RS, and RE registers. This is enabled by default with `-O2'. 12297 12298`-mrpts=COUNT' 12299`-mno-rpts' 12300 Enable (disable) the use of the single instruction repeat 12301 instruction RPTS. If a repeat block contains a single 12302 instruction, and the loop count can be guaranteed to be less than 12303 the value COUNT, GCC will emit a RPTS instruction instead of a 12304 RPTB. If no value is specified, then a RPTS will be emitted even 12305 if the loop count cannot be determined at compile time. Note that 12306 the repeated instruction following RPTS does not have to be 12307 reloaded from memory each iteration, thus freeing up the CPU buses 12308 for operands. However, since interrupts are blocked by this 12309 instruction, it is disabled by default. 12310 12311`-mloop-unsigned' 12312`-mno-loop-unsigned' 12313 The maximum iteration count when using RPTS and RPTB (and DB on 12314 the C40) is 2^31 + 1 since these instructions test if the 12315 iteration count is negative to terminate the loop. If the 12316 iteration count is unsigned there is a possibility than the 2^31 + 12317 1 maximum iteration count may be exceeded. This switch allows an 12318 unsigned iteration count. 12319 12320`-mti' 12321 Try to emit an assembler syntax that the TI assembler (asm30) is 12322 happy with. This also enforces compatibility with the API 12323 employed by the TI C3x C compiler. For example, long doubles are 12324 passed as structures rather than in floating point registers. 12325 12326`-mregparm' 12327`-mmemparm' 12328 Generate code that uses registers (stack) for passing arguments to 12329 functions. By default, arguments are passed in registers where 12330 possible rather than by pushing arguments on to the stack. 12331 12332`-mparallel-insns' 12333`-mno-parallel-insns' 12334 Allow the generation of parallel instructions. This is enabled by 12335 default with `-O2'. 12336 12337`-mparallel-mpy' 12338`-mno-parallel-mpy' 12339 Allow the generation of MPY||ADD and MPY||SUB parallel 12340 instructions, provided `-mparallel-insns' is also specified. 12341 These instructions have tight register constraints which can 12342 pessimize the code generation of large functions. 12343 12344 12345 12346File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TMS320C3x/C4x Options, Up: Submodel Options 12347 123483.17.34 V850 Options 12349-------------------- 12350 12351These `-m' options are defined for V850 implementations: 12352 12353`-mlong-calls' 12354`-mno-long-calls' 12355 Treat all calls as being far away (near). If calls are assumed to 12356 be far away, the compiler will always load the functions address 12357 up into a register, and call indirect through the pointer. 12358 12359`-mno-ep' 12360`-mep' 12361 Do not optimize (do optimize) basic blocks that use the same index 12362 pointer 4 or more times to copy pointer into the `ep' register, and 12363 use the shorter `sld' and `sst' instructions. The `-mep' option 12364 is on by default if you optimize. 12365 12366`-mno-prolog-function' 12367`-mprolog-function' 12368 Do not use (do use) external functions to save and restore 12369 registers at the prologue and epilogue of a function. The 12370 external functions are slower, but use less code space if more 12371 than one function saves the same number of registers. The 12372 `-mprolog-function' option is on by default if you optimize. 12373 12374`-mspace' 12375 Try to make the code as small as possible. At present, this just 12376 turns on the `-mep' and `-mprolog-function' options. 12377 12378`-mtda=N' 12379 Put static or global variables whose size is N bytes or less into 12380 the tiny data area that register `ep' points to. The tiny data 12381 area can hold up to 256 bytes in total (128 bytes for byte 12382 references). 12383 12384`-msda=N' 12385 Put static or global variables whose size is N bytes or less into 12386 the small data area that register `gp' points to. The small data 12387 area can hold up to 64 kilobytes. 12388 12389`-mzda=N' 12390 Put static or global variables whose size is N bytes or less into 12391 the first 32 kilobytes of memory. 12392 12393`-mv850' 12394 Specify that the target processor is the V850. 12395 12396`-mbig-switch' 12397 Generate code suitable for big switch tables. Use this option 12398 only if the assembler/linker complain about out of range branches 12399 within a switch table. 12400 12401`-mapp-regs' 12402 This option will cause r2 and r5 to be used in the code generated 12403 by the compiler. This setting is the default. 12404 12405`-mno-app-regs' 12406 This option will cause r2 and r5 to be treated as fixed registers. 12407 12408`-mv850e1' 12409 Specify that the target processor is the V850E1. The preprocessor 12410 constants `__v850e1__' and `__v850e__' will be defined if this 12411 option is used. 12412 12413`-mv850e' 12414 Specify that the target processor is the V850E. The preprocessor 12415 constant `__v850e__' will be defined if this option is used. 12416 12417 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then 12418 a default target processor will be chosen and the relevant 12419 `__v850*__' preprocessor constant will be defined. 12420 12421 The preprocessor constants `__v850' and `__v851__' are always 12422 defined, regardless of which processor variant is the target. 12423 12424`-mdisable-callt' 12425 This option will suppress generation of the CALLT instruction for 12426 the v850e and v850e1 flavors of the v850 architecture. The 12427 default is `-mno-disable-callt' which allows the CALLT instruction 12428 to be used. 12429 12430 12431 12432File: gcc.info, Node: VAX Options, Next: x86-64 Options, Prev: V850 Options, Up: Submodel Options 12433 124343.17.35 VAX Options 12435------------------- 12436 12437These `-m' options are defined for the VAX: 12438 12439`-munix' 12440 Do not output certain jump instructions (`aobleq' and so on) that 12441 the Unix assembler for the VAX cannot handle across long ranges. 12442 12443`-mgnu' 12444 Do output those jump instructions, on the assumption that you will 12445 assemble with the GNU assembler. 12446 12447`-mg' 12448 Output code for g-format floating point numbers instead of 12449 d-format. 12450 12451 12452File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VAX Options, Up: Submodel Options 12453 124543.17.36 x86-64 Options 12455---------------------- 12456 12457These are listed under *Note i386 and x86-64 Options::. 12458 12459 12460File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 12461 124623.17.37 Xstormy16 Options 12463------------------------- 12464 12465These options are defined for Xstormy16: 12466 12467`-msim' 12468 Choose startup files and linker script suitable for the simulator. 12469 12470 12471File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 12472 124733.17.38 Xtensa Options 12474---------------------- 12475 12476These options are supported for Xtensa targets: 12477 12478`-mconst16' 12479`-mno-const16' 12480 Enable or disable use of `CONST16' instructions for loading 12481 constant values. The `CONST16' instruction is currently not a 12482 standard option from Tensilica. When enabled, `CONST16' 12483 instructions are always used in place of the standard `L32R' 12484 instructions. The use of `CONST16' is enabled by default only if 12485 the `L32R' instruction is not available. 12486 12487`-mfused-madd' 12488`-mno-fused-madd' 12489 Enable or disable use of fused multiply/add and multiply/subtract 12490 instructions in the floating-point option. This has no effect if 12491 the floating-point option is not also enabled. Disabling fused 12492 multiply/add and multiply/subtract instructions forces the 12493 compiler to use separate instructions for the multiply and 12494 add/subtract operations. This may be desirable in some cases 12495 where strict IEEE 754-compliant results are required: the fused 12496 multiply add/subtract instructions do not round the intermediate 12497 result, thereby producing results with _more_ bits of precision 12498 than specified by the IEEE standard. Disabling fused multiply 12499 add/subtract instructions also ensures that the program output is 12500 not sensitive to the compiler's ability to combine multiply and 12501 add/subtract operations. 12502 12503`-mtext-section-literals' 12504`-mno-text-section-literals' 12505 Control the treatment of literal pools. The default is 12506 `-mno-text-section-literals', which places literals in a separate 12507 section in the output file. This allows the literal pool to be 12508 placed in a data RAM/ROM, and it also allows the linker to combine 12509 literal pools from separate object files to remove redundant 12510 literals and improve code size. With `-mtext-section-literals', 12511 the literals are interspersed in the text section in order to keep 12512 them as close as possible to their references. This may be 12513 necessary for large assembly files. 12514 12515`-mtarget-align' 12516`-mno-target-align' 12517 When this option is enabled, GCC instructs the assembler to 12518 automatically align instructions to reduce branch penalties at the 12519 expense of some code density. The assembler attempts to widen 12520 density instructions to align branch targets and the instructions 12521 following call instructions. If there are not enough preceding 12522 safe density instructions to align a target, no widening will be 12523 performed. The default is `-mtarget-align'. These options do not 12524 affect the treatment of auto-aligned instructions like `LOOP', 12525 which the assembler will always align, either by widening density 12526 instructions or by inserting no-op instructions. 12527 12528`-mlongcalls' 12529`-mno-longcalls' 12530 When this option is enabled, GCC instructs the assembler to 12531 translate direct calls to indirect calls unless it can determine 12532 that the target of a direct call is in the range allowed by the 12533 call instruction. This translation typically occurs for calls to 12534 functions in other source files. Specifically, the assembler 12535 translates a direct `CALL' instruction into an `L32R' followed by 12536 a `CALLX' instruction. The default is `-mno-longcalls'. This 12537 option should be used in programs where the call target can 12538 potentially be out of range. This option is implemented in the 12539 assembler, not the compiler, so the assembly code generated by GCC 12540 will still show direct call instructions--look at the disassembled 12541 object code to see the actual instructions. Note that the 12542 assembler will use an indirect call for every cross-file call, not 12543 just those that really will be out of range. 12544 12545 12546File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 12547 125483.17.39 zSeries Options 12549----------------------- 12550 12551These are listed under *Note S/390 and zSeries Options::. 12552 12553 12554File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 12555 125563.18 Options for Code Generation Conventions 12557============================================ 12558 12559These machine-independent options control the interface conventions 12560used in code generation. 12561 12562 Most of them have both positive and negative forms; the negative form 12563of `-ffoo' would be `-fno-foo'. In the table below, only one of the 12564forms is listed--the one which is not the default. You can figure out 12565the other form by either removing `no-' or adding it. 12566 12567`-fbounds-check' 12568 For front-ends that support it, generate additional code to check 12569 that indices used to access arrays are within the declared range. 12570 This is currently only supported by the Java and Fortran 12571 front-ends, where this option defaults to true and false 12572 respectively. 12573 12574`-ftrapv' 12575 This option generates traps for signed overflow on addition, 12576 subtraction, multiplication operations. 12577 12578`-fwrapv' 12579 This option instructs the compiler to assume that signed arithmetic 12580 overflow of addition, subtraction and multiplication wraps around 12581 using twos-complement representation. This flag enables some 12582 optimizations and disables others. This option is enabled by 12583 default for the Java front-end, as required by the Java language 12584 specification. 12585 12586`-fexceptions' 12587 Enable exception handling. Generates extra code needed to 12588 propagate exceptions. For some targets, this implies GCC will 12589 generate frame unwind information for all functions, which can 12590 produce significant data size overhead, although it does not 12591 affect execution. If you do not specify this option, GCC will 12592 enable it by default for languages like C++ which normally require 12593 exception handling, and disable it for languages like C that do 12594 not normally require it. However, you may need to enable this 12595 option when compiling C code that needs to interoperate properly 12596 with exception handlers written in C++. You may also wish to 12597 disable this option if you are compiling older C++ programs that 12598 don't use exception handling. 12599 12600`-fnon-call-exceptions' 12601 Generate code that allows trapping instructions to throw 12602 exceptions. Note that this requires platform-specific runtime 12603 support that does not exist everywhere. Moreover, it only allows 12604 _trapping_ instructions to throw exceptions, i.e. memory 12605 references or floating point instructions. It does not allow 12606 exceptions to be thrown from arbitrary signal handlers such as 12607 `SIGALRM'. 12608 12609`-funwind-tables' 12610 Similar to `-fexceptions', except that it will just generate any 12611 needed static data, but will not affect the generated code in any 12612 other way. You will normally not enable this option; instead, a 12613 language processor that needs this handling would enable it on 12614 your behalf. 12615 12616`-fasynchronous-unwind-tables' 12617 Generate unwind table in dwarf2 format, if supported by target 12618 machine. The table is exact at each instruction boundary, so it 12619 can be used for stack unwinding from asynchronous events (such as 12620 debugger or garbage collector). 12621 12622`-fpcc-struct-return' 12623 Return "short" `struct' and `union' values in memory like longer 12624 ones, rather than in registers. This convention is less 12625 efficient, but it has the advantage of allowing intercallability 12626 between GCC-compiled files and files compiled with other 12627 compilers, particularly the Portable C Compiler (pcc). 12628 12629 The precise convention for returning structures in memory depends 12630 on the target configuration macros. 12631 12632 Short structures and unions are those whose size and alignment 12633 match that of some integer type. 12634 12635 *Warning:* code compiled with the `-fpcc-struct-return' switch is 12636 not binary compatible with code compiled with the 12637 `-freg-struct-return' switch. Use it to conform to a non-default 12638 application binary interface. 12639 12640`-freg-struct-return' 12641 Return `struct' and `union' values in registers when possible. 12642 This is more efficient for small structures than 12643 `-fpcc-struct-return'. 12644 12645 If you specify neither `-fpcc-struct-return' nor 12646 `-freg-struct-return', GCC defaults to whichever convention is 12647 standard for the target. If there is no standard convention, GCC 12648 defaults to `-fpcc-struct-return', except on targets where GCC is 12649 the principal compiler. In those cases, we can choose the 12650 standard, and we chose the more efficient register return 12651 alternative. 12652 12653 *Warning:* code compiled with the `-freg-struct-return' switch is 12654 not binary compatible with code compiled with the 12655 `-fpcc-struct-return' switch. Use it to conform to a non-default 12656 application binary interface. 12657 12658`-fshort-enums' 12659 Allocate to an `enum' type only as many bytes as it needs for the 12660 declared range of possible values. Specifically, the `enum' type 12661 will be equivalent to the smallest integer type which has enough 12662 room. 12663 12664 *Warning:* the `-fshort-enums' switch causes GCC to generate code 12665 that is not binary compatible with code generated without that 12666 switch. Use it to conform to a non-default application binary 12667 interface. 12668 12669`-fshort-double' 12670 Use the same size for `double' as for `float'. 12671 12672 *Warning:* the `-fshort-double' switch causes GCC to generate code 12673 that is not binary compatible with code generated without that 12674 switch. Use it to conform to a non-default application binary 12675 interface. 12676 12677`-fshort-wchar' 12678 Override the underlying type for `wchar_t' to be `short unsigned 12679 int' instead of the default for the target. This option is useful 12680 for building programs to run under WINE. 12681 12682 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 12683 that is not binary compatible with code generated without that 12684 switch. Use it to conform to a non-default application binary 12685 interface. 12686 12687`-fno-common' 12688 In C, allocate even uninitialized global variables in the data 12689 section of the object file, rather than generating them as common 12690 blocks. This has the effect that if the same variable is declared 12691 (without `extern') in two different compilations, you will get an 12692 error when you link them. The only reason this might be useful is 12693 if you wish to verify that the program will work on other systems 12694 which always work this way. 12695 12696`-fno-ident' 12697 Ignore the `#ident' directive. 12698 12699`-finhibit-size-directive' 12700 Don't output a `.size' assembler directive, or anything else that 12701 would cause trouble if the function is split in the middle, and the 12702 two halves are placed at locations far apart in memory. This 12703 option is used when compiling `crtstuff.c'; you should not need to 12704 use it for anything else. 12705 12706`-fverbose-asm' 12707 Put extra commentary information in the generated assembly code to 12708 make it more readable. This option is generally only of use to 12709 those who actually need to read the generated assembly code 12710 (perhaps while debugging the compiler itself). 12711 12712 `-fno-verbose-asm', the default, causes the extra information to 12713 be omitted and is useful when comparing two assembler files. 12714 12715`-fpic' 12716 Generate position-independent code (PIC) suitable for use in a 12717 shared library, if supported for the target machine. Such code 12718 accesses all constant addresses through a global offset table 12719 (GOT). The dynamic loader resolves the GOT entries when the 12720 program starts (the dynamic loader is not part of GCC; it is part 12721 of the operating system). If the GOT size for the linked 12722 executable exceeds a machine-specific maximum size, you get an 12723 error message from the linker indicating that `-fpic' does not 12724 work; in that case, recompile with `-fPIC' instead. (These 12725 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 12726 386 has no such limit.) 12727 12728 Position-independent code requires special support, and therefore 12729 works only on certain machines. For the 386, GCC supports PIC for 12730 System V but not for the Sun 386i. Code generated for the IBM 12731 RS/6000 is always position-independent. 12732 12733 When this flag is set, the macros `__pic__' and `__PIC__' are 12734 defined to 1. 12735 12736`-fPIC' 12737 If supported for the target machine, emit position-independent 12738 code, suitable for dynamic linking and avoiding any limit on the 12739 size of the global offset table. This option makes a difference 12740 on the m68k, PowerPC and SPARC. 12741 12742 Position-independent code requires special support, and therefore 12743 works only on certain machines. 12744 12745 When this flag is set, the macros `__pic__' and `__PIC__' are 12746 defined to 2. 12747 12748`-fpie' 12749`-fPIE' 12750 These options are similar to `-fpic' and `-fPIC', but generated 12751 position independent code can be only linked into executables. 12752 Usually these options are used when `-pie' GCC option will be used 12753 during linking. 12754 12755`-fno-jump-tables' 12756 Do not use jump tables for switch statements even where it would be 12757 more efficient than other code generation strategies. This option 12758 is of use in conjunction with `-fpic' or `-fPIC' for building code 12759 which forms part of a dynamic linker and cannot reference the 12760 address of a jump table. On some targets, jump tables do not 12761 require a GOT and this option is not needed. 12762 12763`-ffixed-REG' 12764 Treat the register named REG as a fixed register; generated code 12765 should never refer to it (except perhaps as a stack pointer, frame 12766 pointer or in some other fixed role). 12767 12768 REG must be the name of a register. The register names accepted 12769 are machine-specific and are defined in the `REGISTER_NAMES' macro 12770 in the machine description macro file. 12771 12772 This flag does not have a negative form, because it specifies a 12773 three-way choice. 12774 12775`-fcall-used-REG' 12776 Treat the register named REG as an allocable register that is 12777 clobbered by function calls. It may be allocated for temporaries 12778 or variables that do not live across a call. Functions compiled 12779 this way will not save and restore the register REG. 12780 12781 It is an error to used this flag with the frame pointer or stack 12782 pointer. Use of this flag for other registers that have fixed 12783 pervasive roles in the machine's execution model will produce 12784 disastrous results. 12785 12786 This flag does not have a negative form, because it specifies a 12787 three-way choice. 12788 12789`-fcall-saved-REG' 12790 Treat the register named REG as an allocable register saved by 12791 functions. It may be allocated even for temporaries or variables 12792 that live across a call. Functions compiled this way will save 12793 and restore the register REG if they use it. 12794 12795 It is an error to used this flag with the frame pointer or stack 12796 pointer. Use of this flag for other registers that have fixed 12797 pervasive roles in the machine's execution model will produce 12798 disastrous results. 12799 12800 A different sort of disaster will result from the use of this flag 12801 for a register in which function values may be returned. 12802 12803 This flag does not have a negative form, because it specifies a 12804 three-way choice. 12805 12806`-fpack-struct[=N]' 12807 Without a value specified, pack all structure members together 12808 without holes. When a value is specified (which must be a small 12809 power of two), pack structure members according to this value, 12810 representing the maximum alignment (that is, objects with default 12811 alignment requirements larger than this will be output potentially 12812 unaligned at the next fitting location. 12813 12814 *Warning:* the `-fpack-struct' switch causes GCC to generate code 12815 that is not binary compatible with code generated without that 12816 switch. Additionally, it makes the code suboptimal. Use it to 12817 conform to a non-default application binary interface. 12818 12819`-finstrument-functions' 12820 Generate instrumentation calls for entry and exit to functions. 12821 Just after function entry and just before function exit, the 12822 following profiling functions will be called with the address of 12823 the current function and its call site. (On some platforms, 12824 `__builtin_return_address' does not work beyond the current 12825 function, so the call site information may not be available to the 12826 profiling functions otherwise.) 12827 12828 void __cyg_profile_func_enter (void *this_fn, 12829 void *call_site); 12830 void __cyg_profile_func_exit (void *this_fn, 12831 void *call_site); 12832 12833 The first argument is the address of the start of the current 12834 function, which may be looked up exactly in the symbol table. 12835 12836 This instrumentation is also done for functions expanded inline in 12837 other functions. The profiling calls will indicate where, 12838 conceptually, the inline function is entered and exited. This 12839 means that addressable versions of such functions must be 12840 available. If all your uses of a function are expanded inline, 12841 this may mean an additional expansion of code size. If you use 12842 `extern inline' in your C code, an addressable version of such 12843 functions must be provided. (This is normally the case anyways, 12844 but if you get lucky and the optimizer always expands the 12845 functions inline, you might have gotten away without providing 12846 static copies.) 12847 12848 A function may be given the attribute `no_instrument_function', in 12849 which case this instrumentation will not be done. This can be 12850 used, for example, for the profiling functions listed above, 12851 high-priority interrupt routines, and any functions from which the 12852 profiling functions cannot safely be called (perhaps signal 12853 handlers, if the profiling routines generate output or allocate 12854 memory). 12855 12856`-fstack-check' 12857 Generate code to verify that you do not go beyond the boundary of 12858 the stack. You should specify this flag if you are running in an 12859 environment with multiple threads, but only rarely need to specify 12860 it in a single-threaded environment since stack overflow is 12861 automatically detected on nearly all systems if there is only one 12862 stack. 12863 12864 Note that this switch does not actually cause checking to be done; 12865 the operating system must do that. The switch causes generation 12866 of code to ensure that the operating system sees the stack being 12867 extended. 12868 12869`-fstack-limit-register=REG' 12870`-fstack-limit-symbol=SYM' 12871`-fno-stack-limit' 12872 Generate code to ensure that the stack does not grow beyond a 12873 certain value, either the value of a register or the address of a 12874 symbol. If the stack would grow beyond the value, a signal is 12875 raised. For most targets, the signal is raised before the stack 12876 overruns the boundary, so it is possible to catch the signal 12877 without taking special precautions. 12878 12879 For instance, if the stack starts at absolute address `0x80000000' 12880 and grows downwards, you can use the flags 12881 `-fstack-limit-symbol=__stack_limit' and 12882 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 12883 of 128KB. Note that this may only work with the GNU linker. 12884 12885`-fargument-alias' 12886`-fargument-noalias' 12887`-fargument-noalias-global' 12888`-fargument-noalias-anything' 12889 Specify the possible relationships among parameters and between 12890 parameters and global data. 12891 12892 `-fargument-alias' specifies that arguments (parameters) may alias 12893 each other and may alias global storage. 12894 `-fargument-noalias' specifies that arguments do not alias each 12895 other, but may alias global storage. 12896 `-fargument-noalias-global' specifies that arguments do not alias 12897 each other and do not alias global storage. 12898 `-fargument-noalias-anything' specifies that arguments do not 12899 alias any other storage. 12900 12901 Each language will automatically use whatever option is required by 12902 the language standard. You should not need to use these options 12903 yourself. 12904 12905`-fleading-underscore' 12906 This option and its counterpart, `-fno-leading-underscore', 12907 forcibly change the way C symbols are represented in the object 12908 file. One use is to help link with legacy assembly code. 12909 12910 *Warning:* the `-fleading-underscore' switch causes GCC to 12911 generate code that is not binary compatible with code generated 12912 without that switch. Use it to conform to a non-default 12913 application binary interface. Not all targets provide complete 12914 support for this switch. 12915 12916`-ftls-model=MODEL' 12917 Alter the thread-local storage model to be used (*note 12918 Thread-Local::). The MODEL argument should be one of 12919 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 12920 12921 The default without `-fpic' is `initial-exec'; with `-fpic' the 12922 default is `global-dynamic'. 12923 12924`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 12925 Set the default ELF image symbol visibility to the specified 12926 option--all symbols will be marked with this unless overridden 12927 within the code. Using this feature can very substantially 12928 improve linking and load times of shared object libraries, produce 12929 more optimized code, provide near-perfect API export and prevent 12930 symbol clashes. It is *strongly* recommended that you use this in 12931 any shared objects you distribute. 12932 12933 Despite the nomenclature, `default' always means public ie; 12934 available to be linked against from outside the shared object. 12935 `protected' and `internal' are pretty useless in real-world usage 12936 so the only other commonly used option will be `hidden'. The 12937 default if `-fvisibility' isn't specified is `default', i.e., make 12938 every symbol public--this causes the same behavior as previous 12939 versions of GCC. 12940 12941 A good explanation of the benefits offered by ensuring ELF symbols 12942 have the correct visibility is given by "How To Write Shared 12943 Libraries" by Ulrich Drepper (which can be found at 12944 `http://people.redhat.com/~drepper/')--however a superior solution 12945 made possible by this option to marking things hidden when the 12946 default is public is to make the default hidden and mark things 12947 public. This is the norm with DLL's on Windows and with 12948 `-fvisibility=hidden' and `__attribute__ 12949 ((visibility("default")))' instead of `__declspec(dllexport)' you 12950 get almost identical semantics with identical syntax. This is a 12951 great boon to those working with cross-platform projects. 12952 12953 For those adding visibility support to existing code, you may find 12954 `#pragma GCC visibility' of use. This works by you enclosing the 12955 declarations you wish to set visibility for with (for example) 12956 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 12957 pop'. Bear in mind that symbol visibility should be viewed *as 12958 part of the API interface contract* and thus all new code should 12959 always specify visibility when it is not the default ie; 12960 declarations only for use within the local DSO should *always* be 12961 marked explicitly as hidden as so to avoid PLT indirection 12962 overheads--making this abundantly clear also aids readability and 12963 self-documentation of the code. Note that due to ISO C++ 12964 specification requirements, operator new and operator delete must 12965 always be of default visibility. 12966 12967 Be aware that headers from outside your project, in particular 12968 system headers and headers from any other library you use, may not 12969 be expecting to be compiled with visibility other than the 12970 default. You may need to explicitly say `#pragma GCC visibility 12971 push(default)' before including any such headers. 12972 12973 `extern' declarations are not affected by `-fvisibility', so a lot 12974 of code can be recompiled with `-fvisibility=hidden' with no 12975 modifications. However, this means that calls to `extern' 12976 functions with no explicit visibility will use the PLT, so it is 12977 more effective to use `__attribute ((visibility))' and/or `#pragma 12978 GCC visibility' to tell the compiler which `extern' declarations 12979 should be treated as hidden. 12980 12981 Note that `-fvisibility' does affect C++ vague linkage entities. 12982 This means that, for instance, an exception class that will be 12983 thrown between DSOs must be explicitly marked with default 12984 visibility so that the `type_info' nodes will be unified between 12985 the DSOs. 12986 12987 An overview of these techniques, their benefits and how to use them 12988 is at `http://gcc.gnu.org/wiki/Visibility'. 12989 12990 12991 12992File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 12993 129943.19 Environment Variables Affecting GCC 12995======================================== 12996 12997This section describes several environment variables that affect how GCC 12998operates. Some of them work by specifying directories or prefixes to 12999use when searching for various kinds of files. Some are used to 13000specify other aspects of the compilation environment. 13001 13002 Note that you can also specify places to search using options such as 13003`-B', `-I' and `-L' (*note Directory Options::). These take precedence 13004over places specified using environment variables, which in turn take 13005precedence over those specified by the configuration of GCC. *Note 13006Controlling the Compilation Driver `gcc': (gccint)Driver. 13007 13008`LANG' 13009`LC_CTYPE' 13010`LC_MESSAGES' 13011`LC_ALL' 13012 These environment variables control the way that GCC uses 13013 localization information that allow GCC to work with different 13014 national conventions. GCC inspects the locale categories 13015 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 13016 These locale categories can be set to any value supported by your 13017 installation. A typical value is `en_GB.UTF-8' for English in the 13018 United Kingdom encoded in UTF-8. 13019 13020 The `LC_CTYPE' environment variable specifies character 13021 classification. GCC uses it to determine the character boundaries 13022 in a string; this is needed for some multibyte encodings that 13023 contain quote and escape characters that would otherwise be 13024 interpreted as a string end or escape. 13025 13026 The `LC_MESSAGES' environment variable specifies the language to 13027 use in diagnostic messages. 13028 13029 If the `LC_ALL' environment variable is set, it overrides the value 13030 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 13031 `LC_MESSAGES' default to the value of the `LANG' environment 13032 variable. If none of these variables are set, GCC defaults to 13033 traditional C English behavior. 13034 13035`TMPDIR' 13036 If `TMPDIR' is set, it specifies the directory to use for temporary 13037 files. GCC uses temporary files to hold the output of one stage of 13038 compilation which is to be used as input to the next stage: for 13039 example, the output of the preprocessor, which is the input to the 13040 compiler proper. 13041 13042`GCC_EXEC_PREFIX' 13043 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 13044 names of the subprograms executed by the compiler. No slash is 13045 added when this prefix is combined with the name of a subprogram, 13046 but you can specify a prefix that ends with a slash if you wish. 13047 13048 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 13049 appropriate prefix to use based on the pathname it was invoked 13050 with. 13051 13052 If GCC cannot find the subprogram using the specified prefix, it 13053 tries looking in the usual places for the subprogram. 13054 13055 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 13056 PREFIX is the value of `prefix' when you ran the `configure' 13057 script. 13058 13059 Other prefixes specified with `-B' take precedence over this 13060 prefix. 13061 13062 This prefix is also used for finding files such as `crt0.o' that 13063 are used for linking. 13064 13065 In addition, the prefix is used in an unusual way in finding the 13066 directories to search for header files. For each of the standard 13067 directories whose name normally begins with `/usr/local/lib/gcc' 13068 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 13069 replacing that beginning with the specified prefix to produce an 13070 alternate directory name. Thus, with `-Bfoo/', GCC will search 13071 `foo/bar' where it would normally search `/usr/local/lib/bar'. 13072 These alternate directories are searched first; the standard 13073 directories come next. 13074 13075`COMPILER_PATH' 13076 The value of `COMPILER_PATH' is a colon-separated list of 13077 directories, much like `PATH'. GCC tries the directories thus 13078 specified when searching for subprograms, if it can't find the 13079 subprograms using `GCC_EXEC_PREFIX'. 13080 13081`LIBRARY_PATH' 13082 The value of `LIBRARY_PATH' is a colon-separated list of 13083 directories, much like `PATH'. When configured as a native 13084 compiler, GCC tries the directories thus specified when searching 13085 for special linker files, if it can't find them using 13086 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 13087 when searching for ordinary libraries for the `-l' option (but 13088 directories specified with `-L' come first). 13089 13090`LANG' 13091 This variable is used to pass locale information to the compiler. 13092 One way in which this information is used is to determine the 13093 character set to be used when character literals, string literals 13094 and comments are parsed in C and C++. When the compiler is 13095 configured to allow multibyte characters, the following values for 13096 `LANG' are recognized: 13097 13098 `C-JIS' 13099 Recognize JIS characters. 13100 13101 `C-SJIS' 13102 Recognize SJIS characters. 13103 13104 `C-EUCJP' 13105 Recognize EUCJP characters. 13106 13107 If `LANG' is not defined, or if it has some other value, then the 13108 compiler will use mblen and mbtowc as defined by the default 13109 locale to recognize and translate multibyte characters. 13110 13111Some additional environments variables affect the behavior of the 13112preprocessor. 13113 13114`CPATH' 13115`C_INCLUDE_PATH' 13116`CPLUS_INCLUDE_PATH' 13117`OBJC_INCLUDE_PATH' 13118 Each variable's value is a list of directories separated by a 13119 special character, much like `PATH', in which to look for header 13120 files. The special character, `PATH_SEPARATOR', is 13121 target-dependent and determined at GCC build time. For Microsoft 13122 Windows-based targets it is a semicolon, and for almost all other 13123 targets it is a colon. 13124 13125 `CPATH' specifies a list of directories to be searched as if 13126 specified with `-I', but after any paths given with `-I' options 13127 on the command line. This environment variable is used regardless 13128 of which language is being preprocessed. 13129 13130 The remaining environment variables apply only when preprocessing 13131 the particular language indicated. Each specifies a list of 13132 directories to be searched as if specified with `-isystem', but 13133 after any paths given with `-isystem' options on the command line. 13134 13135 In all these variables, an empty element instructs the compiler to 13136 search its current working directory. Empty elements can appear 13137 at the beginning or end of a path. For instance, if the value of 13138 `CPATH' is `:/special/include', that has the same effect as 13139 `-I. -I/special/include'. 13140 13141`DEPENDENCIES_OUTPUT' 13142 If this variable is set, its value specifies how to output 13143 dependencies for Make based on the non-system header files 13144 processed by the compiler. System header files are ignored in the 13145 dependency output. 13146 13147 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 13148 which case the Make rules are written to that file, guessing the 13149 target name from the source file name. Or the value can have the 13150 form `FILE TARGET', in which case the rules are written to file 13151 FILE using TARGET as the target name. 13152 13153 In other words, this environment variable is equivalent to 13154 combining the options `-MM' and `-MF' (*note Preprocessor 13155 Options::), with an optional `-MT' switch too. 13156 13157`SUNPRO_DEPENDENCIES' 13158 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 13159 except that system header files are not ignored, so it implies 13160 `-M' rather than `-MM'. However, the dependence on the main input 13161 file is omitted. *Note Preprocessor Options::. 13162 13163 13164File: gcc.info, Node: Precompiled Headers, Next: Running Protoize, Prev: Environment Variables, Up: Invoking GCC 13165 131663.20 Using Precompiled Headers 13167============================== 13168 13169Often large projects have many header files that are included in every 13170source file. The time the compiler takes to process these header files 13171over and over again can account for nearly all of the time required to 13172build the project. To make builds faster, GCC allows users to 13173`precompile' a header file; then, if builds can use the precompiled 13174header file they will be much faster. 13175 13176 To create a precompiled header file, simply compile it as you would any 13177other file, if necessary using the `-x' option to make the driver treat 13178it as a C or C++ header file. You will probably want to use a tool 13179like `make' to keep the precompiled header up-to-date when the headers 13180it contains change. 13181 13182 A precompiled header file will be searched for when `#include' is seen 13183in the compilation. As it searches for the included file (*note Search 13184Path: (cpp)Search Path.) the compiler looks for a precompiled header in 13185each directory just before it looks for the include file in that 13186directory. The name searched for is the name specified in the 13187`#include' with `.gch' appended. If the precompiled header file can't 13188be used, it is ignored. 13189 13190 For instance, if you have `#include "all.h"', and you have `all.h.gch' 13191in the same directory as `all.h', then the precompiled header file will 13192be used if possible, and the original header will be used otherwise. 13193 13194 Alternatively, you might decide to put the precompiled header file in a 13195directory and use `-I' to ensure that directory is searched before (or 13196instead of) the directory containing the original header. Then, if you 13197want to check that the precompiled header file is always used, you can 13198put a file of the same name as the original header in this directory 13199containing an `#error' command. 13200 13201 This also works with `-include'. So yet another way to use 13202precompiled headers, good for projects not designed with precompiled 13203header files in mind, is to simply take most of the header files used by 13204a project, include them from another header file, precompile that header 13205file, and `-include' the precompiled header. If the header files have 13206guards against multiple inclusion, they will be skipped because they've 13207already been included (in the precompiled header). 13208 13209 If you need to precompile the same header file for different 13210languages, targets, or compiler options, you can instead make a 13211_directory_ named like `all.h.gch', and put each precompiled header in 13212the directory, perhaps using `-o'. It doesn't matter what you call the 13213files in the directory, every precompiled header in the directory will 13214be considered. The first precompiled header encountered in the 13215directory that is valid for this compilation will be used; they're 13216searched in no particular order. 13217 13218 There are many other possibilities, limited only by your imagination, 13219good sense, and the constraints of your build system. 13220 13221 A precompiled header file can be used only when these conditions apply: 13222 13223 * Only one precompiled header can be used in a particular 13224 compilation. 13225 13226 * A precompiled header can't be used once the first C token is seen. 13227 You can have preprocessor directives before a precompiled header; 13228 you can even include a precompiled header from inside another 13229 header, so long as there are no C tokens before the `#include'. 13230 13231 * The precompiled header file must be produced for the same language 13232 as the current compilation. You can't use a C precompiled header 13233 for a C++ compilation. 13234 13235 * The precompiled header file must have been produced by the same 13236 compiler binary as the current compilation is using. 13237 13238 * Any macros defined before the precompiled header is included must 13239 either be defined in the same way as when the precompiled header 13240 was generated, or must not affect the precompiled header, which 13241 usually means that they don't appear in the precompiled header at 13242 all. 13243 13244 The `-D' option is one way to define a macro before a precompiled 13245 header is included; using a `#define' can also do it. There are 13246 also some options that define macros implicitly, like `-O' and 13247 `-Wdeprecated'; the same rule applies to macros defined this way. 13248 13249 * If debugging information is output when using the precompiled 13250 header, using `-g' or similar, the same kind of debugging 13251 information must have been output when building the precompiled 13252 header. However, a precompiled header built using `-g' can be 13253 used in a compilation when no debugging information is being 13254 output. 13255 13256 * The same `-m' options must generally be used when building and 13257 using the precompiled header. *Note Submodel Options::, for any 13258 cases where this rule is relaxed. 13259 13260 * Each of the following options must be the same when building and 13261 using the precompiled header: 13262 13263 -fexceptions -funit-at-a-time 13264 13265 * Some other command-line options starting with `-f', `-p', or `-O' 13266 must be defined in the same way as when the precompiled header was 13267 generated. At present, it's not clear which options are safe to 13268 change and which are not; the safest choice is to use exactly the 13269 same options when generating and using the precompiled header. 13270 The following are known to be safe: 13271 13272 -fmessage-length= -fpreprocessed 13273 -fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 13274 -fsched-verbose=<number> -fschedule-insns -fvisibility= 13275 -pedantic-errors 13276 13277 13278 For all of these except the last, the compiler will automatically 13279ignore the precompiled header if the conditions aren't met. If you 13280find an option combination that doesn't work and doesn't cause the 13281precompiled header to be ignored, please consider filing a bug report, 13282see *Note Bugs::. 13283 13284 If you do use differing options when generating and using the 13285precompiled header, the actual behavior will be a mixture of the 13286behavior for the options. For instance, if you use `-g' to generate 13287the precompiled header but not when using it, you may or may not get 13288debugging information for routines in the precompiled header. 13289 13290 13291File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC 13292 132933.21 Running Protoize 13294===================== 13295 13296The program `protoize' is an optional part of GCC. You can use it to 13297add prototypes to a program, thus converting the program to ISO C in 13298one respect. The companion program `unprotoize' does the reverse: it 13299removes argument types from any prototypes that are found. 13300 13301 When you run these programs, you must specify a set of source files as 13302command line arguments. The conversion programs start out by compiling 13303these files to see what functions they define. The information gathered 13304about a file FOO is saved in a file named `FOO.X'. 13305 13306 After scanning comes actual conversion. The specified files are all 13307eligible to be converted; any files they include (whether sources or 13308just headers) are eligible as well. 13309 13310 But not all the eligible files are converted. By default, `protoize' 13311and `unprotoize' convert only source and header files in the current 13312directory. You can specify additional directories whose files should 13313be converted with the `-d DIRECTORY' option. You can also specify 13314particular files to exclude with the `-x FILE' option. A file is 13315converted if it is eligible, its directory name matches one of the 13316specified directory names, and its name within the directory has not 13317been excluded. 13318 13319 Basic conversion with `protoize' consists of rewriting most function 13320definitions and function declarations to specify the types of the 13321arguments. The only ones not rewritten are those for varargs functions. 13322 13323 `protoize' optionally inserts prototype declarations at the beginning 13324of the source file, to make them available for any calls that precede 13325the function's definition. Or it can insert prototype declarations 13326with block scope in the blocks where undeclared functions are called. 13327 13328 Basic conversion with `unprotoize' consists of rewriting most function 13329declarations to remove any argument types, and rewriting function 13330definitions to the old-style pre-ISO form. 13331 13332 Both conversion programs print a warning for any function declaration 13333or definition that they can't convert. You can suppress these warnings 13334with `-q'. 13335 13336 The output from `protoize' or `unprotoize' replaces the original 13337source file. The original file is renamed to a name ending with 13338`.save' (for DOS, the saved filename ends in `.sav' without the 13339original `.c' suffix). If the `.save' (`.sav' for DOS) file already 13340exists, then the source file is simply discarded. 13341 13342 `protoize' and `unprotoize' both depend on GCC itself to scan the 13343program and collect information about the functions it uses. So 13344neither of these programs will work until GCC is installed. 13345 13346 Here is a table of the options you can use with `protoize' and 13347`unprotoize'. Each option works with both programs unless otherwise 13348stated. 13349 13350`-B DIRECTORY' 13351 Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the 13352 usual directory (normally `/usr/local/lib'). This file contains 13353 prototype information about standard system functions. This option 13354 applies only to `protoize'. 13355 13356`-c COMPILATION-OPTIONS' 13357 Use COMPILATION-OPTIONS as the options when running `gcc' to 13358 produce the `.X' files. The special option `-aux-info' is always 13359 passed in addition, to tell `gcc' to write a `.X' file. 13360 13361 Note that the compilation options must be given as a single 13362 argument to `protoize' or `unprotoize'. If you want to specify 13363 several `gcc' options, you must quote the entire set of 13364 compilation options to make them a single word in the shell. 13365 13366 There are certain `gcc' arguments that you cannot use, because they 13367 would produce the wrong kind of output. These include `-g', `-O', 13368 `-c', `-S', and `-o' If you include these in the 13369 COMPILATION-OPTIONS, they are ignored. 13370 13371`-C' 13372 Rename files to end in `.C' (`.cc' for DOS-based file systems) 13373 instead of `.c'. This is convenient if you are converting a C 13374 program to C++. This option applies only to `protoize'. 13375 13376`-g' 13377 Add explicit global declarations. This means inserting explicit 13378 declarations at the beginning of each source file for each function 13379 that is called in the file and was not declared. These 13380 declarations precede the first function definition that contains a 13381 call to an undeclared function. This option applies only to 13382 `protoize'. 13383 13384`-i STRING' 13385 Indent old-style parameter declarations with the string STRING. 13386 This option applies only to `protoize'. 13387 13388 `unprotoize' converts prototyped function definitions to old-style 13389 function definitions, where the arguments are declared between the 13390 argument list and the initial `{'. By default, `unprotoize' uses 13391 five spaces as the indentation. If you want to indent with just 13392 one space instead, use `-i " "'. 13393 13394`-k' 13395 Keep the `.X' files. Normally, they are deleted after conversion 13396 is finished. 13397 13398`-l' 13399 Add explicit local declarations. `protoize' with `-l' inserts a 13400 prototype declaration for each function in each block which calls 13401 the function without any declaration. This option applies only to 13402 `protoize'. 13403 13404`-n' 13405 Make no real changes. This mode just prints information about the 13406 conversions that would have been done without `-n'. 13407 13408`-N' 13409 Make no `.save' files. The original files are simply deleted. 13410 Use this option with caution. 13411 13412`-p PROGRAM' 13413 Use the program PROGRAM as the compiler. Normally, the name `gcc' 13414 is used. 13415 13416`-q' 13417 Work quietly. Most warnings are suppressed. 13418 13419`-v' 13420 Print the version number, just like `-v' for `gcc'. 13421 13422 If you need special compiler options to compile one of your program's 13423source files, then you should generate that file's `.X' file specially, 13424by running `gcc' on that source file with the appropriate options and 13425the option `-aux-info'. Then run `protoize' on the entire set of 13426files. `protoize' will use the existing `.X' file because it is newer 13427than the source file. For example: 13428 13429 gcc -Dfoo=bar file1.c -aux-info file1.X 13430 protoize *.c 13431 13432You need to include the special files along with the rest in the 13433`protoize' command, even though their `.X' files already exist, because 13434otherwise they won't get converted. 13435 13436 *Note Protoize Caveats::, for more information on how to use 13437`protoize' successfully. 13438 13439 13440File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 13441 134424 C Implementation-defined behavior 13443*********************************** 13444 13445A conforming implementation of ISO C is required to document its choice 13446of behavior in each of the areas that are designated "implementation 13447defined". The following lists all such areas, along with the section 13448numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 13449Some areas are only implementation-defined in one version of the 13450standard. 13451 13452 Some choices depend on the externally determined ABI for the platform 13453(including standard character encodings) which GCC follows; these are 13454listed as "determined by ABI" below. *Note Binary Compatibility: 13455Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 13456are documented in the preprocessor manual. *Note 13457Implementation-defined behavior: (cpp)Implementation-defined behavior. 13458Some choices are made by the library and operating system (or other 13459environment when compiling for a freestanding environment); refer to 13460their documentation for details. 13461 13462* Menu: 13463 13464* Translation implementation:: 13465* Environment implementation:: 13466* Identifiers implementation:: 13467* Characters implementation:: 13468* Integers implementation:: 13469* Floating point implementation:: 13470* Arrays and pointers implementation:: 13471* Hints implementation:: 13472* Structures unions enumerations and bit-fields implementation:: 13473* Qualifiers implementation:: 13474* Declarators implementation:: 13475* Statements implementation:: 13476* Preprocessing directives implementation:: 13477* Library functions implementation:: 13478* Architecture implementation:: 13479* Locale-specific behavior implementation:: 13480 13481 13482File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 13483 134844.1 Translation 13485=============== 13486 13487 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 13488 5.1.1.3).' 13489 13490 Diagnostics consist of all the output sent to stderr by GCC. 13491 13492 * `Whether each nonempty sequence of white-space characters other 13493 than new-line is retained or replaced by one space character in 13494 translation phase 3 (C90 and C99 5.1.1.2).' 13495 13496 *Note Implementation-defined behavior: (cpp)Implementation-defined 13497 behavior. 13498 13499 13500 13501File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 13502 135034.2 Environment 13504=============== 13505 13506The behavior of most of these points are dependent on the implementation 13507of the C library, and are not defined by GCC itself. 13508 13509 * `The mapping between physical source file multibyte characters and 13510 the source character set in translation phase 1 (C90 and C99 13511 5.1.1.2).' 13512 13513 *Note Implementation-defined behavior: (cpp)Implementation-defined 13514 behavior. 13515 13516 13517 13518File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 13519 135204.3 Identifiers 13521=============== 13522 13523 * `Which additional multibyte characters may appear in identifiers 13524 and their correspondence to universal character names (C99 6.4.2).' 13525 13526 *Note Implementation-defined behavior: (cpp)Implementation-defined 13527 behavior. 13528 13529 * `The number of significant initial characters in an identifier 13530 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 13531 13532 For internal names, all characters are significant. For external 13533 names, the number of significant characters are defined by the 13534 linker; for almost all targets, all characters are significant. 13535 13536 * `Whether case distinctions are significant in an identifier with 13537 external linkage (C90 6.1.2).' 13538 13539 This is a property of the linker. C99 requires that case 13540 distinctions are always significant in identifiers with external 13541 linkage and systems without this property are not supported by GCC. 13542 13543 13544 13545File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 13546 135474.4 Characters 13548============== 13549 13550 * `The number of bits in a byte (C90 3.4, C99 3.6).' 13551 13552 Determined by ABI. 13553 13554 * `The values of the members of the execution character set (C90 and 13555 C99 5.2.1).' 13556 13557 Determined by ABI. 13558 13559 * `The unique value of the member of the execution character set 13560 produced for each of the standard alphabetic escape sequences (C90 13561 and C99 5.2.2).' 13562 13563 Determined by ABI. 13564 13565 * `The value of a `char' object into which has been stored any 13566 character other than a member of the basic execution character set 13567 (C90 6.1.2.5, C99 6.2.5).' 13568 13569 Determined by ABI. 13570 13571 * `Which of `signed char' or `unsigned char' has the same range, 13572 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 13573 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 13574 13575 Determined by ABI. The options `-funsigned-char' and 13576 `-fsigned-char' change the default. *Note Options Controlling C 13577 Dialect: C Dialect Options. 13578 13579 * `The mapping of members of the source character set (in character 13580 constants and string literals) to members of the execution 13581 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 13582 13583 Determined by ABI. 13584 13585 * `The value of an integer character constant containing more than 13586 one character or containing a character or escape sequence that 13587 does not map to a single-byte execution character (C90 6.1.3.4, 13588 C99 6.4.4.4).' 13589 13590 *Note Implementation-defined behavior: (cpp)Implementation-defined 13591 behavior. 13592 13593 * `The value of a wide character constant containing more than one 13594 multibyte character, or containing a multibyte character or escape 13595 sequence not represented in the extended execution character set 13596 (C90 6.1.3.4, C99 6.4.4.4).' 13597 13598 *Note Implementation-defined behavior: (cpp)Implementation-defined 13599 behavior. 13600 13601 * `The current locale used to convert a wide character constant 13602 consisting of a single multibyte character that maps to a member 13603 of the extended execution character set into a corresponding wide 13604 character code (C90 6.1.3.4, C99 6.4.4.4).' 13605 13606 *Note Implementation-defined behavior: (cpp)Implementation-defined 13607 behavior. 13608 13609 * `The current locale used to convert a wide string literal into 13610 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 13611 13612 *Note Implementation-defined behavior: (cpp)Implementation-defined 13613 behavior. 13614 13615 * `The value of a string literal containing a multibyte character or 13616 escape sequence not represented in the execution character set 13617 (C90 6.1.4, C99 6.4.5).' 13618 13619 *Note Implementation-defined behavior: (cpp)Implementation-defined 13620 behavior. 13621 13622 13623File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 13624 136254.5 Integers 13626============ 13627 13628 * `Any extended integer types that exist in the implementation (C99 13629 6.2.5).' 13630 13631 GCC does not support any extended integer types. 13632 13633 * `Whether signed integer types are represented using sign and 13634 magnitude, two's complement, or one's complement, and whether the 13635 extraordinary value is a trap representation or an ordinary value 13636 (C99 6.2.6.2).' 13637 13638 GCC supports only two's complement integer types, and all bit 13639 patterns are ordinary values. 13640 13641 * `The rank of any extended integer type relative to another extended 13642 integer type with the same precision (C99 6.3.1.1).' 13643 13644 GCC does not support any extended integer types. 13645 13646 * `The result of, or the signal raised by, converting an integer to a 13647 signed integer type when the value cannot be represented in an 13648 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 13649 13650 For conversion to a type of width N, the value is reduced modulo 13651 2^N to be within range of the type; no signal is raised. 13652 13653 * `The results of some bitwise operations on signed integers (C90 13654 6.3, C99 6.5).' 13655 13656 Bitwise operators act on the representation of the value including 13657 both the sign and value bits, where the sign bit is considered 13658 immediately above the highest-value value bit. Signed `>>' acts 13659 on negative numbers by sign extension. 13660 13661 GCC does not use the latitude given in C99 only to treat certain 13662 aspects of signed `<<' as undefined, but this is subject to change. 13663 13664 * `The sign of the remainder on integer division (C90 6.3.5).' 13665 13666 GCC always follows the C99 requirement that the result of division 13667 is truncated towards zero. 13668 13669 13670 13671File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 13672 136734.6 Floating point 13674================== 13675 13676 * `The accuracy of the floating-point operations and of the library 13677 functions in `<math.h>' and `<complex.h>' that return 13678 floating-point results (C90 and C99 5.2.4.2.2).' 13679 13680 The accuracy is unknown. 13681 13682 * `The rounding behaviors characterized by non-standard values of 13683 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 13684 13685 GCC does not use such values. 13686 13687 * `The evaluation methods characterized by non-standard negative 13688 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 13689 13690 GCC does not use such values. 13691 13692 * `The direction of rounding when an integer is converted to a 13693 floating-point number that cannot exactly represent the original 13694 value (C90 6.2.1.3, C99 6.3.1.4).' 13695 13696 C99 Annex F is followed. 13697 13698 * `The direction of rounding when a floating-point number is 13699 converted to a narrower floating-point number (C90 6.2.1.4, C99 13700 6.3.1.5).' 13701 13702 C99 Annex F is followed. 13703 13704 * `How the nearest representable value or the larger or smaller 13705 representable value immediately adjacent to the nearest 13706 representable value is chosen for certain floating constants (C90 13707 6.1.3.1, C99 6.4.4.2).' 13708 13709 C99 Annex F is followed. 13710 13711 * `Whether and how floating expressions are contracted when not 13712 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 13713 13714 Expressions are currently only contracted if 13715 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 13716 subject to change. 13717 13718 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 13719 13720 This pragma is not implemented, but the default is to "off" unless 13721 `-frounding-math' is used in which case it is "on". 13722 13723 * `Additional floating-point exceptions, rounding modes, 13724 environments, and classifications, and their macro names (C99 7.6, 13725 C99 7.12).' 13726 13727 This is dependent on the implementation of the C library, and is 13728 not defined by GCC itself. 13729 13730 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 13731 13732 This pragma is not implemented. Expressions are currently only 13733 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 13734 used. This is subject to change. 13735 13736 * `Whether the "inexact" floating-point exception can be raised when 13737 the rounded result actually does equal the mathematical result in 13738 an IEC 60559 conformant implementation (C99 F.9).' 13739 13740 This is dependent on the implementation of the C library, and is 13741 not defined by GCC itself. 13742 13743 * `Whether the "underflow" (and "inexact") floating-point exception 13744 can be raised when a result is tiny but not inexact in an IEC 13745 60559 conformant implementation (C99 F.9).' 13746 13747 This is dependent on the implementation of the C library, and is 13748 not defined by GCC itself. 13749 13750 13751 13752File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 13753 137544.7 Arrays and pointers 13755======================= 13756 13757 * `The result of converting a pointer to an integer or vice versa 13758 (C90 6.3.4, C99 6.3.2.3).' 13759 13760 A cast from pointer to integer discards most-significant bits if 13761 the pointer representation is larger than the integer type, 13762 sign-extends(1) if the pointer representation is smaller than the 13763 integer type, otherwise the bits are unchanged. 13764 13765 A cast from integer to pointer discards most-significant bits if 13766 the pointer representation is smaller than the integer type, 13767 extends according to the signedness of the integer type if the 13768 pointer representation is larger than the integer type, otherwise 13769 the bits are unchanged. 13770 13771 When casting from pointer to integer and back again, the resulting 13772 pointer must reference the same object as the original pointer, 13773 otherwise the behavior is undefined. That is, one may not use 13774 integer arithmetic to avoid the undefined behavior of pointer 13775 arithmetic as proscribed in C99 6.5.6/8. 13776 13777 * `The size of the result of subtracting two pointers to elements of 13778 the same array (C90 6.3.6, C99 6.5.6).' 13779 13780 The value is as specified in the standard and the type is 13781 determined by the ABI. 13782 13783 13784 ---------- Footnotes ---------- 13785 13786 (1) Future versions of GCC may zero-extend, or use a target-defined 13787`ptr_extend' pattern. Do not rely on sign extension. 13788 13789 13790File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 13791 137924.8 Hints 13793========= 13794 13795 * `The extent to which suggestions made by using the `register' 13796 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 13797 13798 The `register' specifier affects code generation only in these 13799 ways: 13800 13801 * When used as part of the register variable extension, see 13802 *Note Explicit Reg Vars::. 13803 13804 * When `-O0' is in use, the compiler allocates distinct stack 13805 memory for all variables that do not have the `register' 13806 storage-class specifier; if `register' is specified, the 13807 variable may have a shorter lifespan than the code would 13808 indicate and may never be placed in memory. 13809 13810 * On some rare x86 targets, `setjmp' doesn't save the registers 13811 in all circumstances. In those cases, GCC doesn't allocate 13812 any variables in registers unless they are marked `register'. 13813 13814 13815 * `The extent to which suggestions made by using the inline function 13816 specifier are effective (C99 6.7.4).' 13817 13818 GCC will not inline any functions if the `-fno-inline' option is 13819 used or if `-O0' is used. Otherwise, GCC may still be unable to 13820 inline a function for many reasons; the `-Winline' option may be 13821 used to determine if a function has not been inlined and why not. 13822 13823 13824 13825File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 13826 138274.9 Structures, unions, enumerations, and bit-fields 13828==================================================== 13829 13830 * `A member of a union object is accessed using a member of a 13831 different type (C90 6.3.2.3).' 13832 13833 The relevant bytes of the representation of the object are treated 13834 as an object of the type used for the access. This may be a trap 13835 representation. 13836 13837 * `Whether a "plain" `int' bit-field is treated as a `signed int' 13838 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 13839 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 13840 13841 By default it is treated as `signed int' but this may be changed 13842 by the `-funsigned-bitfields' option. 13843 13844 * `Allowable bit-field types other than `_Bool', `signed int', and 13845 `unsigned int' (C99 6.7.2.1).' 13846 13847 No other types are permitted in strictly conforming mode. 13848 13849 * `Whether a bit-field can straddle a storage-unit boundary (C90 13850 6.5.2.1, C99 6.7.2.1).' 13851 13852 Determined by ABI. 13853 13854 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 13855 C99 6.7.2.1).' 13856 13857 Determined by ABI. 13858 13859 * `The alignment of non-bit-field members of structures (C90 13860 6.5.2.1, C99 6.7.2.1).' 13861 13862 Determined by ABI. 13863 13864 * `The integer type compatible with each enumerated type (C90 13865 6.5.2.2, C99 6.7.2.2).' 13866 13867 Normally, the type is `unsigned int' if there are no negative 13868 values in the enumeration, otherwise `int'. If `-fshort-enums' is 13869 specified, then if there are negative values it is the first of 13870 `signed char', `short' and `int' that can represent all the 13871 values, otherwise it is the first of `unsigned char', `unsigned 13872 short' and `unsigned int' that can represent all the values. 13873 13874 On some targets, `-fshort-enums' is the default; this is 13875 determined by the ABI. 13876 13877 13878 13879File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 13880 138814.10 Qualifiers 13882=============== 13883 13884 * `What constitutes an access to an object that has 13885 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 13886 13887 Such an object is normally accessed by pointers and used for 13888 accessing hardware. In most expressions, it is intuitively 13889 obvious what is a read and what is a write. For example 13890 13891 volatile int *dst = SOMEVALUE; 13892 volatile int *src = SOMEOTHERVALUE; 13893 *dst = *src; 13894 13895 will cause a read of the volatile object pointed to by SRC and 13896 store the value into the volatile object pointed to by DST. There 13897 is no guarantee that these reads and writes are atomic, especially 13898 for objects larger than `int'. 13899 13900 However, if the volatile storage is not being modified, and the 13901 value of the volatile storage is not used, then the situation is 13902 less obvious. For example 13903 13904 volatile int *src = SOMEVALUE; 13905 *src; 13906 13907 According to the C standard, such an expression is an rvalue whose 13908 type is the unqualified version of its original type, i.e. `int'. 13909 Whether GCC interprets this as a read of the volatile object being 13910 pointed to or only as a request to evaluate the expression for its 13911 side-effects depends on this type. 13912 13913 If it is a scalar type, or on most targets an aggregate type whose 13914 only member object is of a scalar type, or a union type whose 13915 member objects are of scalar types, the expression is interpreted 13916 by GCC as a read of the volatile object; in the other cases, the 13917 expression is only evaluated for its side-effects. 13918 13919 13920 13921File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 13922 139234.11 Declarators 13924================ 13925 13926 * `The maximum number of declarators that may modify an arithmetic, 13927 structure or union type (C90 6.5.4).' 13928 13929 GCC is only limited by available memory. 13930 13931 13932 13933File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 13934 139354.12 Statements 13936=============== 13937 13938 * `The maximum number of `case' values in a `switch' statement (C90 13939 6.6.4.2).' 13940 13941 GCC is only limited by available memory. 13942 13943 13944 13945File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 13946 139474.13 Preprocessing directives 13948============================= 13949 13950*Note Implementation-defined behavior: (cpp)Implementation-defined 13951behavior, for details of these aspects of implementation-defined 13952behavior. 13953 13954 * `How sequences in both forms of header names are mapped to headers 13955 or external source file names (C90 6.1.7, C99 6.4.7).' 13956 13957 * `Whether the value of a character constant in a constant expression 13958 that controls conditional inclusion matches the value of the same 13959 character constant in the execution character set (C90 6.8.1, C99 13960 6.10.1).' 13961 13962 * `Whether the value of a single-character character constant in a 13963 constant expression that controls conditional inclusion may have a 13964 negative value (C90 6.8.1, C99 6.10.1).' 13965 13966 * `The places that are searched for an included `<>' delimited 13967 header, and how the places are specified or the header is 13968 identified (C90 6.8.2, C99 6.10.2).' 13969 13970 * `How the named source file is searched for in an included `""' 13971 delimited header (C90 6.8.2, C99 6.10.2).' 13972 13973 * `The method by which preprocessing tokens (possibly resulting from 13974 macro expansion) in a `#include' directive are combined into a 13975 header name (C90 6.8.2, C99 6.10.2).' 13976 13977 * `The nesting limit for `#include' processing (C90 6.8.2, C99 13978 6.10.2).' 13979 13980 * `Whether the `#' operator inserts a `\' character before the `\' 13981 character that begins a universal character name in a character 13982 constant or string literal (C99 6.10.3.2).' 13983 13984 * `The behavior on each recognized non-`STDC #pragma' directive (C90 13985 6.8.6, C99 6.10.6).' 13986 13987 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 13988 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 13989 details of target-specific pragmas. 13990 13991 * `The definitions for `__DATE__' and `__TIME__' when respectively, 13992 the date and time of translation are not available (C90 6.8.8, C99 13993 6.10.8).' 13994 13995 13996 13997File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 13998 139994.14 Library functions 14000====================== 14001 14002The behavior of most of these points are dependent on the implementation 14003of the C library, and are not defined by GCC itself. 14004 14005 * `The null pointer constant to which the macro `NULL' expands (C90 14006 7.1.6, C99 7.17).' 14007 14008 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 14009 provide the other headers which define `NULL' and some library 14010 implementations may use other definitions in those headers. 14011 14012 14013 14014File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 14015 140164.15 Architecture 14017================= 14018 14019 * `The values or expressions assigned to the macros specified in the 14020 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 14021 5.2.4.2, C99 7.18.2, C99 7.18.3).' 14022 14023 Determined by ABI. 14024 14025 * `The number, order, and encoding of bytes in any object (when not 14026 explicitly specified in this International Standard) (C99 14027 6.2.6.1).' 14028 14029 Determined by ABI. 14030 14031 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 14032 C99 6.5.3.4).' 14033 14034 Determined by ABI. 14035 14036 14037 14038File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 14039 140404.16 Locale-specific behavior 14041============================= 14042 14043The behavior of these points are dependent on the implementation of the 14044C library, and are not defined by GCC itself. 14045 14046 14047File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top 14048 140495 Extensions to the C Language Family 14050************************************* 14051 14052GNU C provides several language features not found in ISO standard C. 14053(The `-pedantic' option directs GCC to print a warning message if any 14054of these features is used.) To test for the availability of these 14055features in conditional compilation, check for a predefined macro 14056`__GNUC__', which is always defined under GCC. 14057 14058 These extensions are available in C and Objective-C. Most of them are 14059also available in C++. *Note Extensions to the C++ Language: C++ 14060Extensions, for extensions that apply _only_ to C++. 14061 14062 Some features that are in ISO C99 but not C89 or C++ are also, as 14063extensions, accepted by GCC in C89 mode and in C++. 14064 14065* Menu: 14066 14067* Statement Exprs:: Putting statements and declarations inside expressions. 14068* Local Labels:: Labels local to a block. 14069* Labels as Values:: Getting pointers to labels, and computed gotos. 14070* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 14071* Constructing Calls:: Dispatching a call to another function. 14072* Typeof:: `typeof': referring to the type of an expression. 14073* Conditionals:: Omitting the middle operand of a `?:' expression. 14074* Long Long:: Double-word integers---`long long int'. 14075* Complex:: Data types for complex numbers. 14076* Decimal Float:: Decimal Floating Types. 14077* Hex Floats:: Hexadecimal floating-point constants. 14078* Zero Length:: Zero-length arrays. 14079* Variable Length:: Arrays whose length is computed at run time. 14080* Empty Structures:: Structures with no members. 14081* Variadic Macros:: Macros with a variable number of arguments. 14082* Escaped Newlines:: Slightly looser rules for escaped newlines. 14083* Subscripting:: Any array can be subscripted, even if not an lvalue. 14084* Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 14085* Initializers:: Non-constant initializers. 14086* Compound Literals:: Compound literals give structures, unions 14087 or arrays as values. 14088* Designated Inits:: Labeling elements of initializers. 14089* Cast to Union:: Casting to union type from any member of the union. 14090* Case Ranges:: `case 1 ... 9' and such. 14091* Mixed Declarations:: Mixing declarations and code. 14092* Function Attributes:: Declaring that functions have no side effects, 14093 or that they can never return. 14094* Attribute Syntax:: Formal syntax for attributes. 14095* Function Prototypes:: Prototype declarations and old-style definitions. 14096* C++ Comments:: C++ comments are recognized. 14097* Dollar Signs:: Dollar sign is allowed in identifiers. 14098* Character Escapes:: `\e' stands for the character <ESC>. 14099* Variable Attributes:: Specifying attributes of variables. 14100* Type Attributes:: Specifying attributes of types. 14101* Alignment:: Inquiring about the alignment of a type or variable. 14102* Inline:: Defining inline functions (as fast as macros). 14103* Extended Asm:: Assembler instructions with C expressions as operands. 14104 (With them you can define ``built-in'' functions.) 14105* Constraints:: Constraints for asm operands 14106* Asm Labels:: Specifying the assembler name to use for a C symbol. 14107* Explicit Reg Vars:: Defining variables residing in specified registers. 14108* Alternate Keywords:: `__const__', `__asm__', etc., for header files. 14109* Incomplete Enums:: `enum foo;', with details to follow. 14110* Function Names:: Printable strings which are the name of the current 14111 function. 14112* Return Address:: Getting the return or frame address of a function. 14113* Vector Extensions:: Using vector instructions through built-in functions. 14114* Offsetof:: Special syntax for implementing `offsetof'. 14115* Atomic Builtins:: Built-in functions for atomic memory access. 14116* Object Size Checking:: Built-in functions for limited buffer overflow 14117 checking. 14118* Other Builtins:: Other built-in functions. 14119* Target Builtins:: Built-in functions specific to particular targets. 14120* Target Format Checks:: Format checks specific to particular targets. 14121* Pragmas:: Pragmas accepted by GCC. 14122* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 14123* Thread-Local:: Per-thread variables. 14124 14125 14126File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 14127 141285.1 Statements and Declarations in Expressions 14129============================================== 14130 14131A compound statement enclosed in parentheses may appear as an expression 14132in GNU C. This allows you to use loops, switches, and local variables 14133within an expression. 14134 14135 Recall that a compound statement is a sequence of statements surrounded 14136by braces; in this construct, parentheses go around the braces. For 14137example: 14138 14139 ({ int y = foo (); int z; 14140 if (y > 0) z = y; 14141 else z = - y; 14142 z; }) 14143 14144is a valid (though slightly more complex than necessary) expression for 14145the absolute value of `foo ()'. 14146 14147 The last thing in the compound statement should be an expression 14148followed by a semicolon; the value of this subexpression serves as the 14149value of the entire construct. (If you use some other kind of statement 14150last within the braces, the construct has type `void', and thus 14151effectively no value.) 14152 14153 This feature is especially useful in making macro definitions "safe" 14154(so that they evaluate each operand exactly once). For example, the 14155"maximum" function is commonly defined as a macro in standard C as 14156follows: 14157 14158 #define max(a,b) ((a) > (b) ? (a) : (b)) 14159 14160But this definition computes either A or B twice, with bad results if 14161the operand has side effects. In GNU C, if you know the type of the 14162operands (here taken as `int'), you can define the macro safely as 14163follows: 14164 14165 #define maxint(a,b) \ 14166 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 14167 14168 Embedded statements are not allowed in constant expressions, such as 14169the value of an enumeration constant, the width of a bit-field, or the 14170initial value of a static variable. 14171 14172 If you don't know the type of the operand, you can still do this, but 14173you must use `typeof' (*note Typeof::). 14174 14175 In G++, the result value of a statement expression undergoes array and 14176function pointer decay, and is returned by value to the enclosing 14177expression. For instance, if `A' is a class, then 14178 14179 A a; 14180 14181 ({a;}).Foo () 14182 14183will construct a temporary `A' object to hold the result of the 14184statement expression, and that will be used to invoke `Foo'. Therefore 14185the `this' pointer observed by `Foo' will not be the address of `a'. 14186 14187 Any temporaries created within a statement within a statement 14188expression will be destroyed at the statement's end. This makes 14189statement expressions inside macros slightly different from function 14190calls. In the latter case temporaries introduced during argument 14191evaluation will be destroyed at the end of the statement that includes 14192the function call. In the statement expression case they will be 14193destroyed during the statement expression. For instance, 14194 14195 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 14196 template<typename T> T function(T a) { T b = a; return b + 3; } 14197 14198 void foo () 14199 { 14200 macro (X ()); 14201 function (X ()); 14202 } 14203 14204will have different places where temporaries are destroyed. For the 14205`macro' case, the temporary `X' will be destroyed just after the 14206initialization of `b'. In the `function' case that temporary will be 14207destroyed when the function returns. 14208 14209 These considerations mean that it is probably a bad idea to use 14210statement-expressions of this form in header files that are designed to 14211work with C++. (Note that some versions of the GNU C Library contained 14212header files using statement-expression that lead to precisely this 14213bug.) 14214 14215 Jumping into a statement expression with `goto' or using a `switch' 14216statement outside the statement expression with a `case' or `default' 14217label inside the statement expression is not permitted. Jumping into a 14218statement expression with a computed `goto' (*note Labels as Values::) 14219yields undefined behavior. Jumping out of a statement expression is 14220permitted, but if the statement expression is part of a larger 14221expression then it is unspecified which other subexpressions of that 14222expression have been evaluated except where the language definition 14223requires certain subexpressions to be evaluated before or after the 14224statement expression. In any case, as with a function call the 14225evaluation of a statement expression is not interleaved with the 14226evaluation of other parts of the containing expression. For example, 14227 14228 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 14229 14230will call `foo' and `bar1' and will not call `baz' but may or may not 14231call `bar2'. If `bar2' is called, it will be called after `foo' and 14232before `bar1' 14233 14234 14235File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 14236 142375.2 Locally Declared Labels 14238=========================== 14239 14240GCC allows you to declare "local labels" in any nested block scope. A 14241local label is just like an ordinary label, but you can only reference 14242it (with a `goto' statement, or by taking its address) within the block 14243in which it was declared. 14244 14245 A local label declaration looks like this: 14246 14247 __label__ LABEL; 14248 14249or 14250 14251 __label__ LABEL1, LABEL2, /* ... */; 14252 14253 Local label declarations must come at the beginning of the block, 14254before any ordinary declarations or statements. 14255 14256 The label declaration defines the label _name_, but does not define 14257the label itself. You must do this in the usual way, with `LABEL:', 14258within the statements of the statement expression. 14259 14260 The local label feature is useful for complex macros. If a macro 14261contains nested loops, a `goto' can be useful for breaking out of them. 14262However, an ordinary label whose scope is the whole function cannot be 14263used: if the macro can be expanded several times in one function, the 14264label will be multiply defined in that function. A local label avoids 14265this problem. For example: 14266 14267 #define SEARCH(value, array, target) \ 14268 do { \ 14269 __label__ found; \ 14270 typeof (target) _SEARCH_target = (target); \ 14271 typeof (*(array)) *_SEARCH_array = (array); \ 14272 int i, j; \ 14273 int value; \ 14274 for (i = 0; i < max; i++) \ 14275 for (j = 0; j < max; j++) \ 14276 if (_SEARCH_array[i][j] == _SEARCH_target) \ 14277 { (value) = i; goto found; } \ 14278 (value) = -1; \ 14279 found:; \ 14280 } while (0) 14281 14282 This could also be written using a statement-expression: 14283 14284 #define SEARCH(array, target) \ 14285 ({ \ 14286 __label__ found; \ 14287 typeof (target) _SEARCH_target = (target); \ 14288 typeof (*(array)) *_SEARCH_array = (array); \ 14289 int i, j; \ 14290 int value; \ 14291 for (i = 0; i < max; i++) \ 14292 for (j = 0; j < max; j++) \ 14293 if (_SEARCH_array[i][j] == _SEARCH_target) \ 14294 { value = i; goto found; } \ 14295 value = -1; \ 14296 found: \ 14297 value; \ 14298 }) 14299 14300 Local label declarations also make the labels they declare visible to 14301nested functions, if there are any. *Note Nested Functions::, for 14302details. 14303 14304 14305File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 14306 143075.3 Labels as Values 14308==================== 14309 14310You can get the address of a label defined in the current function (or 14311a containing function) with the unary operator `&&'. The value has 14312type `void *'. This value is a constant and can be used wherever a 14313constant of that type is valid. For example: 14314 14315 void *ptr; 14316 /* ... */ 14317 ptr = &&foo; 14318 14319 To use these values, you need to be able to jump to one. This is done 14320with the computed goto statement(1), `goto *EXP;'. For example, 14321 14322 goto *ptr; 14323 14324Any expression of type `void *' is allowed. 14325 14326 One way of using these constants is in initializing a static array that 14327will serve as a jump table: 14328 14329 static void *array[] = { &&foo, &&bar, &&hack }; 14330 14331 Then you can select a label with indexing, like this: 14332 14333 goto *array[i]; 14334 14335Note that this does not check whether the subscript is in bounds--array 14336indexing in C never does that. 14337 14338 Such an array of label values serves a purpose much like that of the 14339`switch' statement. The `switch' statement is cleaner, so use that 14340rather than an array unless the problem does not fit a `switch' 14341statement very well. 14342 14343 Another use of label values is in an interpreter for threaded code. 14344The labels within the interpreter function can be stored in the 14345threaded code for super-fast dispatching. 14346 14347 You may not use this mechanism to jump to code in a different function. 14348If you do that, totally unpredictable things will happen. The best way 14349to avoid this is to store the label address only in automatic variables 14350and never pass it as an argument. 14351 14352 An alternate way to write the above example is 14353 14354 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 14355 &&hack - &&foo }; 14356 goto *(&&foo + array[i]); 14357 14358This is more friendly to code living in shared libraries, as it reduces 14359the number of dynamic relocations that are needed, and by consequence, 14360allows the data to be read-only. 14361 14362 ---------- Footnotes ---------- 14363 14364 (1) The analogous feature in Fortran is called an assigned goto, but 14365that name seems inappropriate in C, where one can do more than simply 14366store label addresses in label variables. 14367 14368 14369File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 14370 143715.4 Nested Functions 14372==================== 14373 14374A "nested function" is a function defined inside another function. 14375(Nested functions are not supported for GNU C++.) The nested function's 14376name is local to the block where it is defined. For example, here we 14377define a nested function named `square', and call it twice: 14378 14379 foo (double a, double b) 14380 { 14381 double square (double z) { return z * z; } 14382 14383 return square (a) + square (b); 14384 } 14385 14386 The nested function can access all the variables of the containing 14387function that are visible at the point of its definition. This is 14388called "lexical scoping". For example, here we show a nested function 14389which uses an inherited variable named `offset': 14390 14391 bar (int *array, int offset, int size) 14392 { 14393 int access (int *array, int index) 14394 { return array[index + offset]; } 14395 int i; 14396 /* ... */ 14397 for (i = 0; i < size; i++) 14398 /* ... */ access (array, i) /* ... */ 14399 } 14400 14401 Nested function definitions are permitted within functions in the 14402places where variable definitions are allowed; that is, in any block, 14403mixed with the other declarations and statements in the block. 14404 14405 It is possible to call the nested function from outside the scope of 14406its name by storing its address or passing the address to another 14407function: 14408 14409 hack (int *array, int size) 14410 { 14411 void store (int index, int value) 14412 { array[index] = value; } 14413 14414 intermediate (store, size); 14415 } 14416 14417 Here, the function `intermediate' receives the address of `store' as 14418an argument. If `intermediate' calls `store', the arguments given to 14419`store' are used to store into `array'. But this technique works only 14420so long as the containing function (`hack', in this example) does not 14421exit. 14422 14423 If you try to call the nested function through its address after the 14424containing function has exited, all hell will break loose. If you try 14425to call it after a containing scope level has exited, and if it refers 14426to some of the variables that are no longer in scope, you may be lucky, 14427but it's not wise to take the risk. If, however, the nested function 14428does not refer to anything that has gone out of scope, you should be 14429safe. 14430 14431 GCC implements taking the address of a nested function using a 14432technique called "trampolines". A paper describing them is available as 14433 14434`http://people.debian.org/~aaronl/Usenix88-lexic.pdf'. 14435 14436 A nested function can jump to a label inherited from a containing 14437function, provided the label was explicitly declared in the containing 14438function (*note Local Labels::). Such a jump returns instantly to the 14439containing function, exiting the nested function which did the `goto' 14440and any intermediate functions as well. Here is an example: 14441 14442 bar (int *array, int offset, int size) 14443 { 14444 __label__ failure; 14445 int access (int *array, int index) 14446 { 14447 if (index > size) 14448 goto failure; 14449 return array[index + offset]; 14450 } 14451 int i; 14452 /* ... */ 14453 for (i = 0; i < size; i++) 14454 /* ... */ access (array, i) /* ... */ 14455 /* ... */ 14456 return 0; 14457 14458 /* Control comes here from `access' 14459 if it detects an error. */ 14460 failure: 14461 return -1; 14462 } 14463 14464 A nested function always has no linkage. Declaring one with `extern' 14465or `static' is erroneous. If you need to declare the nested function 14466before its definition, use `auto' (which is otherwise meaningless for 14467function declarations). 14468 14469 bar (int *array, int offset, int size) 14470 { 14471 __label__ failure; 14472 auto int access (int *, int); 14473 /* ... */ 14474 int access (int *array, int index) 14475 { 14476 if (index > size) 14477 goto failure; 14478 return array[index + offset]; 14479 } 14480 /* ... */ 14481 } 14482 14483 14484File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 14485 144865.5 Constructing Function Calls 14487=============================== 14488 14489Using the built-in functions described below, you can record the 14490arguments a function received, and call another function with the same 14491arguments, without knowing the number or types of the arguments. 14492 14493 You can also record the return value of that function call, and later 14494return that value, without knowing what data type the function tried to 14495return (as long as your caller expects that data type). 14496 14497 However, these built-in functions may interact badly with some 14498sophisticated features or other extensions of the language. It is, 14499therefore, not recommended to use them outside very simple functions 14500acting as mere forwarders for their arguments. 14501 14502 -- Built-in Function: void * __builtin_apply_args () 14503 This built-in function returns a pointer to data describing how to 14504 perform a call with the same arguments as were passed to the 14505 current function. 14506 14507 The function saves the arg pointer register, structure value 14508 address, and all registers that might be used to pass arguments to 14509 a function into a block of memory allocated on the stack. Then it 14510 returns the address of that block. 14511 14512 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 14513 *ARGUMENTS, size_t SIZE) 14514 This built-in function invokes FUNCTION with a copy of the 14515 parameters described by ARGUMENTS and SIZE. 14516 14517 The value of ARGUMENTS should be the value returned by 14518 `__builtin_apply_args'. The argument SIZE specifies the size of 14519 the stack argument data, in bytes. 14520 14521 This function returns a pointer to data describing how to return 14522 whatever value was returned by FUNCTION. The data is saved in a 14523 block of memory allocated on the stack. 14524 14525 It is not always simple to compute the proper value for SIZE. The 14526 value is used by `__builtin_apply' to compute the amount of data 14527 that should be pushed on the stack and copied from the incoming 14528 argument area. 14529 14530 -- Built-in Function: void __builtin_return (void *RESULT) 14531 This built-in function returns the value described by RESULT from 14532 the containing function. You should specify, for RESULT, a value 14533 returned by `__builtin_apply'. 14534 14535 14536File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 14537 145385.6 Referring to a Type with `typeof' 14539===================================== 14540 14541Another way to refer to the type of an expression is with `typeof'. 14542The syntax of using of this keyword looks like `sizeof', but the 14543construct acts semantically like a type name defined with `typedef'. 14544 14545 There are two ways of writing the argument to `typeof': with an 14546expression or with a type. Here is an example with an expression: 14547 14548 typeof (x[0](1)) 14549 14550This assumes that `x' is an array of pointers to functions; the type 14551described is that of the values of the functions. 14552 14553 Here is an example with a typename as the argument: 14554 14555 typeof (int *) 14556 14557Here the type described is that of pointers to `int'. 14558 14559 If you are writing a header file that must work when included in ISO C 14560programs, write `__typeof__' instead of `typeof'. *Note Alternate 14561Keywords::. 14562 14563 A `typeof'-construct can be used anywhere a typedef name could be 14564used. For example, you can use it in a declaration, in a cast, or 14565inside of `sizeof' or `typeof'. 14566 14567 `typeof' is often useful in conjunction with the 14568statements-within-expressions feature. Here is how the two together can 14569be used to define a safe "maximum" macro that operates on any 14570arithmetic type and evaluates each of its arguments exactly once: 14571 14572 #define max(a,b) \ 14573 ({ typeof (a) _a = (a); \ 14574 typeof (b) _b = (b); \ 14575 _a > _b ? _a : _b; }) 14576 14577 The reason for using names that start with underscores for the local 14578variables is to avoid conflicts with variable names that occur within 14579the expressions that are substituted for `a' and `b'. Eventually we 14580hope to design a new form of declaration syntax that allows you to 14581declare variables whose scopes start only after their initializers; 14582this will be a more reliable way to prevent such conflicts. 14583 14584Some more examples of the use of `typeof': 14585 14586 * This declares `y' with the type of what `x' points to. 14587 14588 typeof (*x) y; 14589 14590 * This declares `y' as an array of such values. 14591 14592 typeof (*x) y[4]; 14593 14594 * This declares `y' as an array of pointers to characters: 14595 14596 typeof (typeof (char *)[4]) y; 14597 14598 It is equivalent to the following traditional C declaration: 14599 14600 char *y[4]; 14601 14602 To see the meaning of the declaration using `typeof', and why it 14603 might be a useful way to write, rewrite it with these macros: 14604 14605 #define pointer(T) typeof(T *) 14606 #define array(T, N) typeof(T [N]) 14607 14608 Now the declaration can be rewritten this way: 14609 14610 array (pointer (char), 4) y; 14611 14612 Thus, `array (pointer (char), 4)' is the type of arrays of 4 14613 pointers to `char'. 14614 14615 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 14616limited extension which permitted one to write 14617 14618 typedef T = EXPR; 14619 14620with the effect of declaring T to have the type of the expression EXPR. 14621This extension does not work with GCC 3 (versions between 3.0 and 3.2 14622will crash; 3.2.1 and later give an error). Code which relies on it 14623should be rewritten to use `typeof': 14624 14625 typedef typeof(EXPR) T; 14626 14627This will work with all versions of GCC. 14628 14629 14630File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 14631 146325.7 Conditionals with Omitted Operands 14633====================================== 14634 14635The middle operand in a conditional expression may be omitted. Then if 14636the first operand is nonzero, its value is the value of the conditional 14637expression. 14638 14639 Therefore, the expression 14640 14641 x ? : y 14642 14643has the value of `x' if that is nonzero; otherwise, the value of `y'. 14644 14645 This example is perfectly equivalent to 14646 14647 x ? x : y 14648 14649In this simple case, the ability to omit the middle operand is not 14650especially useful. When it becomes useful is when the first operand 14651does, or may (if it is a macro argument), contain a side effect. Then 14652repeating the operand in the middle would perform the side effect 14653twice. Omitting the middle operand uses the value already computed 14654without the undesirable effects of recomputing it. 14655 14656 14657File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions 14658 146595.8 Double-Word Integers 14660======================== 14661 14662ISO C99 supports data types for integers that are at least 64 bits wide, 14663and as an extension GCC supports them in C89 mode and in C++. Simply 14664write `long long int' for a signed integer, or `unsigned long long int' 14665for an unsigned integer. To make an integer constant of type `long 14666long int', add the suffix `LL' to the integer. To make an integer 14667constant of type `unsigned long long int', add the suffix `ULL' to the 14668integer. 14669 14670 You can use these types in arithmetic like any other integer types. 14671Addition, subtraction, and bitwise boolean operations on these types 14672are open-coded on all types of machines. Multiplication is open-coded 14673if the machine supports fullword-to-doubleword a widening multiply 14674instruction. Division and shifts are open-coded only on machines that 14675provide special support. The operations that are not open-coded use 14676special library routines that come with GCC. 14677 14678 There may be pitfalls when you use `long long' types for function 14679arguments, unless you declare function prototypes. If a function 14680expects type `int' for its argument, and you pass a value of type `long 14681long int', confusion will result because the caller and the subroutine 14682will disagree about the number of bytes for the argument. Likewise, if 14683the function expects `long long int' and you pass `int'. The best way 14684to avoid such problems is to use prototypes. 14685 14686 14687File: gcc.info, Node: Complex, Next: Decimal Float, Prev: Long Long, Up: C Extensions 14688 146895.9 Complex Numbers 14690=================== 14691 14692ISO C99 supports complex floating data types, and as an extension GCC 14693supports them in C89 mode and in C++, and supports complex integer data 14694types which are not part of ISO C99. You can declare complex types 14695using the keyword `_Complex'. As an extension, the older GNU keyword 14696`__complex__' is also supported. 14697 14698 For example, `_Complex double x;' declares `x' as a variable whose 14699real part and imaginary part are both of type `double'. `_Complex 14700short int y;' declares `y' to have real and imaginary parts of type 14701`short int'; this is not likely to be useful, but it shows that the set 14702of complex types is complete. 14703 14704 To write a constant with a complex data type, use the suffix `i' or 14705`j' (either one; they are equivalent). For example, `2.5fi' has type 14706`_Complex float' and `3i' has type `_Complex int'. Such a constant 14707always has a pure imaginary value, but you can form any complex value 14708you like by adding one to a real constant. This is a GNU extension; if 14709you have an ISO C99 conforming C library (such as GNU libc), and want 14710to construct complex constants of floating type, you should include 14711`<complex.h>' and use the macros `I' or `_Complex_I' instead. 14712 14713 To extract the real part of a complex-valued expression EXP, write 14714`__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 14715part. This is a GNU extension; for values of floating type, you should 14716use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 14717`cimag' and `cimagl', declared in `<complex.h>' and also provided as 14718built-in functions by GCC. 14719 14720 The operator `~' performs complex conjugation when used on a value 14721with a complex type. This is a GNU extension; for values of floating 14722type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 14723declared in `<complex.h>' and also provided as built-in functions by 14724GCC. 14725 14726 GCC can allocate complex automatic variables in a noncontiguous 14727fashion; it's even possible for the real part to be in a register while 14728the imaginary part is on the stack (or vice-versa). Only the DWARF2 14729debug info format can represent this, so use of DWARF2 is recommended. 14730If you are using the stabs debug info format, GCC describes a 14731noncontiguous complex variable as if it were two separate variables of 14732noncomplex type. If the variable's actual name is `foo', the two 14733fictitious variables are named `foo$real' and `foo$imag'. You can 14734examine and set these two fictitious variables with your debugger. 14735 14736 14737File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Complex, Up: C Extensions 14738 147395.10 Decimal Floating Types 14740=========================== 14741 14742As an extension, the GNU C compiler supports decimal floating types as 14743defined in the N1176 draft of ISO/IEC WDTR24732. Support for decimal 14744floating types in GCC will evolve as the draft technical report changes. 14745Calling conventions for any target might also change. Not all targets 14746support decimal floating types. 14747 14748 The decimal floating types are `_Decimal32', `_Decimal64', and 14749`_Decimal128'. They use a radix of ten, unlike the floating types 14750`float', `double', and `long double' whose radix is not specified by 14751the C standard but is usually two. 14752 14753 Support for decimal floating types includes the arithmetic operators 14754add, subtract, multiply, divide; unary arithmetic operators; relational 14755operators; equality operators; and conversions to and from integer and 14756other floating types. Use a suffix `df' or `DF' in a literal constant 14757of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 14758for `_Decimal128'. 14759 14760 GCC support of decimal float as specified by the draft technical report 14761is incomplete: 14762 14763 * Translation time data type (TTDT) is not supported. 14764 14765 * Characteristics of decimal floating types are defined in header 14766 file `decfloat.h' rather than `float.h'. 14767 14768 * When the value of a decimal floating type cannot be represented in 14769 the integer type to which it is being converted, the result is 14770 undefined rather than the result value specified by the draft 14771 technical report. 14772 14773 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 14774the DWARF2 debug information format. 14775 14776 14777File: gcc.info, Node: Hex Floats, Next: Zero Length, Prev: Decimal Float, Up: C Extensions 14778 147795.11 Hex Floats 14780=============== 14781 14782ISO C99 supports floating-point numbers written not only in the usual 14783decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 14784written in hexadecimal format. As a GNU extension, GCC supports this 14785in C89 mode (except in some cases when strictly conforming) and in C++. 14786In that format the `0x' hex introducer and the `p' or `P' exponent 14787field are mandatory. The exponent is a decimal number that indicates 14788the power of 2 by which the significant part will be multiplied. Thus 14789`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 14790is the same as `1.55e1'. 14791 14792 Unlike for floating-point numbers in the decimal notation the exponent 14793is always required in the hexadecimal notation. Otherwise the compiler 14794would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 14795could mean `1.0f' or `1.9375' since `f' is also the extension for 14796floating-point constants of type `float'. 14797 14798 14799File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Hex Floats, Up: C Extensions 14800 148015.12 Arrays of Length Zero 14802========================== 14803 14804Zero-length arrays are allowed in GNU C. They are very useful as the 14805last element of a structure which is really a header for a 14806variable-length object: 14807 14808 struct line { 14809 int length; 14810 char contents[0]; 14811 }; 14812 14813 struct line *thisline = (struct line *) 14814 malloc (sizeof (struct line) + this_length); 14815 thisline->length = this_length; 14816 14817 In ISO C90, you would have to give `contents' a length of 1, which 14818means either you waste space or complicate the argument to `malloc'. 14819 14820 In ISO C99, you would use a "flexible array member", which is slightly 14821different in syntax and semantics: 14822 14823 * Flexible array members are written as `contents[]' without the `0'. 14824 14825 * Flexible array members have incomplete type, and so the `sizeof' 14826 operator may not be applied. As a quirk of the original 14827 implementation of zero-length arrays, `sizeof' evaluates to zero. 14828 14829 * Flexible array members may only appear as the last member of a 14830 `struct' that is otherwise non-empty. 14831 14832 * A structure containing a flexible array member, or a union 14833 containing such a structure (possibly recursively), may not be a 14834 member of a structure or an element of an array. (However, these 14835 uses are permitted by GCC as extensions.) 14836 14837 GCC versions before 3.0 allowed zero-length arrays to be statically 14838initialized, as if they were flexible arrays. In addition to those 14839cases that were useful, it also allowed initializations in situations 14840that would corrupt later data. Non-empty initialization of zero-length 14841arrays is now treated like any case where there are more initializer 14842elements than the array holds, in that a suitable warning about "excess 14843elements in array" is given, and the excess elements (all of them, in 14844this case) are ignored. 14845 14846 Instead GCC allows static initialization of flexible array members. 14847This is equivalent to defining a new structure containing the original 14848structure followed by an array of sufficient size to contain the data. 14849I.e. in the following, `f1' is constructed as if it were declared like 14850`f2'. 14851 14852 struct f1 { 14853 int x; int y[]; 14854 } f1 = { 1, { 2, 3, 4 } }; 14855 14856 struct f2 { 14857 struct f1 f1; int data[3]; 14858 } f2 = { { 1 }, { 2, 3, 4 } }; 14859 14860The convenience of this extension is that `f1' has the desired type, 14861eliminating the need to consistently refer to `f2.f1'. 14862 14863 This has symmetry with normal static arrays, in that an array of 14864unknown size is also written with `[]'. 14865 14866 Of course, this extension only makes sense if the extra data comes at 14867the end of a top-level object, as otherwise we would be overwriting 14868data at subsequent offsets. To avoid undue complication and confusion 14869with initialization of deeply nested arrays, we simply disallow any 14870non-empty initialization except when the structure is the top-level 14871object. For example: 14872 14873 struct foo { int x; int y[]; }; 14874 struct bar { struct foo z; }; 14875 14876 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 14877 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 14878 struct bar c = { { 1, { } } }; // Valid. 14879 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 14880 14881 14882File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 14883 148845.13 Structures With No Members 14885=============================== 14886 14887GCC permits a C structure to have no members: 14888 14889 struct empty { 14890 }; 14891 14892 The structure will have size zero. In C++, empty structures are part 14893of the language. G++ treats empty structures as if they had a single 14894member of type `char'. 14895 14896 14897File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 14898 148995.14 Arrays of Variable Length 14900============================== 14901 14902Variable-length automatic arrays are allowed in ISO C99, and as an 14903extension GCC accepts them in C89 mode and in C++. (However, GCC's 14904implementation of variable-length arrays does not yet conform in detail 14905to the ISO C99 standard.) These arrays are declared like any other 14906automatic arrays, but with a length that is not a constant expression. 14907The storage is allocated at the point of declaration and deallocated 14908when the brace-level is exited. For example: 14909 14910 FILE * 14911 concat_fopen (char *s1, char *s2, char *mode) 14912 { 14913 char str[strlen (s1) + strlen (s2) + 1]; 14914 strcpy (str, s1); 14915 strcat (str, s2); 14916 return fopen (str, mode); 14917 } 14918 14919 Jumping or breaking out of the scope of the array name deallocates the 14920storage. Jumping into the scope is not allowed; you get an error 14921message for it. 14922 14923 You can use the function `alloca' to get an effect much like 14924variable-length arrays. The function `alloca' is available in many 14925other C implementations (but not in all). On the other hand, 14926variable-length arrays are more elegant. 14927 14928 There are other differences between these two methods. Space allocated 14929with `alloca' exists until the containing _function_ returns. The 14930space for a variable-length array is deallocated as soon as the array 14931name's scope ends. (If you use both variable-length arrays and 14932`alloca' in the same function, deallocation of a variable-length array 14933will also deallocate anything more recently allocated with `alloca'.) 14934 14935 You can also use variable-length arrays as arguments to functions: 14936 14937 struct entry 14938 tester (int len, char data[len][len]) 14939 { 14940 /* ... */ 14941 } 14942 14943 The length of an array is computed once when the storage is allocated 14944and is remembered for the scope of the array in case you access it with 14945`sizeof'. 14946 14947 If you want to pass the array first and the length afterward, you can 14948use a forward declaration in the parameter list--another GNU extension. 14949 14950 struct entry 14951 tester (int len; char data[len][len], int len) 14952 { 14953 /* ... */ 14954 } 14955 14956 The `int len' before the semicolon is a "parameter forward 14957declaration", and it serves the purpose of making the name `len' known 14958when the declaration of `data' is parsed. 14959 14960 You can write any number of such parameter forward declarations in the 14961parameter list. They can be separated by commas or semicolons, but the 14962last one must end with a semicolon, which is followed by the "real" 14963parameter declarations. Each forward declaration must match a "real" 14964declaration in parameter name and data type. ISO C99 does not support 14965parameter forward declarations. 14966 14967 14968File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 14969 149705.15 Macros with a Variable Number of Arguments. 14971================================================ 14972 14973In the ISO C standard of 1999, a macro can be declared to accept a 14974variable number of arguments much as a function can. The syntax for 14975defining the macro is similar to that of a function. Here is an 14976example: 14977 14978 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 14979 14980 Here `...' is a "variable argument". In the invocation of such a 14981macro, it represents the zero or more tokens until the closing 14982parenthesis that ends the invocation, including any commas. This set of 14983tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 14984it appears. See the CPP manual for more information. 14985 14986 GCC has long supported variadic macros, and used a different syntax 14987that allowed you to give a name to the variable arguments just like any 14988other argument. Here is an example: 14989 14990 #define debug(format, args...) fprintf (stderr, format, args) 14991 14992 This is in all ways equivalent to the ISO C example above, but arguably 14993more readable and descriptive. 14994 14995 GNU CPP has two further variadic macro extensions, and permits them to 14996be used with either of the above forms of macro definition. 14997 14998 In standard C, you are not allowed to leave the variable argument out 14999entirely; but you are allowed to pass an empty argument. For example, 15000this invocation is invalid in ISO C, because there is no comma after 15001the string: 15002 15003 debug ("A message") 15004 15005 GNU CPP permits you to completely omit the variable arguments in this 15006way. In the above examples, the compiler would complain, though since 15007the expansion of the macro still has the extra comma after the format 15008string. 15009 15010 To help solve this problem, CPP behaves specially for variable 15011arguments used with the token paste operator, `##'. If instead you 15012write 15013 15014 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 15015 15016 and if the variable arguments are omitted or empty, the `##' operator 15017causes the preprocessor to remove the comma before it. If you do 15018provide some variable arguments in your macro invocation, GNU CPP does 15019not complain about the paste operation and instead places the variable 15020arguments after the comma. Just like any other pasted macro argument, 15021these arguments are not macro expanded. 15022 15023 15024File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 15025 150265.16 Slightly Looser Rules for Escaped Newlines 15027=============================================== 15028 15029Recently, the preprocessor has relaxed its treatment of escaped 15030newlines. Previously, the newline had to immediately follow a 15031backslash. The current implementation allows whitespace in the form of 15032spaces, horizontal and vertical tabs, and form feeds between the 15033backslash and the subsequent newline. The preprocessor issues a 15034warning, but treats it as a valid escaped newline and combines the two 15035lines to form a single logical line. This works within comments and 15036tokens, as well as between tokens. Comments are _not_ treated as 15037whitespace for the purposes of this relaxation, since they have not yet 15038been replaced with spaces. 15039 15040 15041File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 15042 150435.17 Non-Lvalue Arrays May Have Subscripts 15044========================================== 15045 15046In ISO C99, arrays that are not lvalues still decay to pointers, and 15047may be subscripted, although they may not be modified or used after the 15048next sequence point and the unary `&' operator may not be applied to 15049them. As an extension, GCC allows such arrays to be subscripted in C89 15050mode, though otherwise they do not decay to pointers outside C99 mode. 15051For example, this is valid in GNU C though not valid in C89: 15052 15053 struct foo {int a[4];}; 15054 15055 struct foo f(); 15056 15057 bar (int index) 15058 { 15059 return f().a[index]; 15060 } 15061 15062 15063File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 15064 150655.18 Arithmetic on `void'- and Function-Pointers 15066================================================ 15067 15068In GNU C, addition and subtraction operations are supported on pointers 15069to `void' and on pointers to functions. This is done by treating the 15070size of a `void' or of a function as 1. 15071 15072 A consequence of this is that `sizeof' is also allowed on `void' and 15073on function types, and returns 1. 15074 15075 The option `-Wpointer-arith' requests a warning if these extensions 15076are used. 15077 15078 15079File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 15080 150815.19 Non-Constant Initializers 15082============================== 15083 15084As in standard C++ and ISO C99, the elements of an aggregate 15085initializer for an automatic variable are not required to be constant 15086expressions in GNU C. Here is an example of an initializer with 15087run-time varying elements: 15088 15089 foo (float f, float g) 15090 { 15091 float beat_freqs[2] = { f-g, f+g }; 15092 /* ... */ 15093 } 15094 15095 15096File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 15097 150985.20 Compound Literals 15099====================== 15100 15101ISO C99 supports compound literals. A compound literal looks like a 15102cast containing an initializer. Its value is an object of the type 15103specified in the cast, containing the elements specified in the 15104initializer; it is an lvalue. As an extension, GCC supports compound 15105literals in C89 mode and in C++. 15106 15107 Usually, the specified type is a structure. Assume that `struct foo' 15108and `structure' are declared as shown: 15109 15110 struct foo {int a; char b[2];} structure; 15111 15112Here is an example of constructing a `struct foo' with a compound 15113literal: 15114 15115 structure = ((struct foo) {x + y, 'a', 0}); 15116 15117This is equivalent to writing the following: 15118 15119 { 15120 struct foo temp = {x + y, 'a', 0}; 15121 structure = temp; 15122 } 15123 15124 You can also construct an array. If all the elements of the compound 15125literal are (made up of) simple constant expressions, suitable for use 15126in initializers of objects of static storage duration, then the compound 15127literal can be coerced to a pointer to its first element and used in 15128such an initializer, as shown here: 15129 15130 char **foo = (char *[]) { "x", "y", "z" }; 15131 15132 Compound literals for scalar types and union types are is also 15133allowed, but then the compound literal is equivalent to a cast. 15134 15135 As a GNU extension, GCC allows initialization of objects with static 15136storage duration by compound literals (which is not possible in ISO 15137C99, because the initializer is not a constant). It is handled as if 15138the object was initialized only with the bracket enclosed list if the 15139types of the compound literal and the object match. The initializer 15140list of the compound literal must be constant. If the object being 15141initialized has array type of unknown size, the size is determined by 15142compound literal size. 15143 15144 static struct foo x = (struct foo) {1, 'a', 'b'}; 15145 static int y[] = (int []) {1, 2, 3}; 15146 static int z[] = (int [3]) {1}; 15147 15148The above lines are equivalent to the following: 15149 static struct foo x = {1, 'a', 'b'}; 15150 static int y[] = {1, 2, 3}; 15151 static int z[] = {1, 0, 0}; 15152 15153 15154File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 15155 151565.21 Designated Initializers 15157============================ 15158 15159Standard C89 requires the elements of an initializer to appear in a 15160fixed order, the same as the order of the elements in the array or 15161structure being initialized. 15162 15163 In ISO C99 you can give the elements in any order, specifying the array 15164indices or structure field names they apply to, and GNU C allows this as 15165an extension in C89 mode as well. This extension is not implemented in 15166GNU C++. 15167 15168 To specify an array index, write `[INDEX] =' before the element value. 15169For example, 15170 15171 int a[6] = { [4] = 29, [2] = 15 }; 15172 15173is equivalent to 15174 15175 int a[6] = { 0, 0, 15, 0, 29, 0 }; 15176 15177The index values must be constant expressions, even if the array being 15178initialized is automatic. 15179 15180 An alternative syntax for this which has been obsolete since GCC 2.5 15181but GCC still accepts is to write `[INDEX]' before the element value, 15182with no `='. 15183 15184 To initialize a range of elements to the same value, write `[FIRST ... 15185LAST] = VALUE'. This is a GNU extension. For example, 15186 15187 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 15188 15189If the value in it has side-effects, the side-effects will happen only 15190once, not for each initialized field by the range initializer. 15191 15192Note that the length of the array is the highest value specified plus 15193one. 15194 15195 In a structure initializer, specify the name of a field to initialize 15196with `.FIELDNAME =' before the element value. For example, given the 15197following structure, 15198 15199 struct point { int x, y; }; 15200 15201the following initialization 15202 15203 struct point p = { .y = yvalue, .x = xvalue }; 15204 15205is equivalent to 15206 15207 struct point p = { xvalue, yvalue }; 15208 15209 Another syntax which has the same meaning, obsolete since GCC 2.5, is 15210`FIELDNAME:', as shown here: 15211 15212 struct point p = { y: yvalue, x: xvalue }; 15213 15214 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 15215also use a designator (or the obsolete colon syntax) when initializing 15216a union, to specify which element of the union should be used. For 15217example, 15218 15219 union foo { int i; double d; }; 15220 15221 union foo f = { .d = 4 }; 15222 15223will convert 4 to a `double' to store it in the union using the second 15224element. By contrast, casting 4 to type `union foo' would store it 15225into the union as the integer `i', since it is an integer. (*Note Cast 15226to Union::.) 15227 15228 You can combine this technique of naming elements with ordinary C 15229initialization of successive elements. Each initializer element that 15230does not have a designator applies to the next consecutive element of 15231the array or structure. For example, 15232 15233 int a[6] = { [1] = v1, v2, [4] = v4 }; 15234 15235is equivalent to 15236 15237 int a[6] = { 0, v1, v2, 0, v4, 0 }; 15238 15239 Labeling the elements of an array initializer is especially useful 15240when the indices are characters or belong to an `enum' type. For 15241example: 15242 15243 int whitespace[256] 15244 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 15245 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 15246 15247 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 15248before an `=' to specify a nested subobject to initialize; the list is 15249taken relative to the subobject corresponding to the closest 15250surrounding brace pair. For example, with the `struct point' 15251declaration above: 15252 15253 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 15254 15255If the same field is initialized multiple times, it will have value from 15256the last initialization. If any such overridden initialization has 15257side-effect, it is unspecified whether the side-effect happens or not. 15258Currently, GCC will discard them and issue a warning. 15259 15260 15261File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 15262 152635.22 Case Ranges 15264================ 15265 15266You can specify a range of consecutive values in a single `case' label, 15267like this: 15268 15269 case LOW ... HIGH: 15270 15271This has the same effect as the proper number of individual `case' 15272labels, one for each integer value from LOW to HIGH, inclusive. 15273 15274 This feature is especially useful for ranges of ASCII character codes: 15275 15276 case 'A' ... 'Z': 15277 15278 *Be careful:* Write spaces around the `...', for otherwise it may be 15279parsed wrong when you use it with integer values. For example, write 15280this: 15281 15282 case 1 ... 5: 15283 15284rather than this: 15285 15286 case 1...5: 15287 15288 15289File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 15290 152915.23 Cast to a Union Type 15292========================= 15293 15294A cast to union type is similar to other casts, except that the type 15295specified is a union type. You can specify the type either with `union 15296TAG' or with a typedef name. A cast to union is actually a constructor 15297though, not a cast, and hence does not yield an lvalue like normal 15298casts. (*Note Compound Literals::.) 15299 15300 The types that may be cast to the union type are those of the members 15301of the union. Thus, given the following union and variables: 15302 15303 union foo { int i; double d; }; 15304 int x; 15305 double y; 15306 15307both `x' and `y' can be cast to type `union foo'. 15308 15309 Using the cast as the right-hand side of an assignment to a variable of 15310union type is equivalent to storing in a member of the union: 15311 15312 union foo u; 15313 /* ... */ 15314 u = (union foo) x == u.i = x 15315 u = (union foo) y == u.d = y 15316 15317 You can also use the union cast as a function argument: 15318 15319 void hack (union foo); 15320 /* ... */ 15321 hack ((union foo) x); 15322 15323 15324File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 15325 153265.24 Mixed Declarations and Code 15327================================ 15328 15329ISO C99 and ISO C++ allow declarations and code to be freely mixed 15330within compound statements. As an extension, GCC also allows this in 15331C89 mode. For example, you could do: 15332 15333 int i; 15334 /* ... */ 15335 i++; 15336 int j = i + 2; 15337 15338 Each identifier is visible from where it is declared until the end of 15339the enclosing block. 15340 15341 15342File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 15343 153445.25 Declaring Attributes of Functions 15345====================================== 15346 15347In GNU C, you declare certain things about functions called in your 15348program which help the compiler optimize function calls and check your 15349code more carefully. 15350 15351 The keyword `__attribute__' allows you to specify special attributes 15352when making a declaration. This keyword is followed by an attribute 15353specification inside double parentheses. The following attributes are 15354currently defined for functions on all targets: `noreturn', 15355`returns_twice', `noinline', `always_inline', `flatten', `pure', 15356`const', `nothrow', `sentinel', `format', `format_arg', 15357`no_instrument_function', `section', `constructor', `destructor', 15358`used', `unused', `deprecated', `weak', `malloc', `alias', 15359`warn_unused_result', `nonnull', `gnu_inline' and `externally_visible'. 15360Several other attributes are defined for functions on particular 15361target systems. Other attributes, including `section' are supported 15362for variables declarations (*note Variable Attributes::) and for types 15363(*note Type Attributes::). 15364 15365 You may also specify attributes with `__' preceding and following each 15366keyword. This allows you to use them in header files without being 15367concerned about a possible macro of the same name. For example, you 15368may use `__noreturn__' instead of `noreturn'. 15369 15370 *Note Attribute Syntax::, for details of the exact syntax for using 15371attributes. 15372 15373`alias ("TARGET")' 15374 The `alias' attribute causes the declaration to be emitted as an 15375 alias for another symbol, which must be specified. For instance, 15376 15377 void __f () { /* Do something. */; } 15378 void f () __attribute__ ((weak, alias ("__f"))); 15379 15380 defines `f' to be a weak alias for `__f'. In C++, the mangled 15381 name for the target must be used. It is an error if `__f' is not 15382 defined in the same translation unit. 15383 15384 Not all target machines support this attribute. 15385 15386`always_inline' 15387 Generally, functions are not inlined unless optimization is 15388 specified. For functions declared inline, this attribute inlines 15389 the function even if no optimization level was specified. 15390 15391`gnu_inline' 15392 This attribute should be used with a function which is also 15393 declared with the `inline' keyword. It directs GCC to treat the 15394 function as if it were defined in gnu89 mode even when compiling 15395 in C99 or gnu99 mode. 15396 15397 If the function is declared `extern', then this definition of the 15398 function is used only for inlining. In no case is the function 15399 compiled as a standalone function, not even if you take its address 15400 explicitly. Such an address becomes an external reference, as if 15401 you had only declared the function, and had not defined it. This 15402 has almost the effect of a macro. The way to use this is to put a 15403 function definition in a header file with this attribute, and put 15404 another copy of the function, without `extern', in a library file. 15405 The definition in the header file will cause most calls to the 15406 function to be inlined. If any uses of the function remain, they 15407 will refer to the single copy in the library. Note that the two 15408 definitions of the functions need not be precisely the same, 15409 although if they do not have the same effect your program may 15410 behave oddly. 15411 15412 If the function is neither `extern' nor `static', then the 15413 function is compiled as a standalone function, as well as being 15414 inlined where possible. 15415 15416 This is how GCC traditionally handled functions declared `inline'. 15417 Since ISO C99 specifies a different semantics for `inline', this 15418 function attribute is provided as a transition measure and as a 15419 useful feature in its own right. This attribute is available in 15420 GCC 4.1.3 and later. It is available if either of the 15421 preprocessor macros `__GNUC_GNU_INLINE__' or 15422 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 15423 As Fast As a Macro: Inline. 15424 15425 Note that since the first version of GCC to support C99 inline 15426 semantics is 4.3, earlier versions of GCC which accept this 15427 attribute effectively assume that it is always present, whether or 15428 not it is given explicitly. In versions prior to 4.3, the only 15429 effect of explicitly including it is to disable warnings about 15430 using inline functions in C99 mode. 15431 15432`flatten' 15433 Generally, inlining into a function is limited. For a function 15434 marked with this attribute, every call inside this function will 15435 be inlined, if possible. Whether the function itself is 15436 considered for inlining depends on its size and the current 15437 inlining parameters. The `flatten' attribute only works reliably 15438 in unit-at-a-time mode. 15439 15440`cdecl' 15441 On the Intel 386, the `cdecl' attribute causes the compiler to 15442 assume that the calling function will pop off the stack space used 15443 to pass arguments. This is useful to override the effects of the 15444 `-mrtd' switch. 15445 15446`const' 15447 Many functions do not examine any values except their arguments, 15448 and have no effects except the return value. Basically this is 15449 just slightly more strict class than the `pure' attribute below, 15450 since function is not allowed to read global memory. 15451 15452 Note that a function that has pointer arguments and examines the 15453 data pointed to must _not_ be declared `const'. Likewise, a 15454 function that calls a non-`const' function usually must not be 15455 `const'. It does not make sense for a `const' function to return 15456 `void'. 15457 15458 The attribute `const' is not implemented in GCC versions earlier 15459 than 2.5. An alternative way to declare that a function has no 15460 side effects, which works in the current version and in some older 15461 versions, is as follows: 15462 15463 typedef int intfn (); 15464 15465 extern const intfn square; 15466 15467 This approach does not work in GNU C++ from 2.6.0 on, since the 15468 language specifies that the `const' must be attached to the return 15469 value. 15470 15471`constructor' 15472`destructor' 15473 The `constructor' attribute causes the function to be called 15474 automatically before execution enters `main ()'. Similarly, the 15475 `destructor' attribute causes the function to be called 15476 automatically after `main ()' has completed or `exit ()' has been 15477 called. Functions with these attributes are useful for 15478 initializing data that will be used implicitly during the 15479 execution of the program. 15480 15481 These attributes are not currently implemented for Objective-C. 15482 15483`deprecated' 15484 The `deprecated' attribute results in a warning if the function is 15485 used anywhere in the source file. This is useful when identifying 15486 functions that are expected to be removed in a future version of a 15487 program. The warning also includes the location of the declaration 15488 of the deprecated function, to enable users to easily find further 15489 information about why the function is deprecated, or what they 15490 should do instead. Note that the warnings only occurs for uses: 15491 15492 int old_fn () __attribute__ ((deprecated)); 15493 int old_fn (); 15494 int (*fn_ptr)() = old_fn; 15495 15496 results in a warning on line 3 but not line 2. 15497 15498 The `deprecated' attribute can also be used for variables and 15499 types (*note Variable Attributes::, *note Type Attributes::.) 15500 15501`dllexport' 15502 On Microsoft Windows targets and Symbian OS targets the 15503 `dllexport' attribute causes the compiler to provide a global 15504 pointer to a pointer in a DLL, so that it can be referenced with 15505 the `dllimport' attribute. On Microsoft Windows targets, the 15506 pointer name is formed by combining `_imp__' and the function or 15507 variable name. 15508 15509 You can use `__declspec(dllexport)' as a synonym for 15510 `__attribute__ ((dllexport))' for compatibility with other 15511 compilers. 15512 15513 On systems that support the `visibility' attribute, this attribute 15514 also implies "default" visibility, unless a `visibility' attribute 15515 is explicitly specified. You should avoid the use of `dllexport' 15516 with "hidden" or "internal" visibility; in the future GCC may 15517 issue an error for those cases. 15518 15519 Currently, the `dllexport' attribute is ignored for inlined 15520 functions, unless the `-fkeep-inline-functions' flag has been 15521 used. The attribute is also ignored for undefined symbols. 15522 15523 When applied to C++ classes, the attribute marks defined 15524 non-inlined member functions and static data members as exports. 15525 Static consts initialized in-class are not marked unless they are 15526 also defined out-of-class. 15527 15528 For Microsoft Windows targets there are alternative methods for 15529 including the symbol in the DLL's export table such as using a 15530 `.def' file with an `EXPORTS' section or, with GNU ld, using the 15531 `--export-all' linker flag. 15532 15533`dllimport' 15534 On Microsoft Windows and Symbian OS targets, the `dllimport' 15535 attribute causes the compiler to reference a function or variable 15536 via a global pointer to a pointer that is set up by the DLL 15537 exporting the symbol. The attribute implies `extern' storage. On 15538 Microsoft Windows targets, the pointer name is formed by combining 15539 `_imp__' and the function or variable name. 15540 15541 You can use `__declspec(dllimport)' as a synonym for 15542 `__attribute__ ((dllimport))' for compatibility with other 15543 compilers. 15544 15545 Currently, the attribute is ignored for inlined functions. If the 15546 attribute is applied to a symbol _definition_, an error is 15547 reported. If a symbol previously declared `dllimport' is later 15548 defined, the attribute is ignored in subsequent references, and a 15549 warning is emitted. The attribute is also overridden by a 15550 subsequent declaration as `dllexport'. 15551 15552 When applied to C++ classes, the attribute marks non-inlined 15553 member functions and static data members as imports. However, the 15554 attribute is ignored for virtual methods to allow creation of 15555 vtables using thunks. 15556 15557 On the SH Symbian OS target the `dllimport' attribute also has 15558 another affect--it can cause the vtable and run-time type 15559 information for a class to be exported. This happens when the 15560 class has a dllimport'ed constructor or a non-inline, non-pure 15561 virtual function and, for either of those two conditions, the 15562 class also has a inline constructor or destructor and has a key 15563 function that is defined in the current translation unit. 15564 15565 For Microsoft Windows based targets the use of the `dllimport' 15566 attribute on functions is not necessary, but provides a small 15567 performance benefit by eliminating a thunk in the DLL. The use of 15568 the `dllimport' attribute on imported variables was required on 15569 older versions of the GNU linker, but can now be avoided by 15570 passing the `--enable-auto-import' switch to the GNU linker. As 15571 with functions, using the attribute for a variable eliminates a 15572 thunk in the DLL. 15573 15574 One drawback to using this attribute is that a pointer to a 15575 function or variable marked as `dllimport' cannot be used as a 15576 constant address. On Microsoft Windows targets, the attribute can 15577 be disabled for functions by setting the `-mnop-fun-dllimport' 15578 flag. 15579 15580`eightbit_data' 15581 Use this attribute on the H8/300, H8/300H, and H8S to indicate 15582 that the specified variable should be placed into the eight bit 15583 data section. The compiler will generate more efficient code for 15584 certain operations on data in the eight bit data area. Note the 15585 eight bit data area is limited to 256 bytes of data. 15586 15587 You must use GAS and GLD from GNU binutils version 2.7 or later for 15588 this attribute to work correctly. 15589 15590`exception_handler' 15591 Use this attribute on the Blackfin to indicate that the specified 15592 function is an exception handler. The compiler will generate 15593 function entry and exit sequences suitable for use in an exception 15594 handler when this attribute is present. 15595 15596`far' 15597 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 15598 use a calling convention that takes care of switching memory banks 15599 when entering and leaving a function. This calling convention is 15600 also the default when using the `-mlong-calls' option. 15601 15602 On 68HC12 the compiler will use the `call' and `rtc' instructions 15603 to call and return from a function. 15604 15605 On 68HC11 the compiler will generate a sequence of instructions to 15606 invoke a board-specific routine to switch the memory bank and call 15607 the real function. The board-specific routine simulates a `call'. 15608 At the end of a function, it will jump to a board-specific routine 15609 instead of using `rts'. The board-specific return routine 15610 simulates the `rtc'. 15611 15612`fastcall' 15613 On the Intel 386, the `fastcall' attribute causes the compiler to 15614 pass the first argument (if of integral type) in the register ECX 15615 and the second argument (if of integral type) in the register EDX. 15616 Subsequent and other typed arguments are passed on the stack. 15617 The called function will pop the arguments off the stack. If the 15618 number of arguments is variable all arguments are pushed on the 15619 stack. 15620 15621`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 15622 The `format' attribute specifies that a function takes `printf', 15623 `scanf', `strftime' or `strfmon' style arguments which should be 15624 type-checked against a format string. For example, the 15625 declaration: 15626 15627 extern int 15628 my_printf (void *my_object, const char *my_format, ...) 15629 __attribute__ ((format (printf, 2, 3))); 15630 15631 causes the compiler to check the arguments in calls to `my_printf' 15632 for consistency with the `printf' style format string argument 15633 `my_format'. 15634 15635 The parameter ARCHETYPE determines how the format string is 15636 interpreted, and should be `printf', `scanf', `strftime' or 15637 `strfmon'. (You can also use `__printf__', `__scanf__', 15638 `__strftime__' or `__strfmon__'.) The parameter STRING-INDEX 15639 specifies which argument is the format string argument (starting 15640 from 1), while FIRST-TO-CHECK is the number of the first argument 15641 to check against the format string. For functions where the 15642 arguments are not available to be checked (such as `vprintf'), 15643 specify the third parameter as zero. In this case the compiler 15644 only checks the format string for consistency. For `strftime' 15645 formats, the third parameter is required to be zero. Since 15646 non-static C++ methods have an implicit `this' argument, the 15647 arguments of such methods should be counted from two, not one, when 15648 giving values for STRING-INDEX and FIRST-TO-CHECK. 15649 15650 In the example above, the format string (`my_format') is the second 15651 argument of the function `my_print', and the arguments to check 15652 start with the third argument, so the correct parameters for the 15653 format attribute are 2 and 3. 15654 15655 The `format' attribute allows you to identify your own functions 15656 which take format strings as arguments, so that GCC can check the 15657 calls to these functions for errors. The compiler always (unless 15658 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 15659 standard library functions `printf', `fprintf', `sprintf', 15660 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 15661 `vsprintf' whenever such warnings are requested (using 15662 `-Wformat'), so there is no need to modify the header file 15663 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 15664 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 15665 strictly conforming C standard modes, the X/Open function 15666 `strfmon' is also checked as are `printf_unlocked' and 15667 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 15668 Dialect Options. 15669 15670 The target may provide additional types of format checks. *Note 15671 Format Checks Specific to Particular Target Machines: Target 15672 Format Checks. 15673 15674`format_arg (STRING-INDEX)' 15675 The `format_arg' attribute specifies that a function takes a format 15676 string for a `printf', `scanf', `strftime' or `strfmon' style 15677 function and modifies it (for example, to translate it into 15678 another language), so the result can be passed to a `printf', 15679 `scanf', `strftime' or `strfmon' style function (with the 15680 remaining arguments to the format function the same as they would 15681 have been for the unmodified string). For example, the 15682 declaration: 15683 15684 extern char * 15685 my_dgettext (char *my_domain, const char *my_format) 15686 __attribute__ ((format_arg (2))); 15687 15688 causes the compiler to check the arguments in calls to a `printf', 15689 `scanf', `strftime' or `strfmon' type function, whose format 15690 string argument is a call to the `my_dgettext' function, for 15691 consistency with the format string argument `my_format'. If the 15692 `format_arg' attribute had not been specified, all the compiler 15693 could tell in such calls to format functions would be that the 15694 format string argument is not constant; this would generate a 15695 warning when `-Wformat-nonliteral' is used, but the calls could 15696 not be checked without the attribute. 15697 15698 The parameter STRING-INDEX specifies which argument is the format 15699 string argument (starting from one). Since non-static C++ methods 15700 have an implicit `this' argument, the arguments of such methods 15701 should be counted from two. 15702 15703 The `format-arg' attribute allows you to identify your own 15704 functions which modify format strings, so that GCC can check the 15705 calls to `printf', `scanf', `strftime' or `strfmon' type function 15706 whose operands are a call to one of your own function. The 15707 compiler always treats `gettext', `dgettext', and `dcgettext' in 15708 this manner except when strict ISO C support is requested by 15709 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 15710 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 15711 Dialect Options. 15712 15713`function_vector' 15714 Use this attribute on the H8/300, H8/300H, and H8S to indicate 15715 that the specified function should be called through the function 15716 vector. Calling a function through the function vector will 15717 reduce code size, however; the function vector has a limited size 15718 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 15719 and H8S) and shares space with the interrupt vector. 15720 15721 You must use GAS and GLD from GNU binutils version 2.7 or later for 15722 this attribute to work correctly. 15723 15724`interrupt' 15725 Use this attribute on the ARM, AVR, C4x, CRX, M32C, M32R/D, MS1, 15726 and Xstormy16 ports to indicate that the specified function is an 15727 interrupt handler. The compiler will generate function entry and 15728 exit sequences suitable for use in an interrupt handler when this 15729 attribute is present. 15730 15731 Note, interrupt handlers for the Blackfin, m68k, H8/300, H8/300H, 15732 H8S, and SH processors can be specified via the 15733 `interrupt_handler' attribute. 15734 15735 Note, on the AVR, interrupts will be enabled inside the function. 15736 15737 Note, for the ARM, you can specify the kind of interrupt to be 15738 handled by adding an optional parameter to the interrupt attribute 15739 like this: 15740 15741 void f () __attribute__ ((interrupt ("IRQ"))); 15742 15743 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 15744 and UNDEF. 15745 15746`interrupt_handler' 15747 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 15748 and SH to indicate that the specified function is an interrupt 15749 handler. The compiler will generate function entry and exit 15750 sequences suitable for use in an interrupt handler when this 15751 attribute is present. 15752 15753`kspisusp' 15754 When used together with `interrupt_handler', `exception_handler' 15755 or `nmi_handler', code will be generated to load the stack pointer 15756 from the USP register in the function prologue. 15757 15758`long_call/short_call' 15759 This attribute specifies how a particular function is called on 15760 ARM. Both attributes override the `-mlong-calls' (*note ARM 15761 Options::) command line switch and `#pragma long_calls' settings. 15762 The `long_call' attribute indicates that the function might be far 15763 away from the call site and require a different (more expensive) 15764 calling sequence. The `short_call' attribute always places the 15765 offset to the function from the call site into the `BL' 15766 instruction directly. 15767 15768`longcall/shortcall' 15769 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 15770 indicates that the function might be far away from the call site 15771 and require a different (more expensive) calling sequence. The 15772 `shortcall' attribute indicates that the function is always close 15773 enough for the shorter calling sequence to be used. These 15774 attributes override both the `-mlongcall' switch and, on the 15775 RS/6000 and PowerPC, the `#pragma longcall' setting. 15776 15777 *Note RS/6000 and PowerPC Options::, for more information on 15778 whether long calls are necessary. 15779 15780`long_call' 15781 This attribute specifies how a particular function is called on 15782 MIPS. The attribute overrides the `-mlong-calls' (*note MIPS 15783 Options::) command line switch. This attribute causes the 15784 compiler to always call the function by first loading its address 15785 into a register, and then using the contents of that register. 15786 15787`malloc' 15788 The `malloc' attribute is used to tell the compiler that a function 15789 may be treated as if any non-`NULL' pointer it returns cannot 15790 alias any other pointer valid when the function returns. This 15791 will often improve optimization. Standard functions with this 15792 property include `malloc' and `calloc'. `realloc'-like functions 15793 have this property as long as the old pointer is never referred to 15794 (including comparing it to the new pointer) after the function 15795 returns a non-`NULL' value. 15796 15797`model (MODEL-NAME)' 15798 On the M32R/D, use this attribute to set the addressability of an 15799 object, and of the code generated for a function. The identifier 15800 MODEL-NAME is one of `small', `medium', or `large', representing 15801 each of the code models. 15802 15803 Small model objects live in the lower 16MB of memory (so that their 15804 addresses can be loaded with the `ld24' instruction), and are 15805 callable with the `bl' instruction. 15806 15807 Medium model objects may live anywhere in the 32-bit address space 15808 (the compiler will generate `seth/add3' instructions to load their 15809 addresses), and are callable with the `bl' instruction. 15810 15811 Large model objects may live anywhere in the 32-bit address space 15812 (the compiler will generate `seth/add3' instructions to load their 15813 addresses), and may not be reachable with the `bl' instruction 15814 (the compiler will generate the much slower `seth/add3/jl' 15815 instruction sequence). 15816 15817 On IA-64, use this attribute to set the addressability of an 15818 object. At present, the only supported identifier for MODEL-NAME 15819 is `small', indicating addressability via "small" (22-bit) 15820 addresses (so that their addresses can be loaded with the `addl' 15821 instruction). Caveat: such addressing is by definition not 15822 position independent and hence this attribute must not be used for 15823 objects defined by shared libraries. 15824 15825`naked' 15826 Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate 15827 that the specified function does not need prologue/epilogue 15828 sequences generated by the compiler. It is up to the programmer 15829 to provide these sequences. 15830 15831`near' 15832 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 15833 use the normal calling convention based on `jsr' and `rts'. This 15834 attribute can be used to cancel the effect of the `-mlong-calls' 15835 option. 15836 15837`nesting' 15838 Use this attribute together with `interrupt_handler', 15839 `exception_handler' or `nmi_handler' to indicate that the function 15840 entry code should enable nested interrupts or exceptions. 15841 15842`nmi_handler' 15843 Use this attribute on the Blackfin to indicate that the specified 15844 function is an NMI handler. The compiler will generate function 15845 entry and exit sequences suitable for use in an NMI handler when 15846 this attribute is present. 15847 15848`no_instrument_function' 15849 If `-finstrument-functions' is given, profiling function calls will 15850 be generated at entry and exit of most user-compiled functions. 15851 Functions with this attribute will not be so instrumented. 15852 15853`noinline' 15854 This function attribute prevents a function from being considered 15855 for inlining. 15856 15857`nonnull (ARG-INDEX, ...)' 15858 The `nonnull' attribute specifies that some function parameters 15859 should be non-null pointers. For instance, the declaration: 15860 15861 extern void * 15862 my_memcpy (void *dest, const void *src, size_t len) 15863 __attribute__((nonnull (1, 2))); 15864 15865 causes the compiler to check that, in calls to `my_memcpy', 15866 arguments DEST and SRC are non-null. If the compiler determines 15867 that a null pointer is passed in an argument slot marked as 15868 non-null, and the `-Wnonnull' option is enabled, a warning is 15869 issued. The compiler may also choose to make optimizations based 15870 on the knowledge that certain function arguments will not be null. 15871 15872 If no argument index list is given to the `nonnull' attribute, all 15873 pointer arguments are marked as non-null. To illustrate, the 15874 following declaration is equivalent to the previous example: 15875 15876 extern void * 15877 my_memcpy (void *dest, const void *src, size_t len) 15878 __attribute__((nonnull)); 15879 15880`noreturn' 15881 A few standard library functions, such as `abort' and `exit', 15882 cannot return. GCC knows this automatically. Some programs define 15883 their own functions that never return. You can declare them 15884 `noreturn' to tell the compiler this fact. For example, 15885 15886 void fatal () __attribute__ ((noreturn)); 15887 15888 void 15889 fatal (/* ... */) 15890 { 15891 /* ... */ /* Print error message. */ /* ... */ 15892 exit (1); 15893 } 15894 15895 The `noreturn' keyword tells the compiler to assume that `fatal' 15896 cannot return. It can then optimize without regard to what would 15897 happen if `fatal' ever did return. This makes slightly better 15898 code. More importantly, it helps avoid spurious warnings of 15899 uninitialized variables. 15900 15901 The `noreturn' keyword does not affect the exceptional path when 15902 that applies: a `noreturn'-marked function may still return to the 15903 caller by throwing an exception or calling `longjmp'. 15904 15905 Do not assume that registers saved by the calling function are 15906 restored before calling the `noreturn' function. 15907 15908 It does not make sense for a `noreturn' function to have a return 15909 type other than `void'. 15910 15911 The attribute `noreturn' is not implemented in GCC versions 15912 earlier than 2.5. An alternative way to declare that a function 15913 does not return, which works in the current version and in some 15914 older versions, is as follows: 15915 15916 typedef void voidfn (); 15917 15918 volatile voidfn fatal; 15919 15920 This approach does not work in GNU C++. 15921 15922`nothrow' 15923 The `nothrow' attribute is used to inform the compiler that a 15924 function cannot throw an exception. For example, most functions in 15925 the standard C library can be guaranteed not to throw an exception 15926 with the notable exceptions of `qsort' and `bsearch' that take 15927 function pointer arguments. The `nothrow' attribute is not 15928 implemented in GCC versions earlier than 3.3. 15929 15930`pure' 15931 Many functions have no effects except the return value and their 15932 return value depends only on the parameters and/or global 15933 variables. Such a function can be subject to common subexpression 15934 elimination and loop optimization just as an arithmetic operator 15935 would be. These functions should be declared with the attribute 15936 `pure'. For example, 15937 15938 int square (int) __attribute__ ((pure)); 15939 15940 says that the hypothetical function `square' is safe to call fewer 15941 times than the program says. 15942 15943 Some of common examples of pure functions are `strlen' or `memcmp'. 15944 Interesting non-pure functions are functions with infinite loops 15945 or those depending on volatile memory or other system resource, 15946 that may change between two consecutive calls (such as `feof' in a 15947 multithreading environment). 15948 15949 The attribute `pure' is not implemented in GCC versions earlier 15950 than 2.96. 15951 15952`regparm (NUMBER)' 15953 On the Intel 386, the `regparm' attribute causes the compiler to 15954 pass arguments number one to NUMBER if they are of integral type 15955 in registers EAX, EDX, and ECX instead of on the stack. Functions 15956 that take a variable number of arguments will continue to be 15957 passed all of their arguments on the stack. 15958 15959 Beware that on some ELF systems this attribute is unsuitable for 15960 global functions in shared libraries with lazy binding (which is 15961 the default). Lazy binding will send the first call via resolving 15962 code in the loader, which might assume EAX, EDX and ECX can be 15963 clobbered, as per the standard calling conventions. Solaris 8 is 15964 affected by this. GNU systems with GLIBC 2.1 or higher, and 15965 FreeBSD, are believed to be safe since the loaders there save all 15966 registers. (Lazy binding can be disabled with the linker or the 15967 loader if desired, to avoid the problem.) 15968 15969`sseregparm' 15970 On the Intel 386 with SSE support, the `sseregparm' attribute 15971 causes the compiler to pass up to 3 floating point arguments in 15972 SSE registers instead of on the stack. Functions that take a 15973 variable number of arguments will continue to pass all of their 15974 floating point arguments on the stack. 15975 15976`force_align_arg_pointer' 15977 On the Intel x86, the `force_align_arg_pointer' attribute may be 15978 applied to individual function definitions, generating an alternate 15979 prologue and epilogue that realigns the runtime stack. This 15980 supports mixing legacy codes that run with a 4-byte aligned stack 15981 with modern codes that keep a 16-byte stack for SSE compatibility. 15982 The alternate prologue and epilogue are slower and bigger than 15983 the regular ones, and the alternate prologue requires a scratch 15984 register; this lowers the number of registers available if used in 15985 conjunction with the `regparm' attribute. The 15986 `force_align_arg_pointer' attribute is incompatible with nested 15987 functions; this is considered a hard error. 15988 15989`returns_twice' 15990 The `returns_twice' attribute tells the compiler that a function 15991 may return more than one time. The compiler will ensure that all 15992 registers are dead before calling such a function and will emit a 15993 warning about the variables that may be clobbered after the second 15994 return from the function. Examples of such functions are `setjmp' 15995 and `vfork'. The `longjmp'-like counterpart of such function, if 15996 any, might need to be marked with the `noreturn' attribute. 15997 15998`saveall' 15999 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 16000 indicate that all registers except the stack pointer should be 16001 saved in the prologue regardless of whether they are used or not. 16002 16003`section ("SECTION-NAME")' 16004 Normally, the compiler places the code it generates in the `text' 16005 section. Sometimes, however, you need additional sections, or you 16006 need certain particular functions to appear in special sections. 16007 The `section' attribute specifies that a function lives in a 16008 particular section. For example, the declaration: 16009 16010 extern void foobar (void) __attribute__ ((section ("bar"))); 16011 16012 puts the function `foobar' in the `bar' section. 16013 16014 Some file formats do not support arbitrary sections so the 16015 `section' attribute is not available on all platforms. If you 16016 need to map the entire contents of a module to a particular 16017 section, consider using the facilities of the linker instead. 16018 16019`sentinel' 16020 This function attribute ensures that a parameter in a function 16021 call is an explicit `NULL'. The attribute is only valid on 16022 variadic functions. By default, the sentinel is located at 16023 position zero, the last parameter of the function call. If an 16024 optional integer position argument P is supplied to the attribute, 16025 the sentinel must be located at position P counting backwards from 16026 the end of the argument list. 16027 16028 __attribute__ ((sentinel)) 16029 is equivalent to 16030 __attribute__ ((sentinel(0))) 16031 16032 The attribute is automatically set with a position of 0 for the 16033 built-in functions `execl' and `execlp'. The built-in function 16034 `execle' has the attribute set with a position of 1. 16035 16036 A valid `NULL' in this context is defined as zero with any pointer 16037 type. If your system defines the `NULL' macro with an integer type 16038 then you need to add an explicit cast. GCC replaces `stddef.h' 16039 with a copy that redefines NULL appropriately. 16040 16041 The warnings for missing or incorrect sentinels are enabled with 16042 `-Wformat'. 16043 16044`short_call' 16045 See long_call/short_call. 16046 16047`shortcall' 16048 See longcall/shortcall. 16049 16050`signal' 16051 Use this attribute on the AVR to indicate that the specified 16052 function is a signal handler. The compiler will generate function 16053 entry and exit sequences suitable for use in a signal handler when 16054 this attribute is present. Interrupts will be disabled inside the 16055 function. 16056 16057`sp_switch' 16058 Use this attribute on the SH to indicate an `interrupt_handler' 16059 function should switch to an alternate stack. It expects a string 16060 argument that names a global variable holding the address of the 16061 alternate stack. 16062 16063 void *alt_stack; 16064 void f () __attribute__ ((interrupt_handler, 16065 sp_switch ("alt_stack"))); 16066 16067`stdcall' 16068 On the Intel 386, the `stdcall' attribute causes the compiler to 16069 assume that the called function will pop off the stack space used 16070 to pass arguments, unless it takes a variable number of arguments. 16071 16072`tiny_data' 16073 Use this attribute on the H8/300H and H8S to indicate that the 16074 specified variable should be placed into the tiny data section. 16075 The compiler will generate more efficient code for loads and stores 16076 on data in the tiny data section. Note the tiny data area is 16077 limited to slightly under 32kbytes of data. 16078 16079`trap_exit' 16080 Use this attribute on the SH for an `interrupt_handler' to return 16081 using `trapa' instead of `rte'. This attribute expects an integer 16082 argument specifying the trap number to be used. 16083 16084`unused' 16085 This attribute, attached to a function, means that the function is 16086 meant to be possibly unused. GCC will not produce a warning for 16087 this function. 16088 16089`used' 16090 This attribute, attached to a function, means that code must be 16091 emitted for the function even if it appears that the function is 16092 not referenced. This is useful, for example, when the function is 16093 referenced only in inline assembly. 16094 16095`visibility ("VISIBILITY_TYPE")' 16096 This attribute affects the linkage of the declaration to which it 16097 is attached. There are four supported VISIBILITY_TYPE values: 16098 default, hidden, protected or internal visibility. 16099 16100 void __attribute__ ((visibility ("protected"))) 16101 f () { /* Do something. */; } 16102 int i __attribute__ ((visibility ("hidden"))); 16103 16104 The possible values of VISIBILITY_TYPE correspond to the 16105 visibility settings in the ELF gABI. 16106 16107 "default" 16108 Default visibility is the normal case for the object file 16109 format. This value is available for the visibility attribute 16110 to override other options that may change the assumed 16111 visibility of entities. 16112 16113 On ELF, default visibility means that the declaration is 16114 visible to other modules and, in shared libraries, means that 16115 the declared entity may be overridden. 16116 16117 On Darwin, default visibility means that the declaration is 16118 visible to other modules. 16119 16120 Default visibility corresponds to "external linkage" in the 16121 language. 16122 16123 "hidden" 16124 Hidden visibility indicates that the entity declared will 16125 have a new form of linkage, which we'll call "hidden 16126 linkage". Two declarations of an object with hidden linkage 16127 refer to the same object if they are in the same shared 16128 object. 16129 16130 "internal" 16131 Internal visibility is like hidden visibility, but with 16132 additional processor specific semantics. Unless otherwise 16133 specified by the psABI, GCC defines internal visibility to 16134 mean that a function is _never_ called from another module. 16135 Compare this with hidden functions which, while they cannot 16136 be referenced directly by other modules, can be referenced 16137 indirectly via function pointers. By indicating that a 16138 function cannot be called from outside the module, GCC may 16139 for instance omit the load of a PIC register since it is known 16140 that the calling function loaded the correct value. 16141 16142 "protected" 16143 Protected visibility is like default visibility except that it 16144 indicates that references within the defining module will 16145 bind to the definition in that module. That is, the declared 16146 entity cannot be overridden by another module. 16147 16148 16149 All visibilities are supported on many, but not all, ELF targets 16150 (supported when the assembler supports the `.visibility' 16151 pseudo-op). Default visibility is supported everywhere. Hidden 16152 visibility is supported on Darwin targets. 16153 16154 The visibility attribute should be applied only to declarations 16155 which would otherwise have external linkage. The attribute should 16156 be applied consistently, so that the same entity should not be 16157 declared with different settings of the attribute. 16158 16159 In C++, the visibility attribute applies to types as well as 16160 functions and objects, because in C++ types have linkage. A class 16161 must not have greater visibility than its non-static data member 16162 types and bases, and class members default to the visibility of 16163 their class. Also, a declaration without explicit visibility is 16164 limited to the visibility of its type. 16165 16166 In C++, you can mark member functions and static member variables 16167 of a class with the visibility attribute. This is useful if if 16168 you know a particular method or static member variable should only 16169 be used from one shared object; then you can mark it hidden while 16170 the rest of the class has default visibility. Care must be taken 16171 to avoid breaking the One Definition Rule; for example, it is 16172 usually not useful to mark an inline method as hidden without 16173 marking the whole class as hidden. 16174 16175 A C++ namespace declaration can also have the visibility attribute. 16176 This attribute applies only to the particular namespace body, not 16177 to other definitions of the same namespace; it is equivalent to 16178 using `#pragma GCC visibility' before and after the namespace 16179 definition (*note Visibility Pragmas::). 16180 16181 In C++, if a template argument has limited visibility, this 16182 restriction is implicitly propagated to the template instantiation. 16183 Otherwise, template instantiations and specializations default to 16184 the visibility of their template. 16185 16186 If both the template and enclosing class have explicit visibility, 16187 the visibility from the template is used. 16188 16189`warn_unused_result' 16190 The `warn_unused_result' attribute causes a warning to be emitted 16191 if a caller of the function with this attribute does not use its 16192 return value. This is useful for functions where not checking the 16193 result is either a security problem or always a bug, such as 16194 `realloc'. 16195 16196 int fn () __attribute__ ((warn_unused_result)); 16197 int foo () 16198 { 16199 if (fn () < 0) return -1; 16200 fn (); 16201 return 0; 16202 } 16203 16204 results in warning on line 5. 16205 16206`weak' 16207 The `weak' attribute causes the declaration to be emitted as a weak 16208 symbol rather than a global. This is primarily useful in defining 16209 library functions which can be overridden in user code, though it 16210 can also be used with non-function declarations. Weak symbols are 16211 supported for ELF targets, and also for a.out targets when using 16212 the GNU assembler and linker. 16213 16214`weakref' 16215`weakref ("TARGET")' 16216 The `weakref' attribute marks a declaration as a weak reference. 16217 Without arguments, it should be accompanied by an `alias' attribute 16218 naming the target symbol. Optionally, the TARGET may be given as 16219 an argument to `weakref' itself. In either case, `weakref' 16220 implicitly marks the declaration as `weak'. Without a TARGET, 16221 given as an argument to `weakref' or to `alias', `weakref' is 16222 equivalent to `weak'. 16223 16224 static int x() __attribute__ ((weakref ("y"))); 16225 /* is equivalent to... */ 16226 static int x() __attribute__ ((weak, weakref, alias ("y"))); 16227 /* and to... */ 16228 static int x() __attribute__ ((weakref)); 16229 static int x() __attribute__ ((alias ("y"))); 16230 16231 A weak reference is an alias that does not by itself require a 16232 definition to be given for the target symbol. If the target 16233 symbol is only referenced through weak references, then the 16234 becomes a `weak' undefined symbol. If it is directly referenced, 16235 however, then such strong references prevail, and a definition 16236 will be required for the symbol, not necessarily in the same 16237 translation unit. 16238 16239 The effect is equivalent to moving all references to the alias to a 16240 separate translation unit, renaming the alias to the aliased 16241 symbol, declaring it as weak, compiling the two separate 16242 translation units and performing a reloadable link on them. 16243 16244 At present, a declaration to which `weakref' is attached can only 16245 be `static'. 16246 16247`externally_visible' 16248 This attribute, attached to a global variable or function nullify 16249 effect of `-fwhole-program' command line option, so the object 16250 remain visible outside the current compilation unit 16251 16252 16253 You can specify multiple attributes in a declaration by separating them 16254by commas within the double parentheses or by immediately following an 16255attribute declaration with another attribute declaration. 16256 16257 Some people object to the `__attribute__' feature, suggesting that ISO 16258C's `#pragma' should be used instead. At the time `__attribute__' was 16259designed, there were two reasons for not doing this. 16260 16261 1. It is impossible to generate `#pragma' commands from a macro. 16262 16263 2. There is no telling what the same `#pragma' might mean in another 16264 compiler. 16265 16266 These two reasons applied to almost any application that might have 16267been proposed for `#pragma'. It was basically a mistake to use 16268`#pragma' for _anything_. 16269 16270 The ISO C99 standard includes `_Pragma', which now allows pragmas to 16271be generated from macros. In addition, a `#pragma GCC' namespace is 16272now in use for GCC-specific pragmas. However, it has been found 16273convenient to use `__attribute__' to achieve a natural attachment of 16274attributes to their corresponding declarations, whereas `#pragma GCC' 16275is of use for constructs that do not naturally form part of the 16276grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 16277Directives. 16278 16279 16280File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 16281 162825.26 Attribute Syntax 16283===================== 16284 16285This section describes the syntax with which `__attribute__' may be 16286used, and the constructs to which attribute specifiers bind, for the C 16287language. Some details may vary for C++ and Objective-C. Because of 16288infelicities in the grammar for attributes, some forms described here 16289may not be successfully parsed in all cases. 16290 16291 There are some problems with the semantics of attributes in C++. For 16292example, there are no manglings for attributes, although they may affect 16293code generation, so problems may arise when attributed types are used in 16294conjunction with templates or overloading. Similarly, `typeid' does 16295not distinguish between types with different attributes. Support for 16296attributes in C++ may be restricted in future to attributes on 16297declarations only, but not on nested declarators. 16298 16299 *Note Function Attributes::, for details of the semantics of attributes 16300applying to functions. *Note Variable Attributes::, for details of the 16301semantics of attributes applying to variables. *Note Type Attributes::, 16302for details of the semantics of attributes applying to structure, union 16303and enumerated types. 16304 16305 An "attribute specifier" is of the form `__attribute__ 16306((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 16307comma-separated sequence of "attributes", where each attribute is one 16308of the following: 16309 16310 * Empty. Empty attributes are ignored. 16311 16312 * A word (which may be an identifier such as `unused', or a reserved 16313 word such as `const'). 16314 16315 * A word, followed by, in parentheses, parameters for the attribute. 16316 These parameters take one of the following forms: 16317 16318 * An identifier. For example, `mode' attributes use this form. 16319 16320 * An identifier followed by a comma and a non-empty 16321 comma-separated list of expressions. For example, `format' 16322 attributes use this form. 16323 16324 * A possibly empty comma-separated list of expressions. For 16325 example, `format_arg' attributes use this form with the list 16326 being a single integer constant expression, and `alias' 16327 attributes use this form with the list being a single string 16328 constant. 16329 16330 An "attribute specifier list" is a sequence of one or more attribute 16331specifiers, not separated by any other tokens. 16332 16333 In GNU C, an attribute specifier list may appear after the colon 16334following a label, other than a `case' or `default' label. The only 16335attribute it makes sense to use after a label is `unused'. This 16336feature is intended for code generated by programs which contains labels 16337that may be unused but which is compiled with `-Wall'. It would not 16338normally be appropriate to use in it human-written code, though it 16339could be useful in cases where the code that jumps to the label is 16340contained within an `#ifdef' conditional. GNU C++ does not permit such 16341placement of attribute lists, as it is permissible for a declaration, 16342which could begin with an attribute list, to be labelled in C++. 16343Declarations cannot be labelled in C90 or C99, so the ambiguity does 16344not arise there. 16345 16346 An attribute specifier list may appear as part of a `struct', `union' 16347or `enum' specifier. It may go either immediately after the `struct', 16348`union' or `enum' keyword, or after the closing brace. The former 16349syntax is preferred. Where attribute specifiers follow the closing 16350brace, they are considered to relate to the structure, union or 16351enumerated type defined, not to any enclosing declaration the type 16352specifier appears in, and the type defined is not complete until after 16353the attribute specifiers. 16354 16355 Otherwise, an attribute specifier appears as part of a declaration, 16356counting declarations of unnamed parameters and type names, and relates 16357to that declaration (which may be nested in another declaration, for 16358example in the case of a parameter declaration), or to a particular 16359declarator within a declaration. Where an attribute specifier is 16360applied to a parameter declared as a function or an array, it should 16361apply to the function or array rather than the pointer to which the 16362parameter is implicitly converted, but this is not yet correctly 16363implemented. 16364 16365 Any list of specifiers and qualifiers at the start of a declaration may 16366contain attribute specifiers, whether or not such a list may in that 16367context contain storage class specifiers. (Some attributes, however, 16368are essentially in the nature of storage class specifiers, and only make 16369sense where storage class specifiers may be used; for example, 16370`section'.) There is one necessary limitation to this syntax: the 16371first old-style parameter declaration in a function definition cannot 16372begin with an attribute specifier, because such an attribute applies to 16373the function instead by syntax described below (which, however, is not 16374yet implemented in this case). In some other cases, attribute 16375specifiers are permitted by this grammar but not yet supported by the 16376compiler. All attribute specifiers in this place relate to the 16377declaration as a whole. In the obsolescent usage where a type of `int' 16378is implied by the absence of type specifiers, such a list of specifiers 16379and qualifiers may be an attribute specifier list with no other 16380specifiers or qualifiers. 16381 16382 At present, the first parameter in a function prototype must have some 16383type specifier which is not an attribute specifier; this resolves an 16384ambiguity in the interpretation of `void f(int (__attribute__((foo)) 16385x))', but is subject to change. At present, if the parentheses of a 16386function declarator contain only attributes then those attributes are 16387ignored, rather than yielding an error or warning or implying a single 16388parameter of type int, but this is subject to change. 16389 16390 An attribute specifier list may appear immediately before a declarator 16391(other than the first) in a comma-separated list of declarators in a 16392declaration of more than one identifier using a single list of 16393specifiers and qualifiers. Such attribute specifiers apply only to the 16394identifier before whose declarator they appear. For example, in 16395 16396 __attribute__((noreturn)) void d0 (void), 16397 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 16398 d2 (void) 16399 16400the `noreturn' attribute applies to all the functions declared; the 16401`format' attribute only applies to `d1'. 16402 16403 An attribute specifier list may appear immediately before the comma, 16404`=' or semicolon terminating the declaration of an identifier other 16405than a function definition. At present, such attribute specifiers apply 16406to the declared object or function, but in future they may attach to the 16407outermost adjacent declarator. In simple cases there is no difference, 16408but, for example, in 16409 16410 void (****f)(void) __attribute__((noreturn)); 16411 16412at present the `noreturn' attribute applies to `f', which causes a 16413warning since `f' is not a function, but in future it may apply to the 16414function `****f'. The precise semantics of what attributes in such 16415cases will apply to are not yet specified. Where an assembler name for 16416an object or function is specified (*note Asm Labels::), at present the 16417attribute must follow the `asm' specification; in future, attributes 16418before the `asm' specification may apply to the adjacent declarator, 16419and those after it to the declared object or function. 16420 16421 An attribute specifier list may, in future, be permitted to appear 16422after the declarator in a function definition (before any old-style 16423parameter declarations or the function body). 16424 16425 Attribute specifiers may be mixed with type qualifiers appearing inside 16426the `[]' of a parameter array declarator, in the C99 construct by which 16427such qualifiers are applied to the pointer to which the array is 16428implicitly converted. Such attribute specifiers apply to the pointer, 16429not to the array, but at present this is not implemented and they are 16430ignored. 16431 16432 An attribute specifier list may appear at the start of a nested 16433declarator. At present, there are some limitations in this usage: the 16434attributes correctly apply to the declarator, but for most individual 16435attributes the semantics this implies are not implemented. When 16436attribute specifiers follow the `*' of a pointer declarator, they may 16437be mixed with any type qualifiers present. The following describes the 16438formal semantics of this syntax. It will make the most sense if you 16439are familiar with the formal specification of declarators in the ISO C 16440standard. 16441 16442 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 16443where `T' contains declaration specifiers that specify a type TYPE 16444(such as `int') and `D1' is a declarator that contains an identifier 16445IDENT. The type specified for IDENT for derived declarators whose type 16446does not include an attribute specifier is as in the ISO C standard. 16447 16448 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 16449declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 16450TYPE" for IDENT, then `T D1' specifies the type 16451"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 16452 16453 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 16454D', and the declaration `T D' specifies the type 16455"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 16456the type "DERIVED-DECLARATOR-TYPE-LIST 16457TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 16458 16459 For example, 16460 16461 void (__attribute__((noreturn)) ****f) (void); 16462 16463specifies the type "pointer to pointer to pointer to pointer to 16464non-returning function returning `void'". As another example, 16465 16466 char *__attribute__((aligned(8))) *f; 16467 16468specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 16469again that this does not work with most attributes; for example, the 16470usage of `aligned' and `noreturn' attributes given above is not yet 16471supported. 16472 16473 For compatibility with existing code written for compiler versions that 16474did not implement attributes on nested declarators, some laxity is 16475allowed in the placing of attributes. If an attribute that only applies 16476to types is applied to a declaration, it will be treated as applying to 16477the type of that declaration. If an attribute that only applies to 16478declarations is applied to the type of a declaration, it will be treated 16479as applying to that declaration; and, for compatibility with code 16480placing the attributes immediately before the identifier declared, such 16481an attribute applied to a function return type will be treated as 16482applying to the function type, and such an attribute applied to an array 16483element type will be treated as applying to the array type. If an 16484attribute that only applies to function types is applied to a 16485pointer-to-function type, it will be treated as applying to the pointer 16486target type; if such an attribute is applied to a function return type 16487that is not a pointer-to-function type, it will be treated as applying 16488to the function type. 16489 16490 16491File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 16492 164935.27 Prototypes and Old-Style Function Definitions 16494================================================== 16495 16496GNU C extends ISO C to allow a function prototype to override a later 16497old-style non-prototype definition. Consider the following example: 16498 16499 /* Use prototypes unless the compiler is old-fashioned. */ 16500 #ifdef __STDC__ 16501 #define P(x) x 16502 #else 16503 #define P(x) () 16504 #endif 16505 16506 /* Prototype function declaration. */ 16507 int isroot P((uid_t)); 16508 16509 /* Old-style function definition. */ 16510 int 16511 isroot (x) /* ??? lossage here ??? */ 16512 uid_t x; 16513 { 16514 return x == 0; 16515 } 16516 16517 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 16518this example, because subword arguments in old-style non-prototype 16519definitions are promoted. Therefore in this example the function 16520definition's argument is really an `int', which does not match the 16521prototype argument type of `short'. 16522 16523 This restriction of ISO C makes it hard to write code that is portable 16524to traditional C compilers, because the programmer does not know 16525whether the `uid_t' type is `short', `int', or `long'. Therefore, in 16526cases like these GNU C allows a prototype to override a later old-style 16527definition. More precisely, in GNU C, a function prototype argument 16528type overrides the argument type specified by a later old-style 16529definition if the former type is the same as the latter type before 16530promotion. Thus in GNU C the above example is equivalent to the 16531following: 16532 16533 int isroot (uid_t); 16534 16535 int 16536 isroot (uid_t x) 16537 { 16538 return x == 0; 16539 } 16540 16541GNU C++ does not support old-style function definitions, so this 16542extension is irrelevant. 16543 16544 16545File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 16546 165475.28 C++ Style Comments 16548======================= 16549 16550In GNU C, you may use C++ style comments, which start with `//' and 16551continue until the end of the line. Many other C implementations allow 16552such comments, and they are included in the 1999 C standard. However, 16553C++ style comments are not recognized if you specify an `-std' option 16554specifying a version of ISO C before C99, or `-ansi' (equivalent to 16555`-std=c89'). 16556 16557 16558File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 16559 165605.29 Dollar Signs in Identifier Names 16561===================================== 16562 16563In GNU C, you may normally use dollar signs in identifier names. This 16564is because many traditional C implementations allow such identifiers. 16565However, dollar signs in identifiers are not supported on a few target 16566machines, typically because the target assembler does not allow them. 16567 16568 16569File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 16570 165715.30 The Character <ESC> in Constants 16572===================================== 16573 16574You can use the sequence `\e' in a string or character constant to 16575stand for the ASCII character <ESC>. 16576 16577 16578File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 16579 165805.31 Inquiring on Alignment of Types or Variables 16581================================================= 16582 16583The keyword `__alignof__' allows you to inquire about how an object is 16584aligned, or the minimum alignment usually required by a type. Its 16585syntax is just like `sizeof'. 16586 16587 For example, if the target machine requires a `double' value to be 16588aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 16589is true on many RISC machines. On more traditional machine designs, 16590`__alignof__ (double)' is 4 or even 2. 16591 16592 Some machines never actually require alignment; they allow reference 16593to any data type even at an odd address. For these machines, 16594`__alignof__' reports the _recommended_ alignment of a type. 16595 16596 If the operand of `__alignof__' is an lvalue rather than a type, its 16597value is the required alignment for its type, taking into account any 16598minimum alignment specified with GCC's `__attribute__' extension (*note 16599Variable Attributes::). For example, after this declaration: 16600 16601 struct foo { int x; char y; } foo1; 16602 16603the value of `__alignof__ (foo1.y)' is 1, even though its actual 16604alignment is probably 2 or 4, the same as `__alignof__ (int)'. 16605 16606 It is an error to ask for the alignment of an incomplete type. 16607 16608 16609File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 16610 166115.32 Specifying Attributes of Variables 16612======================================= 16613 16614The keyword `__attribute__' allows you to specify special attributes of 16615variables or structure fields. This keyword is followed by an 16616attribute specification inside double parentheses. Some attributes are 16617currently defined generically for variables. Other attributes are 16618defined for variables on particular target systems. Other attributes 16619are available for functions (*note Function Attributes::) and for types 16620(*note Type Attributes::). Other front ends might define more 16621attributes (*note Extensions to the C++ Language: C++ Extensions.). 16622 16623 You may also specify attributes with `__' preceding and following each 16624keyword. This allows you to use them in header files without being 16625concerned about a possible macro of the same name. For example, you 16626may use `__aligned__' instead of `aligned'. 16627 16628 *Note Attribute Syntax::, for details of the exact syntax for using 16629attributes. 16630 16631`aligned (ALIGNMENT)' 16632 This attribute specifies a minimum alignment for the variable or 16633 structure field, measured in bytes. For example, the declaration: 16634 16635 int x __attribute__ ((aligned (16))) = 0; 16636 16637 causes the compiler to allocate the global variable `x' on a 16638 16-byte boundary. On a 68040, this could be used in conjunction 16639 with an `asm' expression to access the `move16' instruction which 16640 requires 16-byte aligned operands. 16641 16642 You can also specify the alignment of structure fields. For 16643 example, to create a double-word aligned `int' pair, you could 16644 write: 16645 16646 struct foo { int x[2] __attribute__ ((aligned (8))); }; 16647 16648 This is an alternative to creating a union with a `double' member 16649 that forces the union to be double-word aligned. 16650 16651 As in the preceding examples, you can explicitly specify the 16652 alignment (in bytes) that you wish the compiler to use for a given 16653 variable or structure field. Alternatively, you can leave out the 16654 alignment factor and just ask the compiler to align a variable or 16655 field to the maximum useful alignment for the target machine you 16656 are compiling for. For example, you could write: 16657 16658 short array[3] __attribute__ ((aligned)); 16659 16660 Whenever you leave out the alignment factor in an `aligned' 16661 attribute specification, the compiler automatically sets the 16662 alignment for the declared variable or field to the largest 16663 alignment which is ever used for any data type on the target 16664 machine you are compiling for. Doing this can often make copy 16665 operations more efficient, because the compiler can use whatever 16666 instructions copy the biggest chunks of memory when performing 16667 copies to or from the variables or fields that you have aligned 16668 this way. 16669 16670 The `aligned' attribute can only increase the alignment; but you 16671 can decrease it by specifying `packed' as well. See below. 16672 16673 Note that the effectiveness of `aligned' attributes may be limited 16674 by inherent limitations in your linker. On many systems, the 16675 linker is only able to arrange for variables to be aligned up to a 16676 certain maximum alignment. (For some linkers, the maximum 16677 supported alignment may be very very small.) If your linker is 16678 only able to align variables up to a maximum of 8 byte alignment, 16679 then specifying `aligned(16)' in an `__attribute__' will still 16680 only provide you with 8 byte alignment. See your linker 16681 documentation for further information. 16682 16683`cleanup (CLEANUP_FUNCTION)' 16684 The `cleanup' attribute runs a function when the variable goes out 16685 of scope. This attribute can only be applied to auto function 16686 scope variables; it may not be applied to parameters or variables 16687 with static storage duration. The function must take one 16688 parameter, a pointer to a type compatible with the variable. The 16689 return value of the function (if any) is ignored. 16690 16691 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 16692 during the stack unwinding that happens during the processing of 16693 the exception. Note that the `cleanup' attribute does not allow 16694 the exception to be caught, only to perform an action. It is 16695 undefined what happens if CLEANUP_FUNCTION does not return 16696 normally. 16697 16698`common' 16699`nocommon' 16700 The `common' attribute requests GCC to place a variable in 16701 "common" storage. The `nocommon' attribute requests the 16702 opposite--to allocate space for it directly. 16703 16704 These attributes override the default chosen by the `-fno-common' 16705 and `-fcommon' flags respectively. 16706 16707`deprecated' 16708 The `deprecated' attribute results in a warning if the variable is 16709 used anywhere in the source file. This is useful when identifying 16710 variables that are expected to be removed in a future version of a 16711 program. The warning also includes the location of the declaration 16712 of the deprecated variable, to enable users to easily find further 16713 information about why the variable is deprecated, or what they 16714 should do instead. Note that the warning only occurs for uses: 16715 16716 extern int old_var __attribute__ ((deprecated)); 16717 extern int old_var; 16718 int new_fn () { return old_var; } 16719 16720 results in a warning on line 3 but not line 2. 16721 16722 The `deprecated' attribute can also be used for functions and 16723 types (*note Function Attributes::, *note Type Attributes::.) 16724 16725`mode (MODE)' 16726 This attribute specifies the data type for the 16727 declaration--whichever type corresponds to the mode MODE. This in 16728 effect lets you request an integer or floating point type 16729 according to its width. 16730 16731 You may also specify a mode of `byte' or `__byte__' to indicate 16732 the mode corresponding to a one-byte integer, `word' or `__word__' 16733 for the mode of a one-word integer, and `pointer' or `__pointer__' 16734 for the mode used to represent pointers. 16735 16736`packed' 16737 The `packed' attribute specifies that a variable or structure field 16738 should have the smallest possible alignment--one byte for a 16739 variable, and one bit for a field, unless you specify a larger 16740 value with the `aligned' attribute. 16741 16742 Here is a structure in which the field `x' is packed, so that it 16743 immediately follows `a': 16744 16745 struct foo 16746 { 16747 char a; 16748 int x[2] __attribute__ ((packed)); 16749 }; 16750 16751`section ("SECTION-NAME")' 16752 Normally, the compiler places the objects it generates in sections 16753 like `data' and `bss'. Sometimes, however, you need additional 16754 sections, or you need certain particular variables to appear in 16755 special sections, for example to map to special hardware. The 16756 `section' attribute specifies that a variable (or function) lives 16757 in a particular section. For example, this small program uses 16758 several specific section names: 16759 16760 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 16761 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 16762 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 16763 int init_data __attribute__ ((section ("INITDATA"))) = 0; 16764 16765 main() 16766 { 16767 /* Initialize stack pointer */ 16768 init_sp (stack + sizeof (stack)); 16769 16770 /* Initialize initialized data */ 16771 memcpy (&init_data, &data, &edata - &data); 16772 16773 /* Turn on the serial ports */ 16774 init_duart (&a); 16775 init_duart (&b); 16776 } 16777 16778 Use the `section' attribute with an _initialized_ definition of a 16779 _global_ variable, as shown in the example. GCC issues a warning 16780 and otherwise ignores the `section' attribute in uninitialized 16781 variable declarations. 16782 16783 You may only use the `section' attribute with a fully initialized 16784 global definition because of the way linkers work. The linker 16785 requires each object be defined once, with the exception that 16786 uninitialized variables tentatively go in the `common' (or `bss') 16787 section and can be multiply "defined". You can force a variable 16788 to be initialized with the `-fno-common' flag or the `nocommon' 16789 attribute. 16790 16791 Some file formats do not support arbitrary sections so the 16792 `section' attribute is not available on all platforms. If you 16793 need to map the entire contents of a module to a particular 16794 section, consider using the facilities of the linker instead. 16795 16796`shared' 16797 On Microsoft Windows, in addition to putting variable definitions 16798 in a named section, the section can also be shared among all 16799 running copies of an executable or DLL. For example, this small 16800 program defines shared data by putting it in a named section 16801 `shared' and marking the section shareable: 16802 16803 int foo __attribute__((section ("shared"), shared)) = 0; 16804 16805 int 16806 main() 16807 { 16808 /* Read and write foo. All running 16809 copies see the same value. */ 16810 return 0; 16811 } 16812 16813 You may only use the `shared' attribute along with `section' 16814 attribute with a fully initialized global definition because of 16815 the way linkers work. See `section' attribute for more 16816 information. 16817 16818 The `shared' attribute is only available on Microsoft Windows. 16819 16820`tls_model ("TLS_MODEL")' 16821 The `tls_model' attribute sets thread-local storage model (*note 16822 Thread-Local::) of a particular `__thread' variable, overriding 16823 `-ftls-model=' command line switch on a per-variable basis. The 16824 TLS_MODEL argument should be one of `global-dynamic', 16825 `local-dynamic', `initial-exec' or `local-exec'. 16826 16827 Not all targets support this attribute. 16828 16829`unused' 16830 This attribute, attached to a variable, means that the variable is 16831 meant to be possibly unused. GCC will not produce a warning for 16832 this variable. 16833 16834`used' 16835 This attribute, attached to a variable, means that the variable 16836 must be emitted even if it appears that the variable is not 16837 referenced. 16838 16839`vector_size (BYTES)' 16840 This attribute specifies the vector size for the variable, 16841 measured in bytes. For example, the declaration: 16842 16843 int foo __attribute__ ((vector_size (16))); 16844 16845 causes the compiler to set the mode for `foo', to be 16 bytes, 16846 divided into `int' sized units. Assuming a 32-bit int (a vector of 16847 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 16848 16849 This attribute is only applicable to integral and float scalars, 16850 although arrays, pointers, and function return values are allowed 16851 in conjunction with this construct. 16852 16853 Aggregates with this attribute are invalid, even if they are of 16854 the same size as a corresponding scalar. For example, the 16855 declaration: 16856 16857 struct S { int a; }; 16858 struct S __attribute__ ((vector_size (16))) foo; 16859 16860 is invalid even if the size of the structure is the same as the 16861 size of the `int'. 16862 16863`selectany' 16864 The `selectany' attribute causes an initialized global variable to 16865 have link-once semantics. When multiple definitions of the 16866 variable are encountered by the linker, the first is selected and 16867 the remainder are discarded. Following usage by the Microsoft 16868 compiler, the linker is told _not_ to warn about size or content 16869 differences of the multiple definitions. 16870 16871 Although the primary usage of this attribute is for POD types, the 16872 attribute can also be applied to global C++ objects that are 16873 initialized by a constructor. In this case, the static 16874 initialization and destruction code for the object is emitted in 16875 each translation defining the object, but the calls to the 16876 constructor and destructor are protected by a link-once guard 16877 variable. 16878 16879 The `selectany' attribute is only available on Microsoft Windows 16880 targets. You can use `__declspec (selectany)' as a synonym for 16881 `__attribute__ ((selectany))' for compatibility with other 16882 compilers. 16883 16884`weak' 16885 The `weak' attribute is described in *Note Function Attributes::. 16886 16887`dllimport' 16888 The `dllimport' attribute is described in *Note Function 16889 Attributes::. 16890 16891`dllexport' 16892 The `dllexport' attribute is described in *Note Function 16893 Attributes::. 16894 16895 168965.32.1 M32R/D Variable Attributes 16897--------------------------------- 16898 16899One attribute is currently defined for the M32R/D. 16900 16901`model (MODEL-NAME)' 16902 Use this attribute on the M32R/D to set the addressability of an 16903 object. The identifier MODEL-NAME is one of `small', `medium', or 16904 `large', representing each of the code models. 16905 16906 Small model objects live in the lower 16MB of memory (so that their 16907 addresses can be loaded with the `ld24' instruction). 16908 16909 Medium and large model objects may live anywhere in the 32-bit 16910 address space (the compiler will generate `seth/add3' instructions 16911 to load their addresses). 16912 169135.32.2 i386 Variable Attributes 16914------------------------------- 16915 16916Two attributes are currently defined for i386 configurations: 16917`ms_struct' and `gcc_struct' 16918 16919`ms_struct' 16920`gcc_struct' 16921 If `packed' is used on a structure, or if bit-fields are used it 16922 may be that the Microsoft ABI packs them differently than GCC 16923 would normally pack them. Particularly when moving packed data 16924 between functions compiled with GCC and the native Microsoft 16925 compiler (either via function call or as data in a file), it may 16926 be necessary to access either format. 16927 16928 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 16929 Windows X86 compilers to match the native Microsoft compiler. 16930 16931 The Microsoft structure layout algorithm is fairly simple with the 16932 exception of the bitfield packing: 16933 16934 The padding and alignment of members of structures and whether a 16935 bit field can straddle a storage-unit boundary 16936 16937 1. Structure members are stored sequentially in the order in 16938 which they are declared: the first member has the lowest 16939 memory address and the last member the highest. 16940 16941 2. Every data object has an alignment-requirement. The 16942 alignment-requirement for all data except structures, unions, 16943 and arrays is either the size of the object or the current 16944 packing size (specified with either the aligned attribute or 16945 the pack pragma), whichever is less. For structures, unions, 16946 and arrays, the alignment-requirement is the largest 16947 alignment-requirement of its members. Every object is 16948 allocated an offset so that: 16949 16950 offset % alignment-requirement == 0 16951 16952 3. Adjacent bit fields are packed into the same 1-, 2-, or 16953 4-byte allocation unit if the integral types are the same 16954 size and if the next bit field fits into the current 16955 allocation unit without crossing the boundary imposed by the 16956 common alignment requirements of the bit fields. 16957 16958 Handling of zero-length bitfields: 16959 16960 MSVC interprets zero-length bitfields in the following ways: 16961 16962 1. If a zero-length bitfield is inserted between two bitfields 16963 that would normally be coalesced, the bitfields will not be 16964 coalesced. 16965 16966 For example: 16967 16968 struct 16969 { 16970 unsigned long bf_1 : 12; 16971 unsigned long : 0; 16972 unsigned long bf_2 : 12; 16973 } t1; 16974 16975 The size of `t1' would be 8 bytes with the zero-length 16976 bitfield. If the zero-length bitfield were removed, `t1''s 16977 size would be 4 bytes. 16978 16979 2. If a zero-length bitfield is inserted after a bitfield, 16980 `foo', and the alignment of the zero-length bitfield is 16981 greater than the member that follows it, `bar', `bar' will be 16982 aligned as the type of the zero-length bitfield. 16983 16984 For example: 16985 16986 struct 16987 { 16988 char foo : 4; 16989 short : 0; 16990 char bar; 16991 } t2; 16992 16993 struct 16994 { 16995 char foo : 4; 16996 short : 0; 16997 double bar; 16998 } t3; 16999 17000 For `t2', `bar' will be placed at offset 2, rather than 17001 offset 1. Accordingly, the size of `t2' will be 4. For 17002 `t3', the zero-length bitfield will not affect the alignment 17003 of `bar' or, as a result, the size of the structure. 17004 17005 Taking this into account, it is important to note the 17006 following: 17007 17008 1. If a zero-length bitfield follows a normal bitfield, the 17009 type of the zero-length bitfield may affect the 17010 alignment of the structure as whole. For example, `t2' 17011 has a size of 4 bytes, since the zero-length bitfield 17012 follows a normal bitfield, and is of type short. 17013 17014 2. Even if a zero-length bitfield is not followed by a 17015 normal bitfield, it may still affect the alignment of 17016 the structure: 17017 17018 struct 17019 { 17020 char foo : 6; 17021 long : 0; 17022 } t4; 17023 17024 Here, `t4' will take up 4 bytes. 17025 17026 3. Zero-length bitfields following non-bitfield members are 17027 ignored: 17028 17029 struct 17030 { 17031 char foo; 17032 long : 0; 17033 char bar; 17034 } t5; 17035 17036 Here, `t5' will take up 2 bytes. 17037 170385.32.3 PowerPC Variable Attributes 17039---------------------------------- 17040 17041Three attributes currently are defined for PowerPC configurations: 17042`altivec', `ms_struct' and `gcc_struct'. 17043 17044 For full documentation of the struct attributes please see the 17045documentation in the *Note i386 Variable Attributes::, section. 17046 17047 For documentation of `altivec' attribute please see the documentation 17048in the *Note PowerPC Type Attributes::, section. 17049 170505.32.4 Xstormy16 Variable Attributes 17051------------------------------------ 17052 17053One attribute is currently defined for xstormy16 configurations: 17054`below100' 17055 17056`below100' 17057 If a variable has the `below100' attribute (`BELOW100' is allowed 17058 also), GCC will place the variable in the first 0x100 bytes of 17059 memory and use special opcodes to access it. Such variables will 17060 be placed in either the `.bss_below100' section or the 17061 `.data_below100' section. 17062 17063 17064 17065File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 17066 170675.33 Specifying Attributes of Types 17068=================================== 17069 17070The keyword `__attribute__' allows you to specify special attributes of 17071`struct' and `union' types when you define such types. This keyword is 17072followed by an attribute specification inside double parentheses. 17073Seven attributes are currently defined for types: `aligned', `packed', 17074`transparent_union', `unused', `deprecated', `visibility', and 17075`may_alias'. Other attributes are defined for functions (*note 17076Function Attributes::) and for variables (*note Variable Attributes::). 17077 17078 You may also specify any one of these attributes with `__' preceding 17079and following its keyword. This allows you to use these attributes in 17080header files without being concerned about a possible macro of the same 17081name. For example, you may use `__aligned__' instead of `aligned'. 17082 17083 You may specify type attributes either in a `typedef' declaration or 17084in an enum, struct or union type declaration or definition. 17085 17086 For an enum, struct or union type, you may specify attributes either 17087between the enum, struct or union tag and the name of the type, or just 17088past the closing curly brace of the _definition_. The former syntax is 17089preferred. 17090 17091 *Note Attribute Syntax::, for details of the exact syntax for using 17092attributes. 17093 17094`aligned (ALIGNMENT)' 17095 This attribute specifies a minimum alignment (in bytes) for 17096 variables of the specified type. For example, the declarations: 17097 17098 struct S { short f[3]; } __attribute__ ((aligned (8))); 17099 typedef int more_aligned_int __attribute__ ((aligned (8))); 17100 17101 force the compiler to insure (as far as it can) that each variable 17102 whose type is `struct S' or `more_aligned_int' will be allocated 17103 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 17104 all variables of type `struct S' aligned to 8-byte boundaries 17105 allows the compiler to use the `ldd' and `std' (doubleword load and 17106 store) instructions when copying one variable of type `struct S' to 17107 another, thus improving run-time efficiency. 17108 17109 Note that the alignment of any given `struct' or `union' type is 17110 required by the ISO C standard to be at least a perfect multiple of 17111 the lowest common multiple of the alignments of all of the members 17112 of the `struct' or `union' in question. This means that you _can_ 17113 effectively adjust the alignment of a `struct' or `union' type by 17114 attaching an `aligned' attribute to any one of the members of such 17115 a type, but the notation illustrated in the example above is a 17116 more obvious, intuitive, and readable way to request the compiler 17117 to adjust the alignment of an entire `struct' or `union' type. 17118 17119 As in the preceding example, you can explicitly specify the 17120 alignment (in bytes) that you wish the compiler to use for a given 17121 `struct' or `union' type. Alternatively, you can leave out the 17122 alignment factor and just ask the compiler to align a type to the 17123 maximum useful alignment for the target machine you are compiling 17124 for. For example, you could write: 17125 17126 struct S { short f[3]; } __attribute__ ((aligned)); 17127 17128 Whenever you leave out the alignment factor in an `aligned' 17129 attribute specification, the compiler automatically sets the 17130 alignment for the type to the largest alignment which is ever used 17131 for any data type on the target machine you are compiling for. 17132 Doing this can often make copy operations more efficient, because 17133 the compiler can use whatever instructions copy the biggest chunks 17134 of memory when performing copies to or from the variables which 17135 have types that you have aligned this way. 17136 17137 In the example above, if the size of each `short' is 2 bytes, then 17138 the size of the entire `struct S' type is 6 bytes. The smallest 17139 power of two which is greater than or equal to that is 8, so the 17140 compiler sets the alignment for the entire `struct S' type to 8 17141 bytes. 17142 17143 Note that although you can ask the compiler to select a 17144 time-efficient alignment for a given type and then declare only 17145 individual stand-alone objects of that type, the compiler's 17146 ability to select a time-efficient alignment is primarily useful 17147 only when you plan to create arrays of variables having the 17148 relevant (efficiently aligned) type. If you declare or use arrays 17149 of variables of an efficiently-aligned type, then it is likely 17150 that your program will also be doing pointer arithmetic (or 17151 subscripting, which amounts to the same thing) on pointers to the 17152 relevant type, and the code that the compiler generates for these 17153 pointer arithmetic operations will often be more efficient for 17154 efficiently-aligned types than for other types. 17155 17156 The `aligned' attribute can only increase the alignment; but you 17157 can decrease it by specifying `packed' as well. See below. 17158 17159 Note that the effectiveness of `aligned' attributes may be limited 17160 by inherent limitations in your linker. On many systems, the 17161 linker is only able to arrange for variables to be aligned up to a 17162 certain maximum alignment. (For some linkers, the maximum 17163 supported alignment may be very very small.) If your linker is 17164 only able to align variables up to a maximum of 8 byte alignment, 17165 then specifying `aligned(16)' in an `__attribute__' will still 17166 only provide you with 8 byte alignment. See your linker 17167 documentation for further information. 17168 17169`packed' 17170 This attribute, attached to `struct' or `union' type definition, 17171 specifies that each member (other than zero-width bitfields) of 17172 the structure or union is placed to minimize the memory required. 17173 When attached to an `enum' definition, it indicates that the 17174 smallest integral type should be used. 17175 17176 Specifying this attribute for `struct' and `union' types is 17177 equivalent to specifying the `packed' attribute on each of the 17178 structure or union members. Specifying the `-fshort-enums' flag 17179 on the line is equivalent to specifying the `packed' attribute on 17180 all `enum' definitions. 17181 17182 In the following example `struct my_packed_struct''s members are 17183 packed closely together, but the internal layout of its `s' member 17184 is not packed--to do that, `struct my_unpacked_struct' would need 17185 to be packed too. 17186 17187 struct my_unpacked_struct 17188 { 17189 char c; 17190 int i; 17191 }; 17192 17193 struct __attribute__ ((__packed__)) my_packed_struct 17194 { 17195 char c; 17196 int i; 17197 struct my_unpacked_struct s; 17198 }; 17199 17200 You may only specify this attribute on the definition of a `enum', 17201 `struct' or `union', not on a `typedef' which does not also define 17202 the enumerated type, structure or union. 17203 17204`transparent_union' 17205 This attribute, attached to a `union' type definition, indicates 17206 that any function parameter having that union type causes calls to 17207 that function to be treated in a special way. 17208 17209 First, the argument corresponding to a transparent union type can 17210 be of any type in the union; no cast is required. Also, if the 17211 union contains a pointer type, the corresponding argument can be a 17212 null pointer constant or a void pointer expression; and if the 17213 union contains a void pointer type, the corresponding argument can 17214 be any pointer expression. If the union member type is a pointer, 17215 qualifiers like `const' on the referenced type must be respected, 17216 just as with normal pointer conversions. 17217 17218 Second, the argument is passed to the function using the calling 17219 conventions of the first member of the transparent union, not the 17220 calling conventions of the union itself. All members of the union 17221 must have the same machine representation; this is necessary for 17222 this argument passing to work properly. 17223 17224 Transparent unions are designed for library functions that have 17225 multiple interfaces for compatibility reasons. For example, 17226 suppose the `wait' function must accept either a value of type 17227 `int *' to comply with Posix, or a value of type `union wait *' to 17228 comply with the 4.1BSD interface. If `wait''s parameter were 17229 `void *', `wait' would accept both kinds of arguments, but it 17230 would also accept any other pointer type and this would make 17231 argument type checking less useful. Instead, `<sys/wait.h>' might 17232 define the interface as follows: 17233 17234 typedef union 17235 { 17236 int *__ip; 17237 union wait *__up; 17238 } wait_status_ptr_t __attribute__ ((__transparent_union__)); 17239 17240 pid_t wait (wait_status_ptr_t); 17241 17242 This interface allows either `int *' or `union wait *' arguments 17243 to be passed, using the `int *' calling convention. The program 17244 can call `wait' with arguments of either type: 17245 17246 int w1 () { int w; return wait (&w); } 17247 int w2 () { union wait w; return wait (&w); } 17248 17249 With this interface, `wait''s implementation might look like this: 17250 17251 pid_t wait (wait_status_ptr_t p) 17252 { 17253 return waitpid (-1, p.__ip, 0); 17254 } 17255 17256`unused' 17257 When attached to a type (including a `union' or a `struct'), this 17258 attribute means that variables of that type are meant to appear 17259 possibly unused. GCC will not produce a warning for any variables 17260 of that type, even if the variable appears to do nothing. This is 17261 often the case with lock or thread classes, which are usually 17262 defined and then not referenced, but contain constructors and 17263 destructors that have nontrivial bookkeeping functions. 17264 17265`deprecated' 17266 The `deprecated' attribute results in a warning if the type is 17267 used anywhere in the source file. This is useful when identifying 17268 types that are expected to be removed in a future version of a 17269 program. If possible, the warning also includes the location of 17270 the declaration of the deprecated type, to enable users to easily 17271 find further information about why the type is deprecated, or what 17272 they should do instead. Note that the warnings only occur for 17273 uses and then only if the type is being applied to an identifier 17274 that itself is not being declared as deprecated. 17275 17276 typedef int T1 __attribute__ ((deprecated)); 17277 T1 x; 17278 typedef T1 T2; 17279 T2 y; 17280 typedef T1 T3 __attribute__ ((deprecated)); 17281 T3 z __attribute__ ((deprecated)); 17282 17283 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 17284 warning is issued for line 4 because T2 is not explicitly 17285 deprecated. Line 5 has no warning because T3 is explicitly 17286 deprecated. Similarly for line 6. 17287 17288 The `deprecated' attribute can also be used for functions and 17289 variables (*note Function Attributes::, *note Variable 17290 Attributes::.) 17291 17292`may_alias' 17293 Accesses to objects with types with this attribute are not 17294 subjected to type-based alias analysis, but are instead assumed to 17295 be able to alias any other type of objects, just like the `char' 17296 type. See `-fstrict-aliasing' for more information on aliasing 17297 issues. 17298 17299 Example of use: 17300 17301 typedef short __attribute__((__may_alias__)) short_a; 17302 17303 int 17304 main (void) 17305 { 17306 int a = 0x12345678; 17307 short_a *b = (short_a *) &a; 17308 17309 b[1] = 0; 17310 17311 if (a == 0x12345678) 17312 abort(); 17313 17314 exit(0); 17315 } 17316 17317 If you replaced `short_a' with `short' in the variable 17318 declaration, the above program would abort when compiled with 17319 `-fstrict-aliasing', which is on by default at `-O2' or above in 17320 recent GCC versions. 17321 17322`visibility' 17323 In C++, attribute visibility (*note Function Attributes::) can 17324 also be applied to class, struct, union and enum types. Unlike 17325 other type attributes, the attribute must appear between the 17326 initial keyword and the name of the type; it cannot appear after 17327 the body of the type. 17328 17329 Note that the type visibility is applied to vague linkage entities 17330 associated with the class (vtable, typeinfo node, etc.). In 17331 particular, if a class is thrown as an exception in one shared 17332 object and caught in another, the class must have default 17333 visibility. Otherwise the two shared objects will be unable to 17334 use the same typeinfo node and exception handling will break. 17335 173365.33.1 ARM Type Attributes 17337-------------------------- 17338 17339 On those ARM targets that support `dllimport' (such as Symbian 17340OS), you can use the `notshared' attribute to indicate that the virtual 17341table and other similar data for a class should not be exported from a 17342DLL. For example: 17343 17344 class __declspec(notshared) C { 17345 public: 17346 __declspec(dllimport) C(); 17347 virtual void f(); 17348 } 17349 17350 __declspec(dllexport) 17351 C::C() {} 17352 17353 In this code, `C::C' is exported from the current DLL, but the 17354virtual table for `C' is not exported. (You can use `__attribute__' 17355instead of `__declspec' if you prefer, but most Symbian OS code uses 17356`__declspec'.) 17357 173585.33.2 i386 Type Attributes 17359--------------------------- 17360 17361 Two attributes are currently defined for i386 configurations: 17362`ms_struct' and `gcc_struct' 17363 17364`ms_struct' 17365`gcc_struct' 17366 If `packed' is used on a structure, or if bit-fields are used it 17367 may be that the Microsoft ABI packs them differently than GCC 17368 would normally pack them. Particularly when moving packed data 17369 between functions compiled with GCC and the native Microsoft 17370 compiler (either via function call or as data in a file), it may 17371 be necessary to access either format. 17372 17373 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 17374 Windows X86 compilers to match the native Microsoft compiler. 17375 17376 To specify multiple attributes, separate them by commas within the 17377double parentheses: for example, `__attribute__ ((aligned (16), 17378packed))'. 17379 173805.33.3 PowerPC Type Attributes 17381------------------------------ 17382 17383Three attributes currently are defined for PowerPC configurations: 17384`altivec', `ms_struct' and `gcc_struct'. 17385 17386 For full documentation of the struct attributes please see the 17387documentation in the *Note i386 Type Attributes::, section. 17388 17389 The `altivec' attribute allows one to declare AltiVec vector data 17390types supported by the AltiVec Programming Interface Manual. The 17391attribute requires an argument to specify one of three vector types: 17392`vector__', `pixel__' (always followed by unsigned short), and `bool__' 17393(always followed by unsigned). 17394 17395 __attribute__((altivec(vector__))) 17396 __attribute__((altivec(pixel__))) unsigned short 17397 __attribute__((altivec(bool__))) unsigned 17398 17399 These attributes mainly are intended to support the `__vector', 17400`__pixel', and `__bool' AltiVec keywords. 17401 17402 17403File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions 17404 174055.34 An Inline Function is As Fast As a Macro 17406============================================= 17407 17408By declaring a function `inline', you can direct GCC to integrate that 17409function's code into the code for its callers. This makes execution 17410faster by eliminating the function-call overhead; in addition, if any 17411of the actual argument values are constant, their known values may 17412permit simplifications at compile time so that not all of the inline 17413function's code needs to be included. The effect on code size is less 17414predictable; object code may be larger or smaller with function 17415inlining, depending on the particular case. Inlining of functions is an 17416optimization and it really "works" only in optimizing compilation. If 17417you don't use `-O', no function is really inline. 17418 17419 Inline functions are included in the ISO C99 standard, but there are 17420currently substantial differences between what GCC implements and what 17421the ISO C99 standard requires. GCC will fully support C99 inline 17422functions in version 4.3. The traditional GCC handling of inline 17423functions will still be available with `-std=gnu89', `-fgnu89-inline' 17424or when `gnu_inline' attribute is present on all inline declarations. 17425The preprocessor macros `__GNUC_GNU_INLINE__' and 17426`__GNUC_STDC_INLINE__' may be used to determine the handling of 17427`inline' during a particular compilation (*note Common Predefined 17428Macros: (cpp)Common Predefined Macros.). 17429 17430 To declare a function inline, use the `inline' keyword in its 17431declaration, like this: 17432 17433 inline int 17434 inc (int *a) 17435 { 17436 (*a)++; 17437 } 17438 17439 (If you are writing a header file to be included in ISO C programs, 17440write `__inline__' instead of `inline'. *Note Alternate Keywords::.) 17441You can also make all "simple enough" functions inline with the option 17442`-finline-functions'. 17443 17444 Note that certain usages in a function definition can make it 17445unsuitable for inline substitution. Among these usages are: use of 17446varargs, use of alloca, use of variable sized data types (*note 17447Variable Length::), use of computed goto (*note Labels as Values::), 17448use of nonlocal goto, and nested functions (*note Nested Functions::). 17449Using `-Winline' will warn when a function marked `inline' could not be 17450substituted, and will give the reason for the failure. 17451 17452 Note that in C and Objective-C, unlike C++, the `inline' keyword does 17453not affect the linkage of the function. 17454 17455 GCC automatically inlines member functions defined within the class 17456body of C++ programs even if they are not explicitly declared `inline'. 17457(You can override this with `-fno-default-inline'; *note Options 17458Controlling C++ Dialect: C++ Dialect Options.) 17459 17460 When a function is both inline and `static', if all calls to the 17461function are integrated into the caller, and the function's address is 17462never used, then the function's own assembler code is never referenced. 17463In this case, GCC does not actually output assembler code for the 17464function, unless you specify the option `-fkeep-inline-functions'. 17465Some calls cannot be integrated for various reasons (in particular, 17466calls that precede the function's definition cannot be integrated, and 17467neither can recursive calls within the definition). If there is a 17468nonintegrated call, then the function is compiled to assembler code as 17469usual. The function must also be compiled as usual if the program 17470refers to its address, because that can't be inlined. 17471 17472 When an inline function is not `static', then the compiler must assume 17473that there may be calls from other source files; since a global symbol 17474can be defined only once in any program, the function must not be 17475defined in the other source files, so the calls therein cannot be 17476integrated. Therefore, a non-`static' inline function is always 17477compiled on its own in the usual fashion. 17478 17479 If you specify both `inline' and `extern' in the function definition, 17480then the definition is used only for inlining. In no case is the 17481function compiled on its own, not even if you refer to its address 17482explicitly. Such an address becomes an external reference, as if you 17483had only declared the function, and had not defined it. 17484 17485 This combination of `inline' and `extern' has almost the effect of a 17486macro. The way to use it is to put a function definition in a header 17487file with these keywords, and put another copy of the definition 17488(lacking `inline' and `extern') in a library file. The definition in 17489the header file will cause most calls to the function to be inlined. 17490If any uses of the function remain, they will refer to the single copy 17491in the library. 17492 17493 Since GCC 4.3 will implement ISO C99 semantics for inline functions, 17494it is simplest to use `static inline' only to guarantee compatibility. 17495(The existing semantics will remain available when `-std=gnu89' is 17496specified, but eventually the default will be `-std=gnu99'; that will 17497implement the C99 semantics, though it does not do so in versions of 17498GCC before 4.3. After the default changes, the existing semantics will 17499still be available via the `-fgnu89-inline' option or the `gnu_inline' 17500function attribute.) 17501 17502 GCC does not inline any functions when not optimizing unless you 17503specify the `always_inline' attribute for the function, like this: 17504 17505 /* Prototype. */ 17506 inline void foo (const char) __attribute__((always_inline)); 17507 17508 17509File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions 17510 175115.35 Assembler Instructions with C Expression Operands 17512====================================================== 17513 17514In an assembler instruction using `asm', you can specify the operands 17515of the instruction using C expressions. This means you need not guess 17516which registers or memory locations will contain the data you want to 17517use. 17518 17519 You must specify an assembler instruction template much like what 17520appears in a machine description, plus an operand constraint string for 17521each operand. 17522 17523 For example, here is how to use the 68881's `fsinx' instruction: 17524 17525 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 17526 17527Here `angle' is the C expression for the input operand while `result' 17528is that of the output operand. Each has `"f"' as its operand 17529constraint, saying that a floating point register is required. The `=' 17530in `=f' indicates that the operand is an output; all output operands' 17531constraints must use `='. The constraints use the same language used 17532in the machine description (*note Constraints::). 17533 17534 Each operand is described by an operand-constraint string followed by 17535the C expression in parentheses. A colon separates the assembler 17536template from the first output operand and another separates the last 17537output operand from the first input, if any. Commas separate the 17538operands within each group. The total number of operands is currently 17539limited to 30; this limitation may be lifted in some future version of 17540GCC. 17541 17542 If there are no output operands but there are input operands, you must 17543place two consecutive colons surrounding the place where the output 17544operands would go. 17545 17546 As of GCC version 3.1, it is also possible to specify input and output 17547operands using symbolic names which can be referenced within the 17548assembler code. These names are specified inside square brackets 17549preceding the constraint string, and can be referenced inside the 17550assembler code using `%[NAME]' instead of a percentage sign followed by 17551the operand number. Using named operands the above example could look 17552like: 17553 17554 asm ("fsinx %[angle],%[output]" 17555 : [output] "=f" (result) 17556 : [angle] "f" (angle)); 17557 17558Note that the symbolic operand names have no relation whatsoever to 17559other C identifiers. You may use any name you like, even those of 17560existing C symbols, but you must ensure that no two operands within the 17561same assembler construct use the same symbolic name. 17562 17563 Output operand expressions must be lvalues; the compiler can check 17564this. The input operands need not be lvalues. The compiler cannot 17565check whether the operands have data types that are reasonable for the 17566instruction being executed. It does not parse the assembler instruction 17567template and does not know what it means or even whether it is valid 17568assembler input. The extended `asm' feature is most often used for 17569machine instructions the compiler itself does not know exist. If the 17570output expression cannot be directly addressed (for example, it is a 17571bit-field), your constraint must allow a register. In that case, GCC 17572will use the register as the output of the `asm', and then store that 17573register into the output. 17574 17575 The ordinary output operands must be write-only; GCC will assume that 17576the values in these operands before the instruction are dead and need 17577not be generated. Extended asm supports input-output or read-write 17578operands. Use the constraint character `+' to indicate such an operand 17579and list it with the output operands. You should only use read-write 17580operands when the constraints for the operand (or the operand in which 17581only some of the bits are to be changed) allow a register. 17582 17583 You may, as an alternative, logically split its function into two 17584separate operands, one input operand and one write-only output operand. 17585The connection between them is expressed by constraints which say they 17586need to be in the same location when the instruction executes. You can 17587use the same C expression for both operands, or different expressions. 17588For example, here we write the (fictitious) `combine' instruction with 17589`bar' as its read-only source operand and `foo' as its read-write 17590destination: 17591 17592 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 17593 17594The constraint `"0"' for operand 1 says that it must occupy the same 17595location as operand 0. A number in constraint is allowed only in an 17596input operand and it must refer to an output operand. 17597 17598 Only a number in the constraint can guarantee that one operand will be 17599in the same place as another. The mere fact that `foo' is the value of 17600both operands is not enough to guarantee that they will be in the same 17601place in the generated assembler code. The following would not work 17602reliably: 17603 17604 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 17605 17606 Various optimizations or reloading could cause operands 0 and 1 to be 17607in different registers; GCC knows no reason not to do so. For example, 17608the compiler might find a copy of the value of `foo' in one register and 17609use it for operand 1, but generate the output operand 0 in a different 17610register (copying it afterward to `foo''s own address). Of course, 17611since the register for operand 1 is not even mentioned in the assembler 17612code, the result will not work, but GCC can't tell that. 17613 17614 As of GCC version 3.1, one may write `[NAME]' instead of the operand 17615number for a matching constraint. For example: 17616 17617 asm ("cmoveq %1,%2,%[result]" 17618 : [result] "=r"(result) 17619 : "r" (test), "r"(new), "[result]"(old)); 17620 17621 Sometimes you need to make an `asm' operand be a specific register, 17622but there's no matching constraint letter for that register _by 17623itself_. To force the operand into that register, use a local variable 17624for the operand and specify the register in the variable declaration. 17625*Note Explicit Reg Vars::. Then for the `asm' operand, use any 17626register constraint letter that matches the register: 17627 17628 register int *p1 asm ("r0") = ...; 17629 register int *p2 asm ("r1") = ...; 17630 register int *result asm ("r0"); 17631 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 17632 17633 In the above example, beware that a register that is call-clobbered by 17634the target ABI will be overwritten by any function call in the 17635assignment, including library calls for arithmetic operators. Assuming 17636it is a call-clobbered register, this may happen to `r0' above by the 17637assignment to `p2'. If you have to use such a register, use temporary 17638variables for expressions between the register assignment and use: 17639 17640 int t1 = ...; 17641 register int *p1 asm ("r0") = ...; 17642 register int *p2 asm ("r1") = t1; 17643 register int *result asm ("r0"); 17644 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 17645 17646 Some instructions clobber specific hard registers. To describe this, 17647write a third colon after the input operands, followed by the names of 17648the clobbered hard registers (given as strings). Here is a realistic 17649example for the VAX: 17650 17651 asm volatile ("movc3 %0,%1,%2" 17652 : /* no outputs */ 17653 : "g" (from), "g" (to), "g" (count) 17654 : "r0", "r1", "r2", "r3", "r4", "r5"); 17655 17656 You may not write a clobber description in a way that overlaps with an 17657input or output operand. For example, you may not have an operand 17658describing a register class with one member if you mention that register 17659in the clobber list. Variables declared to live in specific registers 17660(*note Explicit Reg Vars::), and used as asm input or output operands 17661must have no part mentioned in the clobber description. There is no 17662way for you to specify that an input operand is modified without also 17663specifying it as an output operand. Note that if all the output 17664operands you specify are for this purpose (and hence unused), you will 17665then also need to specify `volatile' for the `asm' construct, as 17666described below, to prevent GCC from deleting the `asm' statement as 17667unused. 17668 17669 If you refer to a particular hardware register from the assembler code, 17670you will probably have to list the register after the third colon to 17671tell the compiler the register's value is modified. In some assemblers, 17672the register names begin with `%'; to produce one `%' in the assembler 17673code, you must write `%%' in the input. 17674 17675 If your assembler instruction can alter the condition code register, 17676add `cc' to the list of clobbered registers. GCC on some machines 17677represents the condition codes as a specific hardware register; `cc' 17678serves to name this register. On other machines, the condition code is 17679handled differently, and specifying `cc' has no effect. But it is 17680valid no matter what the machine. 17681 17682 If your assembler instructions access memory in an unpredictable 17683fashion, add `memory' to the list of clobbered registers. This will 17684cause GCC to not keep memory values cached in registers across the 17685assembler instruction and not optimize stores or loads to that memory. 17686You will also want to add the `volatile' keyword if the memory affected 17687is not listed in the inputs or outputs of the `asm', as the `memory' 17688clobber does not count as a side-effect of the `asm'. If you know how 17689large the accessed memory is, you can add it as input or output but if 17690this is not known, you should add `memory'. As an example, if you 17691access ten bytes of a string, you can use a memory input like: 17692 17693 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 17694 17695 Note that in the following example the memory input is necessary, 17696otherwise GCC might optimize the store to `x' away: 17697 int foo () 17698 { 17699 int x = 42; 17700 int *y = &x; 17701 int result; 17702 asm ("magic stuff accessing an 'int' pointed to by '%1'" 17703 "=&d" (r) : "a" (y), "m" (*y)); 17704 return result; 17705 } 17706 17707 You can put multiple assembler instructions together in a single `asm' 17708template, separated by the characters normally used in assembly code 17709for the system. A combination that works in most places is a newline 17710to break the line, plus a tab character to move to the instruction field 17711(written as `\n\t'). Sometimes semicolons can be used, if the 17712assembler allows semicolons as a line-breaking character. Note that 17713some assembler dialects use semicolons to start a comment. The input 17714operands are guaranteed not to use any of the clobbered registers, and 17715neither will the output operands' addresses, so you can read and write 17716the clobbered registers as many times as you like. Here is an example 17717of multiple instructions in a template; it assumes the subroutine 17718`_foo' accepts arguments in registers 9 and 10: 17719 17720 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 17721 : /* no outputs */ 17722 : "g" (from), "g" (to) 17723 : "r9", "r10"); 17724 17725 Unless an output operand has the `&' constraint modifier, GCC may 17726allocate it in the same register as an unrelated input operand, on the 17727assumption the inputs are consumed before the outputs are produced. 17728This assumption may be false if the assembler code actually consists of 17729more than one instruction. In such a case, use `&' for each output 17730operand that may not overlap an input. *Note Modifiers::. 17731 17732 If you want to test the condition code produced by an assembler 17733instruction, you must include a branch and a label in the `asm' 17734construct, as follows: 17735 17736 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 17737 : "g" (result) 17738 : "g" (input)); 17739 17740This assumes your assembler supports local labels, as the GNU assembler 17741and most Unix assemblers do. 17742 17743 Speaking of labels, jumps from one `asm' to another are not supported. 17744The compiler's optimizers do not know about these jumps, and therefore 17745they cannot take account of them when deciding how to optimize. 17746 17747 Usually the most convenient way to use these `asm' instructions is to 17748encapsulate them in macros that look like functions. For example, 17749 17750 #define sin(x) \ 17751 ({ double __value, __arg = (x); \ 17752 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 17753 __value; }) 17754 17755Here the variable `__arg' is used to make sure that the instruction 17756operates on a proper `double' value, and to accept only those arguments 17757`x' which can convert automatically to a `double'. 17758 17759 Another way to make sure the instruction operates on the correct data 17760type is to use a cast in the `asm'. This is different from using a 17761variable `__arg' in that it converts more different types. For 17762example, if the desired type were `int', casting the argument to `int' 17763would accept a pointer with no complaint, while assigning the argument 17764to an `int' variable named `__arg' would warn about using a pointer 17765unless the caller explicitly casts it. 17766 17767 If an `asm' has output operands, GCC assumes for optimization purposes 17768the instruction has no side effects except to change the output 17769operands. This does not mean instructions with a side effect cannot be 17770used, but you must be careful, because the compiler may eliminate them 17771if the output operands aren't used, or move them out of loops, or 17772replace two with one if they constitute a common subexpression. Also, 17773if your instruction does have a side effect on a variable that otherwise 17774appears not to change, the old value of the variable may be reused later 17775if it happens to be found in a register. 17776 17777 You can prevent an `asm' instruction from being deleted by writing the 17778keyword `volatile' after the `asm'. For example: 17779 17780 #define get_and_set_priority(new) \ 17781 ({ int __old; \ 17782 asm volatile ("get_and_set_priority %0, %1" \ 17783 : "=g" (__old) : "g" (new)); \ 17784 __old; }) 17785 17786The `volatile' keyword indicates that the instruction has important 17787side-effects. GCC will not delete a volatile `asm' if it is reachable. 17788(The instruction can still be deleted if GCC can prove that 17789control-flow will never reach the location of the instruction.) Note 17790that even a volatile `asm' instruction can be moved relative to other 17791code, including across jump instructions. For example, on many targets 17792there is a system register which can be set to control the rounding 17793mode of floating point operations. You might try setting it with a 17794volatile `asm', like this PowerPC example: 17795 17796 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 17797 sum = x + y; 17798 17799This will not work reliably, as the compiler may move the addition back 17800before the volatile `asm'. To make it work you need to add an 17801artificial dependency to the `asm' referencing a variable in the code 17802you don't want moved, for example: 17803 17804 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 17805 sum = x + y; 17806 17807 Similarly, you can't expect a sequence of volatile `asm' instructions 17808to remain perfectly consecutive. If you want consecutive output, use a 17809single `asm'. Also, GCC will perform some optimizations across a 17810volatile `asm' instruction; GCC does not "forget everything" when it 17811encounters a volatile `asm' instruction the way some other compilers do. 17812 17813 An `asm' instruction without any output operands will be treated 17814identically to a volatile `asm' instruction. 17815 17816 It is a natural idea to look for a way to give access to the condition 17817code left by the assembler instruction. However, when we attempted to 17818implement this, we found no way to make it work reliably. The problem 17819is that output operands might need reloading, which would result in 17820additional following "store" instructions. On most machines, these 17821instructions would alter the condition code before there was time to 17822test it. This problem doesn't arise for ordinary "test" and "compare" 17823instructions because they don't have any output operands. 17824 17825 For reasons similar to those described above, it is not possible to 17826give an assembler instruction access to the condition code left by 17827previous instructions. 17828 17829 If you are writing a header file that should be includable in ISO C 17830programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 17831 178325.35.1 Size of an `asm' 17833----------------------- 17834 17835Some targets require that GCC track the size of each instruction used in 17836order to generate correct code. Because the final length of an `asm' 17837is only known by the assembler, GCC must make an estimate as to how big 17838it will be. The estimate is formed by counting the number of 17839statements in the pattern of the `asm' and multiplying that by the 17840length of the longest instruction on that processor. Statements in the 17841`asm' are identified by newline characters and whatever statement 17842separator characters are supported by the assembler; on most processors 17843this is the ``;'' character. 17844 17845 Normally, GCC's estimate is perfectly adequate to ensure that correct 17846code is generated, but it is possible to confuse the compiler if you use 17847pseudo instructions or assembler macros that expand into multiple real 17848instructions or if you use assembler directives that expand to more 17849space in the object file than would be needed for a single instruction. 17850If this happens then the assembler will produce a diagnostic saying that 17851a label is unreachable. 17852 178535.35.2 i386 floating point asm operands 17854--------------------------------------- 17855 17856There are several rules on the usage of stack-like regs in asm_operands 17857insns. These rules apply only to the operands that are stack-like regs: 17858 17859 1. Given a set of input regs that die in an asm_operands, it is 17860 necessary to know which are implicitly popped by the asm, and 17861 which must be explicitly popped by gcc. 17862 17863 An input reg that is implicitly popped by the asm must be 17864 explicitly clobbered, unless it is constrained to match an output 17865 operand. 17866 17867 2. For any input reg that is implicitly popped by an asm, it is 17868 necessary to know how to adjust the stack to compensate for the 17869 pop. If any non-popped input is closer to the top of the 17870 reg-stack than the implicitly popped reg, it would not be possible 17871 to know what the stack looked like--it's not clear how the rest of 17872 the stack "slides up". 17873 17874 All implicitly popped input regs must be closer to the top of the 17875 reg-stack than any input that is not implicitly popped. 17876 17877 It is possible that if an input dies in an insn, reload might use 17878 the input reg for an output reload. Consider this example: 17879 17880 asm ("foo" : "=t" (a) : "f" (b)); 17881 17882 This asm says that input B is not popped by the asm, and that the 17883 asm pushes a result onto the reg-stack, i.e., the stack is one 17884 deeper after the asm than it was before. But, it is possible that 17885 reload will think that it can use the same reg for both the input 17886 and the output, if input B dies in this insn. 17887 17888 If any input operand uses the `f' constraint, all output reg 17889 constraints must use the `&' earlyclobber. 17890 17891 The asm above would be written as 17892 17893 asm ("foo" : "=&t" (a) : "f" (b)); 17894 17895 3. Some operands need to be in particular places on the stack. All 17896 output operands fall in this category--there is no other way to 17897 know which regs the outputs appear in unless the user indicates 17898 this in the constraints. 17899 17900 Output operands must specifically indicate which reg an output 17901 appears in after an asm. `=f' is not allowed: the operand 17902 constraints must select a class with a single reg. 17903 17904 4. Output operands may not be "inserted" between existing stack regs. 17905 Since no 387 opcode uses a read/write operand, all output operands 17906 are dead before the asm_operands, and are pushed by the 17907 asm_operands. It makes no sense to push anywhere but the top of 17908 the reg-stack. 17909 17910 Output operands must start at the top of the reg-stack: output 17911 operands may not "skip" a reg. 17912 17913 5. Some asm statements may need extra stack space for internal 17914 calculations. This can be guaranteed by clobbering stack registers 17915 unrelated to the inputs and outputs. 17916 17917 17918 Here are a couple of reasonable asms to want to write. This asm takes 17919one input, which is internally popped, and produces two outputs. 17920 17921 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 17922 17923 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 17924and replaces them with one output. The user must code the `st(1)' 17925clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 17926 17927 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 17928 17929 17930File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 17931 179325.36 Constraints for `asm' Operands 17933=================================== 17934 17935Here are specific details on what constraint letters you can use with 17936`asm' operands. Constraints can say whether an operand may be in a 17937register, and which kinds of register; whether the operand can be a 17938memory reference, and which kinds of address; whether the operand may 17939be an immediate constant, and which possible values it may have. 17940Constraints can also require two operands to match. 17941 17942* Menu: 17943 17944* Simple Constraints:: Basic use of constraints. 17945* Multi-Alternative:: When an insn has two alternative constraint-patterns. 17946* Modifiers:: More precise control over effects of constraints. 17947* Machine Constraints:: Special constraints for some particular machines. 17948 17949 17950File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 17951 179525.36.1 Simple Constraints 17953------------------------- 17954 17955The simplest kind of constraint is a string full of letters, each of 17956which describes one kind of operand that is permitted. Here are the 17957letters that are allowed: 17958 17959whitespace 17960 Whitespace characters are ignored and can be inserted at any 17961 position except the first. This enables each alternative for 17962 different operands to be visually aligned in the machine 17963 description even if they have different number of constraints and 17964 modifiers. 17965 17966`m' 17967 A memory operand is allowed, with any kind of address that the 17968 machine supports in general. 17969 17970`o' 17971 A memory operand is allowed, but only if the address is 17972 "offsettable". This means that adding a small integer (actually, 17973 the width in bytes of the operand, as determined by its machine 17974 mode) may be added to the address and the result is also a valid 17975 memory address. 17976 17977 For example, an address which is constant is offsettable; so is an 17978 address that is the sum of a register and a constant (as long as a 17979 slightly larger constant is also within the range of 17980 address-offsets supported by the machine); but an autoincrement or 17981 autodecrement address is not offsettable. More complicated 17982 indirect/indexed addresses may or may not be offsettable depending 17983 on the other addressing modes that the machine supports. 17984 17985 Note that in an output operand which can be matched by another 17986 operand, the constraint letter `o' is valid only when accompanied 17987 by both `<' (if the target machine has predecrement addressing) 17988 and `>' (if the target machine has preincrement addressing). 17989 17990`V' 17991 A memory operand that is not offsettable. In other words, 17992 anything that would fit the `m' constraint but not the `o' 17993 constraint. 17994 17995`<' 17996 A memory operand with autodecrement addressing (either 17997 predecrement or postdecrement) is allowed. 17998 17999`>' 18000 A memory operand with autoincrement addressing (either 18001 preincrement or postincrement) is allowed. 18002 18003`r' 18004 A register operand is allowed provided that it is in a general 18005 register. 18006 18007`i' 18008 An immediate integer operand (one with constant value) is allowed. 18009 This includes symbolic constants whose values will be known only at 18010 assembly time or later. 18011 18012`n' 18013 An immediate integer operand with a known numeric value is allowed. 18014 Many systems cannot support assembly-time constants for operands 18015 less than a word wide. Constraints for these operands should use 18016 `n' rather than `i'. 18017 18018`I', `J', `K', ... `P' 18019 Other letters in the range `I' through `P' may be defined in a 18020 machine-dependent fashion to permit immediate integer operands with 18021 explicit integer values in specified ranges. For example, on the 18022 68000, `I' is defined to stand for the range of values 1 to 8. 18023 This is the range permitted as a shift count in the shift 18024 instructions. 18025 18026`E' 18027 An immediate floating operand (expression code `const_double') is 18028 allowed, but only if the target floating point format is the same 18029 as that of the host machine (on which the compiler is running). 18030 18031`F' 18032 An immediate floating operand (expression code `const_double' or 18033 `const_vector') is allowed. 18034 18035`G', `H' 18036 `G' and `H' may be defined in a machine-dependent fashion to 18037 permit immediate floating operands in particular ranges of values. 18038 18039`s' 18040 An immediate integer operand whose value is not an explicit 18041 integer is allowed. 18042 18043 This might appear strange; if an insn allows a constant operand 18044 with a value not known at compile time, it certainly must allow 18045 any known value. So why use `s' instead of `i'? Sometimes it 18046 allows better code to be generated. 18047 18048 For example, on the 68000 in a fullword instruction it is possible 18049 to use an immediate operand; but if the immediate value is between 18050 -128 and 127, better code results from loading the value into a 18051 register and using the register. This is because the load into 18052 the register can be done with a `moveq' instruction. We arrange 18053 for this to happen by defining the letter `K' to mean "any integer 18054 outside the range -128 to 127", and then specifying `Ks' in the 18055 operand constraints. 18056 18057`g' 18058 Any register, memory or immediate integer operand is allowed, 18059 except for registers that are not general registers. 18060 18061`X' 18062 Any operand whatsoever is allowed. 18063 18064`0', `1', `2', ... `9' 18065 An operand that matches the specified operand number is allowed. 18066 If a digit is used together with letters within the same 18067 alternative, the digit should come last. 18068 18069 This number is allowed to be more than a single digit. If multiple 18070 digits are encountered consecutively, they are interpreted as a 18071 single decimal integer. There is scant chance for ambiguity, 18072 since to-date it has never been desirable that `10' be interpreted 18073 as matching either operand 1 _or_ operand 0. Should this be 18074 desired, one can use multiple alternatives instead. 18075 18076 This is called a "matching constraint" and what it really means is 18077 that the assembler has only a single operand that fills two roles 18078 which `asm' distinguishes. For example, an add instruction uses 18079 two input operands and an output operand, but on most CISC 18080 machines an add instruction really has only two operands, one of 18081 them an input-output operand: 18082 18083 addl #35,r12 18084 18085 Matching constraints are used in these circumstances. More 18086 precisely, the two operands that match must include one input-only 18087 operand and one output-only operand. Moreover, the digit must be a 18088 smaller number than the number of the operand that uses it in the 18089 constraint. 18090 18091`p' 18092 An operand that is a valid memory address is allowed. This is for 18093 "load address" and "push address" instructions. 18094 18095 `p' in the constraint must be accompanied by `address_operand' as 18096 the predicate in the `match_operand'. This predicate interprets 18097 the mode specified in the `match_operand' as the mode of the memory 18098 reference for which the address would be valid. 18099 18100OTHER-LETTERS 18101 Other letters can be defined in machine-dependent fashion to stand 18102 for particular classes of registers or other arbitrary operand 18103 types. `d', `a' and `f' are defined on the 68000/68020 to stand 18104 for data, address and floating point registers. 18105 18106 18107File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 18108 181095.36.2 Multiple Alternative Constraints 18110--------------------------------------- 18111 18112Sometimes a single instruction has multiple alternative sets of possible 18113operands. For example, on the 68000, a logical-or instruction can 18114combine register or an immediate value into memory, or it can combine 18115any kind of operand into a register; but it cannot combine one memory 18116location into another. 18117 18118 These constraints are represented as multiple alternatives. An 18119alternative can be described by a series of letters for each operand. 18120The overall constraint for an operand is made from the letters for this 18121operand from the first alternative, a comma, the letters for this 18122operand from the second alternative, a comma, and so on until the last 18123alternative. 18124 18125 If all the operands fit any one alternative, the instruction is valid. 18126Otherwise, for each alternative, the compiler counts how many 18127instructions must be added to copy the operands so that that 18128alternative applies. The alternative requiring the least copying is 18129chosen. If two alternatives need the same amount of copying, the one 18130that comes first is chosen. These choices can be altered with the `?' 18131and `!' characters: 18132 18133`?' 18134 Disparage slightly the alternative that the `?' appears in, as a 18135 choice when no alternative applies exactly. The compiler regards 18136 this alternative as one unit more costly for each `?' that appears 18137 in it. 18138 18139`!' 18140 Disparage severely the alternative that the `!' appears in. This 18141 alternative can still be used if it fits without reloading, but if 18142 reloading is needed, some other alternative will be used. 18143 18144 18145File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 18146 181475.36.3 Constraint Modifier Characters 18148------------------------------------- 18149 18150Here are constraint modifier characters. 18151 18152`=' 18153 Means that this operand is write-only for this instruction: the 18154 previous value is discarded and replaced by output data. 18155 18156`+' 18157 Means that this operand is both read and written by the 18158 instruction. 18159 18160 When the compiler fixes up the operands to satisfy the constraints, 18161 it needs to know which operands are inputs to the instruction and 18162 which are outputs from it. `=' identifies an output; `+' 18163 identifies an operand that is both input and output; all other 18164 operands are assumed to be input only. 18165 18166 If you specify `=' or `+' in a constraint, you put it in the first 18167 character of the constraint string. 18168 18169`&' 18170 Means (in a particular alternative) that this operand is an 18171 "earlyclobber" operand, which is modified before the instruction is 18172 finished using the input operands. Therefore, this operand may 18173 not lie in a register that is used as an input operand or as part 18174 of any memory address. 18175 18176 `&' applies only to the alternative in which it is written. In 18177 constraints with multiple alternatives, sometimes one alternative 18178 requires `&' while others do not. See, for example, the `movdf' 18179 insn of the 68000. 18180 18181 An input operand can be tied to an earlyclobber operand if its only 18182 use as an input occurs before the early result is written. Adding 18183 alternatives of this form often allows GCC to produce better code 18184 when only some of the inputs can be affected by the earlyclobber. 18185 See, for example, the `mulsi3' insn of the ARM. 18186 18187 `&' does not obviate the need to write `='. 18188 18189`%' 18190 Declares the instruction to be commutative for this operand and the 18191 following operand. This means that the compiler may interchange 18192 the two operands if that is the cheapest way to make all operands 18193 fit the constraints. GCC can only handle one commutative pair in 18194 an asm; if you use more, the compiler may fail. Note that you 18195 need not use the modifier if the two alternatives are strictly 18196 identical; this would only waste time in the reload pass. The 18197 modifier is not operational after register allocation, so the 18198 result of `define_peephole2' and `define_split's performed after 18199 reload cannot rely on `%' to make the intended insn match. 18200 18201`#' 18202 Says that all following characters, up to the next comma, are to be 18203 ignored as a constraint. They are significant only for choosing 18204 register preferences. 18205 18206`*' 18207 Says that the following character should be ignored when choosing 18208 register preferences. `*' has no effect on the meaning of the 18209 constraint as a constraint, and no effect on reloading. 18210 18211 18212 18213File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 18214 182155.36.4 Constraints for Particular Machines 18216------------------------------------------ 18217 18218Whenever possible, you should use the general-purpose constraint letters 18219in `asm' arguments, since they will convey meaning more readily to 18220people reading your code. Failing that, use the constraint letters 18221that usually have very similar meanings across architectures. The most 18222commonly used constraints are `m' and `r' (for memory and 18223general-purpose registers respectively; *note Simple Constraints::), and 18224`I', usually the letter indicating the most common immediate-constant 18225format. 18226 18227 Each architecture defines additional constraints. These constraints 18228are used by the compiler itself for instruction generation, as well as 18229for `asm' statements; therefore, some of the constraints are not 18230particularly useful for `asm'. Here is a summary of some of the 18231machine-dependent constraints available on some particular machines; it 18232includes both constraints that are useful for `asm' and constraints 18233that aren't. The compiler source file mentioned in the table heading 18234for each architecture is the definitive reference for the meanings of 18235that architecture's constraints. 18236 18237_ARM family--`config/arm/arm.h'_ 18238 18239 `f' 18240 Floating-point register 18241 18242 `w' 18243 VFP floating-point register 18244 18245 `F' 18246 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 18247 4.0, 5.0 or 10.0 18248 18249 `G' 18250 Floating-point constant that would satisfy the constraint `F' 18251 if it were negated 18252 18253 `I' 18254 Integer that is valid as an immediate operand in a data 18255 processing instruction. That is, an integer in the range 0 18256 to 255 rotated by a multiple of 2 18257 18258 `J' 18259 Integer in the range -4095 to 4095 18260 18261 `K' 18262 Integer that satisfies constraint `I' when inverted (ones 18263 complement) 18264 18265 `L' 18266 Integer that satisfies constraint `I' when negated (twos 18267 complement) 18268 18269 `M' 18270 Integer in the range 0 to 32 18271 18272 `Q' 18273 A memory reference where the exact address is in a single 18274 register (``m'' is preferable for `asm' statements) 18275 18276 `R' 18277 An item in the constant pool 18278 18279 `S' 18280 A symbol in the text segment of the current file 18281 18282 `Uv' 18283 A memory reference suitable for VFP load/store insns 18284 (reg+constant offset) 18285 18286 `Uy' 18287 A memory reference suitable for iWMMXt load/store 18288 instructions. 18289 18290 `Uq' 18291 A memory reference suitable for the ARMv4 ldrsb instruction. 18292 18293_AVR family--`config/avr/constraints.md'_ 18294 18295 `l' 18296 Registers from r0 to r15 18297 18298 `a' 18299 Registers from r16 to r23 18300 18301 `d' 18302 Registers from r16 to r31 18303 18304 `w' 18305 Registers from r24 to r31. These registers can be used in 18306 `adiw' command 18307 18308 `e' 18309 Pointer register (r26-r31) 18310 18311 `b' 18312 Base pointer register (r28-r31) 18313 18314 `q' 18315 Stack pointer register (SPH:SPL) 18316 18317 `t' 18318 Temporary register r0 18319 18320 `x' 18321 Register pair X (r27:r26) 18322 18323 `y' 18324 Register pair Y (r29:r28) 18325 18326 `z' 18327 Register pair Z (r31:r30) 18328 18329 `I' 18330 Constant greater than -1, less than 64 18331 18332 `J' 18333 Constant greater than -64, less than 1 18334 18335 `K' 18336 Constant integer 2 18337 18338 `L' 18339 Constant integer 0 18340 18341 `M' 18342 Constant that fits in 8 bits 18343 18344 `N' 18345 Constant integer -1 18346 18347 `O' 18348 Constant integer 8, 16, or 24 18349 18350 `P' 18351 Constant integer 1 18352 18353 `G' 18354 A floating point constant 0.0 18355 18356_CRX Architecture--`config/crx/crx.h'_ 18357 18358 `b' 18359 Registers from r0 to r14 (registers without stack pointer) 18360 18361 `l' 18362 Register r16 (64-bit accumulator lo register) 18363 18364 `h' 18365 Register r17 (64-bit accumulator hi register) 18366 18367 `k' 18368 Register pair r16-r17. (64-bit accumulator lo-hi pair) 18369 18370 `I' 18371 Constant that fits in 3 bits 18372 18373 `J' 18374 Constant that fits in 4 bits 18375 18376 `K' 18377 Constant that fits in 5 bits 18378 18379 `L' 18380 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 18381 18382 `G' 18383 Floating point constant that is legal for store immediate 18384 18385_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 18386 18387 `b' 18388 Address base register 18389 18390 `f' 18391 Floating point register 18392 18393 `v' 18394 Vector register 18395 18396 `h' 18397 `MQ', `CTR', or `LINK' register 18398 18399 `q' 18400 `MQ' register 18401 18402 `c' 18403 `CTR' register 18404 18405 `l' 18406 `LINK' register 18407 18408 `x' 18409 `CR' register (condition register) number 0 18410 18411 `y' 18412 `CR' register (condition register) 18413 18414 `z' 18415 `FPMEM' stack memory for FPR-GPR transfers 18416 18417 `I' 18418 Signed 16-bit constant 18419 18420 `J' 18421 Unsigned 16-bit constant shifted left 16 bits (use `L' 18422 instead for `SImode' constants) 18423 18424 `K' 18425 Unsigned 16-bit constant 18426 18427 `L' 18428 Signed 16-bit constant shifted left 16 bits 18429 18430 `M' 18431 Constant larger than 31 18432 18433 `N' 18434 Exact power of 2 18435 18436 `O' 18437 Zero 18438 18439 `P' 18440 Constant whose negation is a signed 16-bit constant 18441 18442 `G' 18443 Floating point constant that can be loaded into a register 18444 with one instruction per word 18445 18446 `Q' 18447 Memory operand that is an offset from a register (`m' is 18448 preferable for `asm' statements) 18449 18450 `R' 18451 AIX TOC entry 18452 18453 `S' 18454 Constant suitable as a 64-bit mask operand 18455 18456 `T' 18457 Constant suitable as a 32-bit mask operand 18458 18459 `U' 18460 System V Release 4 small data area reference 18461 18462_MorphoTech family--`config/mt/mt.h'_ 18463 18464 `I' 18465 Constant for an arithmetic insn (16-bit signed integer). 18466 18467 `J' 18468 The constant 0. 18469 18470 `K' 18471 Constant for a logical insn (16-bit zero-extended integer). 18472 18473 `L' 18474 A constant that can be loaded with `lui' (i.e. the bottom 16 18475 bits are zero). 18476 18477 `M' 18478 A constant that takes two words to load (i.e. not matched by 18479 `I', `K', or `L'). 18480 18481 `N' 18482 Negative 16-bit constants other than -65536. 18483 18484 `O' 18485 A 15-bit signed integer constant. 18486 18487 `P' 18488 A positive 16-bit constant. 18489 18490_Intel 386--`config/i386/constraints.md'_ 18491 18492 `R' 18493 Legacy register--the eight integer registers available on all 18494 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 18495 18496 `q' 18497 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 18498 `c', and `d'; in 64-bit mode, any integer register. 18499 18500 `Q' 18501 Any register accessible as `Rh': `a', `b', `c', and `d'. 18502 18503 `a' 18504 The `a' register. 18505 18506 `b' 18507 The `b' register. 18508 18509 `c' 18510 The `c' register. 18511 18512 `d' 18513 The `d' register. 18514 18515 `S' 18516 The `si' register. 18517 18518 `D' 18519 The `di' register. 18520 18521 `A' 18522 The `a' and `d' registers, as a pair (for instructions that 18523 return half the result in one and half in the other). 18524 18525 `f' 18526 Any 80387 floating-point (stack) register. 18527 18528 `t' 18529 Top of 80387 floating-point stack (`%st(0)'). 18530 18531 `u' 18532 Second from top of 80387 floating-point stack (`%st(1)'). 18533 18534 `y' 18535 Any MMX register. 18536 18537 `x' 18538 Any SSE register. 18539 18540 `I' 18541 Integer constant in the range 0 ... 31, for 32-bit shifts. 18542 18543 `J' 18544 Integer constant in the range 0 ... 63, for 64-bit shifts. 18545 18546 `K' 18547 Signed 8-bit integer constant. 18548 18549 `L' 18550 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 18551 18552 `M' 18553 0, 1, 2, or 3 (shifts for the `lea' instruction). 18554 18555 `N' 18556 Unsigned 8-bit integer constant (for `in' and `out' 18557 instructions). 18558 18559 `G' 18560 Standard 80387 floating point constant. 18561 18562 `C' 18563 Standard SSE floating point constant. 18564 18565 `e' 18566 32-bit signed integer constant, or a symbolic reference known 18567 to fit that range (for immediate operands in sign-extending 18568 x86-64 instructions). 18569 18570 `Z' 18571 32-bit unsigned integer constant, or a symbolic reference 18572 known to fit that range (for immediate operands in 18573 zero-extending x86-64 instructions). 18574 18575 18576_Intel IA-64--`config/ia64/ia64.h'_ 18577 18578 `a' 18579 General register `r0' to `r3' for `addl' instruction 18580 18581 `b' 18582 Branch register 18583 18584 `c' 18585 Predicate register (`c' as in "conditional") 18586 18587 `d' 18588 Application register residing in M-unit 18589 18590 `e' 18591 Application register residing in I-unit 18592 18593 `f' 18594 Floating-point register 18595 18596 `m' 18597 Memory operand. Remember that `m' allows postincrement and 18598 postdecrement which require printing with `%Pn' on IA-64. 18599 Use `S' to disallow postincrement and postdecrement. 18600 18601 `G' 18602 Floating-point constant 0.0 or 1.0 18603 18604 `I' 18605 14-bit signed integer constant 18606 18607 `J' 18608 22-bit signed integer constant 18609 18610 `K' 18611 8-bit signed integer constant for logical instructions 18612 18613 `L' 18614 8-bit adjusted signed integer constant for compare pseudo-ops 18615 18616 `M' 18617 6-bit unsigned integer constant for shift counts 18618 18619 `N' 18620 9-bit signed integer constant for load and store 18621 postincrements 18622 18623 `O' 18624 The constant zero 18625 18626 `P' 18627 0 or -1 for `dep' instruction 18628 18629 `Q' 18630 Non-volatile memory for floating-point loads and stores 18631 18632 `R' 18633 Integer constant in the range 1 to 4 for `shladd' instruction 18634 18635 `S' 18636 Memory operand except postincrement and postdecrement 18637 18638_FRV--`config/frv/frv.h'_ 18639 18640 `a' 18641 Register in the class `ACC_REGS' (`acc0' to `acc7'). 18642 18643 `b' 18644 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 18645 18646 `c' 18647 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 18648 to `icc3'). 18649 18650 `d' 18651 Register in the class `GPR_REGS' (`gr0' to `gr63'). 18652 18653 `e' 18654 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 18655 registers are excluded not in the class but through the use 18656 of a machine mode larger than 4 bytes. 18657 18658 `f' 18659 Register in the class `FPR_REGS' (`fr0' to `fr63'). 18660 18661 `h' 18662 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 18663 registers are excluded not in the class but through the use 18664 of a machine mode larger than 4 bytes. 18665 18666 `l' 18667 Register in the class `LR_REG' (the `lr' register). 18668 18669 `q' 18670 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 18671 Register numbers not divisible by 4 are excluded not in the 18672 class but through the use of a machine mode larger than 8 18673 bytes. 18674 18675 `t' 18676 Register in the class `ICC_REGS' (`icc0' to `icc3'). 18677 18678 `u' 18679 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 18680 18681 `v' 18682 Register in the class `ICR_REGS' (`cc4' to `cc7'). 18683 18684 `w' 18685 Register in the class `FCR_REGS' (`cc0' to `cc3'). 18686 18687 `x' 18688 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 18689 Register numbers not divisible by 4 are excluded not in the 18690 class but through the use of a machine mode larger than 8 18691 bytes. 18692 18693 `z' 18694 Register in the class `SPR_REGS' (`lcr' and `lr'). 18695 18696 `A' 18697 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 18698 18699 `B' 18700 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 18701 18702 `C' 18703 Register in the class `CR_REGS' (`cc0' to `cc7'). 18704 18705 `G' 18706 Floating point constant zero 18707 18708 `I' 18709 6-bit signed integer constant 18710 18711 `J' 18712 10-bit signed integer constant 18713 18714 `L' 18715 16-bit signed integer constant 18716 18717 `M' 18718 16-bit unsigned integer constant 18719 18720 `N' 18721 12-bit signed integer constant that is negative--i.e. in the 18722 range of -2048 to -1 18723 18724 `O' 18725 Constant zero 18726 18727 `P' 18728 12-bit signed integer constant that is greater than 18729 zero--i.e. in the range of 1 to 2047. 18730 18731 18732_Blackfin family--`config/bfin/bfin.h'_ 18733 18734 `a' 18735 P register 18736 18737 `d' 18738 D register 18739 18740 `z' 18741 A call clobbered P register. 18742 18743 `D' 18744 Even-numbered D register 18745 18746 `W' 18747 Odd-numbered D register 18748 18749 `e' 18750 Accumulator register. 18751 18752 `A' 18753 Even-numbered accumulator register. 18754 18755 `B' 18756 Odd-numbered accumulator register. 18757 18758 `b' 18759 I register 18760 18761 `v' 18762 B register 18763 18764 `f' 18765 M register 18766 18767 `c' 18768 Registers used for circular buffering, i.e. I, B, or L 18769 registers. 18770 18771 `C' 18772 The CC register. 18773 18774 `t' 18775 LT0 or LT1. 18776 18777 `k' 18778 LC0 or LC1. 18779 18780 `u' 18781 LB0 or LB1. 18782 18783 `x' 18784 Any D, P, B, M, I or L register. 18785 18786 `y' 18787 Additional registers typically used only in prologues and 18788 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 18789 USP. 18790 18791 `w' 18792 Any register except accumulators or CC. 18793 18794 `Ksh' 18795 Signed 16 bit integer (in the range -32768 to 32767) 18796 18797 `Kuh' 18798 Unsigned 16 bit integer (in the range 0 to 65535) 18799 18800 `Ks7' 18801 Signed 7 bit integer (in the range -64 to 63) 18802 18803 `Ku7' 18804 Unsigned 7 bit integer (in the range 0 to 127) 18805 18806 `Ku5' 18807 Unsigned 5 bit integer (in the range 0 to 31) 18808 18809 `Ks4' 18810 Signed 4 bit integer (in the range -8 to 7) 18811 18812 `Ks3' 18813 Signed 3 bit integer (in the range -3 to 4) 18814 18815 `Ku3' 18816 Unsigned 3 bit integer (in the range 0 to 7) 18817 18818 `PN' 18819 Constant N, where N is a single-digit constant in the range 0 18820 to 4. 18821 18822 `M1' 18823 Constant 255. 18824 18825 `M2' 18826 Constant 65535. 18827 18828 `J' 18829 An integer constant with exactly a single bit set. 18830 18831 `L' 18832 An integer constant with all bits set except exactly one. 18833 18834 `H' 18835 18836 `Q' 18837 Any SYMBOL_REF. 18838 18839_M32C--`config/m32c/m32c.c'_ 18840 18841 `Rsp' 18842 `Rfb' 18843 `Rsb' 18844 `$sp', `$fb', `$sb'. 18845 18846 `Rcr' 18847 Any control register, when they're 16 bits wide (nothing if 18848 control registers are 24 bits wide) 18849 18850 `Rcl' 18851 Any control register, when they're 24 bits wide. 18852 18853 `R0w' 18854 `R1w' 18855 `R2w' 18856 `R3w' 18857 $r0, $r1, $r2, $r3. 18858 18859 `R02' 18860 $r0 or $r2, or $r2r0 for 32 bit values. 18861 18862 `R13' 18863 $r1 or $r3, or $r3r1 for 32 bit values. 18864 18865 `Rdi' 18866 A register that can hold a 64 bit value. 18867 18868 `Rhl' 18869 $r0 or $r1 (registers with addressable high/low bytes) 18870 18871 `R23' 18872 $r2 or $r3 18873 18874 `Raa' 18875 Address registers 18876 18877 `Raw' 18878 Address registers when they're 16 bits wide. 18879 18880 `Ral' 18881 Address registers when they're 24 bits wide. 18882 18883 `Rqi' 18884 Registers that can hold QI values. 18885 18886 `Rad' 18887 Registers that can be used with displacements ($a0, $a1, $sb). 18888 18889 `Rsi' 18890 Registers that can hold 32 bit values. 18891 18892 `Rhi' 18893 Registers that can hold 16 bit values. 18894 18895 `Rhc' 18896 Registers chat can hold 16 bit values, including all control 18897 registers. 18898 18899 `Rra' 18900 $r0 through R1, plus $a0 and $a1. 18901 18902 `Rfl' 18903 The flags register. 18904 18905 `Rmm' 18906 The memory-based pseudo-registers $mem0 through $mem15. 18907 18908 `Rpi' 18909 Registers that can hold pointers (16 bit registers for r8c, 18910 m16c; 24 bit registers for m32cm, m32c). 18911 18912 `Rpa' 18913 Matches multiple registers in a PARALLEL to form a larger 18914 register. Used to match function return values. 18915 18916 `Is3' 18917 -8 ... 7 18918 18919 `IS1' 18920 -128 ... 127 18921 18922 `IS2' 18923 -32768 ... 32767 18924 18925 `IU2' 18926 0 ... 65535 18927 18928 `In4' 18929 -8 ... -1 or 1 ... 8 18930 18931 `In5' 18932 -16 ... -1 or 1 ... 16 18933 18934 `In6' 18935 -32 ... -1 or 1 ... 32 18936 18937 `IM2' 18938 -65536 ... -1 18939 18940 `Ilb' 18941 An 8 bit value with exactly one bit set. 18942 18943 `Ilw' 18944 A 16 bit value with exactly one bit set. 18945 18946 `Sd' 18947 The common src/dest memory addressing modes. 18948 18949 `Sa' 18950 Memory addressed using $a0 or $a1. 18951 18952 `Si' 18953 Memory addressed with immediate addresses. 18954 18955 `Ss' 18956 Memory addressed using the stack pointer ($sp). 18957 18958 `Sf' 18959 Memory addressed using the frame base register ($fb). 18960 18961 `Ss' 18962 Memory addressed using the small base register ($sb). 18963 18964 `S1' 18965 $r1h 18966 18967_MIPS--`config/mips/constraints.md'_ 18968 18969 `d' 18970 An address register. This is equivalent to `r' unless 18971 generating MIPS16 code. 18972 18973 `f' 18974 A floating-point register (if available). 18975 18976 `h' 18977 The `hi' register. 18978 18979 `l' 18980 The `lo' register. 18981 18982 `x' 18983 The `hi' and `lo' registers. 18984 18985 `c' 18986 A register suitable for use in an indirect jump. This will 18987 always be `$25' for `-mabicalls'. 18988 18989 `y' 18990 Equivalent to `r'; retained for backwards compatibility. 18991 18992 `z' 18993 A floating-point condition code register. 18994 18995 `I' 18996 A signed 16-bit constant (for arithmetic instructions). 18997 18998 `J' 18999 Integer zero. 19000 19001 `K' 19002 An unsigned 16-bit constant (for logic instructions). 19003 19004 `L' 19005 A signed 32-bit constant in which the lower 16 bits are zero. 19006 Such constants can be loaded using `lui'. 19007 19008 `M' 19009 A constant that cannot be loaded using `lui', `addiu' or 19010 `ori'. 19011 19012 `N' 19013 A constant in the range -65535 to -1 (inclusive). 19014 19015 `O' 19016 A signed 15-bit constant. 19017 19018 `P' 19019 A constant in the range 1 to 65535 (inclusive). 19020 19021 `G' 19022 Floating-point zero. 19023 19024 `R' 19025 An address that can be used in a non-macro load or store. 19026 19027_Motorola 680x0--`config/m68k/m68k.h'_ 19028 19029 `a' 19030 Address register 19031 19032 `d' 19033 Data register 19034 19035 `f' 19036 68881 floating-point register, if available 19037 19038 `I' 19039 Integer in the range 1 to 8 19040 19041 `J' 19042 16-bit signed number 19043 19044 `K' 19045 Signed number whose magnitude is greater than 0x80 19046 19047 `L' 19048 Integer in the range -8 to -1 19049 19050 `M' 19051 Signed number whose magnitude is greater than 0x100 19052 19053 `G' 19054 Floating point constant that is not a 68881 constant 19055 19056_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 19057 19058 `a' 19059 Register `a' 19060 19061 `b' 19062 Register `b' 19063 19064 `d' 19065 Register `d' 19066 19067 `q' 19068 An 8-bit register 19069 19070 `t' 19071 Temporary soft register _.tmp 19072 19073 `u' 19074 A soft register _.d1 to _.d31 19075 19076 `w' 19077 Stack pointer register 19078 19079 `x' 19080 Register `x' 19081 19082 `y' 19083 Register `y' 19084 19085 `z' 19086 Pseudo register `z' (replaced by `x' or `y' at the end) 19087 19088 `A' 19089 An address register: x, y or z 19090 19091 `B' 19092 An address register: x or y 19093 19094 `D' 19095 Register pair (x:d) to form a 32-bit value 19096 19097 `L' 19098 Constants in the range -65536 to 65535 19099 19100 `M' 19101 Constants whose 16-bit low part is zero 19102 19103 `N' 19104 Constant integer 1 or -1 19105 19106 `O' 19107 Constant integer 16 19108 19109 `P' 19110 Constants in the range -8 to 2 19111 19112 19113_SPARC--`config/sparc/sparc.h'_ 19114 19115 `f' 19116 Floating-point register on the SPARC-V8 architecture and 19117 lower floating-point register on the SPARC-V9 architecture. 19118 19119 `e' 19120 Floating-point register. It is equivalent to `f' on the 19121 SPARC-V8 architecture and contains both lower and upper 19122 floating-point registers on the SPARC-V9 architecture. 19123 19124 `c' 19125 Floating-point condition code register. 19126 19127 `d' 19128 Lower floating-point register. It is only valid on the 19129 SPARC-V9 architecture when the Visual Instruction Set is 19130 available. 19131 19132 `b' 19133 Floating-point register. It is only valid on the SPARC-V9 19134 architecture when the Visual Instruction Set is available. 19135 19136 `h' 19137 64-bit global or out register for the SPARC-V8+ architecture. 19138 19139 `I' 19140 Signed 13-bit constant 19141 19142 `J' 19143 Zero 19144 19145 `K' 19146 32-bit constant with the low 12 bits clear (a constant that 19147 can be loaded with the `sethi' instruction) 19148 19149 `L' 19150 A constant in the range supported by `movcc' instructions 19151 19152 `M' 19153 A constant in the range supported by `movrcc' instructions 19154 19155 `N' 19156 Same as `K', except that it verifies that bits that are not 19157 in the lower 32-bit range are all zero. Must be used instead 19158 of `K' for modes wider than `SImode' 19159 19160 `O' 19161 The constant 4096 19162 19163 `G' 19164 Floating-point zero 19165 19166 `H' 19167 Signed 13-bit constant, sign-extended to 32 or 64 bits 19168 19169 `Q' 19170 Floating-point constant whose integral representation can be 19171 moved into an integer register using a single sethi 19172 instruction 19173 19174 `R' 19175 Floating-point constant whose integral representation can be 19176 moved into an integer register using a single mov instruction 19177 19178 `S' 19179 Floating-point constant whose integral representation can be 19180 moved into an integer register using a high/lo_sum 19181 instruction sequence 19182 19183 `T' 19184 Memory address aligned to an 8-byte boundary 19185 19186 `U' 19187 Even register 19188 19189 `W' 19190 Memory address for `e' constraint registers 19191 19192 `Y' 19193 Vector zero 19194 19195 19196_TMS320C3x/C4x--`config/c4x/c4x.h'_ 19197 19198 `a' 19199 Auxiliary (address) register (ar0-ar7) 19200 19201 `b' 19202 Stack pointer register (sp) 19203 19204 `c' 19205 Standard (32-bit) precision integer register 19206 19207 `f' 19208 Extended (40-bit) precision register (r0-r11) 19209 19210 `k' 19211 Block count register (bk) 19212 19213 `q' 19214 Extended (40-bit) precision low register (r0-r7) 19215 19216 `t' 19217 Extended (40-bit) precision register (r0-r1) 19218 19219 `u' 19220 Extended (40-bit) precision register (r2-r3) 19221 19222 `v' 19223 Repeat count register (rc) 19224 19225 `x' 19226 Index register (ir0-ir1) 19227 19228 `y' 19229 Status (condition code) register (st) 19230 19231 `z' 19232 Data page register (dp) 19233 19234 `G' 19235 Floating-point zero 19236 19237 `H' 19238 Immediate 16-bit floating-point constant 19239 19240 `I' 19241 Signed 16-bit constant 19242 19243 `J' 19244 Signed 8-bit constant 19245 19246 `K' 19247 Signed 5-bit constant 19248 19249 `L' 19250 Unsigned 16-bit constant 19251 19252 `M' 19253 Unsigned 8-bit constant 19254 19255 `N' 19256 Ones complement of unsigned 16-bit constant 19257 19258 `O' 19259 High 16-bit constant (32-bit constant with 16 LSBs zero) 19260 19261 `Q' 19262 Indirect memory reference with signed 8-bit or index register 19263 displacement 19264 19265 `R' 19266 Indirect memory reference with unsigned 5-bit displacement 19267 19268 `S' 19269 Indirect memory reference with 1 bit or index register 19270 displacement 19271 19272 `T' 19273 Direct memory reference 19274 19275 `U' 19276 Symbolic address 19277 19278 19279_S/390 and zSeries--`config/s390/s390.h'_ 19280 19281 `a' 19282 Address register (general purpose register except r0) 19283 19284 `c' 19285 Condition code register 19286 19287 `d' 19288 Data register (arbitrary general purpose register) 19289 19290 `f' 19291 Floating-point register 19292 19293 `I' 19294 Unsigned 8-bit constant (0-255) 19295 19296 `J' 19297 Unsigned 12-bit constant (0-4095) 19298 19299 `K' 19300 Signed 16-bit constant (-32768-32767) 19301 19302 `L' 19303 Value appropriate as displacement. 19304 `(0..4095)' 19305 for short displacement 19306 19307 `(-524288..524287)' 19308 for long displacement 19309 19310 `M' 19311 Constant integer with a value of 0x7fffffff. 19312 19313 `N' 19314 Multiple letter constraint followed by 4 parameter letters. 19315 `0..9:' 19316 number of the part counting from most to least 19317 significant 19318 19319 `H,Q:' 19320 mode of the part 19321 19322 `D,S,H:' 19323 mode of the containing operand 19324 19325 `0,F:' 19326 value of the other parts (F--all bits set) 19327 The constraint matches if the specified part of a constant 19328 has a value different from it's other parts. 19329 19330 `Q' 19331 Memory reference without index register and with short 19332 displacement. 19333 19334 `R' 19335 Memory reference with index register and short displacement. 19336 19337 `S' 19338 Memory reference without index register but with long 19339 displacement. 19340 19341 `T' 19342 Memory reference with index register and long displacement. 19343 19344 `U' 19345 Pointer with short displacement. 19346 19347 `W' 19348 Pointer with long displacement. 19349 19350 `Y' 19351 Shift count operand. 19352 19353 19354_Score family--`config/score/score.h'_ 19355 19356 `d' 19357 Registers from r0 to r32. 19358 19359 `e' 19360 Registers from r0 to r16. 19361 19362 `t' 19363 r8--r11 or r22--r27 registers. 19364 19365 `h' 19366 hi register. 19367 19368 `l' 19369 lo register. 19370 19371 `x' 19372 hi + lo register. 19373 19374 `q' 19375 cnt register. 19376 19377 `y' 19378 lcb register. 19379 19380 `z' 19381 scb register. 19382 19383 `a' 19384 cnt + lcb + scb register. 19385 19386 `c' 19387 cr0--cr15 register. 19388 19389 `b' 19390 cp1 registers. 19391 19392 `f' 19393 cp2 registers. 19394 19395 `i' 19396 cp3 registers. 19397 19398 `j' 19399 cp1 + cp2 + cp3 registers. 19400 19401 `I' 19402 High 16-bit constant (32-bit constant with 16 LSBs zero). 19403 19404 `J' 19405 Unsigned 5 bit integer (in the range 0 to 31). 19406 19407 `K' 19408 Unsigned 16 bit integer (in the range 0 to 65535). 19409 19410 `L' 19411 Signed 16 bit integer (in the range -32768 to 32767). 19412 19413 `M' 19414 Unsigned 14 bit integer (in the range 0 to 16383). 19415 19416 `N' 19417 Signed 14 bit integer (in the range -8192 to 8191). 19418 19419 `Z' 19420 Any SYMBOL_REF. 19421 19422_Xstormy16--`config/stormy16/stormy16.h'_ 19423 19424 `a' 19425 Register r0. 19426 19427 `b' 19428 Register r1. 19429 19430 `c' 19431 Register r2. 19432 19433 `d' 19434 Register r8. 19435 19436 `e' 19437 Registers r0 through r7. 19438 19439 `t' 19440 Registers r0 and r1. 19441 19442 `y' 19443 The carry register. 19444 19445 `z' 19446 Registers r8 and r9. 19447 19448 `I' 19449 A constant between 0 and 3 inclusive. 19450 19451 `J' 19452 A constant that has exactly one bit set. 19453 19454 `K' 19455 A constant that has exactly one bit clear. 19456 19457 `L' 19458 A constant between 0 and 255 inclusive. 19459 19460 `M' 19461 A constant between -255 and 0 inclusive. 19462 19463 `N' 19464 A constant between -3 and 0 inclusive. 19465 19466 `O' 19467 A constant between 1 and 4 inclusive. 19468 19469 `P' 19470 A constant between -4 and -1 inclusive. 19471 19472 `Q' 19473 A memory reference that is a stack push. 19474 19475 `R' 19476 A memory reference that is a stack pop. 19477 19478 `S' 19479 A memory reference that refers to a constant address of known 19480 value. 19481 19482 `T' 19483 The register indicated by Rx (not implemented yet). 19484 19485 `U' 19486 A constant that is not between 2 and 15 inclusive. 19487 19488 `Z' 19489 The constant 0. 19490 19491 19492_Xtensa--`config/xtensa/xtensa.h'_ 19493 19494 `a' 19495 General-purpose 32-bit register 19496 19497 `b' 19498 One-bit boolean register 19499 19500 `A' 19501 MAC16 40-bit accumulator register 19502 19503 `I' 19504 Signed 12-bit integer constant, for use in MOVI instructions 19505 19506 `J' 19507 Signed 8-bit integer constant, for use in ADDI instructions 19508 19509 `K' 19510 Integer constant valid for BccI instructions 19511 19512 `L' 19513 Unsigned constant valid for BccUI instructions 19514 19515 19516 19517 19518File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 19519 195205.37 Controlling Names Used in Assembler Code 19521============================================= 19522 19523You can specify the name to be used in the assembler code for a C 19524function or variable by writing the `asm' (or `__asm__') keyword after 19525the declarator as follows: 19526 19527 int foo asm ("myfoo") = 2; 19528 19529This specifies that the name to be used for the variable `foo' in the 19530assembler code should be `myfoo' rather than the usual `_foo'. 19531 19532 On systems where an underscore is normally prepended to the name of a C 19533function or variable, this feature allows you to define names for the 19534linker that do not start with an underscore. 19535 19536 It does not make sense to use this feature with a non-static local 19537variable since such variables do not have assembler names. If you are 19538trying to put the variable in a particular register, see *Note Explicit 19539Reg Vars::. GCC presently accepts such code with a warning, but will 19540probably be changed to issue an error, rather than a warning, in the 19541future. 19542 19543 You cannot use `asm' in this way in a function _definition_; but you 19544can get the same effect by writing a declaration for the function 19545before its definition and putting `asm' there, like this: 19546 19547 extern func () asm ("FUNC"); 19548 19549 func (x, y) 19550 int x, y; 19551 /* ... */ 19552 19553 It is up to you to make sure that the assembler names you choose do not 19554conflict with any other assembler symbols. Also, you must not use a 19555register name; that would produce completely invalid assembler code. 19556GCC does not as yet have the ability to store static variables in 19557registers. Perhaps that will be added. 19558 19559 19560File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 19561 195625.38 Variables in Specified Registers 19563===================================== 19564 19565GNU C allows you to put a few global variables into specified hardware 19566registers. You can also specify the register in which an ordinary 19567register variable should be allocated. 19568 19569 * Global register variables reserve registers throughout the program. 19570 This may be useful in programs such as programming language 19571 interpreters which have a couple of global variables that are 19572 accessed very often. 19573 19574 * Local register variables in specific registers do not reserve the 19575 registers, except at the point where they are used as input or 19576 output operands in an `asm' statement and the `asm' statement 19577 itself is not deleted. The compiler's data flow analysis is 19578 capable of determining where the specified registers contain live 19579 values, and where they are available for other uses. Stores into 19580 local register variables may be deleted when they appear to be 19581 dead according to dataflow analysis. References to local register 19582 variables may be deleted or moved or simplified. 19583 19584 These local variables are sometimes convenient for use with the 19585 extended `asm' feature (*note Extended Asm::), if you want to 19586 write one output of the assembler instruction directly into a 19587 particular register. (This will work provided the register you 19588 specify fits the constraints specified for that operand in the 19589 `asm'.) 19590 19591* Menu: 19592 19593* Global Reg Vars:: 19594* Local Reg Vars:: 19595 19596 19597File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 19598 195995.38.1 Defining Global Register Variables 19600----------------------------------------- 19601 19602You can define a global register variable in GNU C like this: 19603 19604 register int *foo asm ("a5"); 19605 19606Here `a5' is the name of the register which should be used. Choose a 19607register which is normally saved and restored by function calls on your 19608machine, so that library routines will not clobber it. 19609 19610 Naturally the register name is cpu-dependent, so you would need to 19611conditionalize your program according to cpu type. The register `a5' 19612would be a good choice on a 68000 for a variable of pointer type. On 19613machines with register windows, be sure to choose a "global" register 19614that is not affected magically by the function call mechanism. 19615 19616 In addition, operating systems on one type of cpu may differ in how 19617they name the registers; then you would need additional conditionals. 19618For example, some 68000 operating systems call this register `%a5'. 19619 19620 Eventually there may be a way of asking the compiler to choose a 19621register automatically, but first we need to figure out how it should 19622choose and how to enable you to guide the choice. No solution is 19623evident. 19624 19625 Defining a global register variable in a certain register reserves that 19626register entirely for this use, at least within the current compilation. 19627The register will not be allocated for any other purpose in the 19628functions in the current compilation. The register will not be saved 19629and restored by these functions. Stores into this register are never 19630deleted even if they would appear to be dead, but references may be 19631deleted or moved or simplified. 19632 19633 It is not safe to access the global register variables from signal 19634handlers, or from more than one thread of control, because the system 19635library routines may temporarily use the register for other things 19636(unless you recompile them specially for the task at hand). 19637 19638 It is not safe for one function that uses a global register variable to 19639call another such function `foo' by way of a third function `lose' that 19640was compiled without knowledge of this variable (i.e. in a different 19641source file in which the variable wasn't declared). This is because 19642`lose' might save the register and put some other value there. For 19643example, you can't expect a global register variable to be available in 19644the comparison-function that you pass to `qsort', since `qsort' might 19645have put something else in that register. (If you are prepared to 19646recompile `qsort' with the same global register variable, you can solve 19647this problem.) 19648 19649 If you want to recompile `qsort' or other source files which do not 19650actually use your global register variable, so that they will not use 19651that register for any other purpose, then it suffices to specify the 19652compiler option `-ffixed-REG'. You need not actually add a global 19653register declaration to their source code. 19654 19655 A function which can alter the value of a global register variable 19656cannot safely be called from a function compiled without this variable, 19657because it could clobber the value the caller expects to find there on 19658return. Therefore, the function which is the entry point into the part 19659of the program that uses the global register variable must explicitly 19660save and restore the value which belongs to its caller. 19661 19662 On most machines, `longjmp' will restore to each global register 19663variable the value it had at the time of the `setjmp'. On some 19664machines, however, `longjmp' will not change the value of global 19665register variables. To be portable, the function that called `setjmp' 19666should make other arrangements to save the values of the global register 19667variables, and to restore them in a `longjmp'. This way, the same 19668thing will happen regardless of what `longjmp' does. 19669 19670 All global register variable declarations must precede all function 19671definitions. If such a declaration could appear after function 19672definitions, the declaration would be too late to prevent the register 19673from being used for other purposes in the preceding functions. 19674 19675 Global register variables may not have initial values, because an 19676executable file has no means to supply initial contents for a register. 19677 19678 On the SPARC, there are reports that g3 ... g7 are suitable registers, 19679but certain library functions, such as `getwd', as well as the 19680subroutines for division and remainder, modify g3 and g4. g1 and g2 19681are local temporaries. 19682 19683 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 19684course, it will not do to use more than a few of those. 19685 19686 19687File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 19688 196895.38.2 Specifying Registers for Local Variables 19690----------------------------------------------- 19691 19692You can define a local register variable with a specified register like 19693this: 19694 19695 register int *foo asm ("a5"); 19696 19697Here `a5' is the name of the register which should be used. Note that 19698this is the same syntax used for defining global register variables, 19699but for a local variable it would appear within a function. 19700 19701 Naturally the register name is cpu-dependent, but this is not a 19702problem, since specific registers are most often useful with explicit 19703assembler instructions (*note Extended Asm::). Both of these things 19704generally require that you conditionalize your program according to cpu 19705type. 19706 19707 In addition, operating systems on one type of cpu may differ in how 19708they name the registers; then you would need additional conditionals. 19709For example, some 68000 operating systems call this register `%a5'. 19710 19711 Defining such a register variable does not reserve the register; it 19712remains available for other uses in places where flow control determines 19713the variable's value is not live. 19714 19715 This option does not guarantee that GCC will generate code that has 19716this variable in the register you specify at all times. You may not 19717code an explicit reference to this register in the _assembler 19718instruction template_ part of an `asm' statement and assume it will 19719always refer to this variable. However, using the variable as an `asm' 19720_operand_ guarantees that the specified register is used for the 19721operand. 19722 19723 Stores into local register variables may be deleted when they appear 19724to be dead according to dataflow analysis. References to local 19725register variables may be deleted or moved or simplified. 19726 19727 As for global register variables, it's recommended that you choose a 19728register which is normally saved and restored by function calls on your 19729machine, so that library routines will not clobber it. A common 19730pitfall is to initialize multiple call-clobbered registers with 19731arbitrary expressions, where a function call or library call for an 19732arithmetic operator will overwrite a register value from a previous 19733assignment, for example `r0' below: 19734 register int *p1 asm ("r0") = ...; 19735 register int *p2 asm ("r1") = ...; 19736 In those cases, a solution is to use a temporary variable for each 19737arbitrary expression. *Note Example of asm with clobbered asm reg::. 19738 19739 19740File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 19741 197425.39 Alternate Keywords 19743======================= 19744 19745`-ansi' and the various `-std' options disable certain keywords. This 19746causes trouble when you want to use GNU C extensions, or a 19747general-purpose header file that should be usable by all programs, 19748including ISO C programs. The keywords `asm', `typeof' and `inline' 19749are not available in programs compiled with `-ansi' or `-std' (although 19750`inline' can be used in a program compiled with `-std=c99'). The ISO 19751C99 keyword `restrict' is only available when `-std=gnu99' (which will 19752eventually be the default) or `-std=c99' (or the equivalent 19753`-std=iso9899:1999') is used. 19754 19755 The way to solve these problems is to put `__' at the beginning and 19756end of each problematical keyword. For example, use `__asm__' instead 19757of `asm', and `__inline__' instead of `inline'. 19758 19759 Other C compilers won't accept these alternative keywords; if you want 19760to compile with another compiler, you can define the alternate keywords 19761as macros to replace them with the customary keywords. It looks like 19762this: 19763 19764 #ifndef __GNUC__ 19765 #define __asm__ asm 19766 #endif 19767 19768 `-pedantic' and other options cause warnings for many GNU C extensions. 19769You can prevent such warnings within one expression by writing 19770`__extension__' before the expression. `__extension__' has no effect 19771aside from this. 19772 19773 19774File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 19775 197765.40 Incomplete `enum' Types 19777============================ 19778 19779You can define an `enum' tag without specifying its possible values. 19780This results in an incomplete type, much like what you get if you write 19781`struct foo' without describing the elements. A later declaration 19782which does specify the possible values completes the type. 19783 19784 You can't allocate variables or storage using the type while it is 19785incomplete. However, you can work with pointers to that type. 19786 19787 This extension may not be very useful, but it makes the handling of 19788`enum' more consistent with the way `struct' and `union' are handled. 19789 19790 This extension is not supported by GNU C++. 19791 19792 19793File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 19794 197955.41 Function Names as Strings 19796============================== 19797 19798GCC provides three magic variables which hold the name of the current 19799function, as a string. The first of these is `__func__', which is part 19800of the C99 standard: 19801 19802 The identifier `__func__' is implicitly declared by the translator 19803 as if, immediately following the opening brace of each function 19804 definition, the declaration 19805 static const char __func__[] = "function-name"; 19806 19807 appeared, where function-name is the name of the lexically-enclosing 19808 function. This name is the unadorned name of the function. 19809 19810 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 19811recognize only this name. However, it is not standardized. For 19812maximum portability, we recommend you use `__func__', but provide a 19813fallback definition with the preprocessor: 19814 19815 #if __STDC_VERSION__ < 199901L 19816 # if __GNUC__ >= 2 19817 # define __func__ __FUNCTION__ 19818 # else 19819 # define __func__ "<unknown>" 19820 # endif 19821 #endif 19822 19823 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 19824However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 19825the function as well as its bare name. For example, this program: 19826 19827 extern "C" { 19828 extern int printf (char *, ...); 19829 } 19830 19831 class a { 19832 public: 19833 void sub (int i) 19834 { 19835 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 19836 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 19837 } 19838 }; 19839 19840 int 19841 main (void) 19842 { 19843 a ax; 19844 ax.sub (0); 19845 return 0; 19846 } 19847 19848gives this output: 19849 19850 __FUNCTION__ = sub 19851 __PRETTY_FUNCTION__ = void a::sub(int) 19852 19853 These identifiers are not preprocessor macros. In GCC 3.3 and 19854earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 19855treated as string literals; they could be used to initialize `char' 19856arrays, and they could be concatenated with other string literals. GCC 198573.4 and later treat them as variables, like `__func__'. In C++, 19858`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 19859 19860 19861File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 19862 198635.42 Getting the Return or Frame Address of a Function 19864====================================================== 19865 19866These functions may be used to get information about the callers of a 19867function. 19868 19869 -- Built-in Function: void * __builtin_return_address (unsigned int 19870 LEVEL) 19871 This function returns the return address of the current function, 19872 or of one of its callers. The LEVEL argument is number of frames 19873 to scan up the call stack. A value of `0' yields the return 19874 address of the current function, a value of `1' yields the return 19875 address of the caller of the current function, and so forth. When 19876 inlining the expected behavior is that the function will return 19877 the address of the function that will be returned to. To work 19878 around this behavior use the `noinline' function attribute. 19879 19880 The LEVEL argument must be a constant integer. 19881 19882 On some machines it may be impossible to determine the return 19883 address of any function other than the current one; in such cases, 19884 or when the top of the stack has been reached, this function will 19885 return `0' or a random value. In addition, 19886 `__builtin_frame_address' may be used to determine if the top of 19887 the stack has been reached. 19888 19889 This function should only be used with a nonzero argument for 19890 debugging purposes. 19891 19892 -- Built-in Function: void * __builtin_frame_address (unsigned int 19893 LEVEL) 19894 This function is similar to `__builtin_return_address', but it 19895 returns the address of the function frame rather than the return 19896 address of the function. Calling `__builtin_frame_address' with a 19897 value of `0' yields the frame address of the current function, a 19898 value of `1' yields the frame address of the caller of the current 19899 function, and so forth. 19900 19901 The frame is the area on the stack which holds local variables and 19902 saved registers. The frame address is normally the address of the 19903 first word pushed on to the stack by the function. However, the 19904 exact definition depends upon the processor and the calling 19905 convention. If the processor has a dedicated frame pointer 19906 register, and the function has a frame, then 19907 `__builtin_frame_address' will return the value of the frame 19908 pointer register. 19909 19910 On some machines it may be impossible to determine the frame 19911 address of any function other than the current one; in such cases, 19912 or when the top of the stack has been reached, this function will 19913 return `0' if the first frame pointer is properly initialized by 19914 the startup code. 19915 19916 This function should only be used with a nonzero argument for 19917 debugging purposes. 19918 19919 19920File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 19921 199225.43 Using vector instructions through built-in functions 19923========================================================= 19924 19925On some targets, the instruction set contains SIMD vector instructions 19926that operate on multiple values contained in one large register at the 19927same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions 19928can be used this way. 19929 19930 The first step in using these extensions is to provide the necessary 19931data types. This should be done using an appropriate `typedef': 19932 19933 typedef int v4si __attribute__ ((vector_size (16))); 19934 19935 The `int' type specifies the base type, while the attribute specifies 19936the vector size for the variable, measured in bytes. For example, the 19937declaration above causes the compiler to set the mode for the `v4si' 19938type to be 16 bytes wide and divided into `int' sized units. For a 1993932-bit `int' this means a vector of 4 units of 4 bytes, and the 19940corresponding mode of `foo' will be V4SI. 19941 19942 The `vector_size' attribute is only applicable to integral and float 19943scalars, although arrays, pointers, and function return values are 19944allowed in conjunction with this construct. 19945 19946 All the basic integer types can be used as base types, both as signed 19947and as unsigned: `char', `short', `int', `long', `long long'. In 19948addition, `float' and `double' can be used to build floating-point 19949vector types. 19950 19951 Specifying a combination that is not valid for the current architecture 19952will cause GCC to synthesize the instructions using a narrower mode. 19953For example, if you specify a variable of type `V4SI' and your 19954architecture does not allow for this specific SIMD type, GCC will 19955produce code that uses 4 `SIs'. 19956 19957 The types defined in this manner can be used with a subset of normal C 19958operations. Currently, GCC will allow using the following operators on 19959these types: `+, -, *, /, unary minus, ^, |, &, ~'. 19960 19961 The operations behave like C++ `valarrays'. Addition is defined as 19962the addition of the corresponding elements of the operands. For 19963example, in the code below, each of the 4 elements in A will be added 19964to the corresponding 4 elements in B and the resulting vector will be 19965stored in C. 19966 19967 typedef int v4si __attribute__ ((vector_size (16))); 19968 19969 v4si a, b, c; 19970 19971 c = a + b; 19972 19973 Subtraction, multiplication, division, and the logical operations 19974operate in a similar manner. Likewise, the result of using the unary 19975minus or complement operators on a vector type is a vector whose 19976elements are the negative or complemented values of the corresponding 19977elements in the operand. 19978 19979 You can declare variables and use them in function calls and returns, 19980as well as in assignments and some casts. You can specify a vector 19981type as a return type for a function. Vector types can also be used as 19982function arguments. It is possible to cast from one vector type to 19983another, provided they are of the same size (in fact, you can also cast 19984vectors to and from other datatypes of the same size). 19985 19986 You cannot operate between vectors of different lengths or different 19987signedness without a cast. 19988 19989 A port that supports hardware vector operations, usually provides a set 19990of built-in functions that can be used to operate on vectors. For 19991example, a function to add two vectors and multiply the result by a 19992third could look like this: 19993 19994 v4si f (v4si a, v4si b, v4si c) 19995 { 19996 v4si tmp = __builtin_addv4si (a, b); 19997 return __builtin_mulv4si (tmp, c); 19998 } 19999 20000 20001File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 20002 200035.44 Offsetof 20004============= 20005 20006GCC implements for both C and C++ a syntactic extension to implement 20007the `offsetof' macro. 20008 20009 primary: 20010 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 20011 20012 offsetof_member_designator: 20013 `identifier' 20014 | offsetof_member_designator "." `identifier' 20015 | offsetof_member_designator "[" `expr' "]" 20016 20017 This extension is sufficient such that 20018 20019 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 20020 20021 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 20022dependent. In either case, MEMBER may consist of a single identifier, 20023or a sequence of member accesses and array references. 20024 20025 20026File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 20027 200285.45 Built-in functions for atomic memory access 20029================================================ 20030 20031The following builtins are intended to be compatible with those 20032described in the `Intel Itanium Processor-specific Application Binary 20033Interface', section 7.4. As such, they depart from the normal GCC 20034practice of using the "__builtin_" prefix, and further that they are 20035overloaded such that they work on multiple types. 20036 20037 The definition given in the Intel documentation allows only for the 20038use of the types `int', `long', `long long' as well as their unsigned 20039counterparts. GCC will allow any integral scalar or pointer type that 20040is 1, 2, 4 or 8 bytes in length. 20041 20042 Not all operations are supported by all target processors. If a 20043particular operation cannot be implemented on the target processor, a 20044warning will be generated and a call an external function will be 20045generated. The external function will carry the same name as the 20046builtin, with an additional suffix `_N' where N is the size of the data 20047type. 20048 20049 In most cases, these builtins are considered a "full barrier". That 20050is, no memory operand will be moved across the operation, either 20051forward or backward. Further, instructions will be issued as necessary 20052to prevent the processor from speculating loads across the operation 20053and from queuing stores after the operation. 20054 20055 All of the routines are are described in the Intel documentation to 20056take "an optional list of variables protected by the memory barrier". 20057It's not clear what is meant by that; it could mean that _only_ the 20058following variables are protected, or it could mean that these variables 20059should in addition be protected. At present GCC ignores this list and 20060protects all variables which are globally accessible. If in the future 20061we make some use of this list, an empty list will continue to mean all 20062globally accessible variables. 20063 20064`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 20065`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 20066`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 20067`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 20068`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 20069`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 20070 These builtins perform the operation suggested by the name, and 20071 returns the value that had previously been in memory. That is, 20072 20073 { tmp = *ptr; *ptr OP= value; return tmp; } 20074 { tmp = *ptr; *ptr = ~tmp & value; return tmp; } // nand 20075 20076`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 20077`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 20078`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 20079`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 20080`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 20081`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 20082 These builtins perform the operation suggested by the name, and 20083 return the new value. That is, 20084 20085 { *ptr OP= value; return *ptr; } 20086 { *ptr = ~*ptr & value; return *ptr; } // nand 20087 20088`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 20089`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 20090 These builtins perform an atomic compare and swap. That is, if 20091 the current value of `*PTR' is OLDVAL, then write NEWVAL into 20092 `*PTR'. 20093 20094 The "bool" version returns true if the comparison is successful and 20095 NEWVAL was written. The "val" version returns the contents of 20096 `*PTR' before the operation. 20097 20098`__sync_synchronize (...)' 20099 This builtin issues a full memory barrier. 20100 20101`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 20102 This builtin, as described by Intel, is not a traditional 20103 test-and-set operation, but rather an atomic exchange operation. 20104 It writes VALUE into `*PTR', and returns the previous contents of 20105 `*PTR'. 20106 20107 Many targets have only minimal support for such locks, and do not 20108 support a full exchange operation. In this case, a target may 20109 support reduced functionality here by which the _only_ valid value 20110 to store is the immediate constant 1. The exact value actually 20111 stored in `*PTR' is implementation defined. 20112 20113 This builtin is not a full barrier, but rather an "acquire 20114 barrier". This means that references after the builtin cannot 20115 move to (or be speculated to) before the builtin, but previous 20116 memory stores may not be globally visible yet, and previous memory 20117 loads may not yet be satisfied. 20118 20119`void __sync_lock_release (TYPE *ptr, ...)' 20120 This builtin releases the lock acquired by 20121 `__sync_lock_test_and_set'. Normally this means writing the 20122 constant 0 to `*PTR'. 20123 20124 This builtin is not a full barrier, but rather a "release barrier". 20125 This means that all previous memory stores are globally visible, 20126 and all previous memory loads have been satisfied, but following 20127 memory reads are not prevented from being speculated to before the 20128 barrier. 20129 20130 20131File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 20132 201335.46 Object Size Checking Builtins 20134================================== 20135 20136GCC implements a limited buffer overflow protection mechanism that can 20137prevent some buffer overflow attacks. 20138 20139 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 20140 TYPE) 20141 is a built-in construct that returns a constant number of bytes 20142 from PTR to the end of the object PTR pointer points to (if known 20143 at compile time). `__builtin_object_size' never evaluates its 20144 arguments for side-effects. If there are any side-effects in 20145 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 20146 for TYPE 2 or 3. If there are multiple objects PTR can point to 20147 and all of them are known at compile time, the returned number is 20148 the maximum of remaining byte counts in those objects if TYPE & 2 20149 is 0 and minimum if nonzero. If it is not possible to determine 20150 which objects PTR points to at compile time, 20151 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 20152 1 and `(size_t) 0' for TYPE 2 or 3. 20153 20154 TYPE is an integer constant from 0 to 3. If the least significant 20155 bit is clear, objects are whole variables, if it is set, a closest 20156 surrounding subobject is considered the object a pointer points to. 20157 The second bit determines if maximum or minimum of remaining bytes 20158 is computed. 20159 20160 struct V { char buf1[10]; int b; char buf2[10]; } var; 20161 char *p = &var.buf1[1], *q = &var.b; 20162 20163 /* Here the object p points to is var. */ 20164 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 20165 /* The subobject p points to is var.buf1. */ 20166 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 20167 /* The object q points to is var. */ 20168 assert (__builtin_object_size (q, 0) 20169 == (char *) (&var + 1) - (char *) &var.b); 20170 /* The subobject q points to is var.b. */ 20171 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 20172 20173 There are built-in functions added for many common string operation 20174functions, e.g. for `memcpy' `__builtin___memcpy_chk' built-in is 20175provided. This built-in has an additional last argument, which is the 20176number of bytes remaining in object the DEST argument points to or 20177`(size_t) -1' if the size is not known. 20178 20179 The built-in functions are optimized into the normal string functions 20180like `memcpy' if the last argument is `(size_t) -1' or if it is known 20181at compile time that the destination object will not be overflown. If 20182the compiler can determine at compile time the object will be always 20183overflown, it issues a warning. 20184 20185 The intended use can be e.g. 20186 20187 #undef memcpy 20188 #define bos0(dest) __builtin_object_size (dest, 0) 20189 #define memcpy(dest, src, n) \ 20190 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 20191 20192 char *volatile p; 20193 char buf[10]; 20194 /* It is unknown what object p points to, so this is optimized 20195 into plain memcpy - no checking is possible. */ 20196 memcpy (p, "abcde", n); 20197 /* Destination is known and length too. It is known at compile 20198 time there will be no overflow. */ 20199 memcpy (&buf[5], "abcde", 5); 20200 /* Destination is known, but the length is not known at compile time. 20201 This will result in __memcpy_chk call that can check for overflow 20202 at runtime. */ 20203 memcpy (&buf[5], "abcde", n); 20204 /* Destination is known and it is known at compile time there will 20205 be overflow. There will be a warning and __memcpy_chk call that 20206 will abort the program at runtime. */ 20207 memcpy (&buf[6], "abcde", 5); 20208 20209 Such built-in functions are provided for `memcpy', `mempcpy', 20210`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 20211`strncat'. 20212 20213 There are also checking built-in functions for formatted output 20214functions. 20215 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 20216 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 20217 const char *fmt, ...); 20218 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 20219 va_list ap); 20220 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 20221 const char *fmt, va_list ap); 20222 20223 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 20224functions and can contain implementation specific flags on what 20225additional security measures the checking function might take, such as 20226handling `%n' differently. 20227 20228 The OS argument is the object size S points to, like in the other 20229built-in functions. There is a small difference in the behavior 20230though, if OS is `(size_t) -1', the built-in functions are optimized 20231into the non-checking functions only if FLAG is 0, otherwise the 20232checking function is called with OS argument set to `(size_t) -1'. 20233 20234 In addition to this, there are checking built-in functions 20235`__builtin___printf_chk', `__builtin___vprintf_chk', 20236`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 20237just one additional argument, FLAG, right before format string FMT. If 20238the compiler is able to optimize them to `fputc' etc. functions, it 20239will, otherwise the checking function should be called and the FLAG 20240argument passed to it. 20241 20242 20243File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 20244 202455.47 Other built-in functions provided by GCC 20246============================================= 20247 20248GCC provides a large number of built-in functions other than the ones 20249mentioned above. Some of these are for internal use in the processing 20250of exceptions or variable-length argument lists and will not be 20251documented here because they may change from time to time; we do not 20252recommend general use of these functions. 20253 20254 The remaining functions are provided for optimization purposes. 20255 20256 GCC includes built-in versions of many of the functions in the standard 20257C library. The versions prefixed with `__builtin_' will always be 20258treated as having the same meaning as the C library function even if you 20259specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 20260these functions are only optimized in certain cases; if they are not 20261optimized in a particular case, a call to the library function will be 20262emitted. 20263 20264 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the 20265functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext', 20266`dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl', 20267`ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal', 20268`gamma', `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', 20269`j1l', `j1', `jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10', 20270`printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', `signbit', 20271`signbitf', `signbitl', `significandf', `significandl', `significand', 20272`sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', 20273`strdup', `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', 20274`y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as 20275built-in functions. All these functions have corresponding versions 20276prefixed with `__builtin_', which may be used even in strict C89 mode. 20277 20278 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 20279`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 20280`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 20281`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 20282`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 20283`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 20284`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 20285`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 20286`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 20287`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 20288`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 20289`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 20290`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 20291`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 20292`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 20293`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 20294`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 20295`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 20296`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 20297`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 20298`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 20299`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 20300`remainderf', `remainderl', `remainder', `remquof', `remquol', 20301`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 20302`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 20303`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 20304`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 20305functions except in strict ISO C90 mode (`-ansi' or `-std=c89'). 20306 20307 There are also built-in versions of the ISO C99 functions `acosf', 20308`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 20309`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 20310`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 20311`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 20312`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 20313`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 20314recognized in any mode since ISO C90 reserves these names for the 20315purpose to which ISO C99 puts them. All these functions have 20316corresponding versions prefixed with `__builtin_'. 20317 20318 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 20319`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 20320`iswxdigit', `towlower' and `towupper' are handled as built-in functions 20321except in strict ISO C90 mode (`-ansi' or `-std=c89'). 20322 20323 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 20324`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 20325`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 20326`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 20327`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 20328`log', `malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf', 20329`putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf', 20330`sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn', 20331`strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr', 20332`strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf' 20333are all recognized as built-in functions unless `-fno-builtin' is 20334specified (or `-fno-builtin-FUNCTION' is specified for an individual 20335function). All of these functions have corresponding versions prefixed 20336with `__builtin_'. 20337 20338 GCC provides built-in versions of the ISO C99 floating point comparison 20339macros that avoid raising exceptions for unordered operands. They have 20340the same names as the standard macros ( `isgreater', `isgreaterequal', 20341`isless', `islessequal', `islessgreater', and `isunordered') , with 20342`__builtin_' prefixed. We intend for a library implementor to be able 20343to simply `#define' each standard macro to its built-in equivalent. 20344 20345 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 20346 You can use the built-in function `__builtin_types_compatible_p' to 20347 determine whether two types are the same. 20348 20349 This built-in function returns 1 if the unqualified versions of the 20350 types TYPE1 and TYPE2 (which are types, not expressions) are 20351 compatible, 0 otherwise. The result of this built-in function can 20352 be used in integer constant expressions. 20353 20354 This built-in function ignores top level qualifiers (e.g., `const', 20355 `volatile'). For example, `int' is equivalent to `const int'. 20356 20357 The type `int[]' and `int[5]' are compatible. On the other hand, 20358 `int' and `char *' are not compatible, even if the size of their 20359 types, on the particular architecture are the same. Also, the 20360 amount of pointer indirection is taken into account when 20361 determining similarity. Consequently, `short *' is not similar to 20362 `short **'. Furthermore, two types that are typedefed are 20363 considered compatible if their underlying types are compatible. 20364 20365 An `enum' type is not considered to be compatible with another 20366 `enum' type even if both are compatible with the same integer 20367 type; this is what the C standard specifies. For example, `enum 20368 {foo, bar}' is not similar to `enum {hot, dog}'. 20369 20370 You would typically use this function in code whose execution 20371 varies depending on the arguments' types. For example: 20372 20373 #define foo(x) \ 20374 ({ \ 20375 typeof (x) tmp = (x); \ 20376 if (__builtin_types_compatible_p (typeof (x), long double)) \ 20377 tmp = foo_long_double (tmp); \ 20378 else if (__builtin_types_compatible_p (typeof (x), double)) \ 20379 tmp = foo_double (tmp); \ 20380 else if (__builtin_types_compatible_p (typeof (x), float)) \ 20381 tmp = foo_float (tmp); \ 20382 else \ 20383 abort (); \ 20384 tmp; \ 20385 }) 20386 20387 _Note:_ This construct is only available for C. 20388 20389 20390 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 20391 EXP2) 20392 You can use the built-in function `__builtin_choose_expr' to 20393 evaluate code depending on the value of a constant expression. 20394 This built-in function returns EXP1 if CONST_EXP, which is a 20395 constant expression that must be able to be determined at compile 20396 time, is nonzero. Otherwise it returns 0. 20397 20398 This built-in function is analogous to the `? :' operator in C, 20399 except that the expression returned has its type unaltered by 20400 promotion rules. Also, the built-in function does not evaluate 20401 the expression that was not chosen. For example, if CONST_EXP 20402 evaluates to true, EXP2 is not evaluated even if it has 20403 side-effects. 20404 20405 This built-in function can return an lvalue if the chosen argument 20406 is an lvalue. 20407 20408 If EXP1 is returned, the return type is the same as EXP1's type. 20409 Similarly, if EXP2 is returned, its return type is the same as 20410 EXP2. 20411 20412 Example: 20413 20414 #define foo(x) \ 20415 __builtin_choose_expr ( \ 20416 __builtin_types_compatible_p (typeof (x), double), \ 20417 foo_double (x), \ 20418 __builtin_choose_expr ( \ 20419 __builtin_types_compatible_p (typeof (x), float), \ 20420 foo_float (x), \ 20421 /* The void expression results in a compile-time error \ 20422 when assigning the result to something. */ \ 20423 (void)0)) 20424 20425 _Note:_ This construct is only available for C. Furthermore, the 20426 unused expression (EXP1 or EXP2 depending on the value of 20427 CONST_EXP) may still generate syntax errors. This may change in 20428 future revisions. 20429 20430 20431 -- Built-in Function: int __builtin_constant_p (EXP) 20432 You can use the built-in function `__builtin_constant_p' to 20433 determine if a value is known to be constant at compile-time and 20434 hence that GCC can perform constant-folding on expressions 20435 involving that value. The argument of the function is the value 20436 to test. The function returns the integer 1 if the argument is 20437 known to be a compile-time constant and 0 if it is not known to be 20438 a compile-time constant. A return of 0 does not indicate that the 20439 value is _not_ a constant, but merely that GCC cannot prove it is 20440 a constant with the specified value of the `-O' option. 20441 20442 You would typically use this function in an embedded application 20443 where memory was a critical resource. If you have some complex 20444 calculation, you may want it to be folded if it involves 20445 constants, but need to call a function if it does not. For 20446 example: 20447 20448 #define Scale_Value(X) \ 20449 (__builtin_constant_p (X) \ 20450 ? ((X) * SCALE + OFFSET) : Scale (X)) 20451 20452 You may use this built-in function in either a macro or an inline 20453 function. However, if you use it in an inlined function and pass 20454 an argument of the function as the argument to the built-in, GCC 20455 will never return 1 when you call the inline function with a 20456 string constant or compound literal (*note Compound Literals::) 20457 and will not return 1 when you pass a constant numeric value to 20458 the inline function unless you specify the `-O' option. 20459 20460 You may also use `__builtin_constant_p' in initializers for static 20461 data. For instance, you can write 20462 20463 static const int table[] = { 20464 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 20465 /* ... */ 20466 }; 20467 20468 This is an acceptable initializer even if EXPRESSION is not a 20469 constant expression. GCC must be more conservative about 20470 evaluating the built-in in this case, because it has no 20471 opportunity to perform optimization. 20472 20473 Previous versions of GCC did not accept this built-in in data 20474 initializers. The earliest version where it is completely safe is 20475 3.0.1. 20476 20477 -- Built-in Function: long __builtin_expect (long EXP, long C) 20478 You may use `__builtin_expect' to provide the compiler with branch 20479 prediction information. In general, you should prefer to use 20480 actual profile feedback for this (`-fprofile-arcs'), as 20481 programmers are notoriously bad at predicting how their programs 20482 actually perform. However, there are applications in which this 20483 data is hard to collect. 20484 20485 The return value is the value of EXP, which should be an integral 20486 expression. The value of C must be a compile-time constant. The 20487 semantics of the built-in are that it is expected that EXP == C. 20488 For example: 20489 20490 if (__builtin_expect (x, 0)) 20491 foo (); 20492 20493 would indicate that we do not expect to call `foo', since we 20494 expect `x' to be zero. Since you are limited to integral 20495 expressions for EXP, you should use constructions such as 20496 20497 if (__builtin_expect (ptr != NULL, 1)) 20498 error (); 20499 20500 when testing pointer or floating-point values. 20501 20502 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 20503 This function is used to minimize cache-miss latency by moving 20504 data into a cache before it is accessed. You can insert calls to 20505 `__builtin_prefetch' into code for which you know addresses of 20506 data in memory that is likely to be accessed soon. If the target 20507 supports them, data prefetch instructions will be generated. If 20508 the prefetch is done early enough before the access then the data 20509 will be in the cache by the time it is accessed. 20510 20511 The value of ADDR is the address of the memory to prefetch. There 20512 are two optional arguments, RW and LOCALITY. The value of RW is a 20513 compile-time constant one or zero; one means that the prefetch is 20514 preparing for a write to the memory address and zero, the default, 20515 means that the prefetch is preparing for a read. The value 20516 LOCALITY must be a compile-time constant integer between zero and 20517 three. A value of zero means that the data has no temporal 20518 locality, so it need not be left in the cache after the access. A 20519 value of three means that the data has a high degree of temporal 20520 locality and should be left in all levels of cache possible. 20521 Values of one and two mean, respectively, a low or moderate degree 20522 of temporal locality. The default is three. 20523 20524 for (i = 0; i < n; i++) 20525 { 20526 a[i] = a[i] + b[i]; 20527 __builtin_prefetch (&a[i+j], 1, 1); 20528 __builtin_prefetch (&b[i+j], 0, 1); 20529 /* ... */ 20530 } 20531 20532 Data prefetch does not generate faults if ADDR is invalid, but the 20533 address expression itself must be valid. For example, a prefetch 20534 of `p->next' will not fault if `p->next' is not a valid address, 20535 but evaluation will fault if `p' is not a valid address. 20536 20537 If the target does not support data prefetch, the address 20538 expression is evaluated if it includes side effects but no other 20539 code is generated and GCC does not issue a warning. 20540 20541 -- Built-in Function: double __builtin_huge_val (void) 20542 Returns a positive infinity, if supported by the floating-point 20543 format, else `DBL_MAX'. This function is suitable for 20544 implementing the ISO C macro `HUGE_VAL'. 20545 20546 -- Built-in Function: float __builtin_huge_valf (void) 20547 Similar to `__builtin_huge_val', except the return type is `float'. 20548 20549 -- Built-in Function: long double __builtin_huge_vall (void) 20550 Similar to `__builtin_huge_val', except the return type is `long 20551 double'. 20552 20553 -- Built-in Function: double __builtin_inf (void) 20554 Similar to `__builtin_huge_val', except a warning is generated if 20555 the target floating-point format does not support infinities. 20556 20557 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 20558 Similar to `__builtin_inf', except the return type is `_Decimal32'. 20559 20560 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 20561 Similar to `__builtin_inf', except the return type is `_Decimal64'. 20562 20563 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 20564 Similar to `__builtin_inf', except the return type is 20565 `_Decimal128'. 20566 20567 -- Built-in Function: float __builtin_inff (void) 20568 Similar to `__builtin_inf', except the return type is `float'. 20569 This function is suitable for implementing the ISO C99 macro 20570 `INFINITY'. 20571 20572 -- Built-in Function: long double __builtin_infl (void) 20573 Similar to `__builtin_inf', except the return type is `long 20574 double'. 20575 20576 -- Built-in Function: double __builtin_nan (const char *str) 20577 This is an implementation of the ISO C99 function `nan'. 20578 20579 Since ISO C99 defines this function in terms of `strtod', which we 20580 do not implement, a description of the parsing is in order. The 20581 string is parsed as by `strtol'; that is, the base is recognized by 20582 leading `0' or `0x' prefixes. The number parsed is placed in the 20583 significand such that the least significant bit of the number is 20584 at the least significant bit of the significand. The number is 20585 truncated to fit the significand field provided. The significand 20586 is forced to be a quiet NaN. 20587 20588 This function, if given a string literal all of which would have 20589 been consumed by strtol, is evaluated early enough that it is 20590 considered a compile-time constant. 20591 20592 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 20593 Similar to `__builtin_nan', except the return type is `_Decimal32'. 20594 20595 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 20596 Similar to `__builtin_nan', except the return type is `_Decimal64'. 20597 20598 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 20599 Similar to `__builtin_nan', except the return type is 20600 `_Decimal128'. 20601 20602 -- Built-in Function: float __builtin_nanf (const char *str) 20603 Similar to `__builtin_nan', except the return type is `float'. 20604 20605 -- Built-in Function: long double __builtin_nanl (const char *str) 20606 Similar to `__builtin_nan', except the return type is `long 20607 double'. 20608 20609 -- Built-in Function: double __builtin_nans (const char *str) 20610 Similar to `__builtin_nan', except the significand is forced to be 20611 a signaling NaN. The `nans' function is proposed by WG14 N965. 20612 20613 -- Built-in Function: float __builtin_nansf (const char *str) 20614 Similar to `__builtin_nans', except the return type is `float'. 20615 20616 -- Built-in Function: long double __builtin_nansl (const char *str) 20617 Similar to `__builtin_nans', except the return type is `long 20618 double'. 20619 20620 -- Built-in Function: int __builtin_ffs (unsigned int x) 20621 Returns one plus the index of the least significant 1-bit of X, or 20622 if X is zero, returns zero. 20623 20624 -- Built-in Function: int __builtin_clz (unsigned int x) 20625 Returns the number of leading 0-bits in X, starting at the most 20626 significant bit position. If X is 0, the result is undefined. 20627 20628 -- Built-in Function: int __builtin_ctz (unsigned int x) 20629 Returns the number of trailing 0-bits in X, starting at the least 20630 significant bit position. If X is 0, the result is undefined. 20631 20632 -- Built-in Function: int __builtin_popcount (unsigned int x) 20633 Returns the number of 1-bits in X. 20634 20635 -- Built-in Function: int __builtin_parity (unsigned int x) 20636 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 20637 20638 -- Built-in Function: int __builtin_ffsl (unsigned long) 20639 Similar to `__builtin_ffs', except the argument type is `unsigned 20640 long'. 20641 20642 -- Built-in Function: int __builtin_clzl (unsigned long) 20643 Similar to `__builtin_clz', except the argument type is `unsigned 20644 long'. 20645 20646 -- Built-in Function: int __builtin_ctzl (unsigned long) 20647 Similar to `__builtin_ctz', except the argument type is `unsigned 20648 long'. 20649 20650 -- Built-in Function: int __builtin_popcountl (unsigned long) 20651 Similar to `__builtin_popcount', except the argument type is 20652 `unsigned long'. 20653 20654 -- Built-in Function: int __builtin_parityl (unsigned long) 20655 Similar to `__builtin_parity', except the argument type is 20656 `unsigned long'. 20657 20658 -- Built-in Function: int __builtin_ffsll (unsigned long long) 20659 Similar to `__builtin_ffs', except the argument type is `unsigned 20660 long long'. 20661 20662 -- Built-in Function: int __builtin_clzll (unsigned long long) 20663 Similar to `__builtin_clz', except the argument type is `unsigned 20664 long long'. 20665 20666 -- Built-in Function: int __builtin_ctzll (unsigned long long) 20667 Similar to `__builtin_ctz', except the argument type is `unsigned 20668 long long'. 20669 20670 -- Built-in Function: int __builtin_popcountll (unsigned long long) 20671 Similar to `__builtin_popcount', except the argument type is 20672 `unsigned long long'. 20673 20674 -- Built-in Function: int __builtin_parityll (unsigned long long) 20675 Similar to `__builtin_parity', except the argument type is 20676 `unsigned long long'. 20677 20678 -- Built-in Function: double __builtin_powi (double, int) 20679 Returns the first argument raised to the power of the second. 20680 Unlike the `pow' function no guarantees about precision and 20681 rounding are made. 20682 20683 -- Built-in Function: float __builtin_powif (float, int) 20684 Similar to `__builtin_powi', except the argument and return types 20685 are `float'. 20686 20687 -- Built-in Function: long double __builtin_powil (long double, int) 20688 Similar to `__builtin_powi', except the argument and return types 20689 are `long double'. 20690 20691 20692File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 20693 206945.48 Built-in Functions Specific to Particular Target Machines 20695============================================================== 20696 20697On some target machines, GCC supports many built-in functions specific 20698to those machines. Generally these generate calls to specific machine 20699instructions, but allow the compiler to schedule those calls. 20700 20701* Menu: 20702 20703* Alpha Built-in Functions:: 20704* ARM Built-in Functions:: 20705* Blackfin Built-in Functions:: 20706* FR-V Built-in Functions:: 20707* X86 Built-in Functions:: 20708* MIPS DSP Built-in Functions:: 20709* MIPS Paired-Single Support:: 20710* PowerPC AltiVec Built-in Functions:: 20711* SPARC VIS Built-in Functions:: 20712 20713 20714File: gcc.info, Node: Alpha Built-in Functions, Next: ARM Built-in Functions, Up: Target Builtins 20715 207165.48.1 Alpha Built-in Functions 20717------------------------------- 20718 20719These built-in functions are available for the Alpha family of 20720processors, depending on the command-line switches used. 20721 20722 The following built-in functions are always available. They all 20723generate the machine instruction that is part of the name. 20724 20725 long __builtin_alpha_implver (void) 20726 long __builtin_alpha_rpcc (void) 20727 long __builtin_alpha_amask (long) 20728 long __builtin_alpha_cmpbge (long, long) 20729 long __builtin_alpha_extbl (long, long) 20730 long __builtin_alpha_extwl (long, long) 20731 long __builtin_alpha_extll (long, long) 20732 long __builtin_alpha_extql (long, long) 20733 long __builtin_alpha_extwh (long, long) 20734 long __builtin_alpha_extlh (long, long) 20735 long __builtin_alpha_extqh (long, long) 20736 long __builtin_alpha_insbl (long, long) 20737 long __builtin_alpha_inswl (long, long) 20738 long __builtin_alpha_insll (long, long) 20739 long __builtin_alpha_insql (long, long) 20740 long __builtin_alpha_inswh (long, long) 20741 long __builtin_alpha_inslh (long, long) 20742 long __builtin_alpha_insqh (long, long) 20743 long __builtin_alpha_mskbl (long, long) 20744 long __builtin_alpha_mskwl (long, long) 20745 long __builtin_alpha_mskll (long, long) 20746 long __builtin_alpha_mskql (long, long) 20747 long __builtin_alpha_mskwh (long, long) 20748 long __builtin_alpha_msklh (long, long) 20749 long __builtin_alpha_mskqh (long, long) 20750 long __builtin_alpha_umulh (long, long) 20751 long __builtin_alpha_zap (long, long) 20752 long __builtin_alpha_zapnot (long, long) 20753 20754 The following built-in functions are always with `-mmax' or 20755`-mcpu=CPU' where CPU is `pca56' or later. They all generate the 20756machine instruction that is part of the name. 20757 20758 long __builtin_alpha_pklb (long) 20759 long __builtin_alpha_pkwb (long) 20760 long __builtin_alpha_unpkbl (long) 20761 long __builtin_alpha_unpkbw (long) 20762 long __builtin_alpha_minub8 (long, long) 20763 long __builtin_alpha_minsb8 (long, long) 20764 long __builtin_alpha_minuw4 (long, long) 20765 long __builtin_alpha_minsw4 (long, long) 20766 long __builtin_alpha_maxub8 (long, long) 20767 long __builtin_alpha_maxsb8 (long, long) 20768 long __builtin_alpha_maxuw4 (long, long) 20769 long __builtin_alpha_maxsw4 (long, long) 20770 long __builtin_alpha_perr (long, long) 20771 20772 The following built-in functions are always with `-mcix' or 20773`-mcpu=CPU' where CPU is `ev67' or later. They all generate the 20774machine instruction that is part of the name. 20775 20776 long __builtin_alpha_cttz (long) 20777 long __builtin_alpha_ctlz (long) 20778 long __builtin_alpha_ctpop (long) 20779 20780 The following builtins are available on systems that use the OSF/1 20781PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 20782when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 20783 20784 void *__builtin_thread_pointer (void) 20785 void __builtin_set_thread_pointer (void *) 20786 20787 20788File: gcc.info, Node: ARM Built-in Functions, Next: Blackfin Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins 20789 207905.48.2 ARM Built-in Functions 20791----------------------------- 20792 20793These built-in functions are available for the ARM family of 20794processors, when the `-mcpu=iwmmxt' switch is used: 20795 20796 typedef int v2si __attribute__ ((vector_size (8))); 20797 typedef short v4hi __attribute__ ((vector_size (8))); 20798 typedef char v8qi __attribute__ ((vector_size (8))); 20799 20800 int __builtin_arm_getwcx (int) 20801 void __builtin_arm_setwcx (int, int) 20802 int __builtin_arm_textrmsb (v8qi, int) 20803 int __builtin_arm_textrmsh (v4hi, int) 20804 int __builtin_arm_textrmsw (v2si, int) 20805 int __builtin_arm_textrmub (v8qi, int) 20806 int __builtin_arm_textrmuh (v4hi, int) 20807 int __builtin_arm_textrmuw (v2si, int) 20808 v8qi __builtin_arm_tinsrb (v8qi, int) 20809 v4hi __builtin_arm_tinsrh (v4hi, int) 20810 v2si __builtin_arm_tinsrw (v2si, int) 20811 long long __builtin_arm_tmia (long long, int, int) 20812 long long __builtin_arm_tmiabb (long long, int, int) 20813 long long __builtin_arm_tmiabt (long long, int, int) 20814 long long __builtin_arm_tmiaph (long long, int, int) 20815 long long __builtin_arm_tmiatb (long long, int, int) 20816 long long __builtin_arm_tmiatt (long long, int, int) 20817 int __builtin_arm_tmovmskb (v8qi) 20818 int __builtin_arm_tmovmskh (v4hi) 20819 int __builtin_arm_tmovmskw (v2si) 20820 long long __builtin_arm_waccb (v8qi) 20821 long long __builtin_arm_wacch (v4hi) 20822 long long __builtin_arm_waccw (v2si) 20823 v8qi __builtin_arm_waddb (v8qi, v8qi) 20824 v8qi __builtin_arm_waddbss (v8qi, v8qi) 20825 v8qi __builtin_arm_waddbus (v8qi, v8qi) 20826 v4hi __builtin_arm_waddh (v4hi, v4hi) 20827 v4hi __builtin_arm_waddhss (v4hi, v4hi) 20828 v4hi __builtin_arm_waddhus (v4hi, v4hi) 20829 v2si __builtin_arm_waddw (v2si, v2si) 20830 v2si __builtin_arm_waddwss (v2si, v2si) 20831 v2si __builtin_arm_waddwus (v2si, v2si) 20832 v8qi __builtin_arm_walign (v8qi, v8qi, int) 20833 long long __builtin_arm_wand(long long, long long) 20834 long long __builtin_arm_wandn (long long, long long) 20835 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 20836 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 20837 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 20838 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 20839 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 20840 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 20841 v2si __builtin_arm_wcmpeqw (v2si, v2si) 20842 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 20843 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 20844 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 20845 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 20846 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 20847 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 20848 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 20849 long long __builtin_arm_wmacsz (v4hi, v4hi) 20850 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 20851 long long __builtin_arm_wmacuz (v4hi, v4hi) 20852 v4hi __builtin_arm_wmadds (v4hi, v4hi) 20853 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 20854 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 20855 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 20856 v2si __builtin_arm_wmaxsw (v2si, v2si) 20857 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 20858 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 20859 v2si __builtin_arm_wmaxuw (v2si, v2si) 20860 v8qi __builtin_arm_wminsb (v8qi, v8qi) 20861 v4hi __builtin_arm_wminsh (v4hi, v4hi) 20862 v2si __builtin_arm_wminsw (v2si, v2si) 20863 v8qi __builtin_arm_wminub (v8qi, v8qi) 20864 v4hi __builtin_arm_wminuh (v4hi, v4hi) 20865 v2si __builtin_arm_wminuw (v2si, v2si) 20866 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 20867 v4hi __builtin_arm_wmulul (v4hi, v4hi) 20868 v4hi __builtin_arm_wmulum (v4hi, v4hi) 20869 long long __builtin_arm_wor (long long, long long) 20870 v2si __builtin_arm_wpackdss (long long, long long) 20871 v2si __builtin_arm_wpackdus (long long, long long) 20872 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 20873 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 20874 v4hi __builtin_arm_wpackwss (v2si, v2si) 20875 v4hi __builtin_arm_wpackwus (v2si, v2si) 20876 long long __builtin_arm_wrord (long long, long long) 20877 long long __builtin_arm_wrordi (long long, int) 20878 v4hi __builtin_arm_wrorh (v4hi, long long) 20879 v4hi __builtin_arm_wrorhi (v4hi, int) 20880 v2si __builtin_arm_wrorw (v2si, long long) 20881 v2si __builtin_arm_wrorwi (v2si, int) 20882 v2si __builtin_arm_wsadb (v8qi, v8qi) 20883 v2si __builtin_arm_wsadbz (v8qi, v8qi) 20884 v2si __builtin_arm_wsadh (v4hi, v4hi) 20885 v2si __builtin_arm_wsadhz (v4hi, v4hi) 20886 v4hi __builtin_arm_wshufh (v4hi, int) 20887 long long __builtin_arm_wslld (long long, long long) 20888 long long __builtin_arm_wslldi (long long, int) 20889 v4hi __builtin_arm_wsllh (v4hi, long long) 20890 v4hi __builtin_arm_wsllhi (v4hi, int) 20891 v2si __builtin_arm_wsllw (v2si, long long) 20892 v2si __builtin_arm_wsllwi (v2si, int) 20893 long long __builtin_arm_wsrad (long long, long long) 20894 long long __builtin_arm_wsradi (long long, int) 20895 v4hi __builtin_arm_wsrah (v4hi, long long) 20896 v4hi __builtin_arm_wsrahi (v4hi, int) 20897 v2si __builtin_arm_wsraw (v2si, long long) 20898 v2si __builtin_arm_wsrawi (v2si, int) 20899 long long __builtin_arm_wsrld (long long, long long) 20900 long long __builtin_arm_wsrldi (long long, int) 20901 v4hi __builtin_arm_wsrlh (v4hi, long long) 20902 v4hi __builtin_arm_wsrlhi (v4hi, int) 20903 v2si __builtin_arm_wsrlw (v2si, long long) 20904 v2si __builtin_arm_wsrlwi (v2si, int) 20905 v8qi __builtin_arm_wsubb (v8qi, v8qi) 20906 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 20907 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 20908 v4hi __builtin_arm_wsubh (v4hi, v4hi) 20909 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 20910 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 20911 v2si __builtin_arm_wsubw (v2si, v2si) 20912 v2si __builtin_arm_wsubwss (v2si, v2si) 20913 v2si __builtin_arm_wsubwus (v2si, v2si) 20914 v4hi __builtin_arm_wunpckehsb (v8qi) 20915 v2si __builtin_arm_wunpckehsh (v4hi) 20916 long long __builtin_arm_wunpckehsw (v2si) 20917 v4hi __builtin_arm_wunpckehub (v8qi) 20918 v2si __builtin_arm_wunpckehuh (v4hi) 20919 long long __builtin_arm_wunpckehuw (v2si) 20920 v4hi __builtin_arm_wunpckelsb (v8qi) 20921 v2si __builtin_arm_wunpckelsh (v4hi) 20922 long long __builtin_arm_wunpckelsw (v2si) 20923 v4hi __builtin_arm_wunpckelub (v8qi) 20924 v2si __builtin_arm_wunpckeluh (v4hi) 20925 long long __builtin_arm_wunpckeluw (v2si) 20926 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 20927 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 20928 v2si __builtin_arm_wunpckihw (v2si, v2si) 20929 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 20930 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 20931 v2si __builtin_arm_wunpckilw (v2si, v2si) 20932 long long __builtin_arm_wxor (long long, long long) 20933 long long __builtin_arm_wzero () 20934 20935 20936File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM Built-in Functions, Up: Target Builtins 20937 209385.48.3 Blackfin Built-in Functions 20939---------------------------------- 20940 20941Currently, there are two Blackfin-specific built-in functions. These 20942are used for generating `CSYNC' and `SSYNC' machine insns without using 20943inline assembly; by using these built-in functions the compiler can 20944automatically add workarounds for hardware errata involving these 20945instructions. These functions are named as follows: 20946 20947 void __builtin_bfin_csync (void) 20948 void __builtin_bfin_ssync (void) 20949 20950 20951File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 20952 209535.48.4 FR-V Built-in Functions 20954------------------------------ 20955 20956GCC provides many FR-V-specific built-in functions. In general, these 20957functions are intended to be compatible with those described by `FR-V 20958Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 20959The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 20960which pass 128-bit values by pointer rather than by value. 20961 20962 Most of the functions are named after specific FR-V instructions. 20963Such functions are said to be "directly mapped" and are summarized here 20964in tabular form. 20965 20966* Menu: 20967 20968* Argument Types:: 20969* Directly-mapped Integer Functions:: 20970* Directly-mapped Media Functions:: 20971* Raw read/write Functions:: 20972* Other Built-in Functions:: 20973 20974 20975File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 20976 209775.48.4.1 Argument Types 20978....................... 20979 20980The arguments to the built-in functions can be divided into three 20981groups: register numbers, compile-time constants and run-time values. 20982In order to make this classification clear at a glance, the arguments 20983and return values are given the following pseudo types: 20984 20985Pseudo type Real C type Constant? Description 20986`uh' `unsigned short' No an unsigned halfword 20987`uw1' `unsigned int' No an unsigned word 20988`sw1' `int' No a signed word 20989`uw2' `unsigned long long' No an unsigned doubleword 20990`sw2' `long long' No a signed doubleword 20991`const' `int' Yes an integer constant 20992`acc' `int' Yes an ACC register number 20993`iacc' `int' Yes an IACC register number 20994 20995 These pseudo types are not defined by GCC, they are simply a notational 20996convenience used in this manual. 20997 20998 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 20999run time. They correspond to register operands in the underlying FR-V 21000instructions. 21001 21002 `const' arguments represent immediate operands in the underlying FR-V 21003instructions. They must be compile-time constants. 21004 21005 `acc' arguments are evaluated at compile time and specify the number 21006of an accumulator register. For example, an `acc' argument of 2 will 21007select the ACC2 register. 21008 21009 `iacc' arguments are similar to `acc' arguments but specify the number 21010of an IACC register. See *note Other Built-in Functions:: for more 21011details. 21012 21013 21014File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 21015 210165.48.4.2 Directly-mapped Integer Functions 21017.......................................... 21018 21019The functions listed below map directly to FR-V I-type instructions. 21020 21021Function prototype Example usage Assembly output 21022`sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 21023`sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 21024`sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 21025`sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 21026`void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 21027`void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 21028`void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 21029`sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 21030`sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 21031`uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 21032 21033 21034File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 21035 210365.48.4.3 Directly-mapped Media Functions 21037........................................ 21038 21039The functions listed below map directly to FR-V M-type instructions. 21040 21041Function prototype Example usage Assembly output 21042`uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 21043`void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 21044`sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 21045`uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 21046`uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 21047`void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 21048`uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 21049`uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 21050`void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 21051`void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 21052`void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 21053`uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 21054`uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 21055`uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 21056`uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 21057`void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 21058`void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 21059`void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 21060`void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 21061`uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 21062`uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 21063`void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 21064`void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 21065`uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 21066`uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 21067`uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 21068`void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 21069`void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 21070`uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 21071`uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 21072`uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 21073`sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 21074`uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 21075`sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 21076`uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 21077`sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 21078`uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 21079`void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 21080`void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 21081`void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 21082`void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 21083`void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 21084`void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 21085`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 21086`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 21087`uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 21088`uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 21089`uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 21090`sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 21091`uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 21092`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 21093`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 21094`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 21095`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 21096`sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 21097`sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 21098`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 21099`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 21100`void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 21101sw2)' 21102`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 21103`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 21104`void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 21105sw2)' 21106`void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 21107uw2)' 21108`sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 21109`uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 21110`sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 21111`sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 21112`uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 21113`void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 21114sw2)' 21115`void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 21116sw2)' 21117`uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 21118`uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 21119`uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 21120`uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 21121`sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 21122`uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 21123`uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 21124`sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 21125`uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 21126`void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 21127`sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 21128`uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 21129`void __MTRAP (void)' `__MTRAP ()' `MTRAP' 21130`uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 21131`uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 21132`void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 21133`void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 21134`uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 21135 21136 21137File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 21138 211395.48.4.4 Raw read/write Functions 21140................................. 21141 21142This sections describes built-in functions related to read and write 21143instructions to access memory. These functions generate `membar' 21144instructions to flush the I/O load and stores where appropriate, as 21145described in Fujitsu's manual described above. 21146 21147`unsigned char __builtin_read8 (void *DATA)' 21148 21149`unsigned short __builtin_read16 (void *DATA)' 21150 21151`unsigned long __builtin_read32 (void *DATA)' 21152 21153`unsigned long long __builtin_read64 (void *DATA)' 21154 21155`void __builtin_write8 (void *DATA, unsigned char DATUM)' 21156 21157`void __builtin_write16 (void *DATA, unsigned short DATUM)' 21158 21159`void __builtin_write32 (void *DATA, unsigned long DATUM)' 21160 21161`void __builtin_write64 (void *DATA, unsigned long long DATUM)' 21162 21163 21164File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 21165 211665.48.4.5 Other Built-in Functions 21167................................. 21168 21169This section describes built-in functions that are not named after a 21170specific FR-V instruction. 21171 21172`sw2 __IACCreadll (iacc REG)' 21173 Return the full 64-bit value of IACC0. The REG argument is 21174 reserved for future expansion and must be 0. 21175 21176`sw1 __IACCreadl (iacc REG)' 21177 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 21178 Other values of REG are rejected as invalid. 21179 21180`void __IACCsetll (iacc REG, sw2 X)' 21181 Set the full 64-bit value of IACC0 to X. The REG argument is 21182 reserved for future expansion and must be 0. 21183 21184`void __IACCsetl (iacc REG, sw1 X)' 21185 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 21186 values of REG are rejected as invalid. 21187 21188`void __data_prefetch0 (const void *X)' 21189 Use the `dcpl' instruction to load the contents of address X into 21190 the data cache. 21191 21192`void __data_prefetch (const void *X)' 21193 Use the `nldub' instruction to load the contents of address X into 21194 the data cache. The instruction will be issued in slot I1. 21195 21196 21197File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 21198 211995.48.5 X86 Built-in Functions 21200----------------------------- 21201 21202These built-in functions are available for the i386 and x86-64 family 21203of computers, depending on the command-line switches used. 21204 21205 Note that, if you specify command-line switches such as `-msse', the 21206compiler could use the extended instruction sets even if the built-ins 21207are not used explicitly in the program. For this reason, applications 21208which perform runtime CPU detection must compile separate files for each 21209supported architecture, using the appropriate flags. In particular, 21210the file containing the CPU detection code should be compiled without 21211these options. 21212 21213 The following machine modes are available for use with MMX built-in 21214functions (*note Vector Extensions::): `V2SI' for a vector of two 2121532-bit integers, `V4HI' for a vector of four 16-bit integers, and 21216`V8QI' for a vector of eight 8-bit integers. Some of the built-in 21217functions operate on MMX registers as a whole 64-bit entity, these use 21218`DI' as their mode. 21219 21220 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector 21221of two 32-bit floating point values. 21222 21223 If SSE extensions are enabled, `V4SF' is used for a vector of four 2122432-bit floating point values. Some instructions use a vector of four 2122532-bit integers, these use `V4SI'. Finally, some instructions operate 21226on an entire vector register, interpreting it as a 128-bit integer, 21227these use mode `TI'. 21228 21229 The following built-in functions are made available by `-mmmx'. All 21230of them generate the machine instruction that is part of the name. 21231 21232 v8qi __builtin_ia32_paddb (v8qi, v8qi) 21233 v4hi __builtin_ia32_paddw (v4hi, v4hi) 21234 v2si __builtin_ia32_paddd (v2si, v2si) 21235 v8qi __builtin_ia32_psubb (v8qi, v8qi) 21236 v4hi __builtin_ia32_psubw (v4hi, v4hi) 21237 v2si __builtin_ia32_psubd (v2si, v2si) 21238 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 21239 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 21240 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 21241 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 21242 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 21243 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 21244 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 21245 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 21246 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 21247 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 21248 di __builtin_ia32_pand (di, di) 21249 di __builtin_ia32_pandn (di,di) 21250 di __builtin_ia32_por (di, di) 21251 di __builtin_ia32_pxor (di, di) 21252 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 21253 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 21254 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 21255 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 21256 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 21257 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 21258 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 21259 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 21260 v2si __builtin_ia32_punpckhdq (v2si, v2si) 21261 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 21262 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 21263 v2si __builtin_ia32_punpckldq (v2si, v2si) 21264 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 21265 v4hi __builtin_ia32_packssdw (v2si, v2si) 21266 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 21267 21268 The following built-in functions are made available either with 21269`-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 21270of them generate the machine instruction that is part of the name. 21271 21272 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 21273 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 21274 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 21275 v4hi __builtin_ia32_psadbw (v8qi, v8qi) 21276 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 21277 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 21278 v8qi __builtin_ia32_pminub (v8qi, v8qi) 21279 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 21280 int __builtin_ia32_pextrw (v4hi, int) 21281 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 21282 int __builtin_ia32_pmovmskb (v8qi) 21283 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 21284 void __builtin_ia32_movntq (di *, di) 21285 void __builtin_ia32_sfence (void) 21286 21287 The following built-in functions are available when `-msse' is used. 21288All of them generate the machine instruction that is part of the name. 21289 21290 int __builtin_ia32_comieq (v4sf, v4sf) 21291 int __builtin_ia32_comineq (v4sf, v4sf) 21292 int __builtin_ia32_comilt (v4sf, v4sf) 21293 int __builtin_ia32_comile (v4sf, v4sf) 21294 int __builtin_ia32_comigt (v4sf, v4sf) 21295 int __builtin_ia32_comige (v4sf, v4sf) 21296 int __builtin_ia32_ucomieq (v4sf, v4sf) 21297 int __builtin_ia32_ucomineq (v4sf, v4sf) 21298 int __builtin_ia32_ucomilt (v4sf, v4sf) 21299 int __builtin_ia32_ucomile (v4sf, v4sf) 21300 int __builtin_ia32_ucomigt (v4sf, v4sf) 21301 int __builtin_ia32_ucomige (v4sf, v4sf) 21302 v4sf __builtin_ia32_addps (v4sf, v4sf) 21303 v4sf __builtin_ia32_subps (v4sf, v4sf) 21304 v4sf __builtin_ia32_mulps (v4sf, v4sf) 21305 v4sf __builtin_ia32_divps (v4sf, v4sf) 21306 v4sf __builtin_ia32_addss (v4sf, v4sf) 21307 v4sf __builtin_ia32_subss (v4sf, v4sf) 21308 v4sf __builtin_ia32_mulss (v4sf, v4sf) 21309 v4sf __builtin_ia32_divss (v4sf, v4sf) 21310 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 21311 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 21312 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 21313 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 21314 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 21315 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 21316 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 21317 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 21318 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 21319 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 21320 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 21321 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 21322 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 21323 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 21324 v4si __builtin_ia32_cmpless (v4sf, v4sf) 21325 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 21326 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 21327 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 21328 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 21329 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 21330 v4sf __builtin_ia32_maxps (v4sf, v4sf) 21331 v4sf __builtin_ia32_maxss (v4sf, v4sf) 21332 v4sf __builtin_ia32_minps (v4sf, v4sf) 21333 v4sf __builtin_ia32_minss (v4sf, v4sf) 21334 v4sf __builtin_ia32_andps (v4sf, v4sf) 21335 v4sf __builtin_ia32_andnps (v4sf, v4sf) 21336 v4sf __builtin_ia32_orps (v4sf, v4sf) 21337 v4sf __builtin_ia32_xorps (v4sf, v4sf) 21338 v4sf __builtin_ia32_movss (v4sf, v4sf) 21339 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 21340 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 21341 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 21342 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 21343 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 21344 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 21345 v2si __builtin_ia32_cvtps2pi (v4sf) 21346 int __builtin_ia32_cvtss2si (v4sf) 21347 v2si __builtin_ia32_cvttps2pi (v4sf) 21348 int __builtin_ia32_cvttss2si (v4sf) 21349 v4sf __builtin_ia32_rcpps (v4sf) 21350 v4sf __builtin_ia32_rsqrtps (v4sf) 21351 v4sf __builtin_ia32_sqrtps (v4sf) 21352 v4sf __builtin_ia32_rcpss (v4sf) 21353 v4sf __builtin_ia32_rsqrtss (v4sf) 21354 v4sf __builtin_ia32_sqrtss (v4sf) 21355 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 21356 void __builtin_ia32_movntps (float *, v4sf) 21357 int __builtin_ia32_movmskps (v4sf) 21358 21359 The following built-in functions are available when `-msse' is used. 21360 21361`v4sf __builtin_ia32_loadaps (float *)' 21362 Generates the `movaps' machine instruction as a load from memory. 21363 21364`void __builtin_ia32_storeaps (float *, v4sf)' 21365 Generates the `movaps' machine instruction as a store to memory. 21366 21367`v4sf __builtin_ia32_loadups (float *)' 21368 Generates the `movups' machine instruction as a load from memory. 21369 21370`void __builtin_ia32_storeups (float *, v4sf)' 21371 Generates the `movups' machine instruction as a store to memory. 21372 21373`v4sf __builtin_ia32_loadsss (float *)' 21374 Generates the `movss' machine instruction as a load from memory. 21375 21376`void __builtin_ia32_storess (float *, v4sf)' 21377 Generates the `movss' machine instruction as a store to memory. 21378 21379`v4sf __builtin_ia32_loadhps (v4sf, v2si *)' 21380 Generates the `movhps' machine instruction as a load from memory. 21381 21382`v4sf __builtin_ia32_loadlps (v4sf, v2si *)' 21383 Generates the `movlps' machine instruction as a load from memory 21384 21385`void __builtin_ia32_storehps (v4sf, v2si *)' 21386 Generates the `movhps' machine instruction as a store to memory. 21387 21388`void __builtin_ia32_storelps (v4sf, v2si *)' 21389 Generates the `movlps' machine instruction as a store to memory. 21390 21391 The following built-in functions are available when `-msse2' is used. 21392All of them generate the machine instruction that is part of the name. 21393 21394 int __builtin_ia32_comisdeq (v2df, v2df) 21395 int __builtin_ia32_comisdlt (v2df, v2df) 21396 int __builtin_ia32_comisdle (v2df, v2df) 21397 int __builtin_ia32_comisdgt (v2df, v2df) 21398 int __builtin_ia32_comisdge (v2df, v2df) 21399 int __builtin_ia32_comisdneq (v2df, v2df) 21400 int __builtin_ia32_ucomisdeq (v2df, v2df) 21401 int __builtin_ia32_ucomisdlt (v2df, v2df) 21402 int __builtin_ia32_ucomisdle (v2df, v2df) 21403 int __builtin_ia32_ucomisdgt (v2df, v2df) 21404 int __builtin_ia32_ucomisdge (v2df, v2df) 21405 int __builtin_ia32_ucomisdneq (v2df, v2df) 21406 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 21407 v2df __builtin_ia32_cmpltpd (v2df, v2df) 21408 v2df __builtin_ia32_cmplepd (v2df, v2df) 21409 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 21410 v2df __builtin_ia32_cmpgepd (v2df, v2df) 21411 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 21412 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 21413 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 21414 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 21415 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 21416 v2df __builtin_ia32_cmpngepd (v2df, v2df) 21417 v2df __builtin_ia32_cmpordpd (v2df, v2df) 21418 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 21419 v2df __builtin_ia32_cmpltsd (v2df, v2df) 21420 v2df __builtin_ia32_cmplesd (v2df, v2df) 21421 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 21422 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 21423 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 21424 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 21425 v2df __builtin_ia32_cmpordsd (v2df, v2df) 21426 v2di __builtin_ia32_paddq (v2di, v2di) 21427 v2di __builtin_ia32_psubq (v2di, v2di) 21428 v2df __builtin_ia32_addpd (v2df, v2df) 21429 v2df __builtin_ia32_subpd (v2df, v2df) 21430 v2df __builtin_ia32_mulpd (v2df, v2df) 21431 v2df __builtin_ia32_divpd (v2df, v2df) 21432 v2df __builtin_ia32_addsd (v2df, v2df) 21433 v2df __builtin_ia32_subsd (v2df, v2df) 21434 v2df __builtin_ia32_mulsd (v2df, v2df) 21435 v2df __builtin_ia32_divsd (v2df, v2df) 21436 v2df __builtin_ia32_minpd (v2df, v2df) 21437 v2df __builtin_ia32_maxpd (v2df, v2df) 21438 v2df __builtin_ia32_minsd (v2df, v2df) 21439 v2df __builtin_ia32_maxsd (v2df, v2df) 21440 v2df __builtin_ia32_andpd (v2df, v2df) 21441 v2df __builtin_ia32_andnpd (v2df, v2df) 21442 v2df __builtin_ia32_orpd (v2df, v2df) 21443 v2df __builtin_ia32_xorpd (v2df, v2df) 21444 v2df __builtin_ia32_movsd (v2df, v2df) 21445 v2df __builtin_ia32_unpckhpd (v2df, v2df) 21446 v2df __builtin_ia32_unpcklpd (v2df, v2df) 21447 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 21448 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 21449 v4si __builtin_ia32_paddd128 (v4si, v4si) 21450 v2di __builtin_ia32_paddq128 (v2di, v2di) 21451 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 21452 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 21453 v4si __builtin_ia32_psubd128 (v4si, v4si) 21454 v2di __builtin_ia32_psubq128 (v2di, v2di) 21455 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 21456 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 21457 v2di __builtin_ia32_pand128 (v2di, v2di) 21458 v2di __builtin_ia32_pandn128 (v2di, v2di) 21459 v2di __builtin_ia32_por128 (v2di, v2di) 21460 v2di __builtin_ia32_pxor128 (v2di, v2di) 21461 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 21462 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 21463 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 21464 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 21465 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 21466 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 21467 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 21468 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 21469 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 21470 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 21471 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 21472 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 21473 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 21474 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 21475 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 21476 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 21477 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 21478 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 21479 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 21480 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 21481 v16qi __builtin_ia32_packsswb128 (v16qi, v16qi) 21482 v8hi __builtin_ia32_packssdw128 (v8hi, v8hi) 21483 v16qi __builtin_ia32_packuswb128 (v16qi, v16qi) 21484 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 21485 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 21486 v2df __builtin_ia32_loadupd (double *) 21487 void __builtin_ia32_storeupd (double *, v2df) 21488 v2df __builtin_ia32_loadhpd (v2df, double *) 21489 v2df __builtin_ia32_loadlpd (v2df, double *) 21490 int __builtin_ia32_movmskpd (v2df) 21491 int __builtin_ia32_pmovmskb128 (v16qi) 21492 void __builtin_ia32_movnti (int *, int) 21493 void __builtin_ia32_movntpd (double *, v2df) 21494 void __builtin_ia32_movntdq (v2df *, v2df) 21495 v4si __builtin_ia32_pshufd (v4si, int) 21496 v8hi __builtin_ia32_pshuflw (v8hi, int) 21497 v8hi __builtin_ia32_pshufhw (v8hi, int) 21498 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 21499 v2df __builtin_ia32_sqrtpd (v2df) 21500 v2df __builtin_ia32_sqrtsd (v2df) 21501 v2df __builtin_ia32_shufpd (v2df, v2df, int) 21502 v2df __builtin_ia32_cvtdq2pd (v4si) 21503 v4sf __builtin_ia32_cvtdq2ps (v4si) 21504 v4si __builtin_ia32_cvtpd2dq (v2df) 21505 v2si __builtin_ia32_cvtpd2pi (v2df) 21506 v4sf __builtin_ia32_cvtpd2ps (v2df) 21507 v4si __builtin_ia32_cvttpd2dq (v2df) 21508 v2si __builtin_ia32_cvttpd2pi (v2df) 21509 v2df __builtin_ia32_cvtpi2pd (v2si) 21510 int __builtin_ia32_cvtsd2si (v2df) 21511 int __builtin_ia32_cvttsd2si (v2df) 21512 long long __builtin_ia32_cvtsd2si64 (v2df) 21513 long long __builtin_ia32_cvttsd2si64 (v2df) 21514 v4si __builtin_ia32_cvtps2dq (v4sf) 21515 v2df __builtin_ia32_cvtps2pd (v4sf) 21516 v4si __builtin_ia32_cvttps2dq (v4sf) 21517 v2df __builtin_ia32_cvtsi2sd (v2df, int) 21518 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 21519 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 21520 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 21521 void __builtin_ia32_clflush (const void *) 21522 void __builtin_ia32_lfence (void) 21523 void __builtin_ia32_mfence (void) 21524 v16qi __builtin_ia32_loaddqu (const char *) 21525 void __builtin_ia32_storedqu (char *, v16qi) 21526 unsigned long long __builtin_ia32_pmuludq (v2si, v2si) 21527 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 21528 v8hi __builtin_ia32_psllw128 (v8hi, v2di) 21529 v4si __builtin_ia32_pslld128 (v4si, v2di) 21530 v2di __builtin_ia32_psllq128 (v4si, v2di) 21531 v8hi __builtin_ia32_psrlw128 (v8hi, v2di) 21532 v4si __builtin_ia32_psrld128 (v4si, v2di) 21533 v2di __builtin_ia32_psrlq128 (v2di, v2di) 21534 v8hi __builtin_ia32_psraw128 (v8hi, v2di) 21535 v4si __builtin_ia32_psrad128 (v4si, v2di) 21536 v2di __builtin_ia32_pslldqi128 (v2di, int) 21537 v8hi __builtin_ia32_psllwi128 (v8hi, int) 21538 v4si __builtin_ia32_pslldi128 (v4si, int) 21539 v2di __builtin_ia32_psllqi128 (v2di, int) 21540 v2di __builtin_ia32_psrldqi128 (v2di, int) 21541 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 21542 v4si __builtin_ia32_psrldi128 (v4si, int) 21543 v2di __builtin_ia32_psrlqi128 (v2di, int) 21544 v8hi __builtin_ia32_psrawi128 (v8hi, int) 21545 v4si __builtin_ia32_psradi128 (v4si, int) 21546 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 21547 21548 The following built-in functions are available when `-msse3' is used. 21549All of them generate the machine instruction that is part of the name. 21550 21551 v2df __builtin_ia32_addsubpd (v2df, v2df) 21552 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 21553 v2df __builtin_ia32_haddpd (v2df, v2df) 21554 v4sf __builtin_ia32_haddps (v4sf, v4sf) 21555 v2df __builtin_ia32_hsubpd (v2df, v2df) 21556 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 21557 v16qi __builtin_ia32_lddqu (char const *) 21558 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 21559 v2df __builtin_ia32_movddup (v2df) 21560 v4sf __builtin_ia32_movshdup (v4sf) 21561 v4sf __builtin_ia32_movsldup (v4sf) 21562 void __builtin_ia32_mwait (unsigned int, unsigned int) 21563 21564 The following built-in functions are available when `-msse3' is used. 21565 21566`v2df __builtin_ia32_loadddup (double const *)' 21567 Generates the `movddup' machine instruction as a load from memory. 21568 21569 The following built-in functions are available when `-m3dnow' is used. 21570All of them generate the machine instruction that is part of the name. 21571 21572 void __builtin_ia32_femms (void) 21573 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 21574 v2si __builtin_ia32_pf2id (v2sf) 21575 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 21576 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 21577 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 21578 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 21579 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 21580 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 21581 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 21582 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 21583 v2sf __builtin_ia32_pfrcp (v2sf) 21584 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 21585 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 21586 v2sf __builtin_ia32_pfrsqrt (v2sf) 21587 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 21588 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 21589 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 21590 v2sf __builtin_ia32_pi2fd (v2si) 21591 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 21592 21593 The following built-in functions are available when both `-m3dnow' and 21594`-march=athlon' are used. All of them generate the machine instruction 21595that is part of the name. 21596 21597 v2si __builtin_ia32_pf2iw (v2sf) 21598 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 21599 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 21600 v2sf __builtin_ia32_pi2fw (v2si) 21601 v2sf __builtin_ia32_pswapdsf (v2sf) 21602 v2si __builtin_ia32_pswapdsi (v2si) 21603 21604 21605File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 21606 216075.48.6 MIPS DSP Built-in Functions 21608---------------------------------- 21609 21610The MIPS DSP Application-Specific Extension (ASE) includes new 21611instructions that are designed to improve the performance of DSP and 21612media applications. It provides instructions that operate on packed 216138-bit integer data, Q15 fractional data and Q31 fractional data. 21614 21615 GCC supports MIPS DSP operations using both the generic vector 21616extensions (*note Vector Extensions::) and a collection of 21617MIPS-specific built-in functions. Both kinds of support are enabled by 21618the `-mdsp' command-line option. 21619 21620 At present, GCC only provides support for operations on 32-bit 21621vectors. The vector type associated with 8-bit integer data is usually 21622called `v4i8' and the vector type associated with Q15 is usually called 21623`v2q15'. They can be defined in C as follows: 21624 21625 typedef char v4i8 __attribute__ ((vector_size(4))); 21626 typedef short v2q15 __attribute__ ((vector_size(4))); 21627 21628 `v4i8' and `v2q15' values are initialized in the same way as 21629aggregates. For example: 21630 21631 v4i8 a = {1, 2, 3, 4}; 21632 v4i8 b; 21633 b = (v4i8) {5, 6, 7, 8}; 21634 21635 v2q15 c = {0x0fcb, 0x3a75}; 21636 v2q15 d; 21637 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 21638 21639 _Note:_ The CPU's endianness determines the order in which values are 21640packed. On little-endian targets, the first value is the least 21641significant and the last value is the most significant. The opposite 21642order applies to big-endian targets. For example, the code above will 21643set the lowest byte of `a' to `1' on little-endian targets and `4' on 21644big-endian targets. 21645 21646 _Note:_ Q15 and Q31 values must be initialized with their integer 21647representation. As shown in this example, the integer representation 21648of a Q15 value can be obtained by multiplying the fractional value by 21649`0x1.0p15'. The equivalent for Q31 values is to multiply by `0x1.0p31'. 21650 21651 The table below lists the `v4i8' and `v2q15' operations for which 21652hardware support exists. `a' and `b' are `v4i8' values, and `c' and 21653`d' are `v2q15' values. 21654 21655C code MIPS instruction 21656`a + b' `addu.qb' 21657`c + d' `addq.ph' 21658`a - b' `subu.qb' 21659`c - d' `subq.ph' 21660 21661 It is easier to describe the DSP built-in functions if we first define 21662the following types: 21663 21664 typedef int q31; 21665 typedef int i32; 21666 typedef long long a64; 21667 21668 `q31' and `i32' are actually the same as `int', but we use `q31' to 21669indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 21670value. Similarly, `a64' is the same as `long long', but we use `a64' 21671to indicate values that will be placed in one of the four DSP 21672accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 21673 21674 Also, some built-in functions prefer or require immediate numbers as 21675parameters, because the corresponding DSP instructions accept both 21676immediate numbers and register operands, or accept immediate numbers 21677only. The immediate parameters are listed as follows. 21678 21679 imm0_7: 0 to 7. 21680 imm0_15: 0 to 15. 21681 imm0_31: 0 to 31. 21682 imm0_63: 0 to 63. 21683 imm0_255: 0 to 255. 21684 imm_n32_31: -32 to 31. 21685 imm_n512_511: -512 to 511. 21686 21687 The following built-in functions map directly to a particular MIPS DSP 21688instruction. Please refer to the architecture specification for 21689details on what each instruction does. 21690 21691 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 21692 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 21693 q31 __builtin_mips_addq_s_w (q31, q31) 21694 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 21695 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 21696 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 21697 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 21698 q31 __builtin_mips_subq_s_w (q31, q31) 21699 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 21700 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 21701 i32 __builtin_mips_addsc (i32, i32) 21702 i32 __builtin_mips_addwc (i32, i32) 21703 i32 __builtin_mips_modsub (i32, i32) 21704 i32 __builtin_mips_raddu_w_qb (v4i8) 21705 v2q15 __builtin_mips_absq_s_ph (v2q15) 21706 q31 __builtin_mips_absq_s_w (q31) 21707 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 21708 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 21709 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 21710 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 21711 q31 __builtin_mips_preceq_w_phl (v2q15) 21712 q31 __builtin_mips_preceq_w_phr (v2q15) 21713 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 21714 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 21715 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 21716 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 21717 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 21718 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 21719 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 21720 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 21721 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 21722 v4i8 __builtin_mips_shll_qb (v4i8, i32) 21723 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 21724 v2q15 __builtin_mips_shll_ph (v2q15, i32) 21725 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 21726 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 21727 q31 __builtin_mips_shll_s_w (q31, imm0_31) 21728 q31 __builtin_mips_shll_s_w (q31, i32) 21729 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 21730 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 21731 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 21732 v2q15 __builtin_mips_shra_ph (v2q15, i32) 21733 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 21734 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 21735 q31 __builtin_mips_shra_r_w (q31, imm0_31) 21736 q31 __builtin_mips_shra_r_w (q31, i32) 21737 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 21738 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 21739 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 21740 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 21741 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 21742 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 21743 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 21744 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 21745 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 21746 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 21747 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 21748 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 21749 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 21750 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 21751 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 21752 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 21753 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 21754 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 21755 i32 __builtin_mips_bitrev (i32) 21756 i32 __builtin_mips_insv (i32, i32) 21757 v4i8 __builtin_mips_repl_qb (imm0_255) 21758 v4i8 __builtin_mips_repl_qb (i32) 21759 v2q15 __builtin_mips_repl_ph (imm_n512_511) 21760 v2q15 __builtin_mips_repl_ph (i32) 21761 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 21762 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 21763 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 21764 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 21765 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 21766 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 21767 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 21768 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 21769 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 21770 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 21771 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 21772 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 21773 i32 __builtin_mips_extr_w (a64, imm0_31) 21774 i32 __builtin_mips_extr_w (a64, i32) 21775 i32 __builtin_mips_extr_r_w (a64, imm0_31) 21776 i32 __builtin_mips_extr_s_h (a64, i32) 21777 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 21778 i32 __builtin_mips_extr_rs_w (a64, i32) 21779 i32 __builtin_mips_extr_s_h (a64, imm0_31) 21780 i32 __builtin_mips_extr_r_w (a64, i32) 21781 i32 __builtin_mips_extp (a64, imm0_31) 21782 i32 __builtin_mips_extp (a64, i32) 21783 i32 __builtin_mips_extpdp (a64, imm0_31) 21784 i32 __builtin_mips_extpdp (a64, i32) 21785 a64 __builtin_mips_shilo (a64, imm_n32_31) 21786 a64 __builtin_mips_shilo (a64, i32) 21787 a64 __builtin_mips_mthlip (a64, i32) 21788 void __builtin_mips_wrdsp (i32, imm0_63) 21789 i32 __builtin_mips_rddsp (imm0_63) 21790 i32 __builtin_mips_lbux (void *, i32) 21791 i32 __builtin_mips_lhx (void *, i32) 21792 i32 __builtin_mips_lwx (void *, i32) 21793 i32 __builtin_mips_bposge32 (void) 21794 21795 21796File: gcc.info, Node: MIPS Paired-Single Support, Next: PowerPC AltiVec Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 21797 217985.48.7 MIPS Paired-Single Support 21799--------------------------------- 21800 21801The MIPS64 architecture includes a number of instructions that operate 21802on pairs of single-precision floating-point values. Each pair is 21803packed into a 64-bit floating-point register, with one element being 21804designated the "upper half" and the other being designated the "lower 21805half". 21806 21807 GCC supports paired-single operations using both the generic vector 21808extensions (*note Vector Extensions::) and a collection of 21809MIPS-specific built-in functions. Both kinds of support are enabled by 21810the `-mpaired-single' command-line option. 21811 21812 The vector type associated with paired-single values is usually called 21813`v2sf'. It can be defined in C as follows: 21814 21815 typedef float v2sf __attribute__ ((vector_size (8))); 21816 21817 `v2sf' values are initialized in the same way as aggregates. For 21818example: 21819 21820 v2sf a = {1.5, 9.1}; 21821 v2sf b; 21822 float e, f; 21823 b = (v2sf) {e, f}; 21824 21825 _Note:_ The CPU's endianness determines which value is stored in the 21826upper half of a register and which value is stored in the lower half. 21827On little-endian targets, the first value is the lower one and the 21828second value is the upper one. The opposite order applies to 21829big-endian targets. For example, the code above will set the lower 21830half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 21831targets. 21832 21833* Menu: 21834 21835* Paired-Single Arithmetic:: 21836* Paired-Single Built-in Functions:: 21837* MIPS-3D Built-in Functions:: 21838 21839 21840File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support 21841 218425.48.7.1 Paired-Single Arithmetic 21843................................. 21844 21845The table below lists the `v2sf' operations for which hardware support 21846exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 21847value. 21848 21849C code MIPS instruction 21850`a + b' `add.ps' 21851`a - b' `sub.ps' 21852`-a' `neg.ps' 21853`a * b' `mul.ps' 21854`a * b + c' `madd.ps' 21855`a * b - c' `msub.ps' 21856`-(a * b + c)' `nmadd.ps' 21857`-(a * b - c)' `nmsub.ps' 21858`x ? a : b' `movn.ps'/`movz.ps' 21859 21860 Note that the multiply-accumulate instructions can be disabled using 21861the command-line option `-mno-fused-madd'. 21862 21863 21864File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Paired-Single Support 21865 218665.48.7.2 Paired-Single Built-in Functions 21867......................................... 21868 21869The following paired-single functions map directly to a particular MIPS 21870instruction. Please refer to the architecture specification for 21871details on what each instruction does. 21872 21873`v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 21874 Pair lower lower (`pll.ps'). 21875 21876`v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 21877 Pair upper lower (`pul.ps'). 21878 21879`v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 21880 Pair lower upper (`plu.ps'). 21881 21882`v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 21883 Pair upper upper (`puu.ps'). 21884 21885`v2sf __builtin_mips_cvt_ps_s (float, float)' 21886 Convert pair to paired single (`cvt.ps.s'). 21887 21888`float __builtin_mips_cvt_s_pl (v2sf)' 21889 Convert pair lower to single (`cvt.s.pl'). 21890 21891`float __builtin_mips_cvt_s_pu (v2sf)' 21892 Convert pair upper to single (`cvt.s.pu'). 21893 21894`v2sf __builtin_mips_abs_ps (v2sf)' 21895 Absolute value (`abs.ps'). 21896 21897`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 21898 Align variable (`alnv.ps'). 21899 21900 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 21901 otherwise the result will be unpredictable. Please read the 21902 instruction description for details. 21903 21904 The following multi-instruction functions are also available. In each 21905case, COND can be any of the 16 floating-point conditions: `f', `un', 21906`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 21907`lt', `nge', `le' or `ngt'. 21908 21909`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 21910`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 21911 Conditional move based on floating point comparison (`c.COND.ps', 21912 `movt.ps'/`movf.ps'). 21913 21914 The `movt' functions return the value X computed by: 21915 21916 c.COND.ps CC,A,B 21917 mov.ps X,C 21918 movt.ps X,D,CC 21919 21920 The `movf' functions are similar but use `movf.ps' instead of 21921 `movt.ps'. 21922 21923`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 21924`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 21925 Comparison of two paired-single values (`c.COND.ps', 21926 `bc1t'/`bc1f'). 21927 21928 These functions compare A and B using `c.COND.ps' and return 21929 either the upper or lower half of the result. For example: 21930 21931 v2sf a, b; 21932 if (__builtin_mips_upper_c_eq_ps (a, b)) 21933 upper_halves_are_equal (); 21934 else 21935 upper_halves_are_unequal (); 21936 21937 if (__builtin_mips_lower_c_eq_ps (a, b)) 21938 lower_halves_are_equal (); 21939 else 21940 lower_halves_are_unequal (); 21941 21942 21943File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support 21944 219455.48.7.3 MIPS-3D Built-in Functions 21946................................... 21947 21948The MIPS-3D Application-Specific Extension (ASE) includes additional 21949paired-single instructions that are designed to improve the performance 21950of 3D graphics operations. Support for these instructions is controlled 21951by the `-mips3d' command-line option. 21952 21953 The functions listed below map directly to a particular MIPS-3D 21954instruction. Please refer to the architecture specification for more 21955details on what each instruction does. 21956 21957`v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 21958 Reduction add (`addr.ps'). 21959 21960`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 21961 Reduction multiply (`mulr.ps'). 21962 21963`v2sf __builtin_mips_cvt_pw_ps (v2sf)' 21964 Convert paired single to paired word (`cvt.pw.ps'). 21965 21966`v2sf __builtin_mips_cvt_ps_pw (v2sf)' 21967 Convert paired word to paired single (`cvt.ps.pw'). 21968 21969`float __builtin_mips_recip1_s (float)' 21970`double __builtin_mips_recip1_d (double)' 21971`v2sf __builtin_mips_recip1_ps (v2sf)' 21972 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 21973 21974`float __builtin_mips_recip2_s (float, float)' 21975`double __builtin_mips_recip2_d (double, double)' 21976`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 21977 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 21978 21979`float __builtin_mips_rsqrt1_s (float)' 21980`double __builtin_mips_rsqrt1_d (double)' 21981`v2sf __builtin_mips_rsqrt1_ps (v2sf)' 21982 Reduced precision reciprocal square root (sequence step 1) 21983 (`rsqrt1.FMT'). 21984 21985`float __builtin_mips_rsqrt2_s (float, float)' 21986`double __builtin_mips_rsqrt2_d (double, double)' 21987`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 21988 Reduced precision reciprocal square root (sequence step 2) 21989 (`rsqrt2.FMT'). 21990 21991 The following multi-instruction functions are also available. In each 21992case, COND can be any of the 16 floating-point conditions: `f', `un', 21993`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 21994`lt', `nge', `le' or `ngt'. 21995 21996`int __builtin_mips_cabs_COND_s (float A, float B)' 21997`int __builtin_mips_cabs_COND_d (double A, double B)' 21998 Absolute comparison of two scalar values (`cabs.COND.FMT', 21999 `bc1t'/`bc1f'). 22000 22001 These functions compare A and B using `cabs.COND.s' or 22002 `cabs.COND.d' and return the result as a boolean value. For 22003 example: 22004 22005 float a, b; 22006 if (__builtin_mips_cabs_eq_s (a, b)) 22007 true (); 22008 else 22009 false (); 22010 22011`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 22012`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 22013 Absolute comparison of two paired-single values (`cabs.COND.ps', 22014 `bc1t'/`bc1f'). 22015 22016 These functions compare A and B using `cabs.COND.ps' and return 22017 either the upper or lower half of the result. For example: 22018 22019 v2sf a, b; 22020 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 22021 upper_halves_are_equal (); 22022 else 22023 upper_halves_are_unequal (); 22024 22025 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 22026 lower_halves_are_equal (); 22027 else 22028 lower_halves_are_unequal (); 22029 22030`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 22031`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 22032 Conditional move based on absolute comparison (`cabs.COND.ps', 22033 `movt.ps'/`movf.ps'). 22034 22035 The `movt' functions return the value X computed by: 22036 22037 cabs.COND.ps CC,A,B 22038 mov.ps X,C 22039 movt.ps X,D,CC 22040 22041 The `movf' functions are similar but use `movf.ps' instead of 22042 `movt.ps'. 22043 22044`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 22045`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 22046`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 22047`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 22048 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 22049 `bc1any2t'/`bc1any2f'). 22050 22051 These functions compare A and B using `c.COND.ps' or 22052 `cabs.COND.ps'. The `any' forms return true if either result is 22053 true and the `all' forms return true if both results are true. 22054 For example: 22055 22056 v2sf a, b; 22057 if (__builtin_mips_any_c_eq_ps (a, b)) 22058 one_is_true (); 22059 else 22060 both_are_false (); 22061 22062 if (__builtin_mips_all_c_eq_ps (a, b)) 22063 both_are_true (); 22064 else 22065 one_is_false (); 22066 22067`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22068`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22069`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22070`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22071 Comparison of four paired-single values 22072 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 22073 22074 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 22075 with B and to compare C with D. The `any' forms return true if 22076 any of the four results are true and the `all' forms return true 22077 if all four results are true. For example: 22078 22079 v2sf a, b, c, d; 22080 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 22081 some_are_true (); 22082 else 22083 all_are_false (); 22084 22085 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 22086 all_are_true (); 22087 else 22088 some_are_false (); 22089 22090 22091File: gcc.info, Node: PowerPC AltiVec Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 22092 220935.48.8 PowerPC AltiVec Built-in Functions 22094----------------------------------------- 22095 22096GCC provides an interface for the PowerPC family of processors to access 22097the AltiVec operations described in Motorola's AltiVec Programming 22098Interface Manual. The interface is made available by including 22099`<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 22100supports the following vector types. 22101 22102 vector unsigned char 22103 vector signed char 22104 vector bool char 22105 22106 vector unsigned short 22107 vector signed short 22108 vector bool short 22109 vector pixel 22110 22111 vector unsigned int 22112 vector signed int 22113 vector bool int 22114 vector float 22115 22116 GCC's implementation of the high-level language interface available 22117from C and C++ code differs from Motorola's documentation in several 22118ways. 22119 22120 * A vector constant is a list of constant expressions within curly 22121 braces. 22122 22123 * A vector initializer requires no cast if the vector constant is of 22124 the same type as the variable it is initializing. 22125 22126 * If `signed' or `unsigned' is omitted, the signedness of the vector 22127 type is the default signedness of the base type. The default 22128 varies depending on the operating system, so a portable program 22129 should always specify the signedness. 22130 22131 * Compiling with `-maltivec' adds keywords `__vector', `__pixel', 22132 and `__bool'. Macros `vector', `pixel', and `bool' are defined in 22133 `<altivec.h>' and can be undefined. 22134 22135 * GCC allows using a `typedef' name as the type specifier for a 22136 vector type. 22137 22138 * For C, overloaded functions are implemented with macros so the 22139 following does not work: 22140 22141 vec_add ((vector signed int){1, 2, 3, 4}, foo); 22142 22143 Since `vec_add' is a macro, the vector constant in the example is 22144 treated as four separate arguments. Wrap the entire argument in 22145 parentheses for this to work. 22146 22147 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 22148GCC uses built-in functions to achieve the functionality in the 22149aforementioned header file, but they are not supported and are subject 22150to change without notice. 22151 22152 The following interfaces are supported for the generic and specific 22153AltiVec operations and the AltiVec predicates. In cases where there is 22154a direct mapping between generic and specific operations, only the 22155generic names are shown here, although the specific operations can also 22156be used. 22157 22158 Arguments that are documented as `const int' require literal integral 22159values within the range required for that operation. 22160 22161 vector signed char vec_abs (vector signed char); 22162 vector signed short vec_abs (vector signed short); 22163 vector signed int vec_abs (vector signed int); 22164 vector float vec_abs (vector float); 22165 22166 vector signed char vec_abss (vector signed char); 22167 vector signed short vec_abss (vector signed short); 22168 vector signed int vec_abss (vector signed int); 22169 22170 vector signed char vec_add (vector bool char, vector signed char); 22171 vector signed char vec_add (vector signed char, vector bool char); 22172 vector signed char vec_add (vector signed char, vector signed char); 22173 vector unsigned char vec_add (vector bool char, vector unsigned char); 22174 vector unsigned char vec_add (vector unsigned char, vector bool char); 22175 vector unsigned char vec_add (vector unsigned char, 22176 vector unsigned char); 22177 vector signed short vec_add (vector bool short, vector signed short); 22178 vector signed short vec_add (vector signed short, vector bool short); 22179 vector signed short vec_add (vector signed short, vector signed short); 22180 vector unsigned short vec_add (vector bool short, 22181 vector unsigned short); 22182 vector unsigned short vec_add (vector unsigned short, 22183 vector bool short); 22184 vector unsigned short vec_add (vector unsigned short, 22185 vector unsigned short); 22186 vector signed int vec_add (vector bool int, vector signed int); 22187 vector signed int vec_add (vector signed int, vector bool int); 22188 vector signed int vec_add (vector signed int, vector signed int); 22189 vector unsigned int vec_add (vector bool int, vector unsigned int); 22190 vector unsigned int vec_add (vector unsigned int, vector bool int); 22191 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 22192 vector float vec_add (vector float, vector float); 22193 22194 vector float vec_vaddfp (vector float, vector float); 22195 22196 vector signed int vec_vadduwm (vector bool int, vector signed int); 22197 vector signed int vec_vadduwm (vector signed int, vector bool int); 22198 vector signed int vec_vadduwm (vector signed int, vector signed int); 22199 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 22200 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 22201 vector unsigned int vec_vadduwm (vector unsigned int, 22202 vector unsigned int); 22203 22204 vector signed short vec_vadduhm (vector bool short, 22205 vector signed short); 22206 vector signed short vec_vadduhm (vector signed short, 22207 vector bool short); 22208 vector signed short vec_vadduhm (vector signed short, 22209 vector signed short); 22210 vector unsigned short vec_vadduhm (vector bool short, 22211 vector unsigned short); 22212 vector unsigned short vec_vadduhm (vector unsigned short, 22213 vector bool short); 22214 vector unsigned short vec_vadduhm (vector unsigned short, 22215 vector unsigned short); 22216 22217 vector signed char vec_vaddubm (vector bool char, vector signed char); 22218 vector signed char vec_vaddubm (vector signed char, vector bool char); 22219 vector signed char vec_vaddubm (vector signed char, vector signed char); 22220 vector unsigned char vec_vaddubm (vector bool char, 22221 vector unsigned char); 22222 vector unsigned char vec_vaddubm (vector unsigned char, 22223 vector bool char); 22224 vector unsigned char vec_vaddubm (vector unsigned char, 22225 vector unsigned char); 22226 22227 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 22228 22229 vector unsigned char vec_adds (vector bool char, vector unsigned char); 22230 vector unsigned char vec_adds (vector unsigned char, vector bool char); 22231 vector unsigned char vec_adds (vector unsigned char, 22232 vector unsigned char); 22233 vector signed char vec_adds (vector bool char, vector signed char); 22234 vector signed char vec_adds (vector signed char, vector bool char); 22235 vector signed char vec_adds (vector signed char, vector signed char); 22236 vector unsigned short vec_adds (vector bool short, 22237 vector unsigned short); 22238 vector unsigned short vec_adds (vector unsigned short, 22239 vector bool short); 22240 vector unsigned short vec_adds (vector unsigned short, 22241 vector unsigned short); 22242 vector signed short vec_adds (vector bool short, vector signed short); 22243 vector signed short vec_adds (vector signed short, vector bool short); 22244 vector signed short vec_adds (vector signed short, vector signed short); 22245 vector unsigned int vec_adds (vector bool int, vector unsigned int); 22246 vector unsigned int vec_adds (vector unsigned int, vector bool int); 22247 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 22248 vector signed int vec_adds (vector bool int, vector signed int); 22249 vector signed int vec_adds (vector signed int, vector bool int); 22250 vector signed int vec_adds (vector signed int, vector signed int); 22251 22252 vector signed int vec_vaddsws (vector bool int, vector signed int); 22253 vector signed int vec_vaddsws (vector signed int, vector bool int); 22254 vector signed int vec_vaddsws (vector signed int, vector signed int); 22255 22256 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 22257 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 22258 vector unsigned int vec_vadduws (vector unsigned int, 22259 vector unsigned int); 22260 22261 vector signed short vec_vaddshs (vector bool short, 22262 vector signed short); 22263 vector signed short vec_vaddshs (vector signed short, 22264 vector bool short); 22265 vector signed short vec_vaddshs (vector signed short, 22266 vector signed short); 22267 22268 vector unsigned short vec_vadduhs (vector bool short, 22269 vector unsigned short); 22270 vector unsigned short vec_vadduhs (vector unsigned short, 22271 vector bool short); 22272 vector unsigned short vec_vadduhs (vector unsigned short, 22273 vector unsigned short); 22274 22275 vector signed char vec_vaddsbs (vector bool char, vector signed char); 22276 vector signed char vec_vaddsbs (vector signed char, vector bool char); 22277 vector signed char vec_vaddsbs (vector signed char, vector signed char); 22278 22279 vector unsigned char vec_vaddubs (vector bool char, 22280 vector unsigned char); 22281 vector unsigned char vec_vaddubs (vector unsigned char, 22282 vector bool char); 22283 vector unsigned char vec_vaddubs (vector unsigned char, 22284 vector unsigned char); 22285 22286 vector float vec_and (vector float, vector float); 22287 vector float vec_and (vector float, vector bool int); 22288 vector float vec_and (vector bool int, vector float); 22289 vector bool int vec_and (vector bool int, vector bool int); 22290 vector signed int vec_and (vector bool int, vector signed int); 22291 vector signed int vec_and (vector signed int, vector bool int); 22292 vector signed int vec_and (vector signed int, vector signed int); 22293 vector unsigned int vec_and (vector bool int, vector unsigned int); 22294 vector unsigned int vec_and (vector unsigned int, vector bool int); 22295 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 22296 vector bool short vec_and (vector bool short, vector bool short); 22297 vector signed short vec_and (vector bool short, vector signed short); 22298 vector signed short vec_and (vector signed short, vector bool short); 22299 vector signed short vec_and (vector signed short, vector signed short); 22300 vector unsigned short vec_and (vector bool short, 22301 vector unsigned short); 22302 vector unsigned short vec_and (vector unsigned short, 22303 vector bool short); 22304 vector unsigned short vec_and (vector unsigned short, 22305 vector unsigned short); 22306 vector signed char vec_and (vector bool char, vector signed char); 22307 vector bool char vec_and (vector bool char, vector bool char); 22308 vector signed char vec_and (vector signed char, vector bool char); 22309 vector signed char vec_and (vector signed char, vector signed char); 22310 vector unsigned char vec_and (vector bool char, vector unsigned char); 22311 vector unsigned char vec_and (vector unsigned char, vector bool char); 22312 vector unsigned char vec_and (vector unsigned char, 22313 vector unsigned char); 22314 22315 vector float vec_andc (vector float, vector float); 22316 vector float vec_andc (vector float, vector bool int); 22317 vector float vec_andc (vector bool int, vector float); 22318 vector bool int vec_andc (vector bool int, vector bool int); 22319 vector signed int vec_andc (vector bool int, vector signed int); 22320 vector signed int vec_andc (vector signed int, vector bool int); 22321 vector signed int vec_andc (vector signed int, vector signed int); 22322 vector unsigned int vec_andc (vector bool int, vector unsigned int); 22323 vector unsigned int vec_andc (vector unsigned int, vector bool int); 22324 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 22325 vector bool short vec_andc (vector bool short, vector bool short); 22326 vector signed short vec_andc (vector bool short, vector signed short); 22327 vector signed short vec_andc (vector signed short, vector bool short); 22328 vector signed short vec_andc (vector signed short, vector signed short); 22329 vector unsigned short vec_andc (vector bool short, 22330 vector unsigned short); 22331 vector unsigned short vec_andc (vector unsigned short, 22332 vector bool short); 22333 vector unsigned short vec_andc (vector unsigned short, 22334 vector unsigned short); 22335 vector signed char vec_andc (vector bool char, vector signed char); 22336 vector bool char vec_andc (vector bool char, vector bool char); 22337 vector signed char vec_andc (vector signed char, vector bool char); 22338 vector signed char vec_andc (vector signed char, vector signed char); 22339 vector unsigned char vec_andc (vector bool char, vector unsigned char); 22340 vector unsigned char vec_andc (vector unsigned char, vector bool char); 22341 vector unsigned char vec_andc (vector unsigned char, 22342 vector unsigned char); 22343 22344 vector unsigned char vec_avg (vector unsigned char, 22345 vector unsigned char); 22346 vector signed char vec_avg (vector signed char, vector signed char); 22347 vector unsigned short vec_avg (vector unsigned short, 22348 vector unsigned short); 22349 vector signed short vec_avg (vector signed short, vector signed short); 22350 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 22351 vector signed int vec_avg (vector signed int, vector signed int); 22352 22353 vector signed int vec_vavgsw (vector signed int, vector signed int); 22354 22355 vector unsigned int vec_vavguw (vector unsigned int, 22356 vector unsigned int); 22357 22358 vector signed short vec_vavgsh (vector signed short, 22359 vector signed short); 22360 22361 vector unsigned short vec_vavguh (vector unsigned short, 22362 vector unsigned short); 22363 22364 vector signed char vec_vavgsb (vector signed char, vector signed char); 22365 22366 vector unsigned char vec_vavgub (vector unsigned char, 22367 vector unsigned char); 22368 22369 vector float vec_ceil (vector float); 22370 22371 vector signed int vec_cmpb (vector float, vector float); 22372 22373 vector bool char vec_cmpeq (vector signed char, vector signed char); 22374 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 22375 vector bool short vec_cmpeq (vector signed short, vector signed short); 22376 vector bool short vec_cmpeq (vector unsigned short, 22377 vector unsigned short); 22378 vector bool int vec_cmpeq (vector signed int, vector signed int); 22379 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 22380 vector bool int vec_cmpeq (vector float, vector float); 22381 22382 vector bool int vec_vcmpeqfp (vector float, vector float); 22383 22384 vector bool int vec_vcmpequw (vector signed int, vector signed int); 22385 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 22386 22387 vector bool short vec_vcmpequh (vector signed short, 22388 vector signed short); 22389 vector bool short vec_vcmpequh (vector unsigned short, 22390 vector unsigned short); 22391 22392 vector bool char vec_vcmpequb (vector signed char, vector signed char); 22393 vector bool char vec_vcmpequb (vector unsigned char, 22394 vector unsigned char); 22395 22396 vector bool int vec_cmpge (vector float, vector float); 22397 22398 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 22399 vector bool char vec_cmpgt (vector signed char, vector signed char); 22400 vector bool short vec_cmpgt (vector unsigned short, 22401 vector unsigned short); 22402 vector bool short vec_cmpgt (vector signed short, vector signed short); 22403 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 22404 vector bool int vec_cmpgt (vector signed int, vector signed int); 22405 vector bool int vec_cmpgt (vector float, vector float); 22406 22407 vector bool int vec_vcmpgtfp (vector float, vector float); 22408 22409 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 22410 22411 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 22412 22413 vector bool short vec_vcmpgtsh (vector signed short, 22414 vector signed short); 22415 22416 vector bool short vec_vcmpgtuh (vector unsigned short, 22417 vector unsigned short); 22418 22419 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 22420 22421 vector bool char vec_vcmpgtub (vector unsigned char, 22422 vector unsigned char); 22423 22424 vector bool int vec_cmple (vector float, vector float); 22425 22426 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 22427 vector bool char vec_cmplt (vector signed char, vector signed char); 22428 vector bool short vec_cmplt (vector unsigned short, 22429 vector unsigned short); 22430 vector bool short vec_cmplt (vector signed short, vector signed short); 22431 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 22432 vector bool int vec_cmplt (vector signed int, vector signed int); 22433 vector bool int vec_cmplt (vector float, vector float); 22434 22435 vector float vec_ctf (vector unsigned int, const int); 22436 vector float vec_ctf (vector signed int, const int); 22437 22438 vector float vec_vcfsx (vector signed int, const int); 22439 22440 vector float vec_vcfux (vector unsigned int, const int); 22441 22442 vector signed int vec_cts (vector float, const int); 22443 22444 vector unsigned int vec_ctu (vector float, const int); 22445 22446 void vec_dss (const int); 22447 22448 void vec_dssall (void); 22449 22450 void vec_dst (const vector unsigned char *, int, const int); 22451 void vec_dst (const vector signed char *, int, const int); 22452 void vec_dst (const vector bool char *, int, const int); 22453 void vec_dst (const vector unsigned short *, int, const int); 22454 void vec_dst (const vector signed short *, int, const int); 22455 void vec_dst (const vector bool short *, int, const int); 22456 void vec_dst (const vector pixel *, int, const int); 22457 void vec_dst (const vector unsigned int *, int, const int); 22458 void vec_dst (const vector signed int *, int, const int); 22459 void vec_dst (const vector bool int *, int, const int); 22460 void vec_dst (const vector float *, int, const int); 22461 void vec_dst (const unsigned char *, int, const int); 22462 void vec_dst (const signed char *, int, const int); 22463 void vec_dst (const unsigned short *, int, const int); 22464 void vec_dst (const short *, int, const int); 22465 void vec_dst (const unsigned int *, int, const int); 22466 void vec_dst (const int *, int, const int); 22467 void vec_dst (const unsigned long *, int, const int); 22468 void vec_dst (const long *, int, const int); 22469 void vec_dst (const float *, int, const int); 22470 22471 void vec_dstst (const vector unsigned char *, int, const int); 22472 void vec_dstst (const vector signed char *, int, const int); 22473 void vec_dstst (const vector bool char *, int, const int); 22474 void vec_dstst (const vector unsigned short *, int, const int); 22475 void vec_dstst (const vector signed short *, int, const int); 22476 void vec_dstst (const vector bool short *, int, const int); 22477 void vec_dstst (const vector pixel *, int, const int); 22478 void vec_dstst (const vector unsigned int *, int, const int); 22479 void vec_dstst (const vector signed int *, int, const int); 22480 void vec_dstst (const vector bool int *, int, const int); 22481 void vec_dstst (const vector float *, int, const int); 22482 void vec_dstst (const unsigned char *, int, const int); 22483 void vec_dstst (const signed char *, int, const int); 22484 void vec_dstst (const unsigned short *, int, const int); 22485 void vec_dstst (const short *, int, const int); 22486 void vec_dstst (const unsigned int *, int, const int); 22487 void vec_dstst (const int *, int, const int); 22488 void vec_dstst (const unsigned long *, int, const int); 22489 void vec_dstst (const long *, int, const int); 22490 void vec_dstst (const float *, int, const int); 22491 22492 void vec_dststt (const vector unsigned char *, int, const int); 22493 void vec_dststt (const vector signed char *, int, const int); 22494 void vec_dststt (const vector bool char *, int, const int); 22495 void vec_dststt (const vector unsigned short *, int, const int); 22496 void vec_dststt (const vector signed short *, int, const int); 22497 void vec_dststt (const vector bool short *, int, const int); 22498 void vec_dststt (const vector pixel *, int, const int); 22499 void vec_dststt (const vector unsigned int *, int, const int); 22500 void vec_dststt (const vector signed int *, int, const int); 22501 void vec_dststt (const vector bool int *, int, const int); 22502 void vec_dststt (const vector float *, int, const int); 22503 void vec_dststt (const unsigned char *, int, const int); 22504 void vec_dststt (const signed char *, int, const int); 22505 void vec_dststt (const unsigned short *, int, const int); 22506 void vec_dststt (const short *, int, const int); 22507 void vec_dststt (const unsigned int *, int, const int); 22508 void vec_dststt (const int *, int, const int); 22509 void vec_dststt (const unsigned long *, int, const int); 22510 void vec_dststt (const long *, int, const int); 22511 void vec_dststt (const float *, int, const int); 22512 22513 void vec_dstt (const vector unsigned char *, int, const int); 22514 void vec_dstt (const vector signed char *, int, const int); 22515 void vec_dstt (const vector bool char *, int, const int); 22516 void vec_dstt (const vector unsigned short *, int, const int); 22517 void vec_dstt (const vector signed short *, int, const int); 22518 void vec_dstt (const vector bool short *, int, const int); 22519 void vec_dstt (const vector pixel *, int, const int); 22520 void vec_dstt (const vector unsigned int *, int, const int); 22521 void vec_dstt (const vector signed int *, int, const int); 22522 void vec_dstt (const vector bool int *, int, const int); 22523 void vec_dstt (const vector float *, int, const int); 22524 void vec_dstt (const unsigned char *, int, const int); 22525 void vec_dstt (const signed char *, int, const int); 22526 void vec_dstt (const unsigned short *, int, const int); 22527 void vec_dstt (const short *, int, const int); 22528 void vec_dstt (const unsigned int *, int, const int); 22529 void vec_dstt (const int *, int, const int); 22530 void vec_dstt (const unsigned long *, int, const int); 22531 void vec_dstt (const long *, int, const int); 22532 void vec_dstt (const float *, int, const int); 22533 22534 vector float vec_expte (vector float); 22535 22536 vector float vec_floor (vector float); 22537 22538 vector float vec_ld (int, const vector float *); 22539 vector float vec_ld (int, const float *); 22540 vector bool int vec_ld (int, const vector bool int *); 22541 vector signed int vec_ld (int, const vector signed int *); 22542 vector signed int vec_ld (int, const int *); 22543 vector signed int vec_ld (int, const long *); 22544 vector unsigned int vec_ld (int, const vector unsigned int *); 22545 vector unsigned int vec_ld (int, const unsigned int *); 22546 vector unsigned int vec_ld (int, const unsigned long *); 22547 vector bool short vec_ld (int, const vector bool short *); 22548 vector pixel vec_ld (int, const vector pixel *); 22549 vector signed short vec_ld (int, const vector signed short *); 22550 vector signed short vec_ld (int, const short *); 22551 vector unsigned short vec_ld (int, const vector unsigned short *); 22552 vector unsigned short vec_ld (int, const unsigned short *); 22553 vector bool char vec_ld (int, const vector bool char *); 22554 vector signed char vec_ld (int, const vector signed char *); 22555 vector signed char vec_ld (int, const signed char *); 22556 vector unsigned char vec_ld (int, const vector unsigned char *); 22557 vector unsigned char vec_ld (int, const unsigned char *); 22558 22559 vector signed char vec_lde (int, const signed char *); 22560 vector unsigned char vec_lde (int, const unsigned char *); 22561 vector signed short vec_lde (int, const short *); 22562 vector unsigned short vec_lde (int, const unsigned short *); 22563 vector float vec_lde (int, const float *); 22564 vector signed int vec_lde (int, const int *); 22565 vector unsigned int vec_lde (int, const unsigned int *); 22566 vector signed int vec_lde (int, const long *); 22567 vector unsigned int vec_lde (int, const unsigned long *); 22568 22569 vector float vec_lvewx (int, float *); 22570 vector signed int vec_lvewx (int, int *); 22571 vector unsigned int vec_lvewx (int, unsigned int *); 22572 vector signed int vec_lvewx (int, long *); 22573 vector unsigned int vec_lvewx (int, unsigned long *); 22574 22575 vector signed short vec_lvehx (int, short *); 22576 vector unsigned short vec_lvehx (int, unsigned short *); 22577 22578 vector signed char vec_lvebx (int, char *); 22579 vector unsigned char vec_lvebx (int, unsigned char *); 22580 22581 vector float vec_ldl (int, const vector float *); 22582 vector float vec_ldl (int, const float *); 22583 vector bool int vec_ldl (int, const vector bool int *); 22584 vector signed int vec_ldl (int, const vector signed int *); 22585 vector signed int vec_ldl (int, const int *); 22586 vector signed int vec_ldl (int, const long *); 22587 vector unsigned int vec_ldl (int, const vector unsigned int *); 22588 vector unsigned int vec_ldl (int, const unsigned int *); 22589 vector unsigned int vec_ldl (int, const unsigned long *); 22590 vector bool short vec_ldl (int, const vector bool short *); 22591 vector pixel vec_ldl (int, const vector pixel *); 22592 vector signed short vec_ldl (int, const vector signed short *); 22593 vector signed short vec_ldl (int, const short *); 22594 vector unsigned short vec_ldl (int, const vector unsigned short *); 22595 vector unsigned short vec_ldl (int, const unsigned short *); 22596 vector bool char vec_ldl (int, const vector bool char *); 22597 vector signed char vec_ldl (int, const vector signed char *); 22598 vector signed char vec_ldl (int, const signed char *); 22599 vector unsigned char vec_ldl (int, const vector unsigned char *); 22600 vector unsigned char vec_ldl (int, const unsigned char *); 22601 22602 vector float vec_loge (vector float); 22603 22604 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 22605 vector unsigned char vec_lvsl (int, const volatile signed char *); 22606 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 22607 vector unsigned char vec_lvsl (int, const volatile short *); 22608 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 22609 vector unsigned char vec_lvsl (int, const volatile int *); 22610 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 22611 vector unsigned char vec_lvsl (int, const volatile long *); 22612 vector unsigned char vec_lvsl (int, const volatile float *); 22613 22614 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 22615 vector unsigned char vec_lvsr (int, const volatile signed char *); 22616 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 22617 vector unsigned char vec_lvsr (int, const volatile short *); 22618 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 22619 vector unsigned char vec_lvsr (int, const volatile int *); 22620 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 22621 vector unsigned char vec_lvsr (int, const volatile long *); 22622 vector unsigned char vec_lvsr (int, const volatile float *); 22623 22624 vector float vec_madd (vector float, vector float, vector float); 22625 22626 vector signed short vec_madds (vector signed short, 22627 vector signed short, 22628 vector signed short); 22629 22630 vector unsigned char vec_max (vector bool char, vector unsigned char); 22631 vector unsigned char vec_max (vector unsigned char, vector bool char); 22632 vector unsigned char vec_max (vector unsigned char, 22633 vector unsigned char); 22634 vector signed char vec_max (vector bool char, vector signed char); 22635 vector signed char vec_max (vector signed char, vector bool char); 22636 vector signed char vec_max (vector signed char, vector signed char); 22637 vector unsigned short vec_max (vector bool short, 22638 vector unsigned short); 22639 vector unsigned short vec_max (vector unsigned short, 22640 vector bool short); 22641 vector unsigned short vec_max (vector unsigned short, 22642 vector unsigned short); 22643 vector signed short vec_max (vector bool short, vector signed short); 22644 vector signed short vec_max (vector signed short, vector bool short); 22645 vector signed short vec_max (vector signed short, vector signed short); 22646 vector unsigned int vec_max (vector bool int, vector unsigned int); 22647 vector unsigned int vec_max (vector unsigned int, vector bool int); 22648 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 22649 vector signed int vec_max (vector bool int, vector signed int); 22650 vector signed int vec_max (vector signed int, vector bool int); 22651 vector signed int vec_max (vector signed int, vector signed int); 22652 vector float vec_max (vector float, vector float); 22653 22654 vector float vec_vmaxfp (vector float, vector float); 22655 22656 vector signed int vec_vmaxsw (vector bool int, vector signed int); 22657 vector signed int vec_vmaxsw (vector signed int, vector bool int); 22658 vector signed int vec_vmaxsw (vector signed int, vector signed int); 22659 22660 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 22661 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 22662 vector unsigned int vec_vmaxuw (vector unsigned int, 22663 vector unsigned int); 22664 22665 vector signed short vec_vmaxsh (vector bool short, vector signed short); 22666 vector signed short vec_vmaxsh (vector signed short, vector bool short); 22667 vector signed short vec_vmaxsh (vector signed short, 22668 vector signed short); 22669 22670 vector unsigned short vec_vmaxuh (vector bool short, 22671 vector unsigned short); 22672 vector unsigned short vec_vmaxuh (vector unsigned short, 22673 vector bool short); 22674 vector unsigned short vec_vmaxuh (vector unsigned short, 22675 vector unsigned short); 22676 22677 vector signed char vec_vmaxsb (vector bool char, vector signed char); 22678 vector signed char vec_vmaxsb (vector signed char, vector bool char); 22679 vector signed char vec_vmaxsb (vector signed char, vector signed char); 22680 22681 vector unsigned char vec_vmaxub (vector bool char, 22682 vector unsigned char); 22683 vector unsigned char vec_vmaxub (vector unsigned char, 22684 vector bool char); 22685 vector unsigned char vec_vmaxub (vector unsigned char, 22686 vector unsigned char); 22687 22688 vector bool char vec_mergeh (vector bool char, vector bool char); 22689 vector signed char vec_mergeh (vector signed char, vector signed char); 22690 vector unsigned char vec_mergeh (vector unsigned char, 22691 vector unsigned char); 22692 vector bool short vec_mergeh (vector bool short, vector bool short); 22693 vector pixel vec_mergeh (vector pixel, vector pixel); 22694 vector signed short vec_mergeh (vector signed short, 22695 vector signed short); 22696 vector unsigned short vec_mergeh (vector unsigned short, 22697 vector unsigned short); 22698 vector float vec_mergeh (vector float, vector float); 22699 vector bool int vec_mergeh (vector bool int, vector bool int); 22700 vector signed int vec_mergeh (vector signed int, vector signed int); 22701 vector unsigned int vec_mergeh (vector unsigned int, 22702 vector unsigned int); 22703 22704 vector float vec_vmrghw (vector float, vector float); 22705 vector bool int vec_vmrghw (vector bool int, vector bool int); 22706 vector signed int vec_vmrghw (vector signed int, vector signed int); 22707 vector unsigned int vec_vmrghw (vector unsigned int, 22708 vector unsigned int); 22709 22710 vector bool short vec_vmrghh (vector bool short, vector bool short); 22711 vector signed short vec_vmrghh (vector signed short, 22712 vector signed short); 22713 vector unsigned short vec_vmrghh (vector unsigned short, 22714 vector unsigned short); 22715 vector pixel vec_vmrghh (vector pixel, vector pixel); 22716 22717 vector bool char vec_vmrghb (vector bool char, vector bool char); 22718 vector signed char vec_vmrghb (vector signed char, vector signed char); 22719 vector unsigned char vec_vmrghb (vector unsigned char, 22720 vector unsigned char); 22721 22722 vector bool char vec_mergel (vector bool char, vector bool char); 22723 vector signed char vec_mergel (vector signed char, vector signed char); 22724 vector unsigned char vec_mergel (vector unsigned char, 22725 vector unsigned char); 22726 vector bool short vec_mergel (vector bool short, vector bool short); 22727 vector pixel vec_mergel (vector pixel, vector pixel); 22728 vector signed short vec_mergel (vector signed short, 22729 vector signed short); 22730 vector unsigned short vec_mergel (vector unsigned short, 22731 vector unsigned short); 22732 vector float vec_mergel (vector float, vector float); 22733 vector bool int vec_mergel (vector bool int, vector bool int); 22734 vector signed int vec_mergel (vector signed int, vector signed int); 22735 vector unsigned int vec_mergel (vector unsigned int, 22736 vector unsigned int); 22737 22738 vector float vec_vmrglw (vector float, vector float); 22739 vector signed int vec_vmrglw (vector signed int, vector signed int); 22740 vector unsigned int vec_vmrglw (vector unsigned int, 22741 vector unsigned int); 22742 vector bool int vec_vmrglw (vector bool int, vector bool int); 22743 22744 vector bool short vec_vmrglh (vector bool short, vector bool short); 22745 vector signed short vec_vmrglh (vector signed short, 22746 vector signed short); 22747 vector unsigned short vec_vmrglh (vector unsigned short, 22748 vector unsigned short); 22749 vector pixel vec_vmrglh (vector pixel, vector pixel); 22750 22751 vector bool char vec_vmrglb (vector bool char, vector bool char); 22752 vector signed char vec_vmrglb (vector signed char, vector signed char); 22753 vector unsigned char vec_vmrglb (vector unsigned char, 22754 vector unsigned char); 22755 22756 vector unsigned short vec_mfvscr (void); 22757 22758 vector unsigned char vec_min (vector bool char, vector unsigned char); 22759 vector unsigned char vec_min (vector unsigned char, vector bool char); 22760 vector unsigned char vec_min (vector unsigned char, 22761 vector unsigned char); 22762 vector signed char vec_min (vector bool char, vector signed char); 22763 vector signed char vec_min (vector signed char, vector bool char); 22764 vector signed char vec_min (vector signed char, vector signed char); 22765 vector unsigned short vec_min (vector bool short, 22766 vector unsigned short); 22767 vector unsigned short vec_min (vector unsigned short, 22768 vector bool short); 22769 vector unsigned short vec_min (vector unsigned short, 22770 vector unsigned short); 22771 vector signed short vec_min (vector bool short, vector signed short); 22772 vector signed short vec_min (vector signed short, vector bool short); 22773 vector signed short vec_min (vector signed short, vector signed short); 22774 vector unsigned int vec_min (vector bool int, vector unsigned int); 22775 vector unsigned int vec_min (vector unsigned int, vector bool int); 22776 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 22777 vector signed int vec_min (vector bool int, vector signed int); 22778 vector signed int vec_min (vector signed int, vector bool int); 22779 vector signed int vec_min (vector signed int, vector signed int); 22780 vector float vec_min (vector float, vector float); 22781 22782 vector float vec_vminfp (vector float, vector float); 22783 22784 vector signed int vec_vminsw (vector bool int, vector signed int); 22785 vector signed int vec_vminsw (vector signed int, vector bool int); 22786 vector signed int vec_vminsw (vector signed int, vector signed int); 22787 22788 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 22789 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 22790 vector unsigned int vec_vminuw (vector unsigned int, 22791 vector unsigned int); 22792 22793 vector signed short vec_vminsh (vector bool short, vector signed short); 22794 vector signed short vec_vminsh (vector signed short, vector bool short); 22795 vector signed short vec_vminsh (vector signed short, 22796 vector signed short); 22797 22798 vector unsigned short vec_vminuh (vector bool short, 22799 vector unsigned short); 22800 vector unsigned short vec_vminuh (vector unsigned short, 22801 vector bool short); 22802 vector unsigned short vec_vminuh (vector unsigned short, 22803 vector unsigned short); 22804 22805 vector signed char vec_vminsb (vector bool char, vector signed char); 22806 vector signed char vec_vminsb (vector signed char, vector bool char); 22807 vector signed char vec_vminsb (vector signed char, vector signed char); 22808 22809 vector unsigned char vec_vminub (vector bool char, 22810 vector unsigned char); 22811 vector unsigned char vec_vminub (vector unsigned char, 22812 vector bool char); 22813 vector unsigned char vec_vminub (vector unsigned char, 22814 vector unsigned char); 22815 22816 vector signed short vec_mladd (vector signed short, 22817 vector signed short, 22818 vector signed short); 22819 vector signed short vec_mladd (vector signed short, 22820 vector unsigned short, 22821 vector unsigned short); 22822 vector signed short vec_mladd (vector unsigned short, 22823 vector signed short, 22824 vector signed short); 22825 vector unsigned short vec_mladd (vector unsigned short, 22826 vector unsigned short, 22827 vector unsigned short); 22828 22829 vector signed short vec_mradds (vector signed short, 22830 vector signed short, 22831 vector signed short); 22832 22833 vector unsigned int vec_msum (vector unsigned char, 22834 vector unsigned char, 22835 vector unsigned int); 22836 vector signed int vec_msum (vector signed char, 22837 vector unsigned char, 22838 vector signed int); 22839 vector unsigned int vec_msum (vector unsigned short, 22840 vector unsigned short, 22841 vector unsigned int); 22842 vector signed int vec_msum (vector signed short, 22843 vector signed short, 22844 vector signed int); 22845 22846 vector signed int vec_vmsumshm (vector signed short, 22847 vector signed short, 22848 vector signed int); 22849 22850 vector unsigned int vec_vmsumuhm (vector unsigned short, 22851 vector unsigned short, 22852 vector unsigned int); 22853 22854 vector signed int vec_vmsummbm (vector signed char, 22855 vector unsigned char, 22856 vector signed int); 22857 22858 vector unsigned int vec_vmsumubm (vector unsigned char, 22859 vector unsigned char, 22860 vector unsigned int); 22861 22862 vector unsigned int vec_msums (vector unsigned short, 22863 vector unsigned short, 22864 vector unsigned int); 22865 vector signed int vec_msums (vector signed short, 22866 vector signed short, 22867 vector signed int); 22868 22869 vector signed int vec_vmsumshs (vector signed short, 22870 vector signed short, 22871 vector signed int); 22872 22873 vector unsigned int vec_vmsumuhs (vector unsigned short, 22874 vector unsigned short, 22875 vector unsigned int); 22876 22877 void vec_mtvscr (vector signed int); 22878 void vec_mtvscr (vector unsigned int); 22879 void vec_mtvscr (vector bool int); 22880 void vec_mtvscr (vector signed short); 22881 void vec_mtvscr (vector unsigned short); 22882 void vec_mtvscr (vector bool short); 22883 void vec_mtvscr (vector pixel); 22884 void vec_mtvscr (vector signed char); 22885 void vec_mtvscr (vector unsigned char); 22886 void vec_mtvscr (vector bool char); 22887 22888 vector unsigned short vec_mule (vector unsigned char, 22889 vector unsigned char); 22890 vector signed short vec_mule (vector signed char, 22891 vector signed char); 22892 vector unsigned int vec_mule (vector unsigned short, 22893 vector unsigned short); 22894 vector signed int vec_mule (vector signed short, vector signed short); 22895 22896 vector signed int vec_vmulesh (vector signed short, 22897 vector signed short); 22898 22899 vector unsigned int vec_vmuleuh (vector unsigned short, 22900 vector unsigned short); 22901 22902 vector signed short vec_vmulesb (vector signed char, 22903 vector signed char); 22904 22905 vector unsigned short vec_vmuleub (vector unsigned char, 22906 vector unsigned char); 22907 22908 vector unsigned short vec_mulo (vector unsigned char, 22909 vector unsigned char); 22910 vector signed short vec_mulo (vector signed char, vector signed char); 22911 vector unsigned int vec_mulo (vector unsigned short, 22912 vector unsigned short); 22913 vector signed int vec_mulo (vector signed short, vector signed short); 22914 22915 vector signed int vec_vmulosh (vector signed short, 22916 vector signed short); 22917 22918 vector unsigned int vec_vmulouh (vector unsigned short, 22919 vector unsigned short); 22920 22921 vector signed short vec_vmulosb (vector signed char, 22922 vector signed char); 22923 22924 vector unsigned short vec_vmuloub (vector unsigned char, 22925 vector unsigned char); 22926 22927 vector float vec_nmsub (vector float, vector float, vector float); 22928 22929 vector float vec_nor (vector float, vector float); 22930 vector signed int vec_nor (vector signed int, vector signed int); 22931 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 22932 vector bool int vec_nor (vector bool int, vector bool int); 22933 vector signed short vec_nor (vector signed short, vector signed short); 22934 vector unsigned short vec_nor (vector unsigned short, 22935 vector unsigned short); 22936 vector bool short vec_nor (vector bool short, vector bool short); 22937 vector signed char vec_nor (vector signed char, vector signed char); 22938 vector unsigned char vec_nor (vector unsigned char, 22939 vector unsigned char); 22940 vector bool char vec_nor (vector bool char, vector bool char); 22941 22942 vector float vec_or (vector float, vector float); 22943 vector float vec_or (vector float, vector bool int); 22944 vector float vec_or (vector bool int, vector float); 22945 vector bool int vec_or (vector bool int, vector bool int); 22946 vector signed int vec_or (vector bool int, vector signed int); 22947 vector signed int vec_or (vector signed int, vector bool int); 22948 vector signed int vec_or (vector signed int, vector signed int); 22949 vector unsigned int vec_or (vector bool int, vector unsigned int); 22950 vector unsigned int vec_or (vector unsigned int, vector bool int); 22951 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 22952 vector bool short vec_or (vector bool short, vector bool short); 22953 vector signed short vec_or (vector bool short, vector signed short); 22954 vector signed short vec_or (vector signed short, vector bool short); 22955 vector signed short vec_or (vector signed short, vector signed short); 22956 vector unsigned short vec_or (vector bool short, vector unsigned short); 22957 vector unsigned short vec_or (vector unsigned short, vector bool short); 22958 vector unsigned short vec_or (vector unsigned short, 22959 vector unsigned short); 22960 vector signed char vec_or (vector bool char, vector signed char); 22961 vector bool char vec_or (vector bool char, vector bool char); 22962 vector signed char vec_or (vector signed char, vector bool char); 22963 vector signed char vec_or (vector signed char, vector signed char); 22964 vector unsigned char vec_or (vector bool char, vector unsigned char); 22965 vector unsigned char vec_or (vector unsigned char, vector bool char); 22966 vector unsigned char vec_or (vector unsigned char, 22967 vector unsigned char); 22968 22969 vector signed char vec_pack (vector signed short, vector signed short); 22970 vector unsigned char vec_pack (vector unsigned short, 22971 vector unsigned short); 22972 vector bool char vec_pack (vector bool short, vector bool short); 22973 vector signed short vec_pack (vector signed int, vector signed int); 22974 vector unsigned short vec_pack (vector unsigned int, 22975 vector unsigned int); 22976 vector bool short vec_pack (vector bool int, vector bool int); 22977 22978 vector bool short vec_vpkuwum (vector bool int, vector bool int); 22979 vector signed short vec_vpkuwum (vector signed int, vector signed int); 22980 vector unsigned short vec_vpkuwum (vector unsigned int, 22981 vector unsigned int); 22982 22983 vector bool char vec_vpkuhum (vector bool short, vector bool short); 22984 vector signed char vec_vpkuhum (vector signed short, 22985 vector signed short); 22986 vector unsigned char vec_vpkuhum (vector unsigned short, 22987 vector unsigned short); 22988 22989 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 22990 22991 vector unsigned char vec_packs (vector unsigned short, 22992 vector unsigned short); 22993 vector signed char vec_packs (vector signed short, vector signed short); 22994 vector unsigned short vec_packs (vector unsigned int, 22995 vector unsigned int); 22996 vector signed short vec_packs (vector signed int, vector signed int); 22997 22998 vector signed short vec_vpkswss (vector signed int, vector signed int); 22999 23000 vector unsigned short vec_vpkuwus (vector unsigned int, 23001 vector unsigned int); 23002 23003 vector signed char vec_vpkshss (vector signed short, 23004 vector signed short); 23005 23006 vector unsigned char vec_vpkuhus (vector unsigned short, 23007 vector unsigned short); 23008 23009 vector unsigned char vec_packsu (vector unsigned short, 23010 vector unsigned short); 23011 vector unsigned char vec_packsu (vector signed short, 23012 vector signed short); 23013 vector unsigned short vec_packsu (vector unsigned int, 23014 vector unsigned int); 23015 vector unsigned short vec_packsu (vector signed int, vector signed int); 23016 23017 vector unsigned short vec_vpkswus (vector signed int, 23018 vector signed int); 23019 23020 vector unsigned char vec_vpkshus (vector signed short, 23021 vector signed short); 23022 23023 vector float vec_perm (vector float, 23024 vector float, 23025 vector unsigned char); 23026 vector signed int vec_perm (vector signed int, 23027 vector signed int, 23028 vector unsigned char); 23029 vector unsigned int vec_perm (vector unsigned int, 23030 vector unsigned int, 23031 vector unsigned char); 23032 vector bool int vec_perm (vector bool int, 23033 vector bool int, 23034 vector unsigned char); 23035 vector signed short vec_perm (vector signed short, 23036 vector signed short, 23037 vector unsigned char); 23038 vector unsigned short vec_perm (vector unsigned short, 23039 vector unsigned short, 23040 vector unsigned char); 23041 vector bool short vec_perm (vector bool short, 23042 vector bool short, 23043 vector unsigned char); 23044 vector pixel vec_perm (vector pixel, 23045 vector pixel, 23046 vector unsigned char); 23047 vector signed char vec_perm (vector signed char, 23048 vector signed char, 23049 vector unsigned char); 23050 vector unsigned char vec_perm (vector unsigned char, 23051 vector unsigned char, 23052 vector unsigned char); 23053 vector bool char vec_perm (vector bool char, 23054 vector bool char, 23055 vector unsigned char); 23056 23057 vector float vec_re (vector float); 23058 23059 vector signed char vec_rl (vector signed char, 23060 vector unsigned char); 23061 vector unsigned char vec_rl (vector unsigned char, 23062 vector unsigned char); 23063 vector signed short vec_rl (vector signed short, vector unsigned short); 23064 vector unsigned short vec_rl (vector unsigned short, 23065 vector unsigned short); 23066 vector signed int vec_rl (vector signed int, vector unsigned int); 23067 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 23068 23069 vector signed int vec_vrlw (vector signed int, vector unsigned int); 23070 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 23071 23072 vector signed short vec_vrlh (vector signed short, 23073 vector unsigned short); 23074 vector unsigned short vec_vrlh (vector unsigned short, 23075 vector unsigned short); 23076 23077 vector signed char vec_vrlb (vector signed char, vector unsigned char); 23078 vector unsigned char vec_vrlb (vector unsigned char, 23079 vector unsigned char); 23080 23081 vector float vec_round (vector float); 23082 23083 vector float vec_rsqrte (vector float); 23084 23085 vector float vec_sel (vector float, vector float, vector bool int); 23086 vector float vec_sel (vector float, vector float, vector unsigned int); 23087 vector signed int vec_sel (vector signed int, 23088 vector signed int, 23089 vector bool int); 23090 vector signed int vec_sel (vector signed int, 23091 vector signed int, 23092 vector unsigned int); 23093 vector unsigned int vec_sel (vector unsigned int, 23094 vector unsigned int, 23095 vector bool int); 23096 vector unsigned int vec_sel (vector unsigned int, 23097 vector unsigned int, 23098 vector unsigned int); 23099 vector bool int vec_sel (vector bool int, 23100 vector bool int, 23101 vector bool int); 23102 vector bool int vec_sel (vector bool int, 23103 vector bool int, 23104 vector unsigned int); 23105 vector signed short vec_sel (vector signed short, 23106 vector signed short, 23107 vector bool short); 23108 vector signed short vec_sel (vector signed short, 23109 vector signed short, 23110 vector unsigned short); 23111 vector unsigned short vec_sel (vector unsigned short, 23112 vector unsigned short, 23113 vector bool short); 23114 vector unsigned short vec_sel (vector unsigned short, 23115 vector unsigned short, 23116 vector unsigned short); 23117 vector bool short vec_sel (vector bool short, 23118 vector bool short, 23119 vector bool short); 23120 vector bool short vec_sel (vector bool short, 23121 vector bool short, 23122 vector unsigned short); 23123 vector signed char vec_sel (vector signed char, 23124 vector signed char, 23125 vector bool char); 23126 vector signed char vec_sel (vector signed char, 23127 vector signed char, 23128 vector unsigned char); 23129 vector unsigned char vec_sel (vector unsigned char, 23130 vector unsigned char, 23131 vector bool char); 23132 vector unsigned char vec_sel (vector unsigned char, 23133 vector unsigned char, 23134 vector unsigned char); 23135 vector bool char vec_sel (vector bool char, 23136 vector bool char, 23137 vector bool char); 23138 vector bool char vec_sel (vector bool char, 23139 vector bool char, 23140 vector unsigned char); 23141 23142 vector signed char vec_sl (vector signed char, 23143 vector unsigned char); 23144 vector unsigned char vec_sl (vector unsigned char, 23145 vector unsigned char); 23146 vector signed short vec_sl (vector signed short, vector unsigned short); 23147 vector unsigned short vec_sl (vector unsigned short, 23148 vector unsigned short); 23149 vector signed int vec_sl (vector signed int, vector unsigned int); 23150 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 23151 23152 vector signed int vec_vslw (vector signed int, vector unsigned int); 23153 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 23154 23155 vector signed short vec_vslh (vector signed short, 23156 vector unsigned short); 23157 vector unsigned short vec_vslh (vector unsigned short, 23158 vector unsigned short); 23159 23160 vector signed char vec_vslb (vector signed char, vector unsigned char); 23161 vector unsigned char vec_vslb (vector unsigned char, 23162 vector unsigned char); 23163 23164 vector float vec_sld (vector float, vector float, const int); 23165 vector signed int vec_sld (vector signed int, 23166 vector signed int, 23167 const int); 23168 vector unsigned int vec_sld (vector unsigned int, 23169 vector unsigned int, 23170 const int); 23171 vector bool int vec_sld (vector bool int, 23172 vector bool int, 23173 const int); 23174 vector signed short vec_sld (vector signed short, 23175 vector signed short, 23176 const int); 23177 vector unsigned short vec_sld (vector unsigned short, 23178 vector unsigned short, 23179 const int); 23180 vector bool short vec_sld (vector bool short, 23181 vector bool short, 23182 const int); 23183 vector pixel vec_sld (vector pixel, 23184 vector pixel, 23185 const int); 23186 vector signed char vec_sld (vector signed char, 23187 vector signed char, 23188 const int); 23189 vector unsigned char vec_sld (vector unsigned char, 23190 vector unsigned char, 23191 const int); 23192 vector bool char vec_sld (vector bool char, 23193 vector bool char, 23194 const int); 23195 23196 vector signed int vec_sll (vector signed int, 23197 vector unsigned int); 23198 vector signed int vec_sll (vector signed int, 23199 vector unsigned short); 23200 vector signed int vec_sll (vector signed int, 23201 vector unsigned char); 23202 vector unsigned int vec_sll (vector unsigned int, 23203 vector unsigned int); 23204 vector unsigned int vec_sll (vector unsigned int, 23205 vector unsigned short); 23206 vector unsigned int vec_sll (vector unsigned int, 23207 vector unsigned char); 23208 vector bool int vec_sll (vector bool int, 23209 vector unsigned int); 23210 vector bool int vec_sll (vector bool int, 23211 vector unsigned short); 23212 vector bool int vec_sll (vector bool int, 23213 vector unsigned char); 23214 vector signed short vec_sll (vector signed short, 23215 vector unsigned int); 23216 vector signed short vec_sll (vector signed short, 23217 vector unsigned short); 23218 vector signed short vec_sll (vector signed short, 23219 vector unsigned char); 23220 vector unsigned short vec_sll (vector unsigned short, 23221 vector unsigned int); 23222 vector unsigned short vec_sll (vector unsigned short, 23223 vector unsigned short); 23224 vector unsigned short vec_sll (vector unsigned short, 23225 vector unsigned char); 23226 vector bool short vec_sll (vector bool short, vector unsigned int); 23227 vector bool short vec_sll (vector bool short, vector unsigned short); 23228 vector bool short vec_sll (vector bool short, vector unsigned char); 23229 vector pixel vec_sll (vector pixel, vector unsigned int); 23230 vector pixel vec_sll (vector pixel, vector unsigned short); 23231 vector pixel vec_sll (vector pixel, vector unsigned char); 23232 vector signed char vec_sll (vector signed char, vector unsigned int); 23233 vector signed char vec_sll (vector signed char, vector unsigned short); 23234 vector signed char vec_sll (vector signed char, vector unsigned char); 23235 vector unsigned char vec_sll (vector unsigned char, 23236 vector unsigned int); 23237 vector unsigned char vec_sll (vector unsigned char, 23238 vector unsigned short); 23239 vector unsigned char vec_sll (vector unsigned char, 23240 vector unsigned char); 23241 vector bool char vec_sll (vector bool char, vector unsigned int); 23242 vector bool char vec_sll (vector bool char, vector unsigned short); 23243 vector bool char vec_sll (vector bool char, vector unsigned char); 23244 23245 vector float vec_slo (vector float, vector signed char); 23246 vector float vec_slo (vector float, vector unsigned char); 23247 vector signed int vec_slo (vector signed int, vector signed char); 23248 vector signed int vec_slo (vector signed int, vector unsigned char); 23249 vector unsigned int vec_slo (vector unsigned int, vector signed char); 23250 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 23251 vector signed short vec_slo (vector signed short, vector signed char); 23252 vector signed short vec_slo (vector signed short, vector unsigned char); 23253 vector unsigned short vec_slo (vector unsigned short, 23254 vector signed char); 23255 vector unsigned short vec_slo (vector unsigned short, 23256 vector unsigned char); 23257 vector pixel vec_slo (vector pixel, vector signed char); 23258 vector pixel vec_slo (vector pixel, vector unsigned char); 23259 vector signed char vec_slo (vector signed char, vector signed char); 23260 vector signed char vec_slo (vector signed char, vector unsigned char); 23261 vector unsigned char vec_slo (vector unsigned char, vector signed char); 23262 vector unsigned char vec_slo (vector unsigned char, 23263 vector unsigned char); 23264 23265 vector signed char vec_splat (vector signed char, const int); 23266 vector unsigned char vec_splat (vector unsigned char, const int); 23267 vector bool char vec_splat (vector bool char, const int); 23268 vector signed short vec_splat (vector signed short, const int); 23269 vector unsigned short vec_splat (vector unsigned short, const int); 23270 vector bool short vec_splat (vector bool short, const int); 23271 vector pixel vec_splat (vector pixel, const int); 23272 vector float vec_splat (vector float, const int); 23273 vector signed int vec_splat (vector signed int, const int); 23274 vector unsigned int vec_splat (vector unsigned int, const int); 23275 vector bool int vec_splat (vector bool int, const int); 23276 23277 vector float vec_vspltw (vector float, const int); 23278 vector signed int vec_vspltw (vector signed int, const int); 23279 vector unsigned int vec_vspltw (vector unsigned int, const int); 23280 vector bool int vec_vspltw (vector bool int, const int); 23281 23282 vector bool short vec_vsplth (vector bool short, const int); 23283 vector signed short vec_vsplth (vector signed short, const int); 23284 vector unsigned short vec_vsplth (vector unsigned short, const int); 23285 vector pixel vec_vsplth (vector pixel, const int); 23286 23287 vector signed char vec_vspltb (vector signed char, const int); 23288 vector unsigned char vec_vspltb (vector unsigned char, const int); 23289 vector bool char vec_vspltb (vector bool char, const int); 23290 23291 vector signed char vec_splat_s8 (const int); 23292 23293 vector signed short vec_splat_s16 (const int); 23294 23295 vector signed int vec_splat_s32 (const int); 23296 23297 vector unsigned char vec_splat_u8 (const int); 23298 23299 vector unsigned short vec_splat_u16 (const int); 23300 23301 vector unsigned int vec_splat_u32 (const int); 23302 23303 vector signed char vec_sr (vector signed char, vector unsigned char); 23304 vector unsigned char vec_sr (vector unsigned char, 23305 vector unsigned char); 23306 vector signed short vec_sr (vector signed short, 23307 vector unsigned short); 23308 vector unsigned short vec_sr (vector unsigned short, 23309 vector unsigned short); 23310 vector signed int vec_sr (vector signed int, vector unsigned int); 23311 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 23312 23313 vector signed int vec_vsrw (vector signed int, vector unsigned int); 23314 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 23315 23316 vector signed short vec_vsrh (vector signed short, 23317 vector unsigned short); 23318 vector unsigned short vec_vsrh (vector unsigned short, 23319 vector unsigned short); 23320 23321 vector signed char vec_vsrb (vector signed char, vector unsigned char); 23322 vector unsigned char vec_vsrb (vector unsigned char, 23323 vector unsigned char); 23324 23325 vector signed char vec_sra (vector signed char, vector unsigned char); 23326 vector unsigned char vec_sra (vector unsigned char, 23327 vector unsigned char); 23328 vector signed short vec_sra (vector signed short, 23329 vector unsigned short); 23330 vector unsigned short vec_sra (vector unsigned short, 23331 vector unsigned short); 23332 vector signed int vec_sra (vector signed int, vector unsigned int); 23333 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 23334 23335 vector signed int vec_vsraw (vector signed int, vector unsigned int); 23336 vector unsigned int vec_vsraw (vector unsigned int, 23337 vector unsigned int); 23338 23339 vector signed short vec_vsrah (vector signed short, 23340 vector unsigned short); 23341 vector unsigned short vec_vsrah (vector unsigned short, 23342 vector unsigned short); 23343 23344 vector signed char vec_vsrab (vector signed char, vector unsigned char); 23345 vector unsigned char vec_vsrab (vector unsigned char, 23346 vector unsigned char); 23347 23348 vector signed int vec_srl (vector signed int, vector unsigned int); 23349 vector signed int vec_srl (vector signed int, vector unsigned short); 23350 vector signed int vec_srl (vector signed int, vector unsigned char); 23351 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 23352 vector unsigned int vec_srl (vector unsigned int, 23353 vector unsigned short); 23354 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 23355 vector bool int vec_srl (vector bool int, vector unsigned int); 23356 vector bool int vec_srl (vector bool int, vector unsigned short); 23357 vector bool int vec_srl (vector bool int, vector unsigned char); 23358 vector signed short vec_srl (vector signed short, vector unsigned int); 23359 vector signed short vec_srl (vector signed short, 23360 vector unsigned short); 23361 vector signed short vec_srl (vector signed short, vector unsigned char); 23362 vector unsigned short vec_srl (vector unsigned short, 23363 vector unsigned int); 23364 vector unsigned short vec_srl (vector unsigned short, 23365 vector unsigned short); 23366 vector unsigned short vec_srl (vector unsigned short, 23367 vector unsigned char); 23368 vector bool short vec_srl (vector bool short, vector unsigned int); 23369 vector bool short vec_srl (vector bool short, vector unsigned short); 23370 vector bool short vec_srl (vector bool short, vector unsigned char); 23371 vector pixel vec_srl (vector pixel, vector unsigned int); 23372 vector pixel vec_srl (vector pixel, vector unsigned short); 23373 vector pixel vec_srl (vector pixel, vector unsigned char); 23374 vector signed char vec_srl (vector signed char, vector unsigned int); 23375 vector signed char vec_srl (vector signed char, vector unsigned short); 23376 vector signed char vec_srl (vector signed char, vector unsigned char); 23377 vector unsigned char vec_srl (vector unsigned char, 23378 vector unsigned int); 23379 vector unsigned char vec_srl (vector unsigned char, 23380 vector unsigned short); 23381 vector unsigned char vec_srl (vector unsigned char, 23382 vector unsigned char); 23383 vector bool char vec_srl (vector bool char, vector unsigned int); 23384 vector bool char vec_srl (vector bool char, vector unsigned short); 23385 vector bool char vec_srl (vector bool char, vector unsigned char); 23386 23387 vector float vec_sro (vector float, vector signed char); 23388 vector float vec_sro (vector float, vector unsigned char); 23389 vector signed int vec_sro (vector signed int, vector signed char); 23390 vector signed int vec_sro (vector signed int, vector unsigned char); 23391 vector unsigned int vec_sro (vector unsigned int, vector signed char); 23392 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 23393 vector signed short vec_sro (vector signed short, vector signed char); 23394 vector signed short vec_sro (vector signed short, vector unsigned char); 23395 vector unsigned short vec_sro (vector unsigned short, 23396 vector signed char); 23397 vector unsigned short vec_sro (vector unsigned short, 23398 vector unsigned char); 23399 vector pixel vec_sro (vector pixel, vector signed char); 23400 vector pixel vec_sro (vector pixel, vector unsigned char); 23401 vector signed char vec_sro (vector signed char, vector signed char); 23402 vector signed char vec_sro (vector signed char, vector unsigned char); 23403 vector unsigned char vec_sro (vector unsigned char, vector signed char); 23404 vector unsigned char vec_sro (vector unsigned char, 23405 vector unsigned char); 23406 23407 void vec_st (vector float, int, vector float *); 23408 void vec_st (vector float, int, float *); 23409 void vec_st (vector signed int, int, vector signed int *); 23410 void vec_st (vector signed int, int, int *); 23411 void vec_st (vector unsigned int, int, vector unsigned int *); 23412 void vec_st (vector unsigned int, int, unsigned int *); 23413 void vec_st (vector bool int, int, vector bool int *); 23414 void vec_st (vector bool int, int, unsigned int *); 23415 void vec_st (vector bool int, int, int *); 23416 void vec_st (vector signed short, int, vector signed short *); 23417 void vec_st (vector signed short, int, short *); 23418 void vec_st (vector unsigned short, int, vector unsigned short *); 23419 void vec_st (vector unsigned short, int, unsigned short *); 23420 void vec_st (vector bool short, int, vector bool short *); 23421 void vec_st (vector bool short, int, unsigned short *); 23422 void vec_st (vector pixel, int, vector pixel *); 23423 void vec_st (vector pixel, int, unsigned short *); 23424 void vec_st (vector pixel, int, short *); 23425 void vec_st (vector bool short, int, short *); 23426 void vec_st (vector signed char, int, vector signed char *); 23427 void vec_st (vector signed char, int, signed char *); 23428 void vec_st (vector unsigned char, int, vector unsigned char *); 23429 void vec_st (vector unsigned char, int, unsigned char *); 23430 void vec_st (vector bool char, int, vector bool char *); 23431 void vec_st (vector bool char, int, unsigned char *); 23432 void vec_st (vector bool char, int, signed char *); 23433 23434 void vec_ste (vector signed char, int, signed char *); 23435 void vec_ste (vector unsigned char, int, unsigned char *); 23436 void vec_ste (vector bool char, int, signed char *); 23437 void vec_ste (vector bool char, int, unsigned char *); 23438 void vec_ste (vector signed short, int, short *); 23439 void vec_ste (vector unsigned short, int, unsigned short *); 23440 void vec_ste (vector bool short, int, short *); 23441 void vec_ste (vector bool short, int, unsigned short *); 23442 void vec_ste (vector pixel, int, short *); 23443 void vec_ste (vector pixel, int, unsigned short *); 23444 void vec_ste (vector float, int, float *); 23445 void vec_ste (vector signed int, int, int *); 23446 void vec_ste (vector unsigned int, int, unsigned int *); 23447 void vec_ste (vector bool int, int, int *); 23448 void vec_ste (vector bool int, int, unsigned int *); 23449 23450 void vec_stvewx (vector float, int, float *); 23451 void vec_stvewx (vector signed int, int, int *); 23452 void vec_stvewx (vector unsigned int, int, unsigned int *); 23453 void vec_stvewx (vector bool int, int, int *); 23454 void vec_stvewx (vector bool int, int, unsigned int *); 23455 23456 void vec_stvehx (vector signed short, int, short *); 23457 void vec_stvehx (vector unsigned short, int, unsigned short *); 23458 void vec_stvehx (vector bool short, int, short *); 23459 void vec_stvehx (vector bool short, int, unsigned short *); 23460 void vec_stvehx (vector pixel, int, short *); 23461 void vec_stvehx (vector pixel, int, unsigned short *); 23462 23463 void vec_stvebx (vector signed char, int, signed char *); 23464 void vec_stvebx (vector unsigned char, int, unsigned char *); 23465 void vec_stvebx (vector bool char, int, signed char *); 23466 void vec_stvebx (vector bool char, int, unsigned char *); 23467 23468 void vec_stl (vector float, int, vector float *); 23469 void vec_stl (vector float, int, float *); 23470 void vec_stl (vector signed int, int, vector signed int *); 23471 void vec_stl (vector signed int, int, int *); 23472 void vec_stl (vector unsigned int, int, vector unsigned int *); 23473 void vec_stl (vector unsigned int, int, unsigned int *); 23474 void vec_stl (vector bool int, int, vector bool int *); 23475 void vec_stl (vector bool int, int, unsigned int *); 23476 void vec_stl (vector bool int, int, int *); 23477 void vec_stl (vector signed short, int, vector signed short *); 23478 void vec_stl (vector signed short, int, short *); 23479 void vec_stl (vector unsigned short, int, vector unsigned short *); 23480 void vec_stl (vector unsigned short, int, unsigned short *); 23481 void vec_stl (vector bool short, int, vector bool short *); 23482 void vec_stl (vector bool short, int, unsigned short *); 23483 void vec_stl (vector bool short, int, short *); 23484 void vec_stl (vector pixel, int, vector pixel *); 23485 void vec_stl (vector pixel, int, unsigned short *); 23486 void vec_stl (vector pixel, int, short *); 23487 void vec_stl (vector signed char, int, vector signed char *); 23488 void vec_stl (vector signed char, int, signed char *); 23489 void vec_stl (vector unsigned char, int, vector unsigned char *); 23490 void vec_stl (vector unsigned char, int, unsigned char *); 23491 void vec_stl (vector bool char, int, vector bool char *); 23492 void vec_stl (vector bool char, int, unsigned char *); 23493 void vec_stl (vector bool char, int, signed char *); 23494 23495 vector signed char vec_sub (vector bool char, vector signed char); 23496 vector signed char vec_sub (vector signed char, vector bool char); 23497 vector signed char vec_sub (vector signed char, vector signed char); 23498 vector unsigned char vec_sub (vector bool char, vector unsigned char); 23499 vector unsigned char vec_sub (vector unsigned char, vector bool char); 23500 vector unsigned char vec_sub (vector unsigned char, 23501 vector unsigned char); 23502 vector signed short vec_sub (vector bool short, vector signed short); 23503 vector signed short vec_sub (vector signed short, vector bool short); 23504 vector signed short vec_sub (vector signed short, vector signed short); 23505 vector unsigned short vec_sub (vector bool short, 23506 vector unsigned short); 23507 vector unsigned short vec_sub (vector unsigned short, 23508 vector bool short); 23509 vector unsigned short vec_sub (vector unsigned short, 23510 vector unsigned short); 23511 vector signed int vec_sub (vector bool int, vector signed int); 23512 vector signed int vec_sub (vector signed int, vector bool int); 23513 vector signed int vec_sub (vector signed int, vector signed int); 23514 vector unsigned int vec_sub (vector bool int, vector unsigned int); 23515 vector unsigned int vec_sub (vector unsigned int, vector bool int); 23516 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 23517 vector float vec_sub (vector float, vector float); 23518 23519 vector float vec_vsubfp (vector float, vector float); 23520 23521 vector signed int vec_vsubuwm (vector bool int, vector signed int); 23522 vector signed int vec_vsubuwm (vector signed int, vector bool int); 23523 vector signed int vec_vsubuwm (vector signed int, vector signed int); 23524 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 23525 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 23526 vector unsigned int vec_vsubuwm (vector unsigned int, 23527 vector unsigned int); 23528 23529 vector signed short vec_vsubuhm (vector bool short, 23530 vector signed short); 23531 vector signed short vec_vsubuhm (vector signed short, 23532 vector bool short); 23533 vector signed short vec_vsubuhm (vector signed short, 23534 vector signed short); 23535 vector unsigned short vec_vsubuhm (vector bool short, 23536 vector unsigned short); 23537 vector unsigned short vec_vsubuhm (vector unsigned short, 23538 vector bool short); 23539 vector unsigned short vec_vsubuhm (vector unsigned short, 23540 vector unsigned short); 23541 23542 vector signed char vec_vsububm (vector bool char, vector signed char); 23543 vector signed char vec_vsububm (vector signed char, vector bool char); 23544 vector signed char vec_vsububm (vector signed char, vector signed char); 23545 vector unsigned char vec_vsububm (vector bool char, 23546 vector unsigned char); 23547 vector unsigned char vec_vsububm (vector unsigned char, 23548 vector bool char); 23549 vector unsigned char vec_vsububm (vector unsigned char, 23550 vector unsigned char); 23551 23552 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 23553 23554 vector unsigned char vec_subs (vector bool char, vector unsigned char); 23555 vector unsigned char vec_subs (vector unsigned char, vector bool char); 23556 vector unsigned char vec_subs (vector unsigned char, 23557 vector unsigned char); 23558 vector signed char vec_subs (vector bool char, vector signed char); 23559 vector signed char vec_subs (vector signed char, vector bool char); 23560 vector signed char vec_subs (vector signed char, vector signed char); 23561 vector unsigned short vec_subs (vector bool short, 23562 vector unsigned short); 23563 vector unsigned short vec_subs (vector unsigned short, 23564 vector bool short); 23565 vector unsigned short vec_subs (vector unsigned short, 23566 vector unsigned short); 23567 vector signed short vec_subs (vector bool short, vector signed short); 23568 vector signed short vec_subs (vector signed short, vector bool short); 23569 vector signed short vec_subs (vector signed short, vector signed short); 23570 vector unsigned int vec_subs (vector bool int, vector unsigned int); 23571 vector unsigned int vec_subs (vector unsigned int, vector bool int); 23572 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 23573 vector signed int vec_subs (vector bool int, vector signed int); 23574 vector signed int vec_subs (vector signed int, vector bool int); 23575 vector signed int vec_subs (vector signed int, vector signed int); 23576 23577 vector signed int vec_vsubsws (vector bool int, vector signed int); 23578 vector signed int vec_vsubsws (vector signed int, vector bool int); 23579 vector signed int vec_vsubsws (vector signed int, vector signed int); 23580 23581 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 23582 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 23583 vector unsigned int vec_vsubuws (vector unsigned int, 23584 vector unsigned int); 23585 23586 vector signed short vec_vsubshs (vector bool short, 23587 vector signed short); 23588 vector signed short vec_vsubshs (vector signed short, 23589 vector bool short); 23590 vector signed short vec_vsubshs (vector signed short, 23591 vector signed short); 23592 23593 vector unsigned short vec_vsubuhs (vector bool short, 23594 vector unsigned short); 23595 vector unsigned short vec_vsubuhs (vector unsigned short, 23596 vector bool short); 23597 vector unsigned short vec_vsubuhs (vector unsigned short, 23598 vector unsigned short); 23599 23600 vector signed char vec_vsubsbs (vector bool char, vector signed char); 23601 vector signed char vec_vsubsbs (vector signed char, vector bool char); 23602 vector signed char vec_vsubsbs (vector signed char, vector signed char); 23603 23604 vector unsigned char vec_vsububs (vector bool char, 23605 vector unsigned char); 23606 vector unsigned char vec_vsububs (vector unsigned char, 23607 vector bool char); 23608 vector unsigned char vec_vsububs (vector unsigned char, 23609 vector unsigned char); 23610 23611 vector unsigned int vec_sum4s (vector unsigned char, 23612 vector unsigned int); 23613 vector signed int vec_sum4s (vector signed char, vector signed int); 23614 vector signed int vec_sum4s (vector signed short, vector signed int); 23615 23616 vector signed int vec_vsum4shs (vector signed short, vector signed int); 23617 23618 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 23619 23620 vector unsigned int vec_vsum4ubs (vector unsigned char, 23621 vector unsigned int); 23622 23623 vector signed int vec_sum2s (vector signed int, vector signed int); 23624 23625 vector signed int vec_sums (vector signed int, vector signed int); 23626 23627 vector float vec_trunc (vector float); 23628 23629 vector signed short vec_unpackh (vector signed char); 23630 vector bool short vec_unpackh (vector bool char); 23631 vector signed int vec_unpackh (vector signed short); 23632 vector bool int vec_unpackh (vector bool short); 23633 vector unsigned int vec_unpackh (vector pixel); 23634 23635 vector bool int vec_vupkhsh (vector bool short); 23636 vector signed int vec_vupkhsh (vector signed short); 23637 23638 vector unsigned int vec_vupkhpx (vector pixel); 23639 23640 vector bool short vec_vupkhsb (vector bool char); 23641 vector signed short vec_vupkhsb (vector signed char); 23642 23643 vector signed short vec_unpackl (vector signed char); 23644 vector bool short vec_unpackl (vector bool char); 23645 vector unsigned int vec_unpackl (vector pixel); 23646 vector signed int vec_unpackl (vector signed short); 23647 vector bool int vec_unpackl (vector bool short); 23648 23649 vector unsigned int vec_vupklpx (vector pixel); 23650 23651 vector bool int vec_vupklsh (vector bool short); 23652 vector signed int vec_vupklsh (vector signed short); 23653 23654 vector bool short vec_vupklsb (vector bool char); 23655 vector signed short vec_vupklsb (vector signed char); 23656 23657 vector float vec_xor (vector float, vector float); 23658 vector float vec_xor (vector float, vector bool int); 23659 vector float vec_xor (vector bool int, vector float); 23660 vector bool int vec_xor (vector bool int, vector bool int); 23661 vector signed int vec_xor (vector bool int, vector signed int); 23662 vector signed int vec_xor (vector signed int, vector bool int); 23663 vector signed int vec_xor (vector signed int, vector signed int); 23664 vector unsigned int vec_xor (vector bool int, vector unsigned int); 23665 vector unsigned int vec_xor (vector unsigned int, vector bool int); 23666 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 23667 vector bool short vec_xor (vector bool short, vector bool short); 23668 vector signed short vec_xor (vector bool short, vector signed short); 23669 vector signed short vec_xor (vector signed short, vector bool short); 23670 vector signed short vec_xor (vector signed short, vector signed short); 23671 vector unsigned short vec_xor (vector bool short, 23672 vector unsigned short); 23673 vector unsigned short vec_xor (vector unsigned short, 23674 vector bool short); 23675 vector unsigned short vec_xor (vector unsigned short, 23676 vector unsigned short); 23677 vector signed char vec_xor (vector bool char, vector signed char); 23678 vector bool char vec_xor (vector bool char, vector bool char); 23679 vector signed char vec_xor (vector signed char, vector bool char); 23680 vector signed char vec_xor (vector signed char, vector signed char); 23681 vector unsigned char vec_xor (vector bool char, vector unsigned char); 23682 vector unsigned char vec_xor (vector unsigned char, vector bool char); 23683 vector unsigned char vec_xor (vector unsigned char, 23684 vector unsigned char); 23685 23686 int vec_all_eq (vector signed char, vector bool char); 23687 int vec_all_eq (vector signed char, vector signed char); 23688 int vec_all_eq (vector unsigned char, vector bool char); 23689 int vec_all_eq (vector unsigned char, vector unsigned char); 23690 int vec_all_eq (vector bool char, vector bool char); 23691 int vec_all_eq (vector bool char, vector unsigned char); 23692 int vec_all_eq (vector bool char, vector signed char); 23693 int vec_all_eq (vector signed short, vector bool short); 23694 int vec_all_eq (vector signed short, vector signed short); 23695 int vec_all_eq (vector unsigned short, vector bool short); 23696 int vec_all_eq (vector unsigned short, vector unsigned short); 23697 int vec_all_eq (vector bool short, vector bool short); 23698 int vec_all_eq (vector bool short, vector unsigned short); 23699 int vec_all_eq (vector bool short, vector signed short); 23700 int vec_all_eq (vector pixel, vector pixel); 23701 int vec_all_eq (vector signed int, vector bool int); 23702 int vec_all_eq (vector signed int, vector signed int); 23703 int vec_all_eq (vector unsigned int, vector bool int); 23704 int vec_all_eq (vector unsigned int, vector unsigned int); 23705 int vec_all_eq (vector bool int, vector bool int); 23706 int vec_all_eq (vector bool int, vector unsigned int); 23707 int vec_all_eq (vector bool int, vector signed int); 23708 int vec_all_eq (vector float, vector float); 23709 23710 int vec_all_ge (vector bool char, vector unsigned char); 23711 int vec_all_ge (vector unsigned char, vector bool char); 23712 int vec_all_ge (vector unsigned char, vector unsigned char); 23713 int vec_all_ge (vector bool char, vector signed char); 23714 int vec_all_ge (vector signed char, vector bool char); 23715 int vec_all_ge (vector signed char, vector signed char); 23716 int vec_all_ge (vector bool short, vector unsigned short); 23717 int vec_all_ge (vector unsigned short, vector bool short); 23718 int vec_all_ge (vector unsigned short, vector unsigned short); 23719 int vec_all_ge (vector signed short, vector signed short); 23720 int vec_all_ge (vector bool short, vector signed short); 23721 int vec_all_ge (vector signed short, vector bool short); 23722 int vec_all_ge (vector bool int, vector unsigned int); 23723 int vec_all_ge (vector unsigned int, vector bool int); 23724 int vec_all_ge (vector unsigned int, vector unsigned int); 23725 int vec_all_ge (vector bool int, vector signed int); 23726 int vec_all_ge (vector signed int, vector bool int); 23727 int vec_all_ge (vector signed int, vector signed int); 23728 int vec_all_ge (vector float, vector float); 23729 23730 int vec_all_gt (vector bool char, vector unsigned char); 23731 int vec_all_gt (vector unsigned char, vector bool char); 23732 int vec_all_gt (vector unsigned char, vector unsigned char); 23733 int vec_all_gt (vector bool char, vector signed char); 23734 int vec_all_gt (vector signed char, vector bool char); 23735 int vec_all_gt (vector signed char, vector signed char); 23736 int vec_all_gt (vector bool short, vector unsigned short); 23737 int vec_all_gt (vector unsigned short, vector bool short); 23738 int vec_all_gt (vector unsigned short, vector unsigned short); 23739 int vec_all_gt (vector bool short, vector signed short); 23740 int vec_all_gt (vector signed short, vector bool short); 23741 int vec_all_gt (vector signed short, vector signed short); 23742 int vec_all_gt (vector bool int, vector unsigned int); 23743 int vec_all_gt (vector unsigned int, vector bool int); 23744 int vec_all_gt (vector unsigned int, vector unsigned int); 23745 int vec_all_gt (vector bool int, vector signed int); 23746 int vec_all_gt (vector signed int, vector bool int); 23747 int vec_all_gt (vector signed int, vector signed int); 23748 int vec_all_gt (vector float, vector float); 23749 23750 int vec_all_in (vector float, vector float); 23751 23752 int vec_all_le (vector bool char, vector unsigned char); 23753 int vec_all_le (vector unsigned char, vector bool char); 23754 int vec_all_le (vector unsigned char, vector unsigned char); 23755 int vec_all_le (vector bool char, vector signed char); 23756 int vec_all_le (vector signed char, vector bool char); 23757 int vec_all_le (vector signed char, vector signed char); 23758 int vec_all_le (vector bool short, vector unsigned short); 23759 int vec_all_le (vector unsigned short, vector bool short); 23760 int vec_all_le (vector unsigned short, vector unsigned short); 23761 int vec_all_le (vector bool short, vector signed short); 23762 int vec_all_le (vector signed short, vector bool short); 23763 int vec_all_le (vector signed short, vector signed short); 23764 int vec_all_le (vector bool int, vector unsigned int); 23765 int vec_all_le (vector unsigned int, vector bool int); 23766 int vec_all_le (vector unsigned int, vector unsigned int); 23767 int vec_all_le (vector bool int, vector signed int); 23768 int vec_all_le (vector signed int, vector bool int); 23769 int vec_all_le (vector signed int, vector signed int); 23770 int vec_all_le (vector float, vector float); 23771 23772 int vec_all_lt (vector bool char, vector unsigned char); 23773 int vec_all_lt (vector unsigned char, vector bool char); 23774 int vec_all_lt (vector unsigned char, vector unsigned char); 23775 int vec_all_lt (vector bool char, vector signed char); 23776 int vec_all_lt (vector signed char, vector bool char); 23777 int vec_all_lt (vector signed char, vector signed char); 23778 int vec_all_lt (vector bool short, vector unsigned short); 23779 int vec_all_lt (vector unsigned short, vector bool short); 23780 int vec_all_lt (vector unsigned short, vector unsigned short); 23781 int vec_all_lt (vector bool short, vector signed short); 23782 int vec_all_lt (vector signed short, vector bool short); 23783 int vec_all_lt (vector signed short, vector signed short); 23784 int vec_all_lt (vector bool int, vector unsigned int); 23785 int vec_all_lt (vector unsigned int, vector bool int); 23786 int vec_all_lt (vector unsigned int, vector unsigned int); 23787 int vec_all_lt (vector bool int, vector signed int); 23788 int vec_all_lt (vector signed int, vector bool int); 23789 int vec_all_lt (vector signed int, vector signed int); 23790 int vec_all_lt (vector float, vector float); 23791 23792 int vec_all_nan (vector float); 23793 23794 int vec_all_ne (vector signed char, vector bool char); 23795 int vec_all_ne (vector signed char, vector signed char); 23796 int vec_all_ne (vector unsigned char, vector bool char); 23797 int vec_all_ne (vector unsigned char, vector unsigned char); 23798 int vec_all_ne (vector bool char, vector bool char); 23799 int vec_all_ne (vector bool char, vector unsigned char); 23800 int vec_all_ne (vector bool char, vector signed char); 23801 int vec_all_ne (vector signed short, vector bool short); 23802 int vec_all_ne (vector signed short, vector signed short); 23803 int vec_all_ne (vector unsigned short, vector bool short); 23804 int vec_all_ne (vector unsigned short, vector unsigned short); 23805 int vec_all_ne (vector bool short, vector bool short); 23806 int vec_all_ne (vector bool short, vector unsigned short); 23807 int vec_all_ne (vector bool short, vector signed short); 23808 int vec_all_ne (vector pixel, vector pixel); 23809 int vec_all_ne (vector signed int, vector bool int); 23810 int vec_all_ne (vector signed int, vector signed int); 23811 int vec_all_ne (vector unsigned int, vector bool int); 23812 int vec_all_ne (vector unsigned int, vector unsigned int); 23813 int vec_all_ne (vector bool int, vector bool int); 23814 int vec_all_ne (vector bool int, vector unsigned int); 23815 int vec_all_ne (vector bool int, vector signed int); 23816 int vec_all_ne (vector float, vector float); 23817 23818 int vec_all_nge (vector float, vector float); 23819 23820 int vec_all_ngt (vector float, vector float); 23821 23822 int vec_all_nle (vector float, vector float); 23823 23824 int vec_all_nlt (vector float, vector float); 23825 23826 int vec_all_numeric (vector float); 23827 23828 int vec_any_eq (vector signed char, vector bool char); 23829 int vec_any_eq (vector signed char, vector signed char); 23830 int vec_any_eq (vector unsigned char, vector bool char); 23831 int vec_any_eq (vector unsigned char, vector unsigned char); 23832 int vec_any_eq (vector bool char, vector bool char); 23833 int vec_any_eq (vector bool char, vector unsigned char); 23834 int vec_any_eq (vector bool char, vector signed char); 23835 int vec_any_eq (vector signed short, vector bool short); 23836 int vec_any_eq (vector signed short, vector signed short); 23837 int vec_any_eq (vector unsigned short, vector bool short); 23838 int vec_any_eq (vector unsigned short, vector unsigned short); 23839 int vec_any_eq (vector bool short, vector bool short); 23840 int vec_any_eq (vector bool short, vector unsigned short); 23841 int vec_any_eq (vector bool short, vector signed short); 23842 int vec_any_eq (vector pixel, vector pixel); 23843 int vec_any_eq (vector signed int, vector bool int); 23844 int vec_any_eq (vector signed int, vector signed int); 23845 int vec_any_eq (vector unsigned int, vector bool int); 23846 int vec_any_eq (vector unsigned int, vector unsigned int); 23847 int vec_any_eq (vector bool int, vector bool int); 23848 int vec_any_eq (vector bool int, vector unsigned int); 23849 int vec_any_eq (vector bool int, vector signed int); 23850 int vec_any_eq (vector float, vector float); 23851 23852 int vec_any_ge (vector signed char, vector bool char); 23853 int vec_any_ge (vector unsigned char, vector bool char); 23854 int vec_any_ge (vector unsigned char, vector unsigned char); 23855 int vec_any_ge (vector signed char, vector signed char); 23856 int vec_any_ge (vector bool char, vector unsigned char); 23857 int vec_any_ge (vector bool char, vector signed char); 23858 int vec_any_ge (vector unsigned short, vector bool short); 23859 int vec_any_ge (vector unsigned short, vector unsigned short); 23860 int vec_any_ge (vector signed short, vector signed short); 23861 int vec_any_ge (vector signed short, vector bool short); 23862 int vec_any_ge (vector bool short, vector unsigned short); 23863 int vec_any_ge (vector bool short, vector signed short); 23864 int vec_any_ge (vector signed int, vector bool int); 23865 int vec_any_ge (vector unsigned int, vector bool int); 23866 int vec_any_ge (vector unsigned int, vector unsigned int); 23867 int vec_any_ge (vector signed int, vector signed int); 23868 int vec_any_ge (vector bool int, vector unsigned int); 23869 int vec_any_ge (vector bool int, vector signed int); 23870 int vec_any_ge (vector float, vector float); 23871 23872 int vec_any_gt (vector bool char, vector unsigned char); 23873 int vec_any_gt (vector unsigned char, vector bool char); 23874 int vec_any_gt (vector unsigned char, vector unsigned char); 23875 int vec_any_gt (vector bool char, vector signed char); 23876 int vec_any_gt (vector signed char, vector bool char); 23877 int vec_any_gt (vector signed char, vector signed char); 23878 int vec_any_gt (vector bool short, vector unsigned short); 23879 int vec_any_gt (vector unsigned short, vector bool short); 23880 int vec_any_gt (vector unsigned short, vector unsigned short); 23881 int vec_any_gt (vector bool short, vector signed short); 23882 int vec_any_gt (vector signed short, vector bool short); 23883 int vec_any_gt (vector signed short, vector signed short); 23884 int vec_any_gt (vector bool int, vector unsigned int); 23885 int vec_any_gt (vector unsigned int, vector bool int); 23886 int vec_any_gt (vector unsigned int, vector unsigned int); 23887 int vec_any_gt (vector bool int, vector signed int); 23888 int vec_any_gt (vector signed int, vector bool int); 23889 int vec_any_gt (vector signed int, vector signed int); 23890 int vec_any_gt (vector float, vector float); 23891 23892 int vec_any_le (vector bool char, vector unsigned char); 23893 int vec_any_le (vector unsigned char, vector bool char); 23894 int vec_any_le (vector unsigned char, vector unsigned char); 23895 int vec_any_le (vector bool char, vector signed char); 23896 int vec_any_le (vector signed char, vector bool char); 23897 int vec_any_le (vector signed char, vector signed char); 23898 int vec_any_le (vector bool short, vector unsigned short); 23899 int vec_any_le (vector unsigned short, vector bool short); 23900 int vec_any_le (vector unsigned short, vector unsigned short); 23901 int vec_any_le (vector bool short, vector signed short); 23902 int vec_any_le (vector signed short, vector bool short); 23903 int vec_any_le (vector signed short, vector signed short); 23904 int vec_any_le (vector bool int, vector unsigned int); 23905 int vec_any_le (vector unsigned int, vector bool int); 23906 int vec_any_le (vector unsigned int, vector unsigned int); 23907 int vec_any_le (vector bool int, vector signed int); 23908 int vec_any_le (vector signed int, vector bool int); 23909 int vec_any_le (vector signed int, vector signed int); 23910 int vec_any_le (vector float, vector float); 23911 23912 int vec_any_lt (vector bool char, vector unsigned char); 23913 int vec_any_lt (vector unsigned char, vector bool char); 23914 int vec_any_lt (vector unsigned char, vector unsigned char); 23915 int vec_any_lt (vector bool char, vector signed char); 23916 int vec_any_lt (vector signed char, vector bool char); 23917 int vec_any_lt (vector signed char, vector signed char); 23918 int vec_any_lt (vector bool short, vector unsigned short); 23919 int vec_any_lt (vector unsigned short, vector bool short); 23920 int vec_any_lt (vector unsigned short, vector unsigned short); 23921 int vec_any_lt (vector bool short, vector signed short); 23922 int vec_any_lt (vector signed short, vector bool short); 23923 int vec_any_lt (vector signed short, vector signed short); 23924 int vec_any_lt (vector bool int, vector unsigned int); 23925 int vec_any_lt (vector unsigned int, vector bool int); 23926 int vec_any_lt (vector unsigned int, vector unsigned int); 23927 int vec_any_lt (vector bool int, vector signed int); 23928 int vec_any_lt (vector signed int, vector bool int); 23929 int vec_any_lt (vector signed int, vector signed int); 23930 int vec_any_lt (vector float, vector float); 23931 23932 int vec_any_nan (vector float); 23933 23934 int vec_any_ne (vector signed char, vector bool char); 23935 int vec_any_ne (vector signed char, vector signed char); 23936 int vec_any_ne (vector unsigned char, vector bool char); 23937 int vec_any_ne (vector unsigned char, vector unsigned char); 23938 int vec_any_ne (vector bool char, vector bool char); 23939 int vec_any_ne (vector bool char, vector unsigned char); 23940 int vec_any_ne (vector bool char, vector signed char); 23941 int vec_any_ne (vector signed short, vector bool short); 23942 int vec_any_ne (vector signed short, vector signed short); 23943 int vec_any_ne (vector unsigned short, vector bool short); 23944 int vec_any_ne (vector unsigned short, vector unsigned short); 23945 int vec_any_ne (vector bool short, vector bool short); 23946 int vec_any_ne (vector bool short, vector unsigned short); 23947 int vec_any_ne (vector bool short, vector signed short); 23948 int vec_any_ne (vector pixel, vector pixel); 23949 int vec_any_ne (vector signed int, vector bool int); 23950 int vec_any_ne (vector signed int, vector signed int); 23951 int vec_any_ne (vector unsigned int, vector bool int); 23952 int vec_any_ne (vector unsigned int, vector unsigned int); 23953 int vec_any_ne (vector bool int, vector bool int); 23954 int vec_any_ne (vector bool int, vector unsigned int); 23955 int vec_any_ne (vector bool int, vector signed int); 23956 int vec_any_ne (vector float, vector float); 23957 23958 int vec_any_nge (vector float, vector float); 23959 23960 int vec_any_ngt (vector float, vector float); 23961 23962 int vec_any_nle (vector float, vector float); 23963 23964 int vec_any_nlt (vector float, vector float); 23965 23966 int vec_any_numeric (vector float); 23967 23968 int vec_any_out (vector float, vector float); 23969 23970 23971File: gcc.info, Node: SPARC VIS Built-in Functions, Prev: PowerPC AltiVec Built-in Functions, Up: Target Builtins 23972 239735.48.9 SPARC VIS Built-in Functions 23974----------------------------------- 23975 23976GCC supports SIMD operations on the SPARC using both the generic vector 23977extensions (*note Vector Extensions::) as well as built-in functions for 23978the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 23979switch, the VIS extension is exposed as the following built-in 23980functions: 23981 23982 typedef int v2si __attribute__ ((vector_size (8))); 23983 typedef short v4hi __attribute__ ((vector_size (8))); 23984 typedef short v2hi __attribute__ ((vector_size (4))); 23985 typedef char v8qi __attribute__ ((vector_size (8))); 23986 typedef char v4qi __attribute__ ((vector_size (4))); 23987 23988 void * __builtin_vis_alignaddr (void *, long); 23989 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 23990 v2si __builtin_vis_faligndatav2si (v2si, v2si); 23991 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 23992 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 23993 23994 v4hi __builtin_vis_fexpand (v4qi); 23995 23996 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 23997 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 23998 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 23999 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 24000 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 24001 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 24002 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 24003 24004 v4qi __builtin_vis_fpack16 (v4hi); 24005 v8qi __builtin_vis_fpack32 (v2si, v2si); 24006 v2hi __builtin_vis_fpackfix (v2si); 24007 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 24008 24009 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 24010 24011 24012File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 24013 240145.49 Format Checks Specific to Particular Target Machines 24015========================================================= 24016 24017For some target machines, GCC supports additional options to the format 24018attribute (*note Declaring Attributes of Functions: Function 24019Attributes.). 24020 24021* Menu: 24022 24023* Solaris Format Checks:: 24024 24025 24026File: gcc.info, Node: Solaris Format Checks, Up: Target Format Checks 24027 240285.49.1 Solaris Format Checks 24029---------------------------- 24030 24031Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 24032`cmn_err' accepts a subset of the standard `printf' conversions, and 24033the two-argument `%b' conversion for displaying bit-fields. See the 24034Solaris man page for `cmn_err' for more information. 24035 24036 24037File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 24038 240395.50 Pragmas Accepted by GCC 24040============================ 24041 24042GCC supports several types of pragmas, primarily in order to compile 24043code originally written for other compilers. Note that in general we 24044do not recommend the use of pragmas; *Note Function Attributes::, for 24045further explanation. 24046 24047* Menu: 24048 24049* ARM Pragmas:: 24050* M32C Pragmas:: 24051* RS/6000 and PowerPC Pragmas:: 24052* Darwin Pragmas:: 24053* Solaris Pragmas:: 24054* Symbol-Renaming Pragmas:: 24055* Structure-Packing Pragmas:: 24056* Weak Pragmas:: 24057* Diagnostic Pragmas:: 24058* Visibility Pragmas:: 24059 24060 24061File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 24062 240635.50.1 ARM Pragmas 24064------------------ 24065 24066The ARM target defines pragmas for controlling the default addition of 24067`long_call' and `short_call' attributes to functions. *Note Function 24068Attributes::, for information about the effects of these attributes. 24069 24070`long_calls' 24071 Set all subsequent functions to have the `long_call' attribute. 24072 24073`no_long_calls' 24074 Set all subsequent functions to have the `short_call' attribute. 24075 24076`long_calls_off' 24077 Do not affect the `long_call' or `short_call' attributes of 24078 subsequent functions. 24079 24080 24081File: gcc.info, Node: M32C Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: ARM Pragmas, Up: Pragmas 24082 240835.50.2 M32C Pragmas 24084------------------- 24085 24086`memregs NUMBER' 24087 Overrides the command line option `-memregs=' for the current 24088 file. Use with care! This pragma must be before any function in 24089 the file, and mixing different memregs values in different objects 24090 may make them incompatible. This pragma is useful when a 24091 performance-critical function uses a memreg for temporary values, 24092 as it may allow you to reduce the number of memregs used. 24093 24094 24095 24096File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: M32C Pragmas, Up: Pragmas 24097 240985.50.3 RS/6000 and PowerPC Pragmas 24099---------------------------------- 24100 24101The RS/6000 and PowerPC targets define one pragma for controlling 24102whether or not the `longcall' attribute is added to function 24103declarations by default. This pragma overrides the `-mlongcall' 24104option, but not the `longcall' and `shortcall' attributes. *Note 24105RS/6000 and PowerPC Options::, for more information about when long 24106calls are and are not necessary. 24107 24108`longcall (1)' 24109 Apply the `longcall' attribute to all subsequent function 24110 declarations. 24111 24112`longcall (0)' 24113 Do not apply the `longcall' attribute to subsequent function 24114 declarations. 24115 24116 24117File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 24118 241195.50.4 Darwin Pragmas 24120--------------------- 24121 24122The following pragmas are available for all architectures running the 24123Darwin operating system. These are useful for compatibility with other 24124Mac OS compilers. 24125 24126`mark TOKENS...' 24127 This pragma is accepted, but has no effect. 24128 24129`options align=ALIGNMENT' 24130 This pragma sets the alignment of fields in structures. The 24131 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 24132 `power', to emulate PowerPC alignment. Uses of this pragma nest 24133 properly; to restore the previous setting, use `reset' for the 24134 ALIGNMENT. 24135 24136`segment TOKENS...' 24137 This pragma is accepted, but has no effect. 24138 24139`unused (VAR [, VAR]...)' 24140 This pragma declares variables to be possibly unused. GCC will not 24141 produce warnings for the listed variables. The effect is similar 24142 to that of the `unused' attribute, except that this pragma may 24143 appear anywhere within the variables' scopes. 24144 24145 24146File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 24147 241485.50.5 Solaris Pragmas 24149---------------------- 24150 24151The Solaris target supports `#pragma redefine_extname' (*note 24152Symbol-Renaming Pragmas::). It also supports additional `#pragma' 24153directives for compatibility with the system compiler. 24154 24155`align ALIGNMENT (VARIABLE [, VARIABLE]...)' 24156 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 24157 This is the same as GCC's `aligned' attribute *note Variable 24158 Attributes::). Macro expansion occurs on the arguments to this 24159 pragma when compiling C and Objective-C. It does not currently 24160 occur when compiling C++, but this is a bug which may be fixed in 24161 a future release. 24162 24163`fini (FUNCTION [, FUNCTION]...)' 24164 This pragma causes each listed FUNCTION to be called after main, 24165 or during shared module unloading, by adding a call to the `.fini' 24166 section. 24167 24168`init (FUNCTION [, FUNCTION]...)' 24169 This pragma causes each listed FUNCTION to be called during 24170 initialization (before `main') or during shared module loading, by 24171 adding a call to the `.init' section. 24172 24173 24174 24175File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 24176 241775.50.6 Symbol-Renaming Pragmas 24178------------------------------ 24179 24180For compatibility with the Solaris and Tru64 UNIX system headers, GCC 24181supports two `#pragma' directives which change the name used in 24182assembly for a given declaration. These pragmas are only available on 24183platforms whose system headers need them. To get this effect on all 24184platforms supported by GCC, use the asm labels extension (*note Asm 24185Labels::). 24186 24187`redefine_extname OLDNAME NEWNAME' 24188 This pragma gives the C function OLDNAME the assembly symbol 24189 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 24190 be defined if this pragma is available (currently only on Solaris). 24191 24192`extern_prefix STRING' 24193 This pragma causes all subsequent external function and variable 24194 declarations to have STRING prepended to their assembly symbols. 24195 This effect may be terminated with another `extern_prefix' pragma 24196 whose argument is an empty string. The preprocessor macro 24197 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 24198 available (currently only on Tru64 UNIX). 24199 24200 These pragmas and the asm labels extension interact in a complicated 24201manner. Here are some corner cases you may want to be aware of. 24202 24203 1. Both pragmas silently apply only to declarations with external 24204 linkage. Asm labels do not have this restriction. 24205 24206 2. In C++, both pragmas silently apply only to declarations with "C" 24207 linkage. Again, asm labels do not have this restriction. 24208 24209 3. If any of the three ways of changing the assembly name of a 24210 declaration is applied to a declaration whose assembly name has 24211 already been determined (either by a previous use of one of these 24212 features, or because the compiler needed the assembly name in 24213 order to generate code), and the new name is different, a warning 24214 issues and the name does not change. 24215 24216 4. The OLDNAME used by `#pragma redefine_extname' is always the 24217 C-language name. 24218 24219 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 24220 with an asm label attached, the prefix is silently ignored for 24221 that declaration. 24222 24223 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 24224 the same declaration, whichever triggered first wins, and a 24225 warning issues if they contradict each other. (We would like to 24226 have `#pragma redefine_extname' always win, for consistency with 24227 asm labels, but if `#pragma extern_prefix' triggers first we have 24228 no way of knowing that that happened.) 24229 24230 24231File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 24232 242335.50.7 Structure-Packing Pragmas 24234-------------------------------- 24235 24236For compatibility with Win32, GCC supports a set of `#pragma' 24237directives which change the maximum alignment of members of structures 24238(other than zero-width bitfields), unions, and classes subsequently 24239defined. The N value below always is required to be a small power of 24240two and specifies the new alignment in bytes. 24241 24242 1. `#pragma pack(N)' simply sets the new alignment. 24243 24244 2. `#pragma pack()' sets the alignment to the one that was in effect 24245 when compilation started (see also command line option 24246 `-fpack-struct[=<n>]' *note Code Gen Options::). 24247 24248 3. `#pragma pack(push[,N])' pushes the current alignment setting on 24249 an internal stack and then optionally sets the new alignment. 24250 24251 4. `#pragma pack(pop)' restores the alignment setting to the one 24252 saved at the top of the internal stack (and removes that stack 24253 entry). Note that `#pragma pack([N])' does not influence this 24254 internal stack; thus it is possible to have `#pragma pack(push)' 24255 followed by multiple `#pragma pack(N)' instances and finalized by 24256 a single `#pragma pack(pop)'. 24257 24258 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 24259which lays out a structure as the documented `__attribute__ 24260((ms_struct))'. 24261 1. `#pragma ms_struct on' turns on the layout for structures declared. 24262 24263 2. `#pragma ms_struct off' turns off the layout for structures 24264 declared. 24265 24266 3. `#pragma ms_struct reset' goes back to the default layout. 24267 24268 24269File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 24270 242715.50.8 Weak Pragmas 24272------------------- 24273 24274For compatibility with SVR4, GCC supports a set of `#pragma' directives 24275for declaring symbols to be weak, and defining weak aliases. 24276 24277`#pragma weak SYMBOL' 24278 This pragma declares SYMBOL to be weak, as if the declaration had 24279 the attribute of the same name. The pragma may appear before or 24280 after the declaration of SYMBOL, but must appear before either its 24281 first use or its definition. It is not an error for SYMBOL to 24282 never be defined at all. 24283 24284`#pragma weak SYMBOL1 = SYMBOL2' 24285 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 24286 an error if SYMBOL2 is not defined in the current translation unit. 24287 24288 24289File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 24290 242915.50.9 Diagnostic Pragmas 24292------------------------- 24293 24294GCC allows the user to selectively enable or disable certain types of 24295diagnostics, and change the kind of the diagnostic. For example, a 24296project's policy might require that all sources compile with `-Werror' 24297but certain files might have exceptions allowing specific types of 24298warnings. Or, a project might selectively enable diagnostics and treat 24299them as errors depending on which preprocessor macros are defined. 24300 24301`#pragma GCC diagnostic KIND OPTION' 24302 Modifies the disposition of a diagnostic. Note that not all 24303 diagnostics are modifiable; at the moment only warnings (normally 24304 controlled by `-W...') can be controlled, and not all of them. 24305 Use `-fdiagnostics-show-option' to determine which diagnostics are 24306 controllable and which option controls them. 24307 24308 KIND is `error' to treat this diagnostic as an error, `warning' to 24309 treat it like a warning (even if `-Werror' is in effect), or 24310 `ignored' if the diagnostic is to be ignored. OPTION is a double 24311 quoted string which matches the command line option. 24312 24313 #pragma GCC diagnostic warning "-Wformat" 24314 #pragma GCC diagnostic error "-Wformat" 24315 #pragma GCC diagnostic ignored "-Wformat" 24316 24317 Note that these pragmas override any command line options. Also, 24318 while it is syntactically valid to put these pragmas anywhere in 24319 your sources, the only supported location for them is before any 24320 data or functions are defined. Doing otherwise may result in 24321 unpredictable results depending on how the optimizer manages your 24322 sources. If the same option is listed multiple times, the last 24323 one specified is the one that is in effect. This pragma is not 24324 intended to be a general purpose replacement for command line 24325 options, but for implementing strict control over project policies. 24326 24327 24328 24329File: gcc.info, Node: Visibility Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 24330 243315.50.10 Visibility Pragmas 24332-------------------------- 24333 24334`#pragma GCC visibility push(VISIBILITY)' 24335`#pragma GCC visibility pop' 24336 This pragma allows the user to set the visibility for multiple 24337 declarations without having to give each a visibility attribute 24338 *Note Function Attributes::, for more information about visibility 24339 and the attribute syntax. 24340 24341 In C++, `#pragma GCC visibility' affects only namespace-scope 24342 declarations. Class members and template specializations are not 24343 affected; if you want to override the visibility for a particular 24344 member or instantiation, you must use an attribute. 24345 24346 24347 24348File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 24349 243505.51 Unnamed struct/union fields within structs/unions 24351====================================================== 24352 24353For compatibility with other compilers, GCC allows you to define a 24354structure or union that contains, as fields, structures and unions 24355without names. For example: 24356 24357 struct { 24358 int a; 24359 union { 24360 int b; 24361 float c; 24362 }; 24363 int d; 24364 } foo; 24365 24366 In this example, the user would be able to access members of the 24367unnamed union with code like `foo.b'. Note that only unnamed structs 24368and unions are allowed, you may not have, for example, an unnamed `int'. 24369 24370 You must never create such structures that cause ambiguous field 24371definitions. For example, this structure: 24372 24373 struct { 24374 int a; 24375 struct { 24376 int a; 24377 }; 24378 } foo; 24379 24380 It is ambiguous which `a' is being referred to with `foo.a'. Such 24381constructs are not supported and must be avoided. In the future, such 24382constructs may be detected and treated as compilation errors. 24383 24384 Unless `-fms-extensions' is used, the unnamed field must be a 24385structure or union definition without a tag (for example, `struct { int 24386a; };'). If `-fms-extensions' is used, the field may also be a 24387definition with a tag such as `struct foo { int a; };', a reference to 24388a previously defined structure or union such as `struct foo;', or a 24389reference to a `typedef' name for a previously defined structure or 24390union type. 24391 24392 24393File: gcc.info, Node: Thread-Local, Prev: Unnamed Fields, Up: C Extensions 24394 243955.52 Thread-Local Storage 24396========================= 24397 24398Thread-local storage (TLS) is a mechanism by which variables are 24399allocated such that there is one instance of the variable per extant 24400thread. The run-time model GCC uses to implement this originates in 24401the IA-64 processor-specific ABI, but has since been migrated to other 24402processors as well. It requires significant support from the linker 24403(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 24404`libpthread.so'), so it is not available everywhere. 24405 24406 At the user level, the extension is visible with a new storage class 24407keyword: `__thread'. For example: 24408 24409 __thread int i; 24410 extern __thread struct state s; 24411 static __thread char *p; 24412 24413 The `__thread' specifier may be used alone, with the `extern' or 24414`static' specifiers, but with no other storage class specifier. When 24415used with `extern' or `static', `__thread' must appear immediately 24416after the other storage class specifier. 24417 24418 The `__thread' specifier may be applied to any global, file-scoped 24419static, function-scoped static, or static data member of a class. It 24420may not be applied to block-scoped automatic or non-static data member. 24421 24422 When the address-of operator is applied to a thread-local variable, it 24423is evaluated at run-time and returns the address of the current thread's 24424instance of that variable. An address so obtained may be used by any 24425thread. When a thread terminates, any pointers to thread-local 24426variables in that thread become invalid. 24427 24428 No static initialization may refer to the address of a thread-local 24429variable. 24430 24431 In C++, if an initializer is present for a thread-local variable, it 24432must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 24433standard. 24434 24435 See ELF Handling For Thread-Local Storage 24436(http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of 24437the four thread-local storage addressing models, and how the run-time 24438is expected to function. 24439 24440* Menu: 24441 24442* C99 Thread-Local Edits:: 24443* C++98 Thread-Local Edits:: 24444 24445 24446File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 24447 244485.52.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 24449------------------------------------------------------- 24450 24451The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 24452document the exact semantics of the language extension. 24453 24454 * `5.1.2 Execution environments' 24455 24456 Add new text after paragraph 1 24457 24458 Within either execution environment, a "thread" is a flow of 24459 control within a program. It is implementation defined 24460 whether or not there may be more than one thread associated 24461 with a program. It is implementation defined how threads 24462 beyond the first are created, the name and type of the 24463 function called at thread startup, and how threads may be 24464 terminated. However, objects with thread storage duration 24465 shall be initialized before thread startup. 24466 24467 * `6.2.4 Storage durations of objects' 24468 24469 Add new text before paragraph 3 24470 24471 An object whose identifier is declared with the storage-class 24472 specifier `__thread' has "thread storage duration". Its 24473 lifetime is the entire execution of the thread, and its 24474 stored value is initialized only once, prior to thread 24475 startup. 24476 24477 * `6.4.1 Keywords' 24478 24479 Add `__thread'. 24480 24481 * `6.7.1 Storage-class specifiers' 24482 24483 Add `__thread' to the list of storage class specifiers in 24484 paragraph 1. 24485 24486 Change paragraph 2 to 24487 24488 With the exception of `__thread', at most one storage-class 24489 specifier may be given [...]. The `__thread' specifier may 24490 be used alone, or immediately following `extern' or `static'. 24491 24492 Add new text after paragraph 6 24493 24494 The declaration of an identifier for a variable that has 24495 block scope that specifies `__thread' shall also specify 24496 either `extern' or `static'. 24497 24498 The `__thread' specifier shall be used only with variables. 24499 24500 24501File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 24502 245035.52.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 24504-------------------------------------------------------- 24505 24506The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 24507that document the exact semantics of the language extension. 24508 24509 * [intro.execution] 24510 24511 New text after paragraph 4 24512 24513 A "thread" is a flow of control within the abstract machine. 24514 It is implementation defined whether or not there may be more 24515 than one thread. 24516 24517 New text after paragraph 7 24518 24519 It is unspecified whether additional action must be taken to 24520 ensure when and whether side effects are visible to other 24521 threads. 24522 24523 * [lex.key] 24524 24525 Add `__thread'. 24526 24527 * [basic.start.main] 24528 24529 Add after paragraph 5 24530 24531 The thread that begins execution at the `main' function is 24532 called the "main thread". It is implementation defined how 24533 functions beginning threads other than the main thread are 24534 designated or typed. A function so designated, as well as 24535 the `main' function, is called a "thread startup function". 24536 It is implementation defined what happens if a thread startup 24537 function returns. It is implementation defined what happens 24538 to other threads when any thread calls `exit'. 24539 24540 * [basic.start.init] 24541 24542 Add after paragraph 4 24543 24544 The storage for an object of thread storage duration shall be 24545 statically initialized before the first statement of the 24546 thread startup function. An object of thread storage 24547 duration shall not require dynamic initialization. 24548 24549 * [basic.start.term] 24550 24551 Add after paragraph 3 24552 24553 The type of an object with thread storage duration shall not 24554 have a non-trivial destructor, nor shall it be an array type 24555 whose elements (directly or indirectly) have non-trivial 24556 destructors. 24557 24558 * [basic.stc] 24559 24560 Add "thread storage duration" to the list in paragraph 1. 24561 24562 Change paragraph 2 24563 24564 Thread, static, and automatic storage durations are 24565 associated with objects introduced by declarations [...]. 24566 24567 Add `__thread' to the list of specifiers in paragraph 3. 24568 24569 * [basic.stc.thread] 24570 24571 New section before [basic.stc.static] 24572 24573 The keyword `__thread' applied to a non-local object gives the 24574 object thread storage duration. 24575 24576 A local variable or class data member declared both `static' 24577 and `__thread' gives the variable or member thread storage 24578 duration. 24579 24580 * [basic.stc.static] 24581 24582 Change paragraph 1 24583 24584 All objects which have neither thread storage duration, 24585 dynamic storage duration nor are local [...]. 24586 24587 * [dcl.stc] 24588 24589 Add `__thread' to the list in paragraph 1. 24590 24591 Change paragraph 1 24592 24593 With the exception of `__thread', at most one 24594 STORAGE-CLASS-SPECIFIER shall appear in a given 24595 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 24596 alone, or immediately following the `extern' or `static' 24597 specifiers. [...] 24598 24599 Add after paragraph 5 24600 24601 The `__thread' specifier can be applied only to the names of 24602 objects and to anonymous unions. 24603 24604 * [class.mem] 24605 24606 Add after paragraph 6 24607 24608 Non-`static' members shall not be `__thread'. 24609 24610 24611File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 24612 246136 Extensions to the C++ Language 24614******************************** 24615 24616The GNU compiler provides these extensions to the C++ language (and you 24617can also use most of the C language extensions in your C++ programs). 24618If you want to write code that checks whether these features are 24619available, you can test for the GNU compiler the same way as for C 24620programs: check for a predefined macro `__GNUC__'. You can also use 24621`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 24622(cpp)Common Predefined Macros.). 24623 24624* Menu: 24625 24626* Volatiles:: What constitutes an access to a volatile object. 24627* Restricted Pointers:: C99 restricted pointers and references. 24628* Vague Linkage:: Where G++ puts inlines, vtables and such. 24629* C++ Interface:: You can use a single C++ header file for both 24630 declarations and definitions. 24631* Template Instantiation:: Methods for ensuring that exactly one copy of 24632 each needed template instantiation is emitted. 24633* Bound member functions:: You can extract a function pointer to the 24634 method denoted by a `->*' or `.*' expression. 24635* C++ Attributes:: Variable, function, and type attributes for C++ only. 24636* Namespace Association:: Strong using-directives for namespace association. 24637* Java Exceptions:: Tweaking exception handling to work with Java. 24638* Deprecated Features:: Things will disappear from g++. 24639* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 24640 24641 24642File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Up: C++ Extensions 24643 246446.1 When is a Volatile Object Accessed? 24645======================================= 24646 24647Both the C and C++ standard have the concept of volatile objects. These 24648are normally accessed by pointers and used for accessing hardware. The 24649standards encourage compilers to refrain from optimizations concerning 24650accesses to volatile objects. The C standard leaves it implementation 24651defined as to what constitutes a volatile access. The C++ standard 24652omits to specify this, except to say that C++ should behave in a 24653similar manner to C with respect to volatiles, where possible. The 24654minimum either standard specifies is that at a sequence point all 24655previous accesses to volatile objects have stabilized and no subsequent 24656accesses have occurred. Thus an implementation is free to reorder and 24657combine volatile accesses which occur between sequence points, but 24658cannot do so for accesses across a sequence point. The use of 24659volatiles does not allow you to violate the restriction on updating 24660objects multiple times within a sequence point. 24661 24662 *Note Volatile qualifier and the C compiler: Qualifiers implementation. 24663 24664 The behavior differs slightly between C and C++ in the non-obvious 24665cases: 24666 24667 volatile int *src = SOMEVALUE; 24668 *src; 24669 24670 With C, such expressions are rvalues, and GCC interprets this either 24671as a read of the volatile object being pointed to or only as request to 24672evaluate the side-effects. The C++ standard specifies that such 24673expressions do not undergo lvalue to rvalue conversion, and that the 24674type of the dereferenced object may be incomplete. The C++ standard 24675does not specify explicitly that it is this lvalue to rvalue conversion 24676which may be responsible for causing an access. However, there is 24677reason to believe that it is, because otherwise certain simple 24678expressions become undefined. However, because it would surprise most 24679programmers, G++ treats dereferencing a pointer to volatile object of 24680complete type when the value is unused as GCC would do for an 24681equivalent type in C. When the object has incomplete type, G++ issues 24682a warning; if you wish to force an error, you must force a conversion 24683to rvalue with, for instance, a static cast. 24684 24685 When using a reference to volatile, G++ does not treat equivalent 24686expressions as accesses to volatiles, but instead issues a warning that 24687no volatile is accessed. The rationale for this is that otherwise it 24688becomes difficult to determine where volatile access occur, and not 24689possible to ignore the return value from functions returning volatile 24690references. Again, if you wish to force a read, cast the reference to 24691an rvalue. 24692 24693 24694File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions 24695 246966.2 Restricting Pointer Aliasing 24697================================ 24698 24699As with the C front end, G++ understands the C99 feature of restricted 24700pointers, specified with the `__restrict__', or `__restrict' type 24701qualifier. Because you cannot compile C++ by specifying the `-std=c99' 24702language flag, `restrict' is not a keyword in C++. 24703 24704 In addition to allowing restricted pointers, you can specify restricted 24705references, which indicate that the reference is not aliased in the 24706local context. 24707 24708 void fn (int *__restrict__ rptr, int &__restrict__ rref) 24709 { 24710 /* ... */ 24711 } 24712 24713In the body of `fn', RPTR points to an unaliased integer and RREF 24714refers to a (different) unaliased integer. 24715 24716 You may also specify whether a member function's THIS pointer is 24717unaliased by using `__restrict__' as a member function qualifier. 24718 24719 void T::fn () __restrict__ 24720 { 24721 /* ... */ 24722 } 24723 24724Within the body of `T::fn', THIS will have the effective definition `T 24725*__restrict__ const this'. Notice that the interpretation of a 24726`__restrict__' member function qualifier is different to that of 24727`const' or `volatile' qualifier, in that it is applied to the pointer 24728rather than the object. This is consistent with other compilers which 24729implement restricted pointers. 24730 24731 As with all outermost parameter qualifiers, `__restrict__' is ignored 24732in function definition matching. This means you only need to specify 24733`__restrict__' in a function definition, rather than in a function 24734prototype as well. 24735 24736 24737File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 24738 247396.3 Vague Linkage 24740================= 24741 24742There are several constructs in C++ which require space in the object 24743file but are not clearly tied to a single translation unit. We say that 24744these constructs have "vague linkage". Typically such constructs are 24745emitted wherever they are needed, though sometimes we can be more 24746clever. 24747 24748Inline Functions 24749 Inline functions are typically defined in a header file which can 24750 be included in many different compilations. Hopefully they can 24751 usually be inlined, but sometimes an out-of-line copy is 24752 necessary, if the address of the function is taken or if inlining 24753 fails. In general, we emit an out-of-line copy in all translation 24754 units where one is needed. As an exception, we only emit inline 24755 virtual functions with the vtable, since it will always require a 24756 copy. 24757 24758 Local static variables and string constants used in an inline 24759 function are also considered to have vague linkage, since they 24760 must be shared between all inlined and out-of-line instances of 24761 the function. 24762 24763VTables 24764 C++ virtual functions are implemented in most compilers using a 24765 lookup table, known as a vtable. The vtable contains pointers to 24766 the virtual functions provided by a class, and each object of the 24767 class contains a pointer to its vtable (or vtables, in some 24768 multiple-inheritance situations). If the class declares any 24769 non-inline, non-pure virtual functions, the first one is chosen as 24770 the "key method" for the class, and the vtable is only emitted in 24771 the translation unit where the key method is defined. 24772 24773 _Note:_ If the chosen key method is later defined as inline, the 24774 vtable will still be emitted in every translation unit which 24775 defines it. Make sure that any inline virtuals are declared 24776 inline in the class body, even if they are not defined there. 24777 24778type_info objects 24779 C++ requires information about types to be written out in order to 24780 implement `dynamic_cast', `typeid' and exception handling. For 24781 polymorphic classes (classes with virtual functions), the type_info 24782 object is written out along with the vtable so that `dynamic_cast' 24783 can determine the dynamic type of a class object at runtime. For 24784 all other types, we write out the type_info object when it is 24785 used: when applying `typeid' to an expression, throwing an object, 24786 or referring to a type in a catch clause or exception 24787 specification. 24788 24789Template Instantiations 24790 Most everything in this section also applies to template 24791 instantiations, but there are other options as well. *Note 24792 Where's the Template?: Template Instantiation. 24793 24794 24795 When used with GNU ld version 2.8 or later on an ELF system such as 24796GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 24797these constructs will be discarded at link time. This is known as 24798COMDAT support. 24799 24800 On targets that don't support COMDAT, but do support weak symbols, GCC 24801will use them. This way one copy will override all the others, but the 24802unused copies will still take up space in the executable. 24803 24804 For targets which do not support either COMDAT or weak symbols, most 24805entities with vague linkage will be emitted as local symbols to avoid 24806duplicate definition errors from the linker. This will not happen for 24807local statics in inlines, however, as having multiple copies will 24808almost certainly break things. 24809 24810 *Note Declarations and Definitions in One Header: C++ Interface, for 24811another way to control placement of these constructs. 24812 24813 24814File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 24815 248166.4 #pragma interface and implementation 24817======================================== 24818 24819`#pragma interface' and `#pragma implementation' provide the user with 24820a way of explicitly directing the compiler to emit entities with vague 24821linkage (and debugging information) in a particular translation unit. 24822 24823 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 24824cases, because of COMDAT support and the "key method" heuristic 24825mentioned in *Note Vague Linkage::. Using them can actually cause your 24826program to grow due to unnecessary out-of-line copies of inline 24827functions. Currently (3.4) the only benefit of these `#pragma's is 24828reduced duplication of debugging information, and that should be 24829addressed soon on DWARF 2 targets with the use of COMDAT groups. 24830 24831`#pragma interface' 24832`#pragma interface "SUBDIR/OBJECTS.h"' 24833 Use this directive in _header files_ that define object classes, 24834 to save space in most of the object files that use those classes. 24835 Normally, local copies of certain information (backup copies of 24836 inline member functions, debugging information, and the internal 24837 tables that implement virtual functions) must be kept in each 24838 object file that includes class definitions. You can use this 24839 pragma to avoid such duplication. When a header file containing 24840 `#pragma interface' is included in a compilation, this auxiliary 24841 information will not be generated (unless the main input source 24842 file itself uses `#pragma implementation'). Instead, the object 24843 files will contain references to be resolved at link time. 24844 24845 The second form of this directive is useful for the case where you 24846 have multiple headers with the same name in different directories. 24847 If you use this form, you must specify the same string to `#pragma 24848 implementation'. 24849 24850`#pragma implementation' 24851`#pragma implementation "OBJECTS.h"' 24852 Use this pragma in a _main input file_, when you want full output 24853 from included header files to be generated (and made globally 24854 visible). The included header file, in turn, should use `#pragma 24855 interface'. Backup copies of inline member functions, debugging 24856 information, and the internal tables used to implement virtual 24857 functions are all generated in implementation files. 24858 24859 If you use `#pragma implementation' with no argument, it applies to 24860 an include file with the same basename(1) as your source file. 24861 For example, in `allclass.cc', giving just `#pragma implementation' 24862 by itself is equivalent to `#pragma implementation "allclass.h"'. 24863 24864 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 24865 an implementation file whenever you would include it from 24866 `allclass.cc' even if you never specified `#pragma 24867 implementation'. This was deemed to be more trouble than it was 24868 worth, however, and disabled. 24869 24870 Use the string argument if you want a single implementation file to 24871 include code from multiple header files. (You must also use 24872 `#include' to include the header file; `#pragma implementation' 24873 only specifies how to use the file--it doesn't actually include 24874 it.) 24875 24876 There is no way to split up the contents of a single header file 24877 into multiple implementation files. 24878 24879 `#pragma implementation' and `#pragma interface' also have an effect 24880on function inlining. 24881 24882 If you define a class in a header file marked with `#pragma 24883interface', the effect on an inline function defined in that class is 24884similar to an explicit `extern' declaration--the compiler emits no code 24885at all to define an independent version of the function. Its 24886definition is used only for inlining with its callers. 24887 24888 Conversely, when you include the same header file in a main source file 24889that declares it as `#pragma implementation', the compiler emits code 24890for the function itself; this defines a version of the function that 24891can be found via pointers (or by callers compiled without inlining). 24892If all calls to the function can be inlined, you can avoid emitting the 24893function by compiling with `-fno-implement-inlines'. If any calls were 24894not inlined, you will get linker errors. 24895 24896 ---------- Footnotes ---------- 24897 24898 (1) A file's "basename" was the name stripped of all leading path 24899information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 24900 24901 24902File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 24903 249046.5 Where's the Template? 24905========================= 24906 24907C++ templates are the first language feature to require more 24908intelligence from the environment than one usually finds on a UNIX 24909system. Somehow the compiler and linker have to make sure that each 24910template instance occurs exactly once in the executable if it is needed, 24911and not at all otherwise. There are two basic approaches to this 24912problem, which are referred to as the Borland model and the Cfront 24913model. 24914 24915Borland model 24916 Borland C++ solved the template instantiation problem by adding 24917 the code equivalent of common blocks to their linker; the compiler 24918 emits template instances in each translation unit that uses them, 24919 and the linker collapses them together. The advantage of this 24920 model is that the linker only has to consider the object files 24921 themselves; there is no external complexity to worry about. This 24922 disadvantage is that compilation time is increased because the 24923 template code is being compiled repeatedly. Code written for this 24924 model tends to include definitions of all templates in the header 24925 file, since they must be seen to be instantiated. 24926 24927Cfront model 24928 The AT&T C++ translator, Cfront, solved the template instantiation 24929 problem by creating the notion of a template repository, an 24930 automatically maintained place where template instances are 24931 stored. A more modern version of the repository works as follows: 24932 As individual object files are built, the compiler places any 24933 template definitions and instantiations encountered in the 24934 repository. At link time, the link wrapper adds in the objects in 24935 the repository and compiles any needed instances that were not 24936 previously emitted. The advantages of this model are more optimal 24937 compilation speed and the ability to use the system linker; to 24938 implement the Borland model a compiler vendor also needs to 24939 replace the linker. The disadvantages are vastly increased 24940 complexity, and thus potential for error; for some code this can be 24941 just as transparent, but in practice it can been very difficult to 24942 build multiple programs in one directory and one program in 24943 multiple directories. Code written for this model tends to 24944 separate definitions of non-inline member templates into a 24945 separate file, which should be compiled separately. 24946 24947 When used with GNU ld version 2.8 or later on an ELF system such as 24948GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 24949Borland model. On other systems, G++ implements neither automatic 24950model. 24951 24952 A future version of G++ will support a hybrid model whereby the 24953compiler will emit any instantiations for which the template definition 24954is included in the compile, and store template definitions and 24955instantiation context information into the object file for the rest. 24956The link wrapper will extract that information as necessary and invoke 24957the compiler to produce the remaining instantiations. The linker will 24958then combine duplicate instantiations. 24959 24960 In the mean time, you have the following options for dealing with 24961template instantiations: 24962 24963 1. Compile your template-using code with `-frepo'. The compiler will 24964 generate files with the extension `.rpo' listing all of the 24965 template instantiations used in the corresponding object files 24966 which could be instantiated there; the link wrapper, `collect2', 24967 will then update the `.rpo' files to tell the compiler where to 24968 place those instantiations and rebuild any affected object files. 24969 The link-time overhead is negligible after the first pass, as the 24970 compiler will continue to place the instantiations in the same 24971 files. 24972 24973 This is your best option for application code written for the 24974 Borland model, as it will just work. Code written for the Cfront 24975 model will need to be modified so that the template definitions 24976 are available at one or more points of instantiation; usually this 24977 is as simple as adding `#include <tmethods.cc>' to the end of each 24978 template header. 24979 24980 For library code, if you want the library to provide all of the 24981 template instantiations it needs, just try to link all of its 24982 object files together; the link will fail, but cause the 24983 instantiations to be generated as a side effect. Be warned, 24984 however, that this may cause conflicts if multiple libraries try 24985 to provide the same instantiations. For greater control, use 24986 explicit instantiation as described in the next option. 24987 24988 2. Compile your code with `-fno-implicit-templates' to disable the 24989 implicit generation of template instances, and explicitly 24990 instantiate all the ones you use. This approach requires more 24991 knowledge of exactly which instances you need than do the others, 24992 but it's less mysterious and allows greater control. You can 24993 scatter the explicit instantiations throughout your program, 24994 perhaps putting them in the translation units where the instances 24995 are used or the translation units that define the templates 24996 themselves; you can put all of the explicit instantiations you 24997 need into one big file; or you can create small files like 24998 24999 #include "Foo.h" 25000 #include "Foo.cc" 25001 25002 template class Foo<int>; 25003 template ostream& operator << 25004 (ostream&, const Foo<int>&); 25005 25006 for each of the instances you need, and create a template 25007 instantiation library from those. 25008 25009 If you are using Cfront-model code, you can probably get away with 25010 not using `-fno-implicit-templates' when compiling files that don't 25011 `#include' the member template definitions. 25012 25013 If you use one big file to do the instantiations, you may want to 25014 compile it without `-fno-implicit-templates' so you get all of the 25015 instances required by your explicit instantiations (but not by any 25016 other files) without having to specify them as well. 25017 25018 G++ has extended the template instantiation syntax given in the ISO 25019 standard to allow forward declaration of explicit instantiations 25020 (with `extern'), instantiation of the compiler support data for a 25021 template class (i.e. the vtable) without instantiating any of its 25022 members (with `inline'), and instantiation of only the static data 25023 members of a template class, without the support data or member 25024 functions (with (`static'): 25025 25026 extern template int max (int, int); 25027 inline template class Foo<int>; 25028 static template class Foo<int>; 25029 25030 3. Do nothing. Pretend G++ does implement automatic instantiation 25031 management. Code written for the Borland model will work fine, but 25032 each translation unit will contain instances of each of the 25033 templates it uses. In a large program, this can lead to an 25034 unacceptable amount of code duplication. 25035 25036 25037File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 25038 250396.6 Extracting the function pointer from a bound pointer to member function 25040=========================================================================== 25041 25042In C++, pointer to member functions (PMFs) are implemented using a wide 25043pointer of sorts to handle all the possible call mechanisms; the PMF 25044needs to store information about how to adjust the `this' pointer, and 25045if the function pointed to is virtual, where to find the vtable, and 25046where in the vtable to look for the member function. If you are using 25047PMFs in an inner loop, you should really reconsider that decision. If 25048that is not an option, you can extract the pointer to the function that 25049would be called for a given object/PMF pair and call it directly inside 25050the inner loop, to save a bit of time. 25051 25052 Note that you will still be paying the penalty for the call through a 25053function pointer; on most modern architectures, such a call defeats the 25054branch prediction features of the CPU. This is also true of normal 25055virtual function calls. 25056 25057 The syntax for this extension is 25058 25059 extern A a; 25060 extern int (A::*fp)(); 25061 typedef int (*fptr)(A *); 25062 25063 fptr p = (fptr)(a.*fp); 25064 25065 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 25066object is needed to obtain the address of the function. They can be 25067converted to function pointers directly: 25068 25069 fptr p1 = (fptr)(&A::foo); 25070 25071 You must specify `-Wno-pmf-conversions' to use this extension. 25072 25073 25074File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 25075 250766.7 C++-Specific Variable, Function, and Type Attributes 25077======================================================== 25078 25079Some attributes only make sense for C++ programs. 25080 25081`init_priority (PRIORITY)' 25082 In Standard C++, objects defined at namespace scope are guaranteed 25083 to be initialized in an order in strict accordance with that of 25084 their definitions _in a given translation unit_. No guarantee is 25085 made for initializations across translation units. However, GNU 25086 C++ allows users to control the order of initialization of objects 25087 defined at namespace scope with the `init_priority' attribute by 25088 specifying a relative PRIORITY, a constant integral expression 25089 currently bounded between 101 and 65535 inclusive. Lower numbers 25090 indicate a higher priority. 25091 25092 In the following example, `A' would normally be created before 25093 `B', but the `init_priority' attribute has reversed that order: 25094 25095 Some_Class A __attribute__ ((init_priority (2000))); 25096 Some_Class B __attribute__ ((init_priority (543))); 25097 25098 Note that the particular values of PRIORITY do not matter; only 25099 their relative ordering. 25100 25101`java_interface' 25102 This type attribute informs C++ that the class is a Java 25103 interface. It may only be applied to classes declared within an 25104 `extern "Java"' block. Calls to methods declared in this 25105 interface will be dispatched using GCJ's interface table 25106 mechanism, instead of regular virtual table dispatch. 25107 25108 25109 See also *Note Namespace Association::. 25110 25111 25112File: gcc.info, Node: Namespace Association, Next: Java Exceptions, Prev: C++ Attributes, Up: C++ Extensions 25113 251146.8 Namespace Association 25115========================= 25116 25117*Caution:* The semantics of this extension are not fully defined. 25118Users should refrain from using this extension as its semantics may 25119change subtly over time. It is possible that this extension will be 25120removed in future versions of G++. 25121 25122 A using-directive with `__attribute ((strong))' is stronger than a 25123normal using-directive in two ways: 25124 25125 * Templates from the used namespace can be specialized and explicitly 25126 instantiated as though they were members of the using namespace. 25127 25128 * The using namespace is considered an associated namespace of all 25129 templates in the used namespace for purposes of argument-dependent 25130 name lookup. 25131 25132 The used namespace must be nested within the using namespace so that 25133normal unqualified lookup works properly. 25134 25135 This is useful for composing a namespace transparently from 25136implementation namespaces. For example: 25137 25138 namespace std { 25139 namespace debug { 25140 template <class T> struct A { }; 25141 } 25142 using namespace debug __attribute ((__strong__)); 25143 template <> struct A<int> { }; // ok to specialize 25144 25145 template <class T> void f (A<T>); 25146 } 25147 25148 int main() 25149 { 25150 f (std::A<float>()); // lookup finds std::f 25151 f (std::A<int>()); 25152 } 25153 25154 25155File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Namespace Association, Up: C++ Extensions 25156 251576.9 Java Exceptions 25158=================== 25159 25160The Java language uses a slightly different exception handling model 25161from C++. Normally, GNU C++ will automatically detect when you are 25162writing C++ code that uses Java exceptions, and handle them 25163appropriately. However, if C++ code only needs to execute destructors 25164when Java exceptions are thrown through it, GCC will guess incorrectly. 25165Sample problematic code is: 25166 25167 struct S { ~S(); }; 25168 extern void bar(); // is written in Java, and may throw exceptions 25169 void foo() 25170 { 25171 S s; 25172 bar(); 25173 } 25174 25175The usual effect of an incorrect guess is a link failure, complaining of 25176a missing routine called `__gxx_personality_v0'. 25177 25178 You can inform the compiler that Java exceptions are to be used in a 25179translation unit, irrespective of what it might think, by writing 25180`#pragma GCC java_exceptions' at the head of the file. This `#pragma' 25181must appear before any functions that throw or catch exceptions, or run 25182destructors when exceptions are thrown through them. 25183 25184 You cannot mix Java and C++ exceptions in the same translation unit. 25185It is believed to be safe to throw a C++ exception from one file through 25186another file compiled for the Java exception model, or vice versa, but 25187there may be bugs in this area. 25188 25189 25190File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 25191 251926.10 Deprecated Features 25193======================== 25194 25195In the past, the GNU C++ compiler was extended to experiment with new 25196features, at a time when the C++ language was still evolving. Now that 25197the C++ standard is complete, some of those features are superseded by 25198superior alternatives. Using the old features might cause a warning in 25199some cases that the feature will be dropped in the future. In other 25200cases, the feature might be gone already. 25201 25202 While the list below is not exhaustive, it documents some of the 25203options that are now deprecated: 25204 25205`-fexternal-templates' 25206`-falt-external-templates' 25207 These are two of the many ways for G++ to implement template 25208 instantiation. *Note Template Instantiation::. The C++ standard 25209 clearly defines how template definitions have to be organized 25210 across implementation units. G++ has an implicit instantiation 25211 mechanism that should work just fine for standard-conforming code. 25212 25213`-fstrict-prototype' 25214`-fno-strict-prototype' 25215 Previously it was possible to use an empty prototype parameter 25216 list to indicate an unspecified number of parameters (like C), 25217 rather than no parameters, as C++ demands. This feature has been 25218 removed, except where it is required for backwards compatibility 25219 *Note Backwards Compatibility::. 25220 25221 G++ allows a virtual function returning `void *' to be overridden by 25222one returning a different pointer type. This extension to the 25223covariant return type rules is now deprecated and will be removed from a 25224future version. 25225 25226 The G++ minimum and maximum operators (`<?' and `>?') and their 25227compound forms (`<?=') and `>?=') have been deprecated and will be 25228removed in a future version. Code using these operators should be 25229modified to use `std::min' and `std::max' instead. 25230 25231 The named return value extension has been deprecated, and is now 25232removed from G++. 25233 25234 The use of initializer lists with new expressions has been deprecated, 25235and is now removed from G++. 25236 25237 Floating and complex non-type template parameters have been deprecated, 25238and are now removed from G++. 25239 25240 The implicit typename extension has been deprecated and is now removed 25241from G++. 25242 25243 The use of default arguments in function pointers, function typedefs 25244and other places where they are not permitted by the standard is 25245deprecated and will be removed from a future version of G++. 25246 25247 G++ allows floating-point literals to appear in integral constant 25248expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 25249deprecated and will be removed from a future version. 25250 25251 G++ allows static data members of const floating-point type to be 25252declared with an initializer in a class definition. The standard only 25253allows initializers for static members of const integral types and const 25254enumeration types so this extension has been deprecated and will be 25255removed from a future version. 25256 25257 25258File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 25259 252606.11 Backwards Compatibility 25261============================ 25262 25263Now that there is a definitive ISO standard C++, G++ has a specification 25264to adhere to. The C++ language evolved over time, and features that 25265used to be acceptable in previous drafts of the standard, such as the 25266ARM [Annotated C++ Reference Manual], are no longer accepted. In order 25267to allow compilation of C++ written to such drafts, G++ contains some 25268backwards compatibilities. _All such backwards compatibility features 25269are liable to disappear in future versions of G++._ They should be 25270considered deprecated *Note Deprecated Features::. 25271 25272`For scope' 25273 If a variable is declared at for scope, it used to remain in scope 25274 until the end of the scope which contained the for statement 25275 (rather than just within the for scope). G++ retains this, but 25276 issues a warning, if such a variable is accessed outside the for 25277 scope. 25278 25279`Implicit C language' 25280 Old C system header files did not contain an `extern "C" {...}' 25281 scope to set the language. On such systems, all header files are 25282 implicitly scoped inside a C language scope. Also, an empty 25283 prototype `()' will be treated as an unspecified number of 25284 arguments, rather than no arguments, as C++ demands. 25285 25286 25287File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 25288 252897 GNU Objective-C runtime features 25290********************************** 25291 25292This document is meant to describe some of the GNU Objective-C runtime 25293features. It is not intended to teach you Objective-C, there are 25294several resources on the Internet that present the language. Questions 25295and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>. 25296 25297* Menu: 25298 25299* Executing code before main:: 25300* Type encoding:: 25301* Garbage Collection:: 25302* Constant string objects:: 25303* compatibility_alias:: 25304 25305 25306File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C 25307 253087.1 `+load': Executing code before main 25309======================================= 25310 25311The GNU Objective-C runtime provides a way that allows you to execute 25312code before the execution of the program enters the `main' function. 25313The code is executed on a per-class and a per-category basis, through a 25314special class method `+load'. 25315 25316 This facility is very useful if you want to initialize global variables 25317which can be accessed by the program directly, without sending a message 25318to the class first. The usual way to initialize global variables, in 25319the `+initialize' method, might not be useful because `+initialize' is 25320only called when the first message is sent to a class object, which in 25321some cases could be too late. 25322 25323 Suppose for example you have a `FileStream' class that declares 25324`Stdin', `Stdout' and `Stderr' as global variables, like below: 25325 25326 25327 FileStream *Stdin = nil; 25328 FileStream *Stdout = nil; 25329 FileStream *Stderr = nil; 25330 25331 @implementation FileStream 25332 25333 + (void)initialize 25334 { 25335 Stdin = [[FileStream new] initWithFd:0]; 25336 Stdout = [[FileStream new] initWithFd:1]; 25337 Stderr = [[FileStream new] initWithFd:2]; 25338 } 25339 25340 /* Other methods here */ 25341 @end 25342 25343 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 25344in `+initialize' occurs too late. The programmer can send a message to 25345one of these objects before the variables are actually initialized, 25346thus sending messages to the `nil' object. The `+initialize' method 25347which actually initializes the global variables is not invoked until 25348the first message is sent to the class object. The solution would 25349require these variables to be initialized just before entering `main'. 25350 25351 The correct solution of the above problem is to use the `+load' method 25352instead of `+initialize': 25353 25354 25355 @implementation FileStream 25356 25357 + (void)load 25358 { 25359 Stdin = [[FileStream new] initWithFd:0]; 25360 Stdout = [[FileStream new] initWithFd:1]; 25361 Stderr = [[FileStream new] initWithFd:2]; 25362 } 25363 25364 /* Other methods here */ 25365 @end 25366 25367 The `+load' is a method that is not overridden by categories. If a 25368class and a category of it both implement `+load', both methods are 25369invoked. This allows some additional initializations to be performed in 25370a category. 25371 25372 This mechanism is not intended to be a replacement for `+initialize'. 25373You should be aware of its limitations when you decide to use it 25374instead of `+initialize'. 25375 25376* Menu: 25377 25378* What you can and what you cannot do in +load:: 25379 25380 25381File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main 25382 253837.1.1 What you can and what you cannot do in `+load' 25384---------------------------------------------------- 25385 25386The `+load' implementation in the GNU runtime guarantees you the 25387following things: 25388 25389 * you can write whatever C code you like; 25390 25391 * you can send messages to Objective-C constant strings (`@"this is a 25392 constant string"'); 25393 25394 * you can allocate and send messages to objects whose class is 25395 implemented in the same file; 25396 25397 * the `+load' implementation of all super classes of a class are 25398 executed before the `+load' of that class is executed; 25399 25400 * the `+load' implementation of a class is executed before the 25401 `+load' implementation of any category. 25402 25403 25404 In particular, the following things, even if they can work in a 25405particular case, are not guaranteed: 25406 25407 * allocation of or sending messages to arbitrary objects; 25408 25409 * allocation of or sending messages to objects whose classes have a 25410 category implemented in the same file; 25411 25412 25413 You should make no assumptions about receiving `+load' in sibling 25414classes when you write `+load' of a class. The order in which sibling 25415classes receive `+load' is not guaranteed. 25416 25417 The order in which `+load' and `+initialize' are called could be 25418problematic if this matters. If you don't allocate objects inside 25419`+load', it is guaranteed that `+load' is called before `+initialize'. 25420If you create an object inside `+load' the `+initialize' method of 25421object's class is invoked even if `+load' was not invoked. Note if you 25422explicitly call `+load' on a class, `+initialize' will be called first. 25423To avoid possible problems try to implement only one of these methods. 25424 25425 The `+load' method is also invoked when a bundle is dynamically loaded 25426into your running program. This happens automatically without any 25427intervening operation from you. When you write bundles and you need to 25428write `+load' you can safely create and send messages to objects whose 25429classes already exist in the running program. The same restrictions as 25430above apply to classes defined in bundle. 25431 25432 25433File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 25434 254357.2 Type encoding 25436================= 25437 25438The Objective-C compiler generates type encodings for all the types. 25439These type encodings are used at runtime to find out information about 25440selectors and methods and about objects and classes. 25441 25442 The types are encoded in the following way: 25443 25444`_Bool' `B' 25445`char' `c' 25446`unsigned char' `C' 25447`short' `s' 25448`unsigned short' `S' 25449`int' `i' 25450`unsigned int' `I' 25451`long' `l' 25452`unsigned long' `L' 25453`long long' `q' 25454`unsigned long `Q' 25455long' 25456`float' `f' 25457`double' `d' 25458`void' `v' 25459`id' `@' 25460`Class' `#' 25461`SEL' `:' 25462`char*' `*' 25463unknown type `?' 25464Complex types `j' followed by the inner type. For example 25465 `_Complex double' is encoded as "jd". 25466bit-fields `b' followed by the starting position of the 25467 bit-field, the type of the bit-field and the size of 25468 the bit-field (the bit-fields encoding was changed 25469 from the NeXT's compiler encoding, see below) 25470 25471 The encoding of bit-fields has changed to allow bit-fields to be 25472properly handled by the runtime functions that compute sizes and 25473alignments of types that contain bit-fields. The previous encoding 25474contained only the size of the bit-field. Using only this information 25475it is not possible to reliably compute the size occupied by the 25476bit-field. This is very important in the presence of the Boehm's 25477garbage collector because the objects are allocated using the typed 25478memory facility available in this collector. The typed memory 25479allocation requires information about where the pointers are located 25480inside the object. 25481 25482 The position in the bit-field is the position, counting in bits, of the 25483bit closest to the beginning of the structure. 25484 25485 The non-atomic types are encoded as follows: 25486 25487pointers `^' followed by the pointed type. 25488arrays `[' followed by the number of elements in the array 25489 followed by the type of the elements followed by `]' 25490structures `{' followed by the name of the structure (or `?' if the 25491 structure is unnamed), the `=' sign, the type of the 25492 members and by `}' 25493unions `(' followed by the name of the structure (or `?' if the 25494 union is unnamed), the `=' sign, the type of the members 25495 followed by `)' 25496 25497 Here are some types and their encodings, as they are generated by the 25498compiler on an i386 machine: 25499 25500 25501Objective-C type Compiler encoding 25502 int a[10]; `[10i]' 25503 struct { `{?=i[3f]b128i3b131i2c}' 25504 int i; 25505 float f[3]; 25506 int a:3; 25507 int b:2; 25508 char c; 25509 } 25510 25511 25512 In addition to the types the compiler also encodes the type 25513specifiers. The table below describes the encoding of the current 25514Objective-C type specifiers: 25515 25516 25517Specifier Encoding 25518`const' `r' 25519`in' `n' 25520`inout' `N' 25521`out' `o' 25522`bycopy' `O' 25523`oneway' `V' 25524 25525 25526 The type specifiers are encoded just before the type. Unlike types 25527however, the type specifiers are only encoded when they appear in method 25528argument types. 25529 25530 25531File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 25532 255337.3 Garbage Collection 25534====================== 25535 25536Support for a new memory management policy has been added by using a 25537powerful conservative garbage collector, known as the 25538Boehm-Demers-Weiser conservative garbage collector. It is available 25539from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'. 25540 25541 To enable the support for it you have to configure the compiler using 25542an additional argument, `--enable-objc-gc'. You need to have garbage 25543collector installed before building the compiler. This will build an 25544additional runtime library which has several enhancements to support 25545the garbage collector. The new library has a new name, `libobjc_gc.a' 25546to not conflict with the non-garbage-collected library. 25547 25548 When the garbage collector is used, the objects are allocated using the 25549so-called typed memory allocation mechanism available in the 25550Boehm-Demers-Weiser collector. This mode requires precise information 25551on where pointers are located inside objects. This information is 25552computed once per class, immediately after the class has been 25553initialized. 25554 25555 There is a new runtime function `class_ivar_set_gcinvisible()' which 25556can be used to declare a so-called "weak pointer" reference. Such a 25557pointer is basically hidden for the garbage collector; this can be 25558useful in certain situations, especially when you want to keep track of 25559the allocated objects, yet allow them to be collected. This kind of 25560pointers can only be members of objects, you cannot declare a global 25561pointer as a weak reference. Every type which is a pointer type can be 25562declared a weak pointer, including `id', `Class' and `SEL'. 25563 25564 Here is an example of how to use this feature. Suppose you want to 25565implement a class whose instances hold a weak pointer reference; the 25566following class does this: 25567 25568 25569 @interface WeakPointer : Object 25570 { 25571 const void* weakPointer; 25572 } 25573 25574 - initWithPointer:(const void*)p; 25575 - (const void*)weakPointer; 25576 @end 25577 25578 25579 @implementation WeakPointer 25580 25581 + (void)initialize 25582 { 25583 class_ivar_set_gcinvisible (self, "weakPointer", YES); 25584 } 25585 25586 - initWithPointer:(const void*)p 25587 { 25588 weakPointer = p; 25589 return self; 25590 } 25591 25592 - (const void*)weakPointer 25593 { 25594 return weakPointer; 25595 } 25596 25597 @end 25598 25599 Weak pointers are supported through a new type character specifier 25600represented by the `!' character. The `class_ivar_set_gcinvisible()' 25601function adds or removes this specifier to the string type description 25602of the instance variable named as argument. 25603 25604 25605File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 25606 256077.4 Constant string objects 25608=========================== 25609 25610GNU Objective-C provides constant string objects that are generated 25611directly by the compiler. You declare a constant string object by 25612prefixing a C constant string with the character `@': 25613 25614 id myString = @"this is a constant string object"; 25615 25616 The constant string objects are by default instances of the 25617`NXConstantString' class which is provided by the GNU Objective-C 25618runtime. To get the definition of this class you must include the 25619`objc/NXConstStr.h' header file. 25620 25621 User defined libraries may want to implement their own constant string 25622class. To be able to support them, the GNU Objective-C compiler 25623provides a new command line options 25624`-fconstant-string-class=CLASS-NAME'. The provided class should adhere 25625to a strict structure, the same as `NXConstantString''s structure: 25626 25627 25628 @interface MyConstantStringClass 25629 { 25630 Class isa; 25631 char *c_string; 25632 unsigned int len; 25633 } 25634 @end 25635 25636 `NXConstantString' inherits from `Object'; user class libraries may 25637choose to inherit the customized constant string class from a different 25638class than `Object'. There is no requirement in the methods the 25639constant string class has to implement, but the final ivar layout of 25640the class must be the compatible with the given structure. 25641 25642 When the compiler creates the statically allocated constant string 25643object, the `c_string' field will be filled by the compiler with the 25644string; the `length' field will be filled by the compiler with the 25645string length; the `isa' pointer will be filled with `NULL' by the 25646compiler, and it will later be fixed up automatically at runtime by the 25647GNU Objective-C runtime library to point to the class which was set by 25648the `-fconstant-string-class' option when the object file is loaded (if 25649you wonder how it works behind the scenes, the name of the class to 25650use, and the list of static objects to fixup, are stored by the 25651compiler in the object file in a place where the GNU runtime library 25652will find them at runtime). 25653 25654 As a result, when a file is compiled with the 25655`-fconstant-string-class' option, all the constant string objects will 25656be instances of the class specified as argument to this option. It is 25657possible to have multiple compilation units referring to different 25658constant string classes, neither the compiler nor the linker impose any 25659restrictions in doing this. 25660 25661 25662File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C 25663 256647.5 compatibility_alias 25665======================= 25666 25667This is a feature of the Objective-C compiler rather than of the 25668runtime, anyway since it is documented nowhere and its existence was 25669forgotten, we are documenting it here. 25670 25671 The keyword `@compatibility_alias' allows you to define a class name 25672as equivalent to another class name. For example: 25673 25674 @compatibility_alias WOApplication GSWApplication; 25675 25676 tells the compiler that each time it encounters `WOApplication' as a 25677class name, it should replace it with `GSWApplication' (that is, 25678`WOApplication' is just an alias for `GSWApplication'). 25679 25680 There are some constraints on how this can be used-- 25681 25682 * `WOApplication' (the alias) must not be an existing class; 25683 25684 * `GSWApplication' (the real class) must be an existing class. 25685 25686 25687 25688File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 25689 256908 Binary Compatibility 25691********************** 25692 25693Binary compatibility encompasses several related concepts: 25694 25695"application binary interface (ABI)" 25696 The set of runtime conventions followed by all of the tools that 25697 deal with binary representations of a program, including 25698 compilers, assemblers, linkers, and language runtime support. 25699 Some ABIs are formal with a written specification, possibly 25700 designed by multiple interested parties. Others are simply the 25701 way things are actually done by a particular set of tools. 25702 25703"ABI conformance" 25704 A compiler conforms to an ABI if it generates code that follows 25705 all of the specifications enumerated by that ABI. A library 25706 conforms to an ABI if it is implemented according to that ABI. An 25707 application conforms to an ABI if it is built using tools that 25708 conform to that ABI and does not contain source code that 25709 specifically changes behavior specified by the ABI. 25710 25711"calling conventions" 25712 Calling conventions are a subset of an ABI that specify of how 25713 arguments are passed and function results are returned. 25714 25715"interoperability" 25716 Different sets of tools are interoperable if they generate files 25717 that can be used in the same program. The set of tools includes 25718 compilers, assemblers, linkers, libraries, header files, startup 25719 files, and debuggers. Binaries produced by different sets of 25720 tools are not interoperable unless they implement the same ABI. 25721 This applies to different versions of the same tools as well as 25722 tools from different vendors. 25723 25724"intercallability" 25725 Whether a function in a binary built by one set of tools can call a 25726 function in a binary built by a different set of tools is a subset 25727 of interoperability. 25728 25729"implementation-defined features" 25730 Language standards include lists of implementation-defined 25731 features whose behavior can vary from one implementation to 25732 another. Some of these features are normally covered by a 25733 platform's ABI and others are not. The features that are not 25734 covered by an ABI generally affect how a program behaves, but not 25735 intercallability. 25736 25737"compatibility" 25738 Conformance to the same ABI and the same behavior of 25739 implementation-defined features are both relevant for 25740 compatibility. 25741 25742 The application binary interface implemented by a C or C++ compiler 25743affects code generation and runtime support for: 25744 25745 * size and alignment of data types 25746 25747 * layout of structured types 25748 25749 * calling conventions 25750 25751 * register usage conventions 25752 25753 * interfaces for runtime arithmetic support 25754 25755 * object file formats 25756 25757 In addition, the application binary interface implemented by a C++ 25758compiler affects code generation and runtime support for: 25759 * name mangling 25760 25761 * exception handling 25762 25763 * invoking constructors and destructors 25764 25765 * layout, alignment, and padding of classes 25766 25767 * layout and alignment of virtual tables 25768 25769 Some GCC compilation options cause the compiler to generate code that 25770does not conform to the platform's default ABI. Other options cause 25771different program behavior for implementation-defined features that are 25772not covered by an ABI. These options are provided for consistency with 25773other compilers that do not follow the platform's default ABI or the 25774usual behavior of implementation-defined features for the platform. Be 25775very careful about using such options. 25776 25777 Most platforms have a well-defined ABI that covers C code, but ABIs 25778that cover C++ functionality are not yet common. 25779 25780 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 25781written, vendor-neutral C++ ABI that was designed to be specific to 2578264-bit Itanium but also includes generic specifications that apply to 25783any platform. This C++ ABI is also implemented by other compiler 25784vendors on some platforms, notably GNU/Linux and BSD systems. We have 25785tried hard to provide a stable ABI that will be compatible with future 25786GCC releases, but it is possible that we will encounter problems that 25787make this difficult. Such problems could include different 25788interpretations of the C++ ABI by different vendors, bugs in the ABI, or 25789bugs in the implementation of the ABI in different compilers. GCC's 25790`-Wabi' switch warns when G++ generates code that is probably not 25791compatible with the C++ ABI. 25792 25793 The C++ library used with a C++ compiler includes the Standard C++ 25794Library, with functionality defined in the C++ Standard, plus language 25795runtime support. The runtime support is included in a C++ ABI, but 25796there is no formal ABI for the Standard C++ Library. Two 25797implementations of that library are interoperable if one follows the 25798de-facto ABI of the other and if they are both built with the same 25799compiler, or with compilers that conform to the same ABI for C++ 25800compiler and runtime support. 25801 25802 When G++ and another C++ compiler conform to the same C++ ABI, but the 25803implementations of the Standard C++ Library that they normally use do 25804not follow the same ABI for the Standard C++ Library, object files 25805built with those compilers can be used in the same program only if they 25806use the same C++ library. This requires specifying the location of the 25807C++ library header files when invoking the compiler whose usual library 25808is not being used. The location of GCC's C++ header files depends on 25809how the GCC build was configured, but can be seen by using the G++ `-v' 25810option. With default configuration options for G++ 3.3 the compile 25811line for a different C++ compiler needs to include 25812 25813 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 25814 25815 Similarly, compiling code with G++ that must use a C++ library other 25816than the GNU C++ library requires specifying the location of the header 25817files for that other library. 25818 25819 The most straightforward way to link a program to use a particular C++ 25820library is to use a C++ driver that specifies that C++ library by 25821default. The `g++' driver, for example, tells the linker where to find 25822GCC's C++ library (`libstdc++') plus the other libraries and startup 25823files it needs, in the proper order. 25824 25825 If a program must use a different C++ library and it's not possible to 25826do the final link using a C++ driver that uses that library by default, 25827it is necessary to tell `g++' the location and name of that library. 25828It might also be necessary to specify different startup files and other 25829runtime support libraries, and to suppress the use of GCC's support 25830libraries with one or more of the options `-nostdlib', `-nostartfiles', 25831and `-nodefaultlibs'. 25832 25833 25834File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 25835 258369 `gcov'--a Test Coverage Program 25837********************************* 25838 25839`gcov' is a tool you can use in conjunction with GCC to test code 25840coverage in your programs. 25841 25842* Menu: 25843 25844* Gcov Intro:: Introduction to gcov. 25845* Invoking Gcov:: How to use gcov. 25846* Gcov and Optimization:: Using gcov with GCC optimization. 25847* Gcov Data Files:: The files used by gcov. 25848* Cross-profiling:: Data file relocation. 25849 25850 25851File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 25852 258539.1 Introduction to `gcov' 25854========================== 25855 25856`gcov' is a test coverage program. Use it in concert with GCC to 25857analyze your programs to help create more efficient, faster running 25858code and to discover untested parts of your program. You can use 25859`gcov' as a profiling tool to help discover where your optimization 25860efforts will best affect your code. You can also use `gcov' along with 25861the other profiling tool, `gprof', to assess which parts of your code 25862use the greatest amount of computing time. 25863 25864 Profiling tools help you analyze your code's performance. Using a 25865profiler such as `gcov' or `gprof', you can find out some basic 25866performance statistics, such as: 25867 25868 * how often each line of code executes 25869 25870 * what lines of code are actually executed 25871 25872 * how much computing time each section of code uses 25873 25874 Once you know these things about how your code works when compiled, you 25875can look at each module to see which modules should be optimized. 25876`gcov' helps you determine where to work on optimization. 25877 25878 Software developers also use coverage testing in concert with 25879testsuites, to make sure software is actually good enough for a release. 25880Testsuites can verify that a program works as expected; a coverage 25881program tests to see how much of the program is exercised by the 25882testsuite. Developers can then determine what kinds of test cases need 25883to be added to the testsuites to create both better testing and a better 25884final product. 25885 25886 You should compile your code without optimization if you plan to use 25887`gcov' because the optimization, by combining some lines of code into 25888one function, may not give you as much information as you need to look 25889for `hot spots' where the code is using a great deal of computer time. 25890Likewise, because `gcov' accumulates statistics by line (at the lowest 25891resolution), it works best with a programming style that places only 25892one statement on each line. If you use complicated macros that expand 25893to loops or to other control structures, the statistics are less 25894helpful--they only report on the line where the macro call appears. If 25895your complex macros behave like functions, you can replace them with 25896inline functions to solve this problem. 25897 25898 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 25899many times each line of a source file `SOURCEFILE.c' has executed. You 25900can use these logfiles along with `gprof' to aid in fine-tuning the 25901performance of your programs. `gprof' gives timing information you can 25902use along with the information you get from `gcov'. 25903 25904 `gcov' works only on code compiled with GCC. It is not compatible 25905with any other profiling or test coverage mechanism. 25906 25907 25908File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 25909 259109.2 Invoking `gcov' 25911=================== 25912 25913 gcov [OPTIONS] SOURCEFILE 25914 25915 `gcov' accepts the following options: 25916 25917`-h' 25918`--help' 25919 Display help about using `gcov' (on the standard output), and exit 25920 without doing any further processing. 25921 25922`-v' 25923`--version' 25924 Display the `gcov' version number (on the standard output), and 25925 exit without doing any further processing. 25926 25927`-a' 25928`--all-blocks' 25929 Write individual execution counts for every basic block. Normally 25930 gcov outputs execution counts only for the main blocks of a line. 25931 With this option you can determine if blocks within a single line 25932 are not being executed. 25933 25934`-b' 25935`--branch-probabilities' 25936 Write branch frequencies to the output file, and write branch 25937 summary info to the standard output. This option allows you to 25938 see how often each branch in your program was taken. 25939 Unconditional branches will not be shown, unless the `-u' option 25940 is given. 25941 25942`-c' 25943`--branch-counts' 25944 Write branch frequencies as the number of branches taken, rather 25945 than the percentage of branches taken. 25946 25947`-n' 25948`--no-output' 25949 Do not create the `gcov' output file. 25950 25951`-l' 25952`--long-file-names' 25953 Create long file names for included source files. For example, if 25954 the header file `x.h' contains code, and was included in the file 25955 `a.c', then running `gcov' on the file `a.c' will produce an 25956 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 25957 can be useful if `x.h' is included in multiple source files. If 25958 you use the `-p' option, both the including and included file 25959 names will be complete path names. 25960 25961`-p' 25962`--preserve-paths' 25963 Preserve complete path information in the names of generated 25964 `.gcov' files. Without this option, just the filename component is 25965 used. With this option, all directories are used, with `/' 25966 characters translated to `#' characters, `.' directory components 25967 removed and `..' components renamed to `^'. This is useful if 25968 sourcefiles are in several different directories. It also affects 25969 the `-l' option. 25970 25971`-f' 25972`--function-summaries' 25973 Output summaries for each function in addition to the file level 25974 summary. 25975 25976`-o DIRECTORY|FILE' 25977`--object-directory DIRECTORY' 25978`--object-file FILE' 25979 Specify either the directory containing the gcov data files, or the 25980 object path name. The `.gcno', and `.gcda' data files are 25981 searched for using this option. If a directory is specified, the 25982 data files are in that directory and named after the source file 25983 name, without its extension. If a file is specified here, the 25984 data files are named after that file, without its extension. If 25985 this option is not supplied, it defaults to the current directory. 25986 25987`-u' 25988`--unconditional-branches' 25989 When branch probabilities are given, include those of 25990 unconditional branches. Unconditional branches are normally not 25991 interesting. 25992 25993 25994 `gcov' should be run with the current directory the same as that when 25995you invoked the compiler. Otherwise it will not be able to locate the 25996source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 25997current directory. These contain the coverage information of the 25998source file they correspond to. One `.gcov' file is produced for each 25999source file containing code, which was compiled to produce the data 26000files. The MANGLEDNAME part of the output file name is usually simply 26001the source file name, but can be something more complicated if the `-l' 26002or `-p' options are given. Refer to those options for details. 26003 26004 The `.gcov' files contain the `:' separated fields along with program 26005source code. The format is 26006 26007 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 26008 26009 Additional block information may succeed each line, when requested by 26010command line option. The EXECUTION_COUNT is `-' for lines containing 26011no code and `#####' for lines which were never executed. Some lines of 26012information at the start have LINE_NUMBER of zero. 26013 26014 The preamble lines are of the form 26015 26016 -:0:TAG:VALUE 26017 26018 The ordering and number of these preamble lines will be augmented as 26019`gcov' development progresses -- do not rely on them remaining 26020unchanged. Use TAG to locate a particular preamble line. 26021 26022 The additional block information is of the form 26023 26024 TAG INFORMATION 26025 26026 The INFORMATION is human readable, but designed to be simple enough 26027for machine parsing too. 26028 26029 When printing percentages, 0% and 100% are only printed when the values 26030are _exactly_ 0% and 100% respectively. Other values which would 26031conventionally be rounded to 0% or 100% are instead printed as the 26032nearest non-boundary value. 26033 26034 When using `gcov', you must first compile your program with two 26035special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 26036compiler to generate additional information needed by gcov (basically a 26037flow graph of the program) and also includes additional code in the 26038object files for generating the extra profiling information needed by 26039gcov. These additional files are placed in the directory where the 26040object file is located. 26041 26042 Running the program will cause profile output to be generated. For 26043each source file compiled with `-fprofile-arcs', an accompanying 26044`.gcda' file will be placed in the object file directory. 26045 26046 Running `gcov' with your program's source file names as arguments will 26047now produce a listing of the code along with frequency of execution for 26048each line. For example, if your program is called `tmp.c', this is 26049what you see when you use the basic `gcov' facility: 26050 26051 $ gcc -fprofile-arcs -ftest-coverage tmp.c 26052 $ a.out 26053 $ gcov tmp.c 26054 90.00% of 10 source lines executed in file tmp.c 26055 Creating tmp.c.gcov. 26056 26057 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 26058 26059 -: 0:Source:tmp.c 26060 -: 0:Graph:tmp.gcno 26061 -: 0:Data:tmp.gcda 26062 -: 0:Runs:1 26063 -: 0:Programs:1 26064 -: 1:#include <stdio.h> 26065 -: 2: 26066 -: 3:int main (void) 26067 1: 4:{ 26068 1: 5: int i, total; 26069 -: 6: 26070 1: 7: total = 0; 26071 -: 8: 26072 11: 9: for (i = 0; i < 10; i++) 26073 10: 10: total += i; 26074 -: 11: 26075 1: 12: if (total != 45) 26076 #####: 13: printf ("Failure\n"); 26077 -: 14: else 26078 1: 15: printf ("Success\n"); 26079 1: 16: return 0; 26080 -: 17:} 26081 26082 When you use the `-a' option, you will get individual block counts, 26083and the output looks like this: 26084 26085 -: 0:Source:tmp.c 26086 -: 0:Graph:tmp.gcno 26087 -: 0:Data:tmp.gcda 26088 -: 0:Runs:1 26089 -: 0:Programs:1 26090 -: 1:#include <stdio.h> 26091 -: 2: 26092 -: 3:int main (void) 26093 1: 4:{ 26094 1: 4-block 0 26095 1: 5: int i, total; 26096 -: 6: 26097 1: 7: total = 0; 26098 -: 8: 26099 11: 9: for (i = 0; i < 10; i++) 26100 11: 9-block 0 26101 10: 10: total += i; 26102 10: 10-block 0 26103 -: 11: 26104 1: 12: if (total != 45) 26105 1: 12-block 0 26106 #####: 13: printf ("Failure\n"); 26107 $$$$$: 13-block 0 26108 -: 14: else 26109 1: 15: printf ("Success\n"); 26110 1: 15-block 0 26111 1: 16: return 0; 26112 1: 16-block 0 26113 -: 17:} 26114 26115 In this mode, each basic block is only shown on one line - the last 26116line of the block. A multi-line block will only contribute to the 26117execution count of that last line, and other lines will not be shown to 26118contain code, unless previous blocks end on those lines. The total 26119execution count of a line is shown and subsequent lines show the 26120execution counts for individual blocks that end on that line. After 26121each block, the branch and call counts of the block will be shown, if 26122the `-b' option is given. 26123 26124 Because of the way GCC instruments calls, a call count can be shown 26125after a line with no individual blocks. As you can see, line 13 26126contains a basic block that was not executed. 26127 26128 When you use the `-b' option, your output looks like this: 26129 26130 $ gcov -b tmp.c 26131 90.00% of 10 source lines executed in file tmp.c 26132 80.00% of 5 branches executed in file tmp.c 26133 80.00% of 5 branches taken at least once in file tmp.c 26134 50.00% of 2 calls executed in file tmp.c 26135 Creating tmp.c.gcov. 26136 26137 Here is a sample of a resulting `tmp.c.gcov' file: 26138 26139 -: 0:Source:tmp.c 26140 -: 0:Graph:tmp.gcno 26141 -: 0:Data:tmp.gcda 26142 -: 0:Runs:1 26143 -: 0:Programs:1 26144 -: 1:#include <stdio.h> 26145 -: 2: 26146 -: 3:int main (void) 26147 function main called 1 returned 1 blocks executed 75% 26148 1: 4:{ 26149 1: 5: int i, total; 26150 -: 6: 26151 1: 7: total = 0; 26152 -: 8: 26153 11: 9: for (i = 0; i < 10; i++) 26154 branch 0 taken 91% (fallthrough) 26155 branch 1 taken 9% 26156 10: 10: total += i; 26157 -: 11: 26158 1: 12: if (total != 45) 26159 branch 0 taken 0% (fallthrough) 26160 branch 1 taken 100% 26161 #####: 13: printf ("Failure\n"); 26162 call 0 never executed 26163 -: 14: else 26164 1: 15: printf ("Success\n"); 26165 call 0 called 1 returned 100% 26166 1: 16: return 0; 26167 -: 17:} 26168 26169 For each function, a line is printed showing how many times the 26170function is called, how many times it returns and what percentage of the 26171function's blocks were executed. 26172 26173 For each basic block, a line is printed after the last line of the 26174basic block describing the branch or call that ends the basic block. 26175There can be multiple branches and calls listed for a single source 26176line if there are multiple basic blocks that end on that line. In this 26177case, the branches and calls are each given a number. There is no 26178simple way to map these branches and calls back to source constructs. 26179In general, though, the lowest numbered branch or call will correspond 26180to the leftmost construct on the source line. 26181 26182 For a branch, if it was executed at least once, then a percentage 26183indicating the number of times the branch was taken divided by the 26184number of times the branch was executed will be printed. Otherwise, the 26185message "never executed" is printed. 26186 26187 For a call, if it was executed at least once, then a percentage 26188indicating the number of times the call returned divided by the number 26189of times the call was executed will be printed. This will usually be 26190100%, but may be less for functions that call `exit' or `longjmp', and 26191thus may not return every time they are called. 26192 26193 The execution counts are cumulative. If the example program were 26194executed again without removing the `.gcda' file, the count for the 26195number of times each line in the source was executed would be added to 26196the results of the previous run(s). This is potentially useful in 26197several ways. For example, it could be used to accumulate data over a 26198number of program runs as part of a test verification suite, or to 26199provide more accurate long-term information over a large number of 26200program runs. 26201 26202 The data in the `.gcda' files is saved immediately before the program 26203exits. For each source file compiled with `-fprofile-arcs', the 26204profiling code first attempts to read in an existing `.gcda' file; if 26205the file doesn't match the executable (differing number of basic block 26206counts) it will ignore the contents of the file. It then adds in the 26207new execution counts and finally writes the data to the file. 26208 26209 26210File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 26211 262129.3 Using `gcov' with GCC Optimization 26213====================================== 26214 26215If you plan to use `gcov' to help optimize your code, you must first 26216compile your program with two special GCC options: `-fprofile-arcs 26217-ftest-coverage'. Aside from that, you can use any other GCC options; 26218but if you want to prove that every single line in your program was 26219executed, you should not compile with optimization at the same time. 26220On some machines the optimizer can eliminate some simple code lines by 26221combining them with other lines. For example, code like this: 26222 26223 if (a != b) 26224 c = 1; 26225 else 26226 c = 0; 26227 26228can be compiled into one instruction on some machines. In this case, 26229there is no way for `gcov' to calculate separate execution counts for 26230each line because there isn't separate code for each line. Hence the 26231`gcov' output looks like this if you compiled the program with 26232optimization: 26233 26234 100: 12:if (a != b) 26235 100: 13: c = 1; 26236 100: 14:else 26237 100: 15: c = 0; 26238 26239 The output shows that this block of code, combined by optimization, 26240executed 100 times. In one sense this result is correct, because there 26241was only one instruction representing all four of these lines. However, 26242the output does not indicate how many times the result was 0 and how 26243many times the result was 1. 26244 26245 Inlineable functions can create unexpected line counts. Line counts 26246are shown for the source code of the inlineable function, but what is 26247shown depends on where the function is inlined, or if it is not inlined 26248at all. 26249 26250 If the function is not inlined, the compiler must emit an out of line 26251copy of the function, in any object file that needs it. If `fileA.o' 26252and `fileB.o' both contain out of line bodies of a particular 26253inlineable function, they will also both contain coverage counts for 26254that function. When `fileA.o' and `fileB.o' are linked together, the 26255linker will, on many systems, select one of those out of line bodies 26256for all calls to that function, and remove or ignore the other. 26257Unfortunately, it will not remove the coverage counters for the unused 26258function body. Hence when instrumented, all but one use of that 26259function will show zero counts. 26260 26261 If the function is inlined in several places, the block structure in 26262each location might not be the same. For instance, a condition might 26263now be calculable at compile time in some instances. Because the 26264coverage of all the uses of the inline function will be shown for the 26265same source lines, the line counts themselves might seem inconsistent. 26266 26267 26268File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 26269 262709.4 Brief description of `gcov' data files 26271========================================== 26272 26273`gcov' uses two files for profiling. The names of these files are 26274derived from the original _object_ file by substituting the file suffix 26275with either `.gcno', or `.gcda'. All of these files are placed in the 26276same directory as the object file, and contain data stored in a 26277platform-independent format. 26278 26279 The `.gcno' file is generated when the source file is compiled with 26280the GCC `-ftest-coverage' option. It contains information to 26281reconstruct the basic block graphs and assign source line numbers to 26282blocks. 26283 26284 The `.gcda' file is generated when a program containing object files 26285built with the GCC `-fprofile-arcs' option is executed. A separate 26286`.gcda' file is created for each object file compiled with this option. 26287It contains arc transition counts, and some summary information. 26288 26289 The full details of the file format is specified in `gcov-io.h', and 26290functions provided in that header file should be used to access the 26291coverage files. 26292 26293 26294File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 26295 262969.5 Data file relocation to support cross-profiling 26297=================================================== 26298 26299Running the program will cause profile output to be generated. For each 26300source file compiled with `-fprofile-arcs', an accompanying `.gcda' 26301file will be placed in the object file directory. That implicitly 26302requires running the program on the same system as it was built or 26303having the same absolute directory structure on the target system. The 26304program will try to create the needed directory structure, if it is not 26305already present. 26306 26307 To support cross-profiling, a program compiled with `-fprofile-arcs' 26308can relocate the data files based on two environment variables: 26309 26310 * GCOV_PREFIX contains the prefix to add to the absolute paths in 26311 the object file. Prefix must be absolute as well, otherwise its 26312 value is ignored. The default is no prefix. 26313 26314 * GCOV_PREFIX_STRIP indicates the how many initial directory names 26315 to strip off the hardwired absolute paths. Default value is 0. 26316 26317 _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is 26318 undefined, empty or non-absolute. 26319 26320 For example, if the object file `/user/build/foo.o' was built with 26321`-fprofile-arcs', the final executable will try to create the data file 26322`/user/build/foo.gcda' when running on the target system. This will 26323fail if the corresponding directory does not exist and it is unable to 26324create it. This can be overcome by, for example, setting the 26325environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 26326Such a setting will name the data file `/target/run/build/foo.gcda'. 26327 26328 You must move the data files to the expected directory tree in order to 26329use them for profile directed optimizations (`--use-profile'), or to 26330use the `gcov' tool. 26331 26332 26333File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 26334 2633510 Known Causes of Trouble with GCC 26336*********************************** 26337 26338This section describes known problems that affect users of GCC. Most 26339of these are not GCC bugs per se--if they were, we would fix them. But 26340the result for a user may be like the result of a bug. 26341 26342 Some of these problems are due to bugs in other software, some are 26343missing features that are too much work to add, and some are places 26344where people's opinions differ as to what is best. 26345 26346* Menu: 26347 26348* Actual Bugs:: Bugs we will fix later. 26349* Cross-Compiler Problems:: Common problems of cross compiling with GCC. 26350* Interoperation:: Problems using GCC with other compilers, 26351 and with certain linkers, assemblers and debuggers. 26352* Incompatibilities:: GCC is incompatible with traditional C. 26353* Fixed Headers:: GCC uses corrected versions of system header files. 26354 This is necessary, but doesn't always work smoothly. 26355* Standard Libraries:: GCC uses the system C library, which might not be 26356 compliant with the ISO C standard. 26357* Disappointments:: Regrettable things we can't change, but not quite bugs. 26358* C++ Misunderstandings:: Common misunderstandings with GNU C++. 26359* Protoize Caveats:: Things to watch out for when using `protoize'. 26360* Non-bugs:: Things we think are right, but some others disagree. 26361* Warnings and Errors:: Which problems in your code get warnings, 26362 and which get errors. 26363 26364 26365File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 26366 2636710.1 Actual Bugs We Haven't Fixed Yet 26368===================================== 26369 26370 * The `fixincludes' script interacts badly with automounters; if the 26371 directory of system header files is automounted, it tends to be 26372 unmounted while `fixincludes' is running. This would seem to be a 26373 bug in the automounter. We don't know any good way to work around 26374 it. 26375 26376 * The `fixproto' script will sometimes add prototypes for the 26377 `sigsetjmp' and `siglongjmp' functions that reference the 26378 `jmp_buf' type before that type is defined. To work around this, 26379 edit the offending file and place the typedef in front of the 26380 prototypes. 26381 26382 26383File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 26384 2638510.2 Cross-Compiler Problems 26386============================ 26387 26388You may run into problems with cross compilation on certain machines, 26389for several reasons. 26390 26391 * At present, the program `mips-tfile' which adds debug support to 26392 object files on MIPS systems does not work in a cross compile 26393 environment. 26394 26395 26396File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 26397 2639810.3 Interoperation 26399=================== 26400 26401This section lists various difficulties encountered in using GCC 26402together with other compilers or with the assemblers, linkers, 26403libraries and debuggers on certain systems. 26404 26405 * On many platforms, GCC supports a different ABI for C++ than do 26406 other compilers, so the object files compiled by GCC cannot be 26407 used with object files generated by another C++ compiler. 26408 26409 An area where the difference is most apparent is name mangling. 26410 The use of different name mangling is intentional, to protect you 26411 from more subtle problems. Compilers differ as to many internal 26412 details of C++ implementation, including: how class instances are 26413 laid out, how multiple inheritance is implemented, and how virtual 26414 function calls are handled. If the name encoding were made the 26415 same, your programs would link against libraries provided from 26416 other compilers--but the programs would then crash when run. 26417 Incompatible libraries are then detected at link time, rather than 26418 at run time. 26419 26420 * On some BSD systems, including some versions of Ultrix, use of 26421 profiling causes static variable destructors (currently used only 26422 in C++) not to be run. 26423 26424 * On some SGI systems, when you use `-lgl_s' as an option, it gets 26425 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 26426 does not happen when you use GCC. You must specify all three 26427 options explicitly. 26428 26429 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 26430 boundary, and it expects every `double' to be so aligned. The Sun 26431 compiler usually gives `double' values 8-byte alignment, with one 26432 exception: function arguments of type `double' may not be aligned. 26433 26434 As a result, if a function compiled with Sun CC takes the address 26435 of an argument of type `double' and passes this pointer of type 26436 `double *' to a function compiled with GCC, dereferencing the 26437 pointer may cause a fatal signal. 26438 26439 One way to solve this problem is to compile your entire program 26440 with GCC. Another solution is to modify the function that is 26441 compiled with Sun CC to copy the argument into a local variable; 26442 local variables are always properly aligned. A third solution is 26443 to modify the function that uses the pointer to dereference it via 26444 the following function `access_double' instead of directly with 26445 `*': 26446 26447 inline double 26448 access_double (double *unaligned_ptr) 26449 { 26450 union d2i { double d; int i[2]; }; 26451 26452 union d2i *p = (union d2i *) unaligned_ptr; 26453 union d2i u; 26454 26455 u.i[0] = p->i[0]; 26456 u.i[1] = p->i[1]; 26457 26458 return u.d; 26459 } 26460 26461 Storing into the pointer can be done likewise with the same union. 26462 26463 * On Solaris, the `malloc' function in the `libmalloc.a' library may 26464 allocate memory that is only 4 byte aligned. Since GCC on the 26465 SPARC assumes that doubles are 8 byte aligned, this may result in a 26466 fatal signal if doubles are stored in memory allocated by the 26467 `libmalloc.a' library. 26468 26469 The solution is to not use the `libmalloc.a' library. Use instead 26470 `malloc' and related functions from `libc.a'; they do not have 26471 this problem. 26472 26473 * On the HP PA machine, ADB sometimes fails to work on functions 26474 compiled with GCC. Specifically, it fails to work on functions 26475 that use `alloca' or variable-size arrays. This is because GCC 26476 doesn't generate HP-UX unwind descriptors for such functions. It 26477 may even be impossible to generate them. 26478 26479 * Debugging (`-g') is not supported on the HP PA machine, unless you 26480 use the preliminary GNU tools. 26481 26482 * Taking the address of a label may generate errors from the HP-UX 26483 PA assembler. GAS for the PA does not have this problem. 26484 26485 * Using floating point parameters for indirect calls to static 26486 functions will not work when using the HP assembler. There simply 26487 is no way for GCC to specify what registers hold arguments for 26488 static functions when using the HP assembler. GAS for the PA does 26489 not have this problem. 26490 26491 * In extremely rare cases involving some very large functions you may 26492 receive errors from the HP linker complaining about an out of 26493 bounds unconditional branch offset. This used to occur more often 26494 in previous versions of GCC, but is now exceptionally rare. If 26495 you should run into it, you can work around by making your 26496 function smaller. 26497 26498 * GCC compiled code sometimes emits warnings from the HP-UX 26499 assembler of the form: 26500 26501 (warning) Use of GR3 when 26502 frame >= 8192 may cause conflict. 26503 26504 These warnings are harmless and can be safely ignored. 26505 26506 * In extremely rare cases involving some very large functions you may 26507 receive errors from the AIX Assembler complaining about a 26508 displacement that is too large. If you should run into it, you 26509 can work around by making your function smaller. 26510 26511 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 26512 semantics which merges global symbols between libraries and 26513 applications, especially necessary for C++ streams functionality. 26514 This is not the default behavior of AIX shared libraries and 26515 dynamic linking. `libstdc++.a' is built on AIX with 26516 "runtime-linking" enabled so that symbol merging can occur. To 26517 utilize this feature, the application linked with `libstdc++.a' 26518 must include the `-Wl,-brtl' flag on the link line. G++ cannot 26519 impose this because this option may interfere with the semantics 26520 of the user program and users may not always use `g++' to link his 26521 or her application. Applications are not required to use the 26522 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 26523 library which is not dependent on the symbol merging semantics 26524 will continue to function correctly. 26525 26526 * An application can interpose its own definition of functions for 26527 functions invoked by `libstdc++.a' with "runtime-linking" enabled 26528 on AIX. To accomplish this the application must be linked with 26529 "runtime-linking" option and the functions explicitly must be 26530 exported by the application (`-Wl,-brtl,-bE:exportfile'). 26531 26532 * AIX on the RS/6000 provides support (NLS) for environments outside 26533 of the United States. Compilers and assemblers use NLS to support 26534 locale-specific representations of various objects including 26535 floating-point numbers (`.' vs `,' for separating decimal 26536 fractions). There have been problems reported where the library 26537 linked with GCC does not produce the same floating-point formats 26538 that the assembler accepts. If you have this problem, set the 26539 `LANG' environment variable to `C' or `En_US'. 26540 26541 * Even if you specify `-fdollars-in-identifiers', you cannot 26542 successfully use `$' in identifiers on the RS/6000 due to a 26543 restriction in the IBM assembler. GAS supports these identifiers. 26544 26545 * On Ultrix, the Fortran compiler expects registers 2 through 5 to 26546 be saved by function calls. However, the C compiler uses 26547 conventions compatible with BSD Unix: registers 2 through 5 may be 26548 clobbered by function calls. 26549 26550 GCC uses the same convention as the Ultrix C compiler. You can use 26551 these options to produce code compatible with the Fortran compiler: 26552 26553 -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5 26554 26555 26556File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 26557 2655810.4 Incompatibilities of GCC 26559============================= 26560 26561There are several noteworthy incompatibilities between GNU C and K&R 26562(non-ISO) versions of C. 26563 26564 * GCC normally makes string constants read-only. If several 26565 identical-looking string constants are used, GCC stores only one 26566 copy of the string. 26567 26568 One consequence is that you cannot call `mktemp' with a string 26569 constant argument. The function `mktemp' always alters the string 26570 its argument points to. 26571 26572 Another consequence is that `sscanf' does not work on some very 26573 old systems when passed a string constant as its format control 26574 string or input. This is because `sscanf' incorrectly tries to 26575 write into the string constant. Likewise `fscanf' and `scanf'. 26576 26577 The solution to these problems is to change the program to use 26578 `char'-array variables with initialization strings for these 26579 purposes instead of string constants. 26580 26581 * `-2147483648' is positive. 26582 26583 This is because 2147483648 cannot fit in the type `int', so 26584 (following the ISO C rules) its data type is `unsigned long int'. 26585 Negating this value yields 2147483648 again. 26586 26587 * GCC does not substitute macro arguments when they appear inside of 26588 string constants. For example, the following macro in GCC 26589 26590 #define foo(a) "a" 26591 26592 will produce output `"a"' regardless of what the argument A is. 26593 26594 * When you use `setjmp' and `longjmp', the only automatic variables 26595 guaranteed to remain valid are those declared `volatile'. This is 26596 a consequence of automatic register allocation. Consider this 26597 function: 26598 26599 jmp_buf j; 26600 26601 foo () 26602 { 26603 int a, b; 26604 26605 a = fun1 (); 26606 if (setjmp (j)) 26607 return a; 26608 26609 a = fun2 (); 26610 /* `longjmp (j)' may occur in `fun3'. */ 26611 return a + fun3 (); 26612 } 26613 26614 Here `a' may or may not be restored to its first value when the 26615 `longjmp' occurs. If `a' is allocated in a register, then its 26616 first value is restored; otherwise, it keeps the last value stored 26617 in it. 26618 26619 If you use the `-W' option with the `-O' option, you will get a 26620 warning when GCC thinks such a problem might be possible. 26621 26622 * Programs that use preprocessing directives in the middle of macro 26623 arguments do not work with GCC. For example, a program like this 26624 will not work: 26625 26626 foobar ( 26627 #define luser 26628 hack) 26629 26630 ISO C does not permit such a construct. 26631 26632 * K&R compilers allow comments to cross over an inclusion boundary 26633 (i.e. started in an include file and ended in the including file). 26634 26635 * Declarations of external variables and functions within a block 26636 apply only to the block containing the declaration. In other 26637 words, they have the same scope as any other declaration in the 26638 same place. 26639 26640 In some other C compilers, a `extern' declaration affects all the 26641 rest of the file even if it happens within a block. 26642 26643 * In traditional C, you can combine `long', etc., with a typedef 26644 name, as shown here: 26645 26646 typedef int foo; 26647 typedef long foo bar; 26648 26649 In ISO C, this is not allowed: `long' and other type modifiers 26650 require an explicit `int'. 26651 26652 * PCC allows typedef names to be used as function parameters. 26653 26654 * Traditional C allows the following erroneous pair of declarations 26655 to appear together in a given scope: 26656 26657 typedef int foo; 26658 typedef foo foo; 26659 26660 * GCC treats all characters of identifiers as significant. 26661 According to K&R-1 (2.2), "No more than the first eight characters 26662 are significant, although more may be used.". Also according to 26663 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 26664 the first character must be a letter. The underscore _ counts as 26665 a letter.", but GCC also allows dollar signs in identifiers. 26666 26667 * PCC allows whitespace in the middle of compound assignment 26668 operators such as `+='. GCC, following the ISO standard, does not 26669 allow this. 26670 26671 * GCC complains about unterminated character constants inside of 26672 preprocessing conditionals that fail. Some programs have English 26673 comments enclosed in conditionals that are guaranteed to fail; if 26674 these comments contain apostrophes, GCC will probably report an 26675 error. For example, this code would produce an error: 26676 26677 #if 0 26678 You can't expect this to work. 26679 #endif 26680 26681 The best solution to such a problem is to put the text into an 26682 actual C comment delimited by `/*...*/'. 26683 26684 * Many user programs contain the declaration `long time ();'. In the 26685 past, the system header files on many systems did not actually 26686 declare `time', so it did not matter what type your program 26687 declared it to return. But in systems with ISO C headers, `time' 26688 is declared to return `time_t', and if that is not the same as 26689 `long', then `long time ();' is erroneous. 26690 26691 The solution is to change your program to use appropriate system 26692 headers (`<time.h>' on systems with ISO C headers) and not to 26693 declare `time' if the system header files declare it, or failing 26694 that to use `time_t' as the return type of `time'. 26695 26696 * When compiling functions that return `float', PCC converts it to a 26697 double. GCC actually returns a `float'. If you are concerned 26698 with PCC compatibility, you should declare your functions to return 26699 `double'; you might as well say what you mean. 26700 26701 * When compiling functions that return structures or unions, GCC 26702 output code normally uses a method different from that used on most 26703 versions of Unix. As a result, code compiled with GCC cannot call 26704 a structure-returning function compiled with PCC, and vice versa. 26705 26706 The method used by GCC is as follows: a structure or union which is 26707 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 26708 union with any other size is stored into an address supplied by 26709 the caller (usually in a special, fixed register, but on some 26710 machines it is passed on the stack). The target hook 26711 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 26712 26713 By contrast, PCC on most target machines returns structures and 26714 unions of any size by copying the data into an area of static 26715 storage, and then returning the address of that storage as if it 26716 were a pointer value. The caller must copy the data from that 26717 memory area to the place where the value is wanted. GCC does not 26718 use this method because it is slower and nonreentrant. 26719 26720 On some newer machines, PCC uses a reentrant convention for all 26721 structure and union returning. GCC on most of these machines uses 26722 a compatible convention when returning structures and unions in 26723 memory, but still returns small structures and unions in registers. 26724 26725 You can tell GCC to use a compatible convention for all structure 26726 and union returning with the option `-fpcc-struct-return'. 26727 26728 * GCC complains about program fragments such as `0x74ae-0x4000' 26729 which appear to be two hexadecimal constants separated by the minus 26730 operator. Actually, this string is a single "preprocessing token". 26731 Each such token must correspond to one token in C. Since this 26732 does not, GCC prints an error message. Although it may appear 26733 obvious that what is meant is an operator and two values, the ISO 26734 C standard specifically requires that this be treated as erroneous. 26735 26736 A "preprocessing token" is a "preprocessing number" if it begins 26737 with a digit and is followed by letters, underscores, digits, 26738 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 26739 character sequences. (In strict C89 mode, the sequences `p+', 26740 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 26741 26742 To make the above program fragment valid, place whitespace in 26743 front of the minus sign. This whitespace will end the 26744 preprocessing number. 26745 26746 26747File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 26748 2674910.5 Fixed Header Files 26750======================= 26751 26752GCC needs to install corrected versions of some system header files. 26753This is because most target systems have some header files that won't 26754work with GCC unless they are changed. Some have bugs, some are 26755incompatible with ISO C, and some depend on special features of other 26756compilers. 26757 26758 Installing GCC automatically creates and installs the fixed header 26759files, by running a program called `fixincludes'. Normally, you don't 26760need to pay attention to this. But there are cases where it doesn't do 26761the right thing automatically. 26762 26763 * If you update the system's header files, such as by installing a 26764 new system version, the fixed header files of GCC are not 26765 automatically updated. They can be updated using the `mkheaders' 26766 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 26767 26768 * On some systems, header file directories contain machine-specific 26769 symbolic links in certain places. This makes it possible to share 26770 most of the header files among hosts running the same version of 26771 the system on different machine models. 26772 26773 The programs that fix the header files do not understand this 26774 special way of using symbolic links; therefore, the directory of 26775 fixed header files is good only for the machine model used to 26776 build it. 26777 26778 It is possible to make separate sets of fixed header files for the 26779 different machine models, and arrange a structure of symbolic 26780 links so as to use the proper set, but you'll have to do this by 26781 hand. 26782 26783 26784File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 26785 2678610.6 Standard Libraries 26787======================= 26788 26789GCC by itself attempts to be a conforming freestanding implementation. 26790*Note Language Standards Supported by GCC: Standards, for details of 26791what this means. Beyond the library facilities required of such an 26792implementation, the rest of the C library is supplied by the vendor of 26793the operating system. If that C library doesn't conform to the C 26794standards, then your programs might get warnings (especially when using 26795`-Wall') that you don't expect. 26796 26797 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 26798while the C standard says that `sprintf' returns an `int'. The 26799`fixincludes' program could make the prototype for this function match 26800the Standard, but that would be wrong, since the function will still 26801return `char *'. 26802 26803 If you need a Standard compliant library, then you need to find one, as 26804GCC does not provide one. The GNU C library (called `glibc') provides 26805ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 26806HURD-based GNU systems; no recent version of it supports other systems, 26807though some very old versions did. Version 2.2 of the GNU C library 26808includes nearly complete C99 support. You could also ask your 26809operating system vendor if newer libraries are available. 26810 26811 26812File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 26813 2681410.7 Disappointments and Misunderstandings 26815========================================== 26816 26817These problems are perhaps regrettable, but we don't know any practical 26818way around them. 26819 26820 * Certain local variables aren't recognized by debuggers when you 26821 compile with optimization. 26822 26823 This occurs because sometimes GCC optimizes the variable out of 26824 existence. There is no way to tell the debugger how to compute the 26825 value such a variable "would have had", and it is not clear that 26826 would be desirable anyway. So GCC simply does not mention the 26827 eliminated variable when it writes debugging information. 26828 26829 You have to expect a certain amount of disagreement between the 26830 executable and your source code, when you use optimization. 26831 26832 * Users often think it is a bug when GCC reports an error for code 26833 like this: 26834 26835 int foo (struct mumble *); 26836 26837 struct mumble { ... }; 26838 26839 int foo (struct mumble *x) 26840 { ... } 26841 26842 This code really is erroneous, because the scope of `struct 26843 mumble' in the prototype is limited to the argument list 26844 containing it. It does not refer to the `struct mumble' defined 26845 with file scope immediately below--they are two unrelated types 26846 with similar names in different scopes. 26847 26848 But in the definition of `foo', the file-scope type is used 26849 because that is available to be inherited. Thus, the definition 26850 and the prototype do not match, and you get an error. 26851 26852 This behavior may seem silly, but it's what the ISO standard 26853 specifies. It is easy enough for you to make your code work by 26854 moving the definition of `struct mumble' above the prototype. 26855 It's not worth being incompatible with ISO C just to avoid an 26856 error for the example shown above. 26857 26858 * Accesses to bit-fields even in volatile objects works by accessing 26859 larger objects, such as a byte or a word. You cannot rely on what 26860 size of object is accessed in order to read or write the 26861 bit-field; it may even vary for a given bit-field according to the 26862 precise usage. 26863 26864 If you care about controlling the amount of memory that is 26865 accessed, use volatile but do not use bit-fields. 26866 26867 * GCC comes with shell scripts to fix certain known problems in 26868 system header files. They install corrected copies of various 26869 header files in a special directory where only GCC will normally 26870 look for them. The scripts adapt to various systems by searching 26871 all the system header files for the problem cases that we know 26872 about. 26873 26874 If new system header files are installed, nothing automatically 26875 arranges to update the corrected header files. They can be 26876 updated using the `mkheaders' script installed in 26877 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 26878 26879 * On 68000 and x86 systems, for instance, you can get paradoxical 26880 results if you test the precise values of floating point numbers. 26881 For example, you can find that a floating point value which is not 26882 a NaN is not equal to itself. This results from the fact that the 26883 floating point registers hold a few more bits of precision than 26884 fit in a `double' in memory. Compiled code moves values between 26885 memory and floating point registers at its convenience, and moving 26886 them into memory truncates them. 26887 26888 You can partially avoid this problem by using the `-ffloat-store' 26889 option (*note Optimize Options::). 26890 26891 * On AIX and other platforms without weak symbol support, templates 26892 need to be instantiated explicitly and symbols for static members 26893 of templates will not be generated. 26894 26895 * On AIX, GCC scans object files and library archives for static 26896 constructors and destructors when linking an application before the 26897 linker prunes unreferenced symbols. This is necessary to prevent 26898 the AIX linker from mistakenly assuming that static constructor or 26899 destructor are unused and removing them before the scanning can 26900 occur. All static constructors and destructors found will be 26901 referenced even though the modules in which they occur may not be 26902 used by the program. This may lead to both increased executable 26903 size and unexpected symbol references. 26904 26905 26906File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble 26907 2690810.8 Common Misunderstandings with GNU C++ 26909========================================== 26910 26911C++ is a complex language and an evolving one, and its standard 26912definition (the ISO C++ standard) was only recently completed. As a 26913result, your C++ compiler may occasionally surprise you, even when its 26914behavior is correct. This section discusses some areas that frequently 26915give rise to questions of this sort. 26916 26917* Menu: 26918 26919* Static Definitions:: Static member declarations are not definitions 26920* Name lookup:: Name lookup, templates, and accessing members of base classes 26921* Temporaries:: Temporaries may vanish before you expect 26922* Copy Assignment:: Copy Assignment operators copy virtual bases twice 26923 26924 26925File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 26926 2692710.8.1 Declare _and_ Define Static Members 26928------------------------------------------ 26929 26930When a class has static data members, it is not enough to _declare_ the 26931static member; you must also _define_ it. For example: 26932 26933 class Foo 26934 { 26935 ... 26936 void method(); 26937 static int bar; 26938 }; 26939 26940 This declaration only establishes that the class `Foo' has an `int' 26941named `Foo::bar', and a member function named `Foo::method'. But you 26942still need to define _both_ `method' and `bar' elsewhere. According to 26943the ISO standard, you must supply an initializer in one (and only one) 26944source file, such as: 26945 26946 int Foo::bar = 0; 26947 26948 Other C++ compilers may not correctly implement the standard behavior. 26949As a result, when you switch to `g++' from one of these compilers, you 26950may discover that a program that appeared to work correctly in fact 26951does not conform to the standard: `g++' reports as undefined symbols 26952any static data members that lack definitions. 26953 26954 26955File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 26956 2695710.8.2 Name lookup, templates, and accessing members of base classes 26958-------------------------------------------------------------------- 26959 26960The C++ standard prescribes that all names that are not dependent on 26961template parameters are bound to their present definitions when parsing 26962a template function or class.(1) Only names that are dependent are 26963looked up at the point of instantiation. For example, consider 26964 26965 void foo(double); 26966 26967 struct A { 26968 template <typename T> 26969 void f () { 26970 foo (1); // 1 26971 int i = N; // 2 26972 T t; 26973 t.bar(); // 3 26974 foo (t); // 4 26975 } 26976 26977 static const int N; 26978 }; 26979 26980 Here, the names `foo' and `N' appear in a context that does not depend 26981on the type of `T'. The compiler will thus require that they are 26982defined in the context of use in the template, not only before the 26983point of instantiation, and will here use `::foo(double)' and `A::N', 26984respectively. In particular, it will convert the integer value to a 26985`double' when passing it to `::foo(double)'. 26986 26987 Conversely, `bar' and the call to `foo' in the fourth marked line are 26988used in contexts that do depend on the type of `T', so they are only 26989looked up at the point of instantiation, and you can provide 26990declarations for them after declaring the template, but before 26991instantiating it. In particular, if you instantiate `A::f<int>', the 26992last line will call an overloaded `::foo(int)' if one was provided, 26993even if after the declaration of `struct A'. 26994 26995 This distinction between lookup of dependent and non-dependent names is 26996called two-stage (or dependent) name lookup. G++ implements it since 26997version 3.4. 26998 26999 Two-stage name lookup sometimes leads to situations with behavior 27000different from non-template codes. The most common is probably this: 27001 27002 template <typename T> struct Base { 27003 int i; 27004 }; 27005 27006 template <typename T> struct Derived : public Base<T> { 27007 int get_i() { return i; } 27008 }; 27009 27010 In `get_i()', `i' is not used in a dependent context, so the compiler 27011will look for a name declared at the enclosing namespace scope (which 27012is the global scope here). It will not look into the base class, since 27013that is dependent and you may declare specializations of `Base' even 27014after declaring `Derived', so the compiler can't really know what `i' 27015would refer to. If there is no global variable `i', then you will get 27016an error message. 27017 27018 In order to make it clear that you want the member of the base class, 27019you need to defer lookup until instantiation time, at which the base 27020class is known. For this, you need to access `i' in a dependent 27021context, by either using `this->i' (remember that `this' is of type 27022`Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 27023Alternatively, `Base<T>::i' might be brought into scope by a 27024`using'-declaration. 27025 27026 Another, similar example involves calling member functions of a base 27027class: 27028 27029 template <typename T> struct Base { 27030 int f(); 27031 }; 27032 27033 template <typename T> struct Derived : Base<T> { 27034 int g() { return f(); }; 27035 }; 27036 27037 Again, the call to `f()' is not dependent on template arguments (there 27038are no arguments that depend on the type `T', and it is also not 27039otherwise specified that the call should be in a dependent context). 27040Thus a global declaration of such a function must be available, since 27041the one in the base class is not visible until instantiation time. The 27042compiler will consequently produce the following error message: 27043 27044 x.cc: In member function `int Derived<T>::g()': 27045 x.cc:6: error: there are no arguments to `f' that depend on a template 27046 parameter, so a declaration of `f' must be available 27047 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 27048 allowing the use of an undeclared name is deprecated) 27049 27050 To make the code valid either use `this->f()', or `Base<T>::f()'. 27051Using the `-fpermissive' flag will also let the compiler accept the 27052code, by marking all function calls for which no declaration is visible 27053at the time of definition of the template for later lookup at 27054instantiation time, as if it were a dependent call. We do not 27055recommend using `-fpermissive' to work around invalid code, and it will 27056also only catch cases where functions in base classes are called, not 27057where variables in base classes are used (as in the example above). 27058 27059 Note that some compilers (including G++ versions prior to 3.4) get 27060these examples wrong and accept above code without an error. Those 27061compilers do not implement two-stage name lookup correctly. 27062 27063 ---------- Footnotes ---------- 27064 27065 (1) The C++ standard just uses the term "dependent" for names that 27066depend on the type or value of template parameters. This shorter term 27067will also be used in the rest of this section. 27068 27069 27070File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 27071 2707210.8.3 Temporaries May Vanish Before You Expect 27073----------------------------------------------- 27074 27075It is dangerous to use pointers or references to _portions_ of a 27076temporary object. The compiler may very well delete the object before 27077you expect it to, leaving a pointer to garbage. The most common place 27078where this problem crops up is in classes like string classes, 27079especially ones that define a conversion function to type `char *' or 27080`const char *'--which is one reason why the standard `string' class 27081requires you to call the `c_str' member function. However, any class 27082that returns a pointer to some internal structure is potentially 27083subject to this problem. 27084 27085 For example, a program may use a function `strfunc' that returns 27086`string' objects, and another function `charfunc' that operates on 27087pointers to `char': 27088 27089 string strfunc (); 27090 void charfunc (const char *); 27091 27092 void 27093 f () 27094 { 27095 const char *p = strfunc().c_str(); 27096 ... 27097 charfunc (p); 27098 ... 27099 charfunc (p); 27100 } 27101 27102In this situation, it may seem reasonable to save a pointer to the C 27103string returned by the `c_str' member function and use that rather than 27104call `c_str' repeatedly. However, the temporary string created by the 27105call to `strfunc' is destroyed after `p' is initialized, at which point 27106`p' is left pointing to freed memory. 27107 27108 Code like this may run successfully under some other compilers, 27109particularly obsolete cfront-based compilers that delete temporaries 27110along with normal local variables. However, the GNU C++ behavior is 27111standard-conforming, so if your program depends on late destruction of 27112temporaries it is not portable. 27113 27114 The safe way to write such code is to give the temporary a name, which 27115forces it to remain until the end of the scope of the name. For 27116example: 27117 27118 const string& tmp = strfunc (); 27119 charfunc (tmp.c_str ()); 27120 27121 27122File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 27123 2712410.8.4 Implicit Copy-Assignment for Virtual Bases 27125------------------------------------------------- 27126 27127When a base class is virtual, only one subobject of the base class 27128belongs to each full object. Also, the constructors and destructors are 27129invoked only once, and called from the most-derived class. However, 27130such objects behave unspecified when being assigned. For example: 27131 27132 struct Base{ 27133 char *name; 27134 Base(char *n) : name(strdup(n)){} 27135 Base& operator= (const Base& other){ 27136 free (name); 27137 name = strdup (other.name); 27138 } 27139 }; 27140 27141 struct A:virtual Base{ 27142 int val; 27143 A():Base("A"){} 27144 }; 27145 27146 struct B:virtual Base{ 27147 int bval; 27148 B():Base("B"){} 27149 }; 27150 27151 struct Derived:public A, public B{ 27152 Derived():Base("Derived"){} 27153 }; 27154 27155 void func(Derived &d1, Derived &d2) 27156 { 27157 d1 = d2; 27158 } 27159 27160 The C++ standard specifies that `Base::Base' is only called once when 27161constructing or copy-constructing a Derived object. It is unspecified 27162whether `Base::operator=' is called more than once when the implicit 27163copy-assignment for Derived objects is invoked (as it is inside `func' 27164in the example). 27165 27166 G++ implements the "intuitive" algorithm for copy-assignment: assign 27167all direct bases, then assign all members. In that algorithm, the 27168virtual base subobject can be encountered more than once. In the 27169example, copying proceeds in the following order: `val', `name' (via 27170`strdup'), `bval', and `name' again. 27171 27172 If application code relies on copy-assignment, a user-defined 27173copy-assignment operator removes any uncertainties. With such an 27174operator, the application can define whether and how the virtual base 27175subobject is assigned. 27176 27177 27178File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: C++ Misunderstandings, Up: Trouble 27179 2718010.9 Caveats of using `protoize' 27181================================ 27182 27183The conversion programs `protoize' and `unprotoize' can sometimes 27184change a source file in a way that won't work unless you rearrange it. 27185 27186 * `protoize' can insert references to a type name or type tag before 27187 the definition, or in a file where they are not defined. 27188 27189 If this happens, compiler error messages should show you where the 27190 new references are, so fixing the file by hand is straightforward. 27191 27192 * There are some C constructs which `protoize' cannot figure out. 27193 For example, it can't determine argument types for declaring a 27194 pointer-to-function variable; this you must do by hand. `protoize' 27195 inserts a comment containing `???' each time it finds such a 27196 variable; so you can find all such variables by searching for this 27197 string. ISO C does not require declaring the argument types of 27198 pointer-to-function types. 27199 27200 * Using `unprotoize' can easily introduce bugs. If the program 27201 relied on prototypes to bring about conversion of arguments, these 27202 conversions will not take place in the program without prototypes. 27203 One case in which you can be sure `unprotoize' is safe is when you 27204 are removing prototypes that were made with `protoize'; if the 27205 program worked before without any prototypes, it will work again 27206 without them. 27207 27208 You can find all the places where this problem might occur by 27209 compiling the program with the `-Wconversion' option. It prints a 27210 warning whenever an argument is converted. 27211 27212 * Both conversion programs can be confused if there are macro calls 27213 in and around the text to be converted. In other words, the 27214 standard syntax for a declaration or definition must not result 27215 from expanding a macro. This problem is inherent in the design of 27216 C and cannot be fixed. If only a few functions have confusing 27217 macro calls, you can easily convert them manually. 27218 27219 * `protoize' cannot get the argument types for a function whose 27220 definition was not actually compiled due to preprocessing 27221 conditionals. When this happens, `protoize' changes nothing in 27222 regard to such a function. `protoize' tries to detect such 27223 instances and warn about them. 27224 27225 You can generally work around this problem by using `protoize' step 27226 by step, each time specifying a different set of `-D' options for 27227 compilation, until all of the functions have been converted. 27228 There is no automatic way to verify that you have got them all, 27229 however. 27230 27231 * Confusion may result if there is an occasion to convert a function 27232 declaration or definition in a region of source code where there 27233 is more than one formal parameter list present. Thus, attempts to 27234 convert code containing multiple (conditionally compiled) versions 27235 of a single function header (in the same vicinity) may not produce 27236 the desired (or expected) results. 27237 27238 If you plan on converting source files which contain such code, it 27239 is recommended that you first make sure that each conditionally 27240 compiled region of source code which contains an alternative 27241 function header also contains at least one additional follower 27242 token (past the final right parenthesis of the function header). 27243 This should circumvent the problem. 27244 27245 * `unprotoize' can become confused when trying to convert a function 27246 definition or declaration which contains a declaration for a 27247 pointer-to-function formal argument which has the same name as the 27248 function being defined or declared. We recommend you avoid such 27249 choices of formal parameter names. 27250 27251 * You might also want to correct some of the indentation by hand and 27252 break long lines. (The conversion programs don't write lines 27253 longer than eighty characters in any case.) 27254 27255 27256File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Protoize Caveats, Up: Trouble 27257 2725810.10 Certain Changes We Don't Want to Make 27259=========================================== 27260 27261This section lists changes that people frequently request, but which we 27262do not make because we think GCC is better without them. 27263 27264 * Checking the number and type of arguments to a function which has 27265 an old-fashioned definition and no prototype. 27266 27267 Such a feature would work only occasionally--only for calls that 27268 appear in the same file as the called function, following the 27269 definition. The only way to check all calls reliably is to add a 27270 prototype for the function. But adding a prototype eliminates the 27271 motivation for this feature. So the feature is not worthwhile. 27272 27273 * Warning about using an expression whose type is signed as a shift 27274 count. 27275 27276 Shift count operands are probably signed more often than unsigned. 27277 Warning about this would cause far more annoyance than good. 27278 27279 * Warning about assigning a signed value to an unsigned variable. 27280 27281 Such assignments must be very common; warning about them would 27282 cause more annoyance than good. 27283 27284 * Warning when a non-void function value is ignored. 27285 27286 C contains many standard functions that return a value that most 27287 programs choose to ignore. One obvious example is `printf'. 27288 Warning about this practice only leads the defensive programmer to 27289 clutter programs with dozens of casts to `void'. Such casts are 27290 required so frequently that they become visual noise. Writing 27291 those casts becomes so automatic that they no longer convey useful 27292 information about the intentions of the programmer. For functions 27293 where the return value should never be ignored, use the 27294 `warn_unused_result' function attribute (*note Function 27295 Attributes::). 27296 27297 * Making `-fshort-enums' the default. 27298 27299 This would cause storage layout to be incompatible with most other 27300 C compilers. And it doesn't seem very important, given that you 27301 can get the same result in other ways. The case where it matters 27302 most is when the enumeration-valued object is inside a structure, 27303 and in that case you can specify a field width explicitly. 27304 27305 * Making bit-fields unsigned by default on particular machines where 27306 "the ABI standard" says to do so. 27307 27308 The ISO C standard leaves it up to the implementation whether a 27309 bit-field declared plain `int' is signed or not. This in effect 27310 creates two alternative dialects of C. 27311 27312 The GNU C compiler supports both dialects; you can specify the 27313 signed dialect with `-fsigned-bitfields' and the unsigned dialect 27314 with `-funsigned-bitfields'. However, this leaves open the 27315 question of which dialect to use by default. 27316 27317 Currently, the preferred dialect makes plain bit-fields signed, 27318 because this is simplest. Since `int' is the same as `signed int' 27319 in every other context, it is cleanest for them to be the same in 27320 bit-fields as well. 27321 27322 Some computer manufacturers have published Application Binary 27323 Interface standards which specify that plain bit-fields should be 27324 unsigned. It is a mistake, however, to say anything about this 27325 issue in an ABI. This is because the handling of plain bit-fields 27326 distinguishes two dialects of C. Both dialects are meaningful on 27327 every type of machine. Whether a particular object file was 27328 compiled using signed bit-fields or unsigned is of no concern to 27329 other object files, even if they access the same bit-fields in the 27330 same data structures. 27331 27332 A given program is written in one or the other of these two 27333 dialects. The program stands a chance to work on most any machine 27334 if it is compiled with the proper dialect. It is unlikely to work 27335 at all if compiled with the wrong dialect. 27336 27337 Many users appreciate the GNU C compiler because it provides an 27338 environment that is uniform across machines. These users would be 27339 inconvenienced if the compiler treated plain bit-fields 27340 differently on certain machines. 27341 27342 Occasionally users write programs intended only for a particular 27343 machine type. On these occasions, the users would benefit if the 27344 GNU C compiler were to support by default the same dialect as the 27345 other compilers on that machine. But such applications are rare. 27346 And users writing a program to run on more than one type of 27347 machine cannot possibly benefit from this kind of compatibility. 27348 27349 This is why GCC does and will treat plain bit-fields in the same 27350 fashion on all types of machines (by default). 27351 27352 There are some arguments for making bit-fields unsigned by default 27353 on all machines. If, for example, this becomes a universal de 27354 facto standard, it would make sense for GCC to go along with it. 27355 This is something to be considered in the future. 27356 27357 (Of course, users strongly concerned about portability should 27358 indicate explicitly in each bit-field whether it is signed or not. 27359 In this way, they write programs which have the same meaning in 27360 both C dialects.) 27361 27362 * Undefining `__STDC__' when `-ansi' is not used. 27363 27364 Currently, GCC defines `__STDC__' unconditionally. This provides 27365 good results in practice. 27366 27367 Programmers normally use conditionals on `__STDC__' to ask whether 27368 it is safe to use certain features of ISO C, such as function 27369 prototypes or ISO token concatenation. Since plain `gcc' supports 27370 all the features of ISO C, the correct answer to these questions is 27371 "yes". 27372 27373 Some users try to use `__STDC__' to check for the availability of 27374 certain library facilities. This is actually incorrect usage in 27375 an ISO C program, because the ISO C standard says that a conforming 27376 freestanding implementation should define `__STDC__' even though it 27377 does not have the library facilities. `gcc -ansi -pedantic' is a 27378 conforming freestanding implementation, and it is therefore 27379 required to define `__STDC__', even though it does not come with 27380 an ISO C library. 27381 27382 Sometimes people say that defining `__STDC__' in a compiler that 27383 does not completely conform to the ISO C standard somehow violates 27384 the standard. This is illogical. The standard is a standard for 27385 compilers that claim to support ISO C, such as `gcc -ansi'--not 27386 for other compilers such as plain `gcc'. Whatever the ISO C 27387 standard says is relevant to the design of plain `gcc' without 27388 `-ansi' only for pragmatic reasons, not as a requirement. 27389 27390 GCC normally defines `__STDC__' to be 1, and in addition defines 27391 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 27392 option for strict conformance to some version of ISO C. On some 27393 hosts, system include files use a different convention, where 27394 `__STDC__' is normally 0, but is 1 if the user specifies strict 27395 conformance to the C Standard. GCC follows the host convention 27396 when processing system include files, but when processing user 27397 files it follows the usual GNU C convention. 27398 27399 * Undefining `__STDC__' in C++. 27400 27401 Programs written to compile with C++-to-C translators get the 27402 value of `__STDC__' that goes with the C compiler that is 27403 subsequently used. These programs must test `__STDC__' to 27404 determine what kind of C preprocessor that compiler uses: whether 27405 they should concatenate tokens in the ISO C fashion or in the 27406 traditional fashion. 27407 27408 These programs work properly with GNU C++ if `__STDC__' is defined. 27409 They would not work otherwise. 27410 27411 In addition, many header files are written to provide prototypes 27412 in ISO C but not in traditional C. Many of these header files can 27413 work without change in C++ provided `__STDC__' is defined. If 27414 `__STDC__' is not defined, they will all fail, and will all need 27415 to be changed to test explicitly for C++ as well. 27416 27417 * Deleting "empty" loops. 27418 27419 Historically, GCC has not deleted "empty" loops under the 27420 assumption that the most likely reason you would put one in a 27421 program is to have a delay, so deleting them will not make real 27422 programs run any faster. 27423 27424 However, the rationale here is that optimization of a nonempty loop 27425 cannot produce an empty one. This held for carefully written C 27426 compiled with less powerful optimizers but is not always the case 27427 for carefully written C++ or with more powerful optimizers. Thus 27428 GCC will remove operations from loops whenever it can determine 27429 those operations are not externally visible (apart from the time 27430 taken to execute them, of course). In case the loop can be proved 27431 to be finite, GCC will also remove the loop itself. 27432 27433 Be aware of this when performing timing tests, for instance the 27434 following loop can be completely removed, provided 27435 `some_expression' can provably not change any global state. 27436 27437 { 27438 int sum = 0; 27439 int ix; 27440 27441 for (ix = 0; ix != 10000; ix++) 27442 sum += some_expression; 27443 } 27444 27445 Even though `sum' is accumulated in the loop, no use is made of 27446 that summation, so the accumulation can be removed. 27447 27448 * Making side effects happen in the same order as in some other 27449 compiler. 27450 27451 It is never safe to depend on the order of evaluation of side 27452 effects. For example, a function call like this may very well 27453 behave differently from one compiler to another: 27454 27455 void func (int, int); 27456 27457 int i = 2; 27458 func (i++, i++); 27459 27460 There is no guarantee (in either the C or the C++ standard language 27461 definitions) that the increments will be evaluated in any 27462 particular order. Either increment might happen first. `func' 27463 might get the arguments `2, 3', or it might get `3, 2', or even 27464 `2, 2'. 27465 27466 * Making certain warnings into errors by default. 27467 27468 Some ISO C testsuites report failure when the compiler does not 27469 produce an error message for a certain program. 27470 27471 ISO C requires a "diagnostic" message for certain kinds of invalid 27472 programs, but a warning is defined by GCC to count as a 27473 diagnostic. If GCC produces a warning but not an error, that is 27474 correct ISO C support. If testsuites call this "failure", they 27475 should be run with the GCC option `-pedantic-errors', which will 27476 turn these warnings into errors. 27477 27478 27479 27480File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 27481 2748210.11 Warning Messages and Error Messages 27483========================================= 27484 27485The GNU compiler can produce two kinds of diagnostics: errors and 27486warnings. Each kind has a different purpose: 27487 27488 "Errors" report problems that make it impossible to compile your 27489 program. GCC reports errors with the source file name and line 27490 number where the problem is apparent. 27491 27492 "Warnings" report other unusual conditions in your code that _may_ 27493 indicate a problem, although compilation can (and does) proceed. 27494 Warning messages also report the source file name and line number, 27495 but include the text `warning:' to distinguish them from error 27496 messages. 27497 27498 Warnings may indicate danger points where you should check to make sure 27499that your program really does what you intend; or the use of obsolete 27500features; or the use of nonstandard features of GNU C or C++. Many 27501warnings are issued only if you ask for them, with one of the `-W' 27502options (for instance, `-Wall' requests a variety of useful warnings). 27503 27504 GCC always tries to compile your program if possible; it never 27505gratuitously rejects a program whose meaning is clear merely because 27506(for instance) it fails to conform to a standard. In some cases, 27507however, the C and C++ standards specify that certain extensions are 27508forbidden, and a diagnostic _must_ be issued by a conforming compiler. 27509The `-pedantic' option tells GCC to issue warnings in such cases; 27510`-pedantic-errors' says to make them errors instead. This does not 27511mean that _all_ non-ISO constructs get warnings or errors. 27512 27513 *Note Options to Request or Suppress Warnings: Warning Options, for 27514more detail on these and related command-line options. 27515 27516 27517File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 27518 2751911 Reporting Bugs 27520***************** 27521 27522Your bug reports play an essential role in making GCC reliable. 27523 27524 When you encounter a problem, the first thing to do is to see if it is 27525already known. *Note Trouble::. If it isn't known, then you should 27526report the problem. 27527 27528* Menu: 27529 27530* Criteria: Bug Criteria. Have you really found a bug? 27531* Reporting: Bug Reporting. How to report a bug effectively. 27532* Known: Trouble. Known problems. 27533* Help: Service. Where to ask for help. 27534 27535 27536File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 27537 2753811.1 Have You Found a Bug? 27539========================== 27540 27541If you are not sure whether you have found a bug, here are some 27542guidelines: 27543 27544 * If the compiler gets a fatal signal, for any input whatever, that 27545 is a compiler bug. Reliable compilers never crash. 27546 27547 * If the compiler produces invalid assembly code, for any input 27548 whatever (except an `asm' statement), that is a compiler bug, 27549 unless the compiler reports errors (not just warnings) which would 27550 ordinarily prevent the assembler from being run. 27551 27552 * If the compiler produces valid assembly code that does not 27553 correctly execute the input source code, that is a compiler bug. 27554 27555 However, you must double-check to make sure, because you may have a 27556 program whose behavior is undefined, which happened by chance to 27557 give the desired results with another C or C++ compiler. 27558 27559 For example, in many nonoptimizing compilers, you can write `x;' 27560 at the end of a function instead of `return x;', with the same 27561 results. But the value of the function is undefined if `return' 27562 is omitted; it is not a bug when GCC produces different results. 27563 27564 Problems often result from expressions with two increment 27565 operators, as in `f (*p++, *p++)'. Your previous compiler might 27566 have interpreted that expression the way you intended; GCC might 27567 interpret it another way. Neither compiler is wrong. The bug is 27568 in your code. 27569 27570 After you have localized the error to a single source line, it 27571 should be easy to check for these things. If your program is 27572 correct and well defined, you have found a compiler bug. 27573 27574 * If the compiler produces an error message for valid input, that is 27575 a compiler bug. 27576 27577 * If the compiler does not produce an error message for invalid 27578 input, that is a compiler bug. However, you should note that your 27579 idea of "invalid input" might be someone else's idea of "an 27580 extension" or "support for traditional practice". 27581 27582 * If you are an experienced user of one of the languages GCC 27583 supports, your suggestions for improvement of GCC are welcome in 27584 any case. 27585 27586 27587File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 27588 2758911.2 How and where to Report Bugs 27590================================= 27591 27592Bugs should be reported to the GCC bug database. Please refer to 27593`http://gcc.gnu.org/bugs.html' for up-to-date instructions how to 27594submit bug reports. Copies of this file in HTML (`bugs.html') and 27595plain text (`BUGS') are also part of GCC releases. 27596 27597 27598File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 27599 2760012 How To Get Help with GCC 27601*************************** 27602 27603If you need help installing, using or changing GCC, there are two ways 27604to find it: 27605 27606 * Send a message to a suitable network mailing list. First try 27607 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 27608 that brings no response, try <gcc@gcc.gnu.org>. For help changing 27609 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 27610 GCC, please report it following the instructions at *note Bug 27611 Reporting::. 27612 27613 * Look in the service directory for someone who might help you for a 27614 fee. The service directory is found at 27615 `http://www.gnu.org/prep/service.html'. 27616 27617 For further information, see `http://gcc.gnu.org/faq.html#support'. 27618 27619 27620File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 27621 2762213 Contributing to GCC Development 27623********************************** 27624 27625If you would like to help pretest GCC releases to assure they work well, 27626current development sources are available by SVN (see 27627`http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 27628available for FTP; see `http://gcc.gnu.org/snapshots.html'. 27629 27630 If you would like to work on improvements to GCC, please read the 27631advice at these URLs: 27632 27633 `http://gcc.gnu.org/contribute.html' 27634 `http://gcc.gnu.org/contributewhy.html' 27635 27636for information on how to make useful contributions and avoid 27637duplication of effort. Suggested projects are listed at 27638`http://gcc.gnu.org/projects/'. 27639 27640 27641File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 27642 27643Funding Free Software 27644********************* 27645 27646If you want to have more free software a few years from now, it makes 27647sense for you to help encourage people to contribute funds for its 27648development. The most effective approach known is to encourage 27649commercial redistributors to donate. 27650 27651 Users of free software systems can boost the pace of development by 27652encouraging for-a-fee distributors to donate part of their selling price 27653to free software developers--the Free Software Foundation, and others. 27654 27655 The way to convince distributors to do this is to demand it and expect 27656it from them. So when you compare distributors, judge them partly by 27657how much they give to free software development. Show distributors 27658they must compete to be the one who gives the most. 27659 27660 To make this approach work, you must insist on numbers that you can 27661compare, such as, "We will donate ten dollars to the Frobnitz project 27662for each disk sold." Don't be satisfied with a vague promise, such as 27663"A portion of the profits are donated," since it doesn't give a basis 27664for comparison. 27665 27666 Even a precise fraction "of the profits from this disk" is not very 27667meaningful, since creative accounting and unrelated business decisions 27668can greatly alter what fraction of the sales price counts as profit. 27669If the price you pay is $50, ten percent of the profit is probably less 27670than a dollar; it might be a few cents, or nothing at all. 27671 27672 Some redistributors do development work themselves. This is useful 27673too; but to keep everyone honest, you need to inquire how much they do, 27674and what kind. Some kinds of development make much more long-term 27675difference than others. For example, maintaining a separate version of 27676a program contributes very little; maintaining the standard version of a 27677program for the whole community contributes much. Easy new ports 27678contribute little, since someone else would surely do them; difficult 27679ports such as adding a new CPU to the GNU Compiler Collection 27680contribute more; major new features or packages contribute the most. 27681 27682 By establishing the idea that supporting further development is "the 27683proper thing to do" when distributing free software for a fee, we can 27684assure a steady flow of resources into making more free software. 27685 27686 Copyright (C) 1994 Free Software Foundation, Inc. 27687 Verbatim copying and redistribution of this section is permitted 27688 without royalty; alteration is not permitted. 27689 27690 27691File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 27692 27693The GNU Project and GNU/Linux 27694***************************** 27695 27696The GNU Project was launched in 1984 to develop a complete Unix-like 27697operating system which is free software: the GNU system. (GNU is a 27698recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 27699Variants of the GNU operating system, which use the kernel Linux, are 27700now widely used; though these systems are often referred to as "Linux", 27701they are more accurately called GNU/Linux systems. 27702 27703 For more information, see: 27704 `http://www.gnu.org/' 27705 `http://www.gnu.org/gnu/linux-and-gnu.html' 27706 27707 27708File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 27709 27710GNU GENERAL PUBLIC LICENSE 27711************************** 27712 27713 Version 2, June 1991 27714 27715 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 27716 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 27717 27718 Everyone is permitted to copy and distribute verbatim copies 27719 of this license document, but changing it is not allowed. 27720 27721Preamble 27722======== 27723 27724The licenses for most software are designed to take away your freedom 27725to share and change it. By contrast, the GNU General Public License is 27726intended to guarantee your freedom to share and change free 27727software--to make sure the software is free for all its users. This 27728General Public License applies to most of the Free Software 27729Foundation's software and to any other program whose authors commit to 27730using it. (Some other Free Software Foundation software is covered by 27731the GNU Library General Public License instead.) You can apply it to 27732your programs, too. 27733 27734 When we speak of free software, we are referring to freedom, not 27735price. Our General Public Licenses are designed to make sure that you 27736have the freedom to distribute copies of free software (and charge for 27737this service if you wish), that you receive source code or can get it 27738if you want it, that you can change the software or use pieces of it in 27739new free programs; and that you know you can do these things. 27740 27741 To protect your rights, we need to make restrictions that forbid 27742anyone to deny you these rights or to ask you to surrender the rights. 27743These restrictions translate to certain responsibilities for you if you 27744distribute copies of the software, or if you modify it. 27745 27746 For example, if you distribute copies of such a program, whether 27747gratis or for a fee, you must give the recipients all the rights that 27748you have. You must make sure that they, too, receive or can get the 27749source code. And you must show them these terms so they know their 27750rights. 27751 27752 We protect your rights with two steps: (1) copyright the software, and 27753(2) offer you this license which gives you legal permission to copy, 27754distribute and/or modify the software. 27755 27756 Also, for each author's protection and ours, we want to make certain 27757that everyone understands that there is no warranty for this free 27758software. If the software is modified by someone else and passed on, we 27759want its recipients to know that what they have is not the original, so 27760that any problems introduced by others will not reflect on the original 27761authors' reputations. 27762 27763 Finally, any free program is threatened constantly by software 27764patents. We wish to avoid the danger that redistributors of a free 27765program will individually obtain patent licenses, in effect making the 27766program proprietary. To prevent this, we have made it clear that any 27767patent must be licensed for everyone's free use or not licensed at all. 27768 27769 The precise terms and conditions for copying, distribution and 27770modification follow. 27771 27772 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 27773 0. This License applies to any program or other work which contains a 27774 notice placed by the copyright holder saying it may be distributed 27775 under the terms of this General Public License. The "Program", 27776 below, refers to any such program or work, and a "work based on 27777 the Program" means either the Program or any derivative work under 27778 copyright law: that is to say, a work containing the Program or a 27779 portion of it, either verbatim or with modifications and/or 27780 translated into another language. (Hereinafter, translation is 27781 included without limitation in the term "modification".) Each 27782 licensee is addressed as "you". 27783 27784 Activities other than copying, distribution and modification are 27785 not covered by this License; they are outside its scope. The act 27786 of running the Program is not restricted, and the output from the 27787 Program is covered only if its contents constitute a work based on 27788 the Program (independent of having been made by running the 27789 Program). Whether that is true depends on what the Program does. 27790 27791 1. You may copy and distribute verbatim copies of the Program's 27792 source code as you receive it, in any medium, provided that you 27793 conspicuously and appropriately publish on each copy an appropriate 27794 copyright notice and disclaimer of warranty; keep intact all the 27795 notices that refer to this License and to the absence of any 27796 warranty; and give any other recipients of the Program a copy of 27797 this License along with the Program. 27798 27799 You may charge a fee for the physical act of transferring a copy, 27800 and you may at your option offer warranty protection in exchange 27801 for a fee. 27802 27803 2. You may modify your copy or copies of the Program or any portion 27804 of it, thus forming a work based on the Program, and copy and 27805 distribute such modifications or work under the terms of Section 1 27806 above, provided that you also meet all of these conditions: 27807 27808 a. You must cause the modified files to carry prominent notices 27809 stating that you changed the files and the date of any change. 27810 27811 b. You must cause any work that you distribute or publish, that 27812 in whole or in part contains or is derived from the Program 27813 or any part thereof, to be licensed as a whole at no charge 27814 to all third parties under the terms of this License. 27815 27816 c. If the modified program normally reads commands interactively 27817 when run, you must cause it, when started running for such 27818 interactive use in the most ordinary way, to print or display 27819 an announcement including an appropriate copyright notice and 27820 a notice that there is no warranty (or else, saying that you 27821 provide a warranty) and that users may redistribute the 27822 program under these conditions, and telling the user how to 27823 view a copy of this License. (Exception: if the Program 27824 itself is interactive but does not normally print such an 27825 announcement, your work based on the Program is not required 27826 to print an announcement.) 27827 27828 These requirements apply to the modified work as a whole. If 27829 identifiable sections of that work are not derived from the 27830 Program, and can be reasonably considered independent and separate 27831 works in themselves, then this License, and its terms, do not 27832 apply to those sections when you distribute them as separate 27833 works. But when you distribute the same sections as part of a 27834 whole which is a work based on the Program, the distribution of 27835 the whole must be on the terms of this License, whose permissions 27836 for other licensees extend to the entire whole, and thus to each 27837 and every part regardless of who wrote it. 27838 27839 Thus, it is not the intent of this section to claim rights or 27840 contest your rights to work written entirely by you; rather, the 27841 intent is to exercise the right to control the distribution of 27842 derivative or collective works based on the Program. 27843 27844 In addition, mere aggregation of another work not based on the 27845 Program with the Program (or with a work based on the Program) on 27846 a volume of a storage or distribution medium does not bring the 27847 other work under the scope of this License. 27848 27849 3. You may copy and distribute the Program (or a work based on it, 27850 under Section 2) in object code or executable form under the terms 27851 of Sections 1 and 2 above provided that you also do one of the 27852 following: 27853 27854 a. Accompany it with the complete corresponding machine-readable 27855 source code, which must be distributed under the terms of 27856 Sections 1 and 2 above on a medium customarily used for 27857 software interchange; or, 27858 27859 b. Accompany it with a written offer, valid for at least three 27860 years, to give any third party, for a charge no more than your 27861 cost of physically performing source distribution, a complete 27862 machine-readable copy of the corresponding source code, to be 27863 distributed under the terms of Sections 1 and 2 above on a 27864 medium customarily used for software interchange; or, 27865 27866 c. Accompany it with the information you received as to the offer 27867 to distribute corresponding source code. (This alternative is 27868 allowed only for noncommercial distribution and only if you 27869 received the program in object code or executable form with 27870 such an offer, in accord with Subsection b above.) 27871 27872 The source code for a work means the preferred form of the work for 27873 making modifications to it. For an executable work, complete 27874 source code means all the source code for all modules it contains, 27875 plus any associated interface definition files, plus the scripts 27876 used to control compilation and installation of the executable. 27877 However, as a special exception, the source code distributed need 27878 not include anything that is normally distributed (in either 27879 source or binary form) with the major components (compiler, 27880 kernel, and so on) of the operating system on which the executable 27881 runs, unless that component itself accompanies the executable. 27882 27883 If distribution of executable or object code is made by offering 27884 access to copy from a designated place, then offering equivalent 27885 access to copy the source code from the same place counts as 27886 distribution of the source code, even though third parties are not 27887 compelled to copy the source along with the object code. 27888 27889 4. You may not copy, modify, sublicense, or distribute the Program 27890 except as expressly provided under this License. Any attempt 27891 otherwise to copy, modify, sublicense or distribute the Program is 27892 void, and will automatically terminate your rights under this 27893 License. However, parties who have received copies, or rights, 27894 from you under this License will not have their licenses 27895 terminated so long as such parties remain in full compliance. 27896 27897 5. You are not required to accept this License, since you have not 27898 signed it. However, nothing else grants you permission to modify 27899 or distribute the Program or its derivative works. These actions 27900 are prohibited by law if you do not accept this License. 27901 Therefore, by modifying or distributing the Program (or any work 27902 based on the Program), you indicate your acceptance of this 27903 License to do so, and all its terms and conditions for copying, 27904 distributing or modifying the Program or works based on it. 27905 27906 6. Each time you redistribute the Program (or any work based on the 27907 Program), the recipient automatically receives a license from the 27908 original licensor to copy, distribute or modify the Program 27909 subject to these terms and conditions. You may not impose any 27910 further restrictions on the recipients' exercise of the rights 27911 granted herein. You are not responsible for enforcing compliance 27912 by third parties to this License. 27913 27914 7. If, as a consequence of a court judgment or allegation of patent 27915 infringement or for any other reason (not limited to patent 27916 issues), conditions are imposed on you (whether by court order, 27917 agreement or otherwise) that contradict the conditions of this 27918 License, they do not excuse you from the conditions of this 27919 License. If you cannot distribute so as to satisfy simultaneously 27920 your obligations under this License and any other pertinent 27921 obligations, then as a consequence you may not distribute the 27922 Program at all. For example, if a patent license would not permit 27923 royalty-free redistribution of the Program by all those who 27924 receive copies directly or indirectly through you, then the only 27925 way you could satisfy both it and this License would be to refrain 27926 entirely from distribution of the Program. 27927 27928 If any portion of this section is held invalid or unenforceable 27929 under any particular circumstance, the balance of the section is 27930 intended to apply and the section as a whole is intended to apply 27931 in other circumstances. 27932 27933 It is not the purpose of this section to induce you to infringe any 27934 patents or other property right claims or to contest validity of 27935 any such claims; this section has the sole purpose of protecting 27936 the integrity of the free software distribution system, which is 27937 implemented by public license practices. Many people have made 27938 generous contributions to the wide range of software distributed 27939 through that system in reliance on consistent application of that 27940 system; it is up to the author/donor to decide if he or she is 27941 willing to distribute software through any other system and a 27942 licensee cannot impose that choice. 27943 27944 This section is intended to make thoroughly clear what is believed 27945 to be a consequence of the rest of this License. 27946 27947 8. If the distribution and/or use of the Program is restricted in 27948 certain countries either by patents or by copyrighted interfaces, 27949 the original copyright holder who places the Program under this 27950 License may add an explicit geographical distribution limitation 27951 excluding those countries, so that distribution is permitted only 27952 in or among countries not thus excluded. In such case, this 27953 License incorporates the limitation as if written in the body of 27954 this License. 27955 27956 9. The Free Software Foundation may publish revised and/or new 27957 versions of the General Public License from time to time. Such 27958 new versions will be similar in spirit to the present version, but 27959 may differ in detail to address new problems or concerns. 27960 27961 Each version is given a distinguishing version number. If the 27962 Program specifies a version number of this License which applies 27963 to it and "any later version", you have the option of following 27964 the terms and conditions either of that version or of any later 27965 version published by the Free Software Foundation. If the Program 27966 does not specify a version number of this License, you may choose 27967 any version ever published by the Free Software Foundation. 27968 27969 10. If you wish to incorporate parts of the Program into other free 27970 programs whose distribution conditions are different, write to the 27971 author to ask for permission. For software which is copyrighted 27972 by the Free Software Foundation, write to the Free Software 27973 Foundation; we sometimes make exceptions for this. Our decision 27974 will be guided by the two goals of preserving the free status of 27975 all derivatives of our free software and of promoting the sharing 27976 and reuse of software generally. 27977 27978 NO WARRANTY 27979 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO 27980 WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE 27981 LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 27982 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT 27983 WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT 27984 NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 27985 FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE 27986 QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 27987 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY 27988 SERVICING, REPAIR OR CORRECTION. 27989 27990 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 27991 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY 27992 MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE 27993 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 27994 INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR 27995 INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 27996 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU 27997 OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY 27998 OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN 27999 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 28000 28001 END OF TERMS AND CONDITIONS 28002Appendix: How to Apply These Terms to Your New Programs 28003======================================================= 28004 28005If you develop a new program, and you want it to be of the greatest 28006possible use to the public, the best way to achieve this is to make it 28007free software which everyone can redistribute and change under these 28008terms. 28009 28010 To do so, attach the following notices to the program. It is safest 28011to attach them to the start of each source file to most effectively 28012convey the exclusion of warranty; and each file should have at least 28013the "copyright" line and a pointer to where the full notice is found. 28014 28015 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 28016 Copyright (C) YEAR NAME OF AUTHOR 28017 28018 This program is free software; you can redistribute it and/or modify 28019 it under the terms of the GNU General Public License as published by 28020 the Free Software Foundation; either version 2 of the License, or 28021 (at your option) any later version. 28022 28023 This program is distributed in the hope that it will be useful, 28024 but WITHOUT ANY WARRANTY; without even the implied warranty of 28025 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 28026 GNU General Public License for more details. 28027 28028 You should have received a copy of the GNU General Public License 28029 along with this program; if not, write to the Free Software 28030 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 28031 28032 Also add information on how to contact you by electronic and paper 28033mail. 28034 28035 If the program is interactive, make it output a short notice like this 28036when it starts in an interactive mode: 28037 28038 Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR 28039 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details 28040 type `show w'. 28041 This is free software, and you are welcome to redistribute it 28042 under certain conditions; type `show c' for details. 28043 28044 The hypothetical commands `show w' and `show c' should show the 28045appropriate parts of the General Public License. Of course, the 28046commands you use may be called something other than `show w' and `show 28047c'; they could even be mouse-clicks or menu items--whatever suits your 28048program. 28049 28050 You should also get your employer (if you work as a programmer) or your 28051school, if any, to sign a "copyright disclaimer" for the program, if 28052necessary. Here is a sample; alter the names: 28053 28054 Yoyodyne, Inc., hereby disclaims all copyright interest in the program 28055 `Gnomovision' (which makes passes at compilers) written by James Hacker. 28056 28057 SIGNATURE OF TY COON, 1 April 1989 28058 Ty Coon, President of Vice 28059 28060 This General Public License does not permit incorporating your program 28061into proprietary programs. If your program is a subroutine library, 28062you may consider it more useful to permit linking proprietary 28063applications with the library. If this is what you want to do, use the 28064GNU Library General Public License instead of this License. 28065 28066 28067File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 28068 28069GNU Free Documentation License 28070****************************** 28071 28072 Version 1.2, November 2002 28073 28074 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 28075 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 28076 28077 Everyone is permitted to copy and distribute verbatim copies 28078 of this license document, but changing it is not allowed. 28079 28080 0. PREAMBLE 28081 28082 The purpose of this License is to make a manual, textbook, or other 28083 functional and useful document "free" in the sense of freedom: to 28084 assure everyone the effective freedom to copy and redistribute it, 28085 with or without modifying it, either commercially or 28086 noncommercially. Secondarily, this License preserves for the 28087 author and publisher a way to get credit for their work, while not 28088 being considered responsible for modifications made by others. 28089 28090 This License is a kind of "copyleft", which means that derivative 28091 works of the document must themselves be free in the same sense. 28092 It complements the GNU General Public License, which is a copyleft 28093 license designed for free software. 28094 28095 We have designed this License in order to use it for manuals for 28096 free software, because free software needs free documentation: a 28097 free program should come with manuals providing the same freedoms 28098 that the software does. But this License is not limited to 28099 software manuals; it can be used for any textual work, regardless 28100 of subject matter or whether it is published as a printed book. 28101 We recommend this License principally for works whose purpose is 28102 instruction or reference. 28103 28104 1. APPLICABILITY AND DEFINITIONS 28105 28106 This License applies to any manual or other work, in any medium, 28107 that contains a notice placed by the copyright holder saying it 28108 can be distributed under the terms of this License. Such a notice 28109 grants a world-wide, royalty-free license, unlimited in duration, 28110 to use that work under the conditions stated herein. The 28111 "Document", below, refers to any such manual or work. Any member 28112 of the public is a licensee, and is addressed as "you". You 28113 accept the license if you copy, modify or distribute the work in a 28114 way requiring permission under copyright law. 28115 28116 A "Modified Version" of the Document means any work containing the 28117 Document or a portion of it, either copied verbatim, or with 28118 modifications and/or translated into another language. 28119 28120 A "Secondary Section" is a named appendix or a front-matter section 28121 of the Document that deals exclusively with the relationship of the 28122 publishers or authors of the Document to the Document's overall 28123 subject (or to related matters) and contains nothing that could 28124 fall directly within that overall subject. (Thus, if the Document 28125 is in part a textbook of mathematics, a Secondary Section may not 28126 explain any mathematics.) The relationship could be a matter of 28127 historical connection with the subject or with related matters, or 28128 of legal, commercial, philosophical, ethical or political position 28129 regarding them. 28130 28131 The "Invariant Sections" are certain Secondary Sections whose 28132 titles are designated, as being those of Invariant Sections, in 28133 the notice that says that the Document is released under this 28134 License. If a section does not fit the above definition of 28135 Secondary then it is not allowed to be designated as Invariant. 28136 The Document may contain zero Invariant Sections. If the Document 28137 does not identify any Invariant Sections then there are none. 28138 28139 The "Cover Texts" are certain short passages of text that are 28140 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 28141 that says that the Document is released under this License. A 28142 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 28143 be at most 25 words. 28144 28145 A "Transparent" copy of the Document means a machine-readable copy, 28146 represented in a format whose specification is available to the 28147 general public, that is suitable for revising the document 28148 straightforwardly with generic text editors or (for images 28149 composed of pixels) generic paint programs or (for drawings) some 28150 widely available drawing editor, and that is suitable for input to 28151 text formatters or for automatic translation to a variety of 28152 formats suitable for input to text formatters. A copy made in an 28153 otherwise Transparent file format whose markup, or absence of 28154 markup, has been arranged to thwart or discourage subsequent 28155 modification by readers is not Transparent. An image format is 28156 not Transparent if used for any substantial amount of text. A 28157 copy that is not "Transparent" is called "Opaque". 28158 28159 Examples of suitable formats for Transparent copies include plain 28160 ASCII without markup, Texinfo input format, LaTeX input format, 28161 SGML or XML using a publicly available DTD, and 28162 standard-conforming simple HTML, PostScript or PDF designed for 28163 human modification. Examples of transparent image formats include 28164 PNG, XCF and JPG. Opaque formats include proprietary formats that 28165 can be read and edited only by proprietary word processors, SGML or 28166 XML for which the DTD and/or processing tools are not generally 28167 available, and the machine-generated HTML, PostScript or PDF 28168 produced by some word processors for output purposes only. 28169 28170 The "Title Page" means, for a printed book, the title page itself, 28171 plus such following pages as are needed to hold, legibly, the 28172 material this License requires to appear in the title page. For 28173 works in formats which do not have any title page as such, "Title 28174 Page" means the text near the most prominent appearance of the 28175 work's title, preceding the beginning of the body of the text. 28176 28177 A section "Entitled XYZ" means a named subunit of the Document 28178 whose title either is precisely XYZ or contains XYZ in parentheses 28179 following text that translates XYZ in another language. (Here XYZ 28180 stands for a specific section name mentioned below, such as 28181 "Acknowledgements", "Dedications", "Endorsements", or "History".) 28182 To "Preserve the Title" of such a section when you modify the 28183 Document means that it remains a section "Entitled XYZ" according 28184 to this definition. 28185 28186 The Document may include Warranty Disclaimers next to the notice 28187 which states that this License applies to the Document. These 28188 Warranty Disclaimers are considered to be included by reference in 28189 this License, but only as regards disclaiming warranties: any other 28190 implication that these Warranty Disclaimers may have is void and 28191 has no effect on the meaning of this License. 28192 28193 2. VERBATIM COPYING 28194 28195 You may copy and distribute the Document in any medium, either 28196 commercially or noncommercially, provided that this License, the 28197 copyright notices, and the license notice saying this License 28198 applies to the Document are reproduced in all copies, and that you 28199 add no other conditions whatsoever to those of this License. You 28200 may not use technical measures to obstruct or control the reading 28201 or further copying of the copies you make or distribute. However, 28202 you may accept compensation in exchange for copies. If you 28203 distribute a large enough number of copies you must also follow 28204 the conditions in section 3. 28205 28206 You may also lend copies, under the same conditions stated above, 28207 and you may publicly display copies. 28208 28209 3. COPYING IN QUANTITY 28210 28211 If you publish printed copies (or copies in media that commonly 28212 have printed covers) of the Document, numbering more than 100, and 28213 the Document's license notice requires Cover Texts, you must 28214 enclose the copies in covers that carry, clearly and legibly, all 28215 these Cover Texts: Front-Cover Texts on the front cover, and 28216 Back-Cover Texts on the back cover. Both covers must also clearly 28217 and legibly identify you as the publisher of these copies. The 28218 front cover must present the full title with all words of the 28219 title equally prominent and visible. You may add other material 28220 on the covers in addition. Copying with changes limited to the 28221 covers, as long as they preserve the title of the Document and 28222 satisfy these conditions, can be treated as verbatim copying in 28223 other respects. 28224 28225 If the required texts for either cover are too voluminous to fit 28226 legibly, you should put the first ones listed (as many as fit 28227 reasonably) on the actual cover, and continue the rest onto 28228 adjacent pages. 28229 28230 If you publish or distribute Opaque copies of the Document 28231 numbering more than 100, you must either include a 28232 machine-readable Transparent copy along with each Opaque copy, or 28233 state in or with each Opaque copy a computer-network location from 28234 which the general network-using public has access to download 28235 using public-standard network protocols a complete Transparent 28236 copy of the Document, free of added material. If you use the 28237 latter option, you must take reasonably prudent steps, when you 28238 begin distribution of Opaque copies in quantity, to ensure that 28239 this Transparent copy will remain thus accessible at the stated 28240 location until at least one year after the last time you 28241 distribute an Opaque copy (directly or through your agents or 28242 retailers) of that edition to the public. 28243 28244 It is requested, but not required, that you contact the authors of 28245 the Document well before redistributing any large number of 28246 copies, to give them a chance to provide you with an updated 28247 version of the Document. 28248 28249 4. MODIFICATIONS 28250 28251 You may copy and distribute a Modified Version of the Document 28252 under the conditions of sections 2 and 3 above, provided that you 28253 release the Modified Version under precisely this License, with 28254 the Modified Version filling the role of the Document, thus 28255 licensing distribution and modification of the Modified Version to 28256 whoever possesses a copy of it. In addition, you must do these 28257 things in the Modified Version: 28258 28259 A. Use in the Title Page (and on the covers, if any) a title 28260 distinct from that of the Document, and from those of 28261 previous versions (which should, if there were any, be listed 28262 in the History section of the Document). You may use the 28263 same title as a previous version if the original publisher of 28264 that version gives permission. 28265 28266 B. List on the Title Page, as authors, one or more persons or 28267 entities responsible for authorship of the modifications in 28268 the Modified Version, together with at least five of the 28269 principal authors of the Document (all of its principal 28270 authors, if it has fewer than five), unless they release you 28271 from this requirement. 28272 28273 C. State on the Title page the name of the publisher of the 28274 Modified Version, as the publisher. 28275 28276 D. Preserve all the copyright notices of the Document. 28277 28278 E. Add an appropriate copyright notice for your modifications 28279 adjacent to the other copyright notices. 28280 28281 F. Include, immediately after the copyright notices, a license 28282 notice giving the public permission to use the Modified 28283 Version under the terms of this License, in the form shown in 28284 the Addendum below. 28285 28286 G. Preserve in that license notice the full lists of Invariant 28287 Sections and required Cover Texts given in the Document's 28288 license notice. 28289 28290 H. Include an unaltered copy of this License. 28291 28292 I. Preserve the section Entitled "History", Preserve its Title, 28293 and add to it an item stating at least the title, year, new 28294 authors, and publisher of the Modified Version as given on 28295 the Title Page. If there is no section Entitled "History" in 28296 the Document, create one stating the title, year, authors, 28297 and publisher of the Document as given on its Title Page, 28298 then add an item describing the Modified Version as stated in 28299 the previous sentence. 28300 28301 J. Preserve the network location, if any, given in the Document 28302 for public access to a Transparent copy of the Document, and 28303 likewise the network locations given in the Document for 28304 previous versions it was based on. These may be placed in 28305 the "History" section. You may omit a network location for a 28306 work that was published at least four years before the 28307 Document itself, or if the original publisher of the version 28308 it refers to gives permission. 28309 28310 K. For any section Entitled "Acknowledgements" or "Dedications", 28311 Preserve the Title of the section, and preserve in the 28312 section all the substance and tone of each of the contributor 28313 acknowledgements and/or dedications given therein. 28314 28315 L. Preserve all the Invariant Sections of the Document, 28316 unaltered in their text and in their titles. Section numbers 28317 or the equivalent are not considered part of the section 28318 titles. 28319 28320 M. Delete any section Entitled "Endorsements". Such a section 28321 may not be included in the Modified Version. 28322 28323 N. Do not retitle any existing section to be Entitled 28324 "Endorsements" or to conflict in title with any Invariant 28325 Section. 28326 28327 O. Preserve any Warranty Disclaimers. 28328 28329 If the Modified Version includes new front-matter sections or 28330 appendices that qualify as Secondary Sections and contain no 28331 material copied from the Document, you may at your option 28332 designate some or all of these sections as invariant. To do this, 28333 add their titles to the list of Invariant Sections in the Modified 28334 Version's license notice. These titles must be distinct from any 28335 other section titles. 28336 28337 You may add a section Entitled "Endorsements", provided it contains 28338 nothing but endorsements of your Modified Version by various 28339 parties--for example, statements of peer review or that the text 28340 has been approved by an organization as the authoritative 28341 definition of a standard. 28342 28343 You may add a passage of up to five words as a Front-Cover Text, 28344 and a passage of up to 25 words as a Back-Cover Text, to the end 28345 of the list of Cover Texts in the Modified Version. Only one 28346 passage of Front-Cover Text and one of Back-Cover Text may be 28347 added by (or through arrangements made by) any one entity. If the 28348 Document already includes a cover text for the same cover, 28349 previously added by you or by arrangement made by the same entity 28350 you are acting on behalf of, you may not add another; but you may 28351 replace the old one, on explicit permission from the previous 28352 publisher that added the old one. 28353 28354 The author(s) and publisher(s) of the Document do not by this 28355 License give permission to use their names for publicity for or to 28356 assert or imply endorsement of any Modified Version. 28357 28358 5. COMBINING DOCUMENTS 28359 28360 You may combine the Document with other documents released under 28361 this License, under the terms defined in section 4 above for 28362 modified versions, provided that you include in the combination 28363 all of the Invariant Sections of all of the original documents, 28364 unmodified, and list them all as Invariant Sections of your 28365 combined work in its license notice, and that you preserve all 28366 their Warranty Disclaimers. 28367 28368 The combined work need only contain one copy of this License, and 28369 multiple identical Invariant Sections may be replaced with a single 28370 copy. If there are multiple Invariant Sections with the same name 28371 but different contents, make the title of each such section unique 28372 by adding at the end of it, in parentheses, the name of the 28373 original author or publisher of that section if known, or else a 28374 unique number. Make the same adjustment to the section titles in 28375 the list of Invariant Sections in the license notice of the 28376 combined work. 28377 28378 In the combination, you must combine any sections Entitled 28379 "History" in the various original documents, forming one section 28380 Entitled "History"; likewise combine any sections Entitled 28381 "Acknowledgements", and any sections Entitled "Dedications". You 28382 must delete all sections Entitled "Endorsements." 28383 28384 6. COLLECTIONS OF DOCUMENTS 28385 28386 You may make a collection consisting of the Document and other 28387 documents released under this License, and replace the individual 28388 copies of this License in the various documents with a single copy 28389 that is included in the collection, provided that you follow the 28390 rules of this License for verbatim copying of each of the 28391 documents in all other respects. 28392 28393 You may extract a single document from such a collection, and 28394 distribute it individually under this License, provided you insert 28395 a copy of this License into the extracted document, and follow 28396 this License in all other respects regarding verbatim copying of 28397 that document. 28398 28399 7. AGGREGATION WITH INDEPENDENT WORKS 28400 28401 A compilation of the Document or its derivatives with other 28402 separate and independent documents or works, in or on a volume of 28403 a storage or distribution medium, is called an "aggregate" if the 28404 copyright resulting from the compilation is not used to limit the 28405 legal rights of the compilation's users beyond what the individual 28406 works permit. When the Document is included in an aggregate, this 28407 License does not apply to the other works in the aggregate which 28408 are not themselves derivative works of the Document. 28409 28410 If the Cover Text requirement of section 3 is applicable to these 28411 copies of the Document, then if the Document is less than one half 28412 of the entire aggregate, the Document's Cover Texts may be placed 28413 on covers that bracket the Document within the aggregate, or the 28414 electronic equivalent of covers if the Document is in electronic 28415 form. Otherwise they must appear on printed covers that bracket 28416 the whole aggregate. 28417 28418 8. TRANSLATION 28419 28420 Translation is considered a kind of modification, so you may 28421 distribute translations of the Document under the terms of section 28422 4. Replacing Invariant Sections with translations requires special 28423 permission from their copyright holders, but you may include 28424 translations of some or all Invariant Sections in addition to the 28425 original versions of these Invariant Sections. You may include a 28426 translation of this License, and all the license notices in the 28427 Document, and any Warranty Disclaimers, provided that you also 28428 include the original English version of this License and the 28429 original versions of those notices and disclaimers. In case of a 28430 disagreement between the translation and the original version of 28431 this License or a notice or disclaimer, the original version will 28432 prevail. 28433 28434 If a section in the Document is Entitled "Acknowledgements", 28435 "Dedications", or "History", the requirement (section 4) to 28436 Preserve its Title (section 1) will typically require changing the 28437 actual title. 28438 28439 9. TERMINATION 28440 28441 You may not copy, modify, sublicense, or distribute the Document 28442 except as expressly provided for under this License. Any other 28443 attempt to copy, modify, sublicense or distribute the Document is 28444 void, and will automatically terminate your rights under this 28445 License. However, parties who have received copies, or rights, 28446 from you under this License will not have their licenses 28447 terminated so long as such parties remain in full compliance. 28448 28449 10. FUTURE REVISIONS OF THIS LICENSE 28450 28451 The Free Software Foundation may publish new, revised versions of 28452 the GNU Free Documentation License from time to time. Such new 28453 versions will be similar in spirit to the present version, but may 28454 differ in detail to address new problems or concerns. See 28455 `http://www.gnu.org/copyleft/'. 28456 28457 Each version of the License is given a distinguishing version 28458 number. If the Document specifies that a particular numbered 28459 version of this License "or any later version" applies to it, you 28460 have the option of following the terms and conditions either of 28461 that specified version or of any later version that has been 28462 published (not as a draft) by the Free Software Foundation. If 28463 the Document does not specify a version number of this License, 28464 you may choose any version ever published (not as a draft) by the 28465 Free Software Foundation. 28466 28467ADDENDUM: How to use this License for your documents 28468==================================================== 28469 28470To use this License in a document you have written, include a copy of 28471the License in the document and put the following copyright and license 28472notices just after the title page: 28473 28474 Copyright (C) YEAR YOUR NAME. 28475 Permission is granted to copy, distribute and/or modify this document 28476 under the terms of the GNU Free Documentation License, Version 1.2 28477 or any later version published by the Free Software Foundation; 28478 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 28479 Texts. A copy of the license is included in the section entitled ``GNU 28480 Free Documentation License''. 28481 28482 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 28483replace the "with...Texts." line with this: 28484 28485 with the Invariant Sections being LIST THEIR TITLES, with 28486 the Front-Cover Texts being LIST, and with the Back-Cover Texts 28487 being LIST. 28488 28489 If you have Invariant Sections without Cover Texts, or some other 28490combination of the three, merge those two alternatives to suit the 28491situation. 28492 28493 If your document contains nontrivial examples of program code, we 28494recommend releasing these examples in parallel under your choice of 28495free software license, such as the GNU General Public License, to 28496permit their use in free software. 28497 28498 28499File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 28500 28501Contributors to GCC 28502******************* 28503 28504The GCC project would like to thank its many contributors. Without 28505them the project would not have been nearly as successful as it has 28506been. Any omissions in this list are accidental. Feel free to contact 28507<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 28508some of your contributions are not listed. Please keep this list in 28509alphabetical order. 28510 28511 * Analog Devices helped implement the support for complex data types 28512 and iterators. 28513 28514 * John David Anglin for threading-related fixes and improvements to 28515 libstdc++-v3, and the HP-UX port. 28516 28517 * James van Artsdalen wrote the code that makes efficient use of the 28518 Intel 80387 register stack. 28519 28520 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 28521 Series port. 28522 28523 * Alasdair Baird for various bug fixes. 28524 28525 * Giovanni Bajo for analyzing lots of complicated C++ problem 28526 reports. 28527 28528 * Peter Barada for his work to improve code generation for new 28529 ColdFire cores. 28530 28531 * Gerald Baumgartner added the signature extension to the C++ front 28532 end. 28533 28534 * Godmar Back for his Java improvements and encouragement. 28535 28536 * Scott Bambrough for help porting the Java compiler. 28537 28538 * Wolfgang Bangerth for processing tons of bug reports. 28539 28540 * Jon Beniston for his Microsoft Windows port of Java. 28541 28542 * Daniel Berlin for better DWARF2 support, faster/better 28543 optimizations, improved alias analysis, plus migrating GCC to 28544 Bugzilla. 28545 28546 * Geoff Berry for his Java object serialization work and various 28547 patches. 28548 28549 * Uros Bizjak for the implementation of x87 math built-in functions 28550 and for various middle end and i386 back end improvements and 28551 bugfixes. 28552 28553 * Eric Blake for helping to make GCJ and libgcj conform to the 28554 specifications. 28555 28556 * Janne Blomqvist for contributions to GNU Fortran. 28557 28558 * Segher Boessenkool for various fixes. 28559 28560 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 28561 other Java work. 28562 28563 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 28564 miscellaneous clean-ups. 28565 28566 * Steven Bosscher for integrating the GNU Fortran front end into GCC 28567 and for contributing to the tree-ssa branch. 28568 28569 * Eric Botcazou for fixing middle- and backend bugs left and right. 28570 28571 * Per Bothner for his direction via the steering committee and 28572 various improvements to the infrastructure for supporting new 28573 languages. Chill front end implementation. Initial 28574 implementations of cpplib, fix-header, config.guess, libio, and 28575 past C++ library (libg++) maintainer. Dreaming up, designing and 28576 implementing much of GCJ. 28577 28578 * Devon Bowen helped port GCC to the Tahoe. 28579 28580 * Don Bowman for mips-vxworks contributions. 28581 28582 * Dave Brolley for work on cpplib and Chill. 28583 28584 * Paul Brook for work on the ARM architecture and maintaining GNU 28585 Fortran. 28586 28587 * Robert Brown implemented the support for Encore 32000 systems. 28588 28589 * Christian Bruel for improvements to local store elimination. 28590 28591 * Herman A.J. ten Brugge for various fixes. 28592 28593 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 28594 FAQ. 28595 28596 * Joe Buck for his direction via the steering committee. 28597 28598 * Craig Burley for leadership of the G77 Fortran effort. 28599 28600 * Stephan Buys for contributing Doxygen notes for libstdc++. 28601 28602 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 28603 to the C++ strings, streambufs and formatted I/O, hard detective 28604 work on the frustrating localization issues, and keeping up with 28605 the problem reports. 28606 28607 * John Carr for his alias work, SPARC hacking, infrastructure 28608 improvements, previous contributions to the steering committee, 28609 loop optimizations, etc. 28610 28611 * Stephane Carrez for 68HC11 and 68HC12 ports. 28612 28613 * Steve Chamberlain for support for the Renesas SH and H8 processors 28614 and the PicoJava processor, and for GCJ config fixes. 28615 28616 * Glenn Chambers for help with the GCJ FAQ. 28617 28618 * John-Marc Chandonia for various libgcj patches. 28619 28620 * Scott Christley for his Objective-C contributions. 28621 28622 * Eric Christopher for his Java porting help and clean-ups. 28623 28624 * Branko Cibej for more warning contributions. 28625 28626 * The GNU Classpath project for all of their merged runtime code. 28627 28628 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and 28629 other random hacking. 28630 28631 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 28632 28633 * R. Kelley Cook for making GCC buildable from a read-only directory 28634 as well as other miscellaneous build process and documentation 28635 clean-ups. 28636 28637 * Ralf Corsepius for SH testing and minor bugfixing. 28638 28639 * Stan Cox for care and feeding of the x86 port and lots of behind 28640 the scenes hacking. 28641 28642 * Alex Crain provided changes for the 3b1. 28643 28644 * Ian Dall for major improvements to the NS32k port. 28645 28646 * Paul Dale for his work to add uClinux platform support to the m68k 28647 backend. 28648 28649 * Dario Dariol contributed the four varieties of sample programs 28650 that print a copy of their source. 28651 28652 * Russell Davidson for fstream and stringstream fixes in libstdc++. 28653 28654 * Bud Davis for work on the G77 and GNU Fortran compilers. 28655 28656 * Mo DeJong for GCJ and libgcj bug fixes. 28657 28658 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 28659 various bug fixes, and the M32C port. 28660 28661 * Arnaud Desitter for helping to debug GNU Fortran. 28662 28663 * Gabriel Dos Reis for contributions to G++, contributions and 28664 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 28665 including `valarray<>', `complex<>', maintaining the numerics 28666 library (including that pesky `<limits>' :-) and keeping 28667 up-to-date anything to do with numbers. 28668 28669 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 28670 ISO C99 support, CFG dumping support, etc., plus support of the 28671 C++ runtime libraries including for all kinds of C interface 28672 issues, contributing and maintaining `complex<>', sanity checking 28673 and disbursement, configuration architecture, libio maintenance, 28674 and early math work. 28675 28676 * Zdenek Dvorak for a new loop unroller and various fixes. 28677 28678 * Richard Earnshaw for his ongoing work with the ARM. 28679 28680 * David Edelsohn for his direction via the steering committee, 28681 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 28682 loop changes, doing the entire AIX port of libstdc++ with his bare 28683 hands, and for ensuring GCC properly keeps working on AIX. 28684 28685 * Kevin Ediger for the floating point formatting of num_put::do_put 28686 in libstdc++. 28687 28688 * Phil Edwards for libstdc++ work including configuration hackery, 28689 documentation maintainer, chief breaker of the web pages, the 28690 occasional iostream bug fix, and work on shared library symbol 28691 versioning. 28692 28693 * Paul Eggert for random hacking all over GCC. 28694 28695 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 28696 configuration support for locales and fstream-related fixes. 28697 28698 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 28699 iostreams. 28700 28701 * Christian Ehrhardt for dealing with bug reports. 28702 28703 * Ben Elliston for his work to move the Objective-C runtime into its 28704 own subdirectory and for his work on autoconf. 28705 28706 * Marc Espie for OpenBSD support. 28707 28708 * Doug Evans for much of the global optimization framework, arc, 28709 m32r, and SPARC work. 28710 28711 * Christopher Faylor for his work on the Cygwin port and for caring 28712 and feeding the gcc.gnu.org box and saving its users tons of spam. 28713 28714 * Fred Fish for BeOS support and Ada fixes. 28715 28716 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 28717 28718 * Peter Gerwinski for various bug fixes and the Pascal front end. 28719 28720 * Kaveh R. Ghazi for his direction via the steering committee, 28721 amazing work to make `-W -Wall -W* -Werror' useful, and 28722 continuously testing GCC on a plethora of platforms. Kaveh 28723 extends his gratitude to the CAIP Center at Rutgers University for 28724 providing him with computing resources to work on Free Software 28725 since the late 1980s. 28726 28727 * John Gilmore for a donation to the FSF earmarked improving GNU 28728 Java. 28729 28730 * Judy Goldberg for c++ contributions. 28731 28732 * Torbjorn Granlund for various fixes and the c-torture testsuite, 28733 multiply- and divide-by-constant optimization, improved long long 28734 support, improved leaf function register allocation, and his 28735 direction via the steering committee. 28736 28737 * Anthony Green for his `-Os' contributions and Java front end work. 28738 28739 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 28740 Java code. 28741 28742 * Michael K. Gschwind contributed the port to the PDP-11. 28743 28744 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 28745 the support for Dwarf symbolic debugging information, and much of 28746 the support for System V Release 4. He has also worked heavily on 28747 the Intel 386 and 860 support. 28748 28749 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 28750 GCSE. 28751 28752 * Bruno Haible for improvements in the runtime overhead for EH, new 28753 warnings and assorted bug fixes. 28754 28755 * Andrew Haley for his amazing Java compiler and library efforts. 28756 28757 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 28758 series 300. 28759 28760 * Michael Hayes for various thankless work he's done trying to get 28761 the c30/c40 ports functional. Lots of loop and unroll 28762 improvements and fixes. 28763 28764 * Dara Hazeghi for wading through myriads of target-specific bug 28765 reports. 28766 28767 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 28768 28769 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 28770 work, loop opts, and generally fixing lots of old problems we've 28771 ignored for years, flow rewrite and lots of further stuff, 28772 including reviewing tons of patches. 28773 28774 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 28775 various fixes. 28776 28777 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 28778 contributed the support for the Sony NEWS machine. 28779 28780 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 28781 various fixes. 28782 28783 * Katherine Holcomb for work on GNU Fortran. 28784 28785 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 28786 of testing and bug fixing, particularly of GCC configury code. 28787 28788 * Steve Holmgren for MachTen patches. 28789 28790 * Jan Hubicka for his x86 port improvements. 28791 28792 * Falk Hueffner for working on C and optimization bug reports. 28793 28794 * Bernardo Innocenti for his m68k work, including merging of 28795 ColdFire improvements and uClinux support. 28796 28797 * Christian Iseli for various bug fixes. 28798 28799 * Kamil Iskra for general m68k hacking. 28800 28801 * Lee Iverson for random fixes and MIPS testing. 28802 28803 * Andreas Jaeger for testing and benchmarking of GCC and various bug 28804 fixes. 28805 28806 * Jakub Jelinek for his SPARC work and sibling call optimizations as 28807 well as lots of bug fixes and test cases, and for improving the 28808 Java build system. 28809 28810 * Janis Johnson for ia64 testing and fixes, her quality improvement 28811 sidetracks, and web page maintenance. 28812 28813 * Kean Johnston for SCO OpenServer support and various fixes. 28814 28815 * Tim Josling for the sample language treelang based originally on 28816 Richard Kenner's "toy" language. 28817 28818 * Nicolai Josuttis for additional libstdc++ documentation. 28819 28820 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 28821 target. 28822 28823 * Steven G. Kargl for work on GNU Fortran. 28824 28825 * David Kashtan of SRI adapted GCC to VMS. 28826 28827 * Ryszard Kabatek for many, many libstdc++ bug fixes and 28828 optimizations of strings, especially member functions, and for 28829 auto_ptr fixes. 28830 28831 * Geoffrey Keating for his ongoing work to make the PPC work for 28832 GNU/Linux and his automatic regression tester. 28833 28834 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 28835 work in just about every part of libstdc++. 28836 28837 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 28838 MIL-STD-1750A. 28839 28840 * Richard Kenner of the New York University Ultracomputer Research 28841 Laboratory wrote the machine descriptions for the AMD 29000, the 28842 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 28843 support for instruction attributes. He also made changes to 28844 better support RISC processors including changes to common 28845 subexpression elimination, strength reduction, function calling 28846 sequence handling, and condition code support, in addition to 28847 generalizing the code for frame pointer elimination and delay slot 28848 scheduling. Richard Kenner was also the head maintainer of GCC 28849 for several years. 28850 28851 * Mumit Khan for various contributions to the Cygwin and Mingw32 28852 ports and maintaining binary releases for Microsoft Windows hosts, 28853 and for massive libstdc++ porting work to Cygwin/Mingw32. 28854 28855 * Robin Kirkham for cpu32 support. 28856 28857 * Mark Klein for PA improvements. 28858 28859 * Thomas Koenig for various bug fixes. 28860 28861 * Bruce Korb for the new and improved fixincludes code. 28862 28863 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 28864 effort. 28865 28866 * Charles LaBrec contributed the support for the Integrated Solutions 28867 68020 system. 28868 28869 * Asher Langton and Mike Kumbera for contributing Cray pointer 28870 support to GNU Fortran, and for other GNU Fortran improvements. 28871 28872 * Jeff Law for his direction via the steering committee, 28873 coordinating the entire egcs project and GCC 2.95, rolling out 28874 snapshots and releases, handling merges from GCC2, reviewing tons 28875 of patches that might have fallen through the cracks else, and 28876 random but extensive hacking. 28877 28878 * Marc Lehmann for his direction via the steering committee and 28879 helping with analysis and improvements of x86 performance. 28880 28881 * Victor Leikehman for work on GNU Fortran. 28882 28883 * Ted Lemon wrote parts of the RTL reader and printer. 28884 28885 * Kriang Lerdsuwanakij for C++ improvements including template as 28886 template parameter support, and many C++ fixes. 28887 28888 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 28889 and random work on the Java front end. 28890 28891 * Alain Lichnewsky ported GCC to the MIPS CPU. 28892 28893 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 28894 and patches. 28895 28896 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 28897 28898 * Weiwen Liu for testing and various bug fixes. 28899 28900 * Dave Love for his ongoing work with the Fortran front end and 28901 runtime libraries. 28902 28903 * Martin von Lo"wis for internal consistency checking infrastructure, 28904 various C++ improvements including namespace support, and tons of 28905 assistance with libstdc++/compiler merges. 28906 28907 * H.J. Lu for his previous contributions to the steering committee, 28908 many x86 bug reports, prototype patches, and keeping the GNU/Linux 28909 ports working. 28910 28911 * Greg McGary for random fixes and (someday) bounded pointers. 28912 28913 * Andrew MacLeod for his ongoing work in building a real EH system, 28914 various code generation improvements, work on the global 28915 optimizer, etc. 28916 28917 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 28918 hacking improvements to compile-time performance, overall 28919 knowledge and direction in the area of instruction scheduling, and 28920 design and implementation of the automaton based instruction 28921 scheduler. 28922 28923 * Bob Manson for his behind the scenes work on dejagnu. 28924 28925 * Philip Martin for lots of libstdc++ string and vector iterator 28926 fixes and improvements, and string clean up and testsuites. 28927 28928 * All of the Mauve project contributors, for Java test code. 28929 28930 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 28931 28932 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 28933 28934 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 28935 powerpc, haifa, ECOFF debug support, and other assorted hacking. 28936 28937 * Jason Merrill for his direction via the steering committee and 28938 leading the G++ effort. 28939 28940 * Martin Michlmayr for testing GCC on several architectures using the 28941 entire Debian archive. 28942 28943 * David Miller for his direction via the steering committee, lots of 28944 SPARC work, improvements in jump.c and interfacing with the Linux 28945 kernel developers. 28946 28947 * Gary Miller ported GCC to Charles River Data Systems machines. 28948 28949 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 28950 the entire libstdc++ testsuite namespace-compatible. 28951 28952 * Mark Mitchell for his direction via the steering committee, 28953 mountains of C++ work, load/store hoisting out of loops, alias 28954 analysis improvements, ISO C `restrict' support, and serving as 28955 release manager for GCC 3.x. 28956 28957 * Alan Modra for various GNU/Linux bits and testing. 28958 28959 * Toon Moene for his direction via the steering committee, Fortran 28960 maintenance, and his ongoing work to make us make Fortran run fast. 28961 28962 * Jason Molenda for major help in the care and feeding of all the 28963 services on the gcc.gnu.org (formerly egcs.cygnus.com) 28964 machine--mail, web services, ftp services, etc etc. Doing all 28965 this work on scrap paper and the backs of envelopes would have 28966 been... difficult. 28967 28968 * Catherine Moore for fixing various ugly problems we have sent her 28969 way, including the haifa bug which was killing the Alpha & PowerPC 28970 Linux kernels. 28971 28972 * Mike Moreton for his various Java patches. 28973 28974 * David Mosberger-Tang for various Alpha improvements, and for the 28975 initial IA-64 port. 28976 28977 * Stephen Moshier contributed the floating point emulator that 28978 assists in cross-compilation and permits support for floating 28979 point numbers wider than 64 bits and for ISO C99 support. 28980 28981 * Bill Moyer for his behind the scenes work on various issues. 28982 28983 * Philippe De Muyter for his work on the m68k port. 28984 28985 * Joseph S. Myers for his work on the PDP-11 port, format checking 28986 and ISO C99 support, and continuous emphasis on (and contributions 28987 to) documentation. 28988 28989 * Nathan Myers for his work on libstdc++-v3: architecture and 28990 authorship through the first three snapshots, including 28991 implementation of locale infrastructure, string, shadow C headers, 28992 and the initial project documentation (DESIGN, CHECKLIST, and so 28993 forth). Later, more work on MT-safe string and shadow headers. 28994 28995 * Felix Natter for documentation on porting libstdc++. 28996 28997 * Nathanael Nerode for cleaning up the configuration/build process. 28998 28999 * NeXT, Inc. donated the front end that supports the Objective-C 29000 language. 29001 29002 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 29003 the search engine setup, various documentation fixes and other 29004 small fixes. 29005 29006 * Geoff Noer for his work on getting cygwin native builds working. 29007 29008 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 29009 tracking web pages and assorted fixes. 29010 29011 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 29012 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 29013 related infrastructure improvements. 29014 29015 * Alexandre Oliva for various build infrastructure improvements, 29016 scripts and amazing testing work, including keeping libtool issues 29017 sane and happy. 29018 29019 * Stefan Olsson for work on mt_alloc. 29020 29021 * Melissa O'Neill for various NeXT fixes. 29022 29023 * Rainer Orth for random MIPS work, including improvements to GCC's 29024 o32 ABI support, improvements to dejagnu's MIPS support, Java 29025 configuration clean-ups and porting work, etc. 29026 29027 * Hartmut Penner for work on the s390 port. 29028 29029 * Paul Petersen wrote the machine description for the Alliant FX/8. 29030 29031 * Alexandre Petit-Bianco for implementing much of the Java compiler 29032 and continued Java maintainership. 29033 29034 * Matthias Pfaller for major improvements to the NS32k port. 29035 29036 * Gerald Pfeifer for his direction via the steering committee, 29037 pointing out lots of problems we need to solve, maintenance of the 29038 web pages, and taking care of documentation maintenance in general. 29039 29040 * Andrew Pinski for processing bug reports by the dozen. 29041 29042 * Ovidiu Predescu for his work on the Objective-C front end and 29043 runtime libraries. 29044 29045 * Jerry Quinn for major performance improvements in C++ formatted 29046 I/O. 29047 29048 * Ken Raeburn for various improvements to checker, MIPS ports and 29049 various cleanups in the compiler. 29050 29051 * Rolf W. Rasmussen for hacking on AWT. 29052 29053 * David Reese of Sun Microsystems contributed to the Solaris on 29054 PowerPC port. 29055 29056 * Volker Reichelt for keeping up with the problem reports. 29057 29058 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 29059 hacking. 29060 29061 * Loren J. Rittle for improvements to libstdc++-v3 including the 29062 FreeBSD port, threading fixes, thread-related configury changes, 29063 critical threading documentation, and solutions to really tricky 29064 I/O problems, as well as keeping GCC properly working on FreeBSD 29065 and continuous testing. 29066 29067 * Craig Rodrigues for processing tons of bug reports. 29068 29069 * Ola Ro"nnerup for work on mt_alloc. 29070 29071 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 29072 29073 * David Ronis inspired and encouraged Craig to rewrite the G77 29074 documentation in texinfo format by contributing a first pass at a 29075 translation of the old `g77-0.5.16/f/DOC' file. 29076 29077 * Ken Rose for fixes to GCC's delay slot filling code. 29078 29079 * Paul Rubin wrote most of the preprocessor. 29080 29081 * Pe'tur Runo'lfsson for major performance improvements in C++ 29082 formatted I/O and large file support in C++ filebuf. 29083 29084 * Chip Salzenberg for libstdc++ patches and improvements to locales, 29085 traits, Makefiles, libio, libtool hackery, and "long long" support. 29086 29087 * Juha Sarlin for improvements to the H8 code generator. 29088 29089 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 29090 300. 29091 29092 * Roger Sayle for improvements to constant folding and GCC's RTL 29093 optimizers as well as for fixing numerous bugs. 29094 29095 * Bradley Schatz for his work on the GCJ FAQ. 29096 29097 * Peter Schauer wrote the code to allow debugging to work on the 29098 Alpha. 29099 29100 * William Schelter did most of the work on the Intel 80386 support. 29101 29102 * Tobias Schlu"ter for work on GNU Fortran. 29103 29104 * Bernd Schmidt for various code generation improvements and major 29105 work in the reload pass as well a serving as release manager for 29106 GCC 2.95.3. 29107 29108 * Peter Schmid for constant testing of libstdc++--especially 29109 application testing, going above and beyond what was requested for 29110 the release criteria--and libstdc++ header file tweaks. 29111 29112 * Jason Schroeder for jcf-dump patches. 29113 29114 * Andreas Schwab for his work on the m68k port. 29115 29116 * Lars Segerlund for work on GNU Fortran. 29117 29118 * Joel Sherrill for his direction via the steering committee, RTEMS 29119 contributions and RTEMS testing. 29120 29121 * Nathan Sidwell for many C++ fixes/improvements. 29122 29123 * Jeffrey Siegal for helping RMS with the original design of GCC, 29124 some code which handles the parse tree and RTL data structures, 29125 constant folding and help with the original VAX & m68k ports. 29126 29127 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 29128 from the LWG (thereby keeping GCC in line with updates from the 29129 ISO). 29130 29131 * Franz Sirl for his ongoing work with making the PPC port stable 29132 for GNU/Linux. 29133 29134 * Andrey Slepuhin for assorted AIX hacking. 29135 29136 * Christopher Smith did the port for Convex machines. 29137 29138 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 29139 29140 * Randy Smith finished the Sun FPA support. 29141 29142 * Scott Snyder for queue, iterator, istream, and string fixes and 29143 libstdc++ testsuite entries. Also for providing the patch to G77 29144 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 29145 `LOGICAL*1'. 29146 29147 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 29148 29149 * Richard Stallman, for writing the original GCC and launching the 29150 GNU project. 29151 29152 * Jan Stein of the Chalmers Computer Society provided support for 29153 Genix, as well as part of the 32000 machine description. 29154 29155 * Nigel Stephens for various mips16 related fixes/improvements. 29156 29157 * Jonathan Stone wrote the machine description for the Pyramid 29158 computer. 29159 29160 * Graham Stott for various infrastructure improvements. 29161 29162 * John Stracke for his Java HTTP protocol fixes. 29163 29164 * Mike Stump for his Elxsi port, G++ contributions over the years 29165 and more recently his vxworks contributions 29166 29167 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 29168 29169 * Shigeya Suzuki for this fixes for the bsdi platforms. 29170 29171 * Ian Lance Taylor for his mips16 work, general configury hacking, 29172 fixincludes, etc. 29173 29174 * Holger Teutsch provided the support for the Clipper CPU. 29175 29176 * Gary Thomas for his ongoing work to make the PPC work for 29177 GNU/Linux. 29178 29179 * Philipp Thomas for random bug fixes throughout the compiler 29180 29181 * Jason Thorpe for thread support in libstdc++ on NetBSD. 29182 29183 * Kresten Krab Thorup wrote the run time support for the Objective-C 29184 language and the fantastic Java bytecode interpreter. 29185 29186 * Michael Tiemann for random bug fixes, the first instruction 29187 scheduler, initial C++ support, function integration, NS32k, SPARC 29188 and M88k machine description work, delay slot scheduling. 29189 29190 * Andreas Tobler for his work porting libgcj to Darwin. 29191 29192 * Teemu Torma for thread safe exception handling support. 29193 29194 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 29195 definitions, and of the VAX machine description. 29196 29197 * Tom Tromey for internationalization support and for his many Java 29198 contributions and libgcj maintainership. 29199 29200 * Lassi Tuura for improvements to config.guess to determine HP 29201 processor types. 29202 29203 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 29204 29205 * Andy Vaught for the design and initial implementation of the GNU 29206 Fortran front end. 29207 29208 * Brent Verner for work with the libstdc++ cshadow files and their 29209 associated configure steps. 29210 29211 * Todd Vierling for contributions for NetBSD ports. 29212 29213 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 29214 guidance. 29215 29216 * Dean Wakerley for converting the install documentation from HTML 29217 to texinfo in time for GCC 3.0. 29218 29219 * Krister Walfridsson for random bug fixes. 29220 29221 * Feng Wang for contributions to GNU Fortran. 29222 29223 * Stephen M. Webb for time and effort on making libstdc++ shadow 29224 files work with the tricky Solaris 8+ headers, and for pushing the 29225 build-time header tree. 29226 29227 * John Wehle for various improvements for the x86 code generator, 29228 related infrastructure improvements to help x86 code generation, 29229 value range propagation and other work, WE32k port. 29230 29231 * Ulrich Weigand for work on the s390 port. 29232 29233 * Zack Weinberg for major work on cpplib and various other bug fixes. 29234 29235 * Matt Welsh for help with Linux Threads support in GCJ. 29236 29237 * Urban Widmark for help fixing java.io. 29238 29239 * Mark Wielaard for new Java library code and his work integrating 29240 with Classpath. 29241 29242 * Dale Wiles helped port GCC to the Tahoe. 29243 29244 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 29245 29246 * Jim Wilson for his direction via the steering committee, tackling 29247 hard problems in various places that nobody else wanted to work 29248 on, strength reduction and other loop optimizations. 29249 29250 * Paul Woegerer and Tal Agmon for the CRX port. 29251 29252 * Carlo Wood for various fixes. 29253 29254 * Tom Wood for work on the m88k port. 29255 29256 * Canqun Yang for work on GNU Fortran. 29257 29258 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 29259 description for the Tron architecture (specifically, the Gmicro). 29260 29261 * Kevin Zachmann helped port GCC to the Tahoe. 29262 29263 * Ayal Zaks for Swing Modulo Scheduling (SMS). 29264 29265 * Xiaoqiang Zhang for work on GNU Fortran. 29266 29267 * Gilles Zunino for help porting Java to Irix. 29268 29269 29270 The following people are recognized for their contributions to GNAT, 29271the Ada front end of GCC: 29272 * Bernard Banner 29273 29274 * Romain Berrendonner 29275 29276 * Geert Bosch 29277 29278 * Emmanuel Briot 29279 29280 * Joel Brobecker 29281 29282 * Ben Brosgol 29283 29284 * Vincent Celier 29285 29286 * Arnaud Charlet 29287 29288 * Chien Chieng 29289 29290 * Cyrille Comar 29291 29292 * Cyrille Crozes 29293 29294 * Robert Dewar 29295 29296 * Gary Dismukes 29297 29298 * Robert Duff 29299 29300 * Ed Falis 29301 29302 * Ramon Fernandez 29303 29304 * Sam Figueroa 29305 29306 * Vasiliy Fofanov 29307 29308 * Michael Friess 29309 29310 * Franco Gasperoni 29311 29312 * Ted Giering 29313 29314 * Matthew Gingell 29315 29316 * Laurent Guerby 29317 29318 * Jerome Guitton 29319 29320 * Olivier Hainque 29321 29322 * Jerome Hugues 29323 29324 * Hristian Kirtchev 29325 29326 * Jerome Lambourg 29327 29328 * Bruno Leclerc 29329 29330 * Albert Lee 29331 29332 * Sean McNeil 29333 29334 * Javier Miranda 29335 29336 * Laurent Nana 29337 29338 * Pascal Obry 29339 29340 * Dong-Ik Oh 29341 29342 * Laurent Pautet 29343 29344 * Brett Porter 29345 29346 * Thomas Quinot 29347 29348 * Nicolas Roche 29349 29350 * Pat Rogers 29351 29352 * Jose Ruiz 29353 29354 * Douglas Rupp 29355 29356 * Sergey Rybin 29357 29358 * Gail Schenker 29359 29360 * Ed Schonberg 29361 29362 * Nicolas Setton 29363 29364 * Samuel Tardieu 29365 29366 29367 The following people are recognized for their contributions of new 29368features, bug reports, testing and integration of classpath/libgcj for 29369GCC version 4.1: 29370 * Lillian Angel for `JTree' implementation and lots Free Swing 29371 additions and bugfixes. 29372 29373 * Wolfgang Baer for `GapContent' bugfixes. 29374 29375 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 29376 event fixes, lots of Free Swing work including `JTable' editing. 29377 29378 * Stuart Ballard for RMI constant fixes. 29379 29380 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 29381 29382 * Gary Benson for `MessageFormat' fixes. 29383 29384 * Daniel Bonniot for `Serialization' fixes. 29385 29386 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 29387 and `DOM xml:id' support. 29388 29389 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 29390 29391 * Archie Cobbs for build fixes, VM interface updates, 29392 `URLClassLoader' updates. 29393 29394 * Kelley Cook for build fixes. 29395 29396 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 29397 29398 * David Daney for `BitSet' bugfixes, `HttpURLConnection' rewrite and 29399 improvements. 29400 29401 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 29402 2D support. Lots of imageio framework additions, lots of AWT and 29403 Free Swing bugfixes. 29404 29405 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 29406 fixes, better `Proxy' support, bugfixes and IKVM integration. 29407 29408 * Santiago Gala for `AccessControlContext' fixes. 29409 29410 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 29411 improvements. 29412 29413 * David Gilbert for `basic' and `metal' icon and plaf support and 29414 lots of documenting, Lots of Free Swing and metal theme additions. 29415 `MetalIconFactory' implementation. 29416 29417 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 29418 29419 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 29420 build speedups. 29421 29422 * Kim Ho for `JFileChooser' implementation. 29423 29424 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 29425 updates, `Serialization' fixes, `Properties' XML support and 29426 generic branch work, VMIntegration guide update. 29427 29428 * Bastiaan Huisman for `TimeZone' bugfixing. 29429 29430 * Andreas Jaeger for mprec updates. 29431 29432 * Paul Jenner for better `-Werror' support. 29433 29434 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 29435 29436 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 29437 bugfixes all over. Lots of Free Swing work including styled text. 29438 29439 * Simon Kitching for `String' cleanups and optimization suggestions. 29440 29441 * Michael Koch for configuration fixes, `Locale' updates, bug and 29442 build fixes. 29443 29444 * Guilhem Lavaux for configuration, thread and channel fixes and 29445 Kaffe integration. JCL native `Pointer' updates. Logger bugfixes. 29446 29447 * David Lichteblau for JCL support library global/local reference 29448 cleanups. 29449 29450 * Aaron Luchko for JDWP updates and documentation fixes. 29451 29452 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 29453 features. 29454 29455 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 29456 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 29457 and implementing the Qt4 peers. 29458 29459 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 29460 `SystemLogger' and `FileHandler' rotate implementations, NIO 29461 `FileChannel.map' support, security and policy updates. 29462 29463 * Bryce McKinlay for RMI work. 29464 29465 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 29466 testing and documenting. 29467 29468 * Kalle Olavi Niemitalo for build fixes. 29469 29470 * Rainer Orth for build fixes. 29471 29472 * Andrew Overholt for `File' locking fixes. 29473 29474 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 29475 29476 * Olga Rodimina for `MenuSelectionManager' implementation. 29477 29478 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 29479 29480 * Julian Scheid for documentation updates and gjdoc support. 29481 29482 * Christian Schlichtherle for zip fixes and cleanups. 29483 29484 * Robert Schuster for documentation updates and beans fixes, 29485 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 29486 and URL, AWT and Free Swing bugfixes. 29487 29488 * Keith Seitz for lots of JDWP work. 29489 29490 * Christian Thalinger for 64-bit cleanups, Configuration and VM 29491 interface fixes and `CACAO' integration, `fdlibm' updates. 29492 29493 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 29494 29495 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 29496 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 29497 29498 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 29499 integration. `Qt4' build infrastructure, `SHA1PRNG' and 29500 `GdkPixbugDecoder' updates. 29501 29502 * Tom Tromey for Eclipse integration, generics work, lots of bugfixes 29503 and gcj integration including coordinating The Big Merge. 29504 29505 * Mark Wielaard for bugfixes, packaging and release management, 29506 `Clipboard' implementation, system call interrupts and network 29507 timeouts and `GdkPixpufDecoder' fixes. 29508 29509 29510 In addition to the above, all of which also contributed time and 29511energy in testing GCC, we would like to thank the following for their 29512contributions to testing: 29513 29514 * Michael Abd-El-Malek 29515 29516 * Thomas Arend 29517 29518 * Bonzo Armstrong 29519 29520 * Steven Ashe 29521 29522 * Chris Baldwin 29523 29524 * David Billinghurst 29525 29526 * Jim Blandy 29527 29528 * Stephane Bortzmeyer 29529 29530 * Horst von Brand 29531 29532 * Frank Braun 29533 29534 * Rodney Brown 29535 29536 * Sidney Cadot 29537 29538 * Bradford Castalia 29539 29540 * Jonathan Corbet 29541 29542 * Ralph Doncaster 29543 29544 * Richard Emberson 29545 29546 * Levente Farkas 29547 29548 * Graham Fawcett 29549 29550 * Mark Fernyhough 29551 29552 * Robert A. French 29553 29554 * Jo"rgen Freyh 29555 29556 * Mark K. Gardner 29557 29558 * Charles-Antoine Gauthier 29559 29560 * Yung Shing Gene 29561 29562 * David Gilbert 29563 29564 * Simon Gornall 29565 29566 * Fred Gray 29567 29568 * John Griffin 29569 29570 * Patrik Hagglund 29571 29572 * Phil Hargett 29573 29574 * Amancio Hasty 29575 29576 * Takafumi Hayashi 29577 29578 * Bryan W. Headley 29579 29580 * Kevin B. Hendricks 29581 29582 * Joep Jansen 29583 29584 * Christian Joensson 29585 29586 * Michel Kern 29587 29588 * David Kidd 29589 29590 * Tobias Kuipers 29591 29592 * Anand Krishnaswamy 29593 29594 * A. O. V. Le Blanc 29595 29596 * llewelly 29597 29598 * Damon Love 29599 29600 * Brad Lucier 29601 29602 * Matthias Klose 29603 29604 * Martin Knoblauch 29605 29606 * Rick Lutowski 29607 29608 * Jesse Macnish 29609 29610 * Stefan Morrell 29611 29612 * Anon A. Mous 29613 29614 * Matthias Mueller 29615 29616 * Pekka Nikander 29617 29618 * Rick Niles 29619 29620 * Jon Olson 29621 29622 * Magnus Persson 29623 29624 * Chris Pollard 29625 29626 * Richard Polton 29627 29628 * Derk Reefman 29629 29630 * David Rees 29631 29632 * Paul Reilly 29633 29634 * Tom Reilly 29635 29636 * Torsten Rueger 29637 29638 * Danny Sadinoff 29639 29640 * Marc Schifer 29641 29642 * Erik Schnetter 29643 29644 * Wayne K. Schroll 29645 29646 * David Schuler 29647 29648 * Vin Shelton 29649 29650 * Tim Souder 29651 29652 * Adam Sulmicki 29653 29654 * Bill Thorson 29655 29656 * George Talbot 29657 29658 * Pedro A. M. Vazquez 29659 29660 * Gregory Warnes 29661 29662 * Ian Watson 29663 29664 * David E. Young 29665 29666 * And many others 29667 29668 And finally we'd like to thank everyone who uses the compiler, submits 29669bug reports and generally reminds us why we're doing this work in the 29670first place. 29671 29672 29673File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 29674 29675Option Index 29676************ 29677 29678GCC's command line options are indexed here without any initial `-' or 29679`--'. Where an option has both positive and negative forms (such as 29680`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 29681indexed under the most appropriate form; it may sometimes be useful to 29682look up both forms. 29683 29684[index] 29685* Menu: 29686 29687* ###: Overall Options. (line 192) 29688* A: Preprocessor Options. 29689 (line 510) 29690* all_load: Darwin Options. (line 103) 29691* allowable_client: Darwin Options. (line 190) 29692* ansi <1>: Non-bugs. (line 107) 29693* ansi <2>: Other Builtins. (line 22) 29694* ansi <3>: Preprocessor Options. 29695 (line 324) 29696* ansi <4>: C Dialect Options. (line 11) 29697* ansi: Standards. (line 13) 29698* arch_errors_fatal: Darwin Options. (line 107) 29699* aux-info: C Dialect Options. (line 119) 29700* b: Target Options. (line 13) 29701* B: Directory Options. (line 41) 29702* bcopy-builtin: PDP-11 Options. (line 32) 29703* bind_at_load: Darwin Options. (line 111) 29704* bundle: Darwin Options. (line 116) 29705* bundle_loader: Darwin Options. (line 120) 29706* c: Link Options. (line 20) 29707* C: Preprocessor Options. 29708 (line 557) 29709* c: Overall Options. (line 147) 29710* client_name: Darwin Options. (line 190) 29711* combine: Overall Options. (line 203) 29712* compatibility_version: Darwin Options. (line 190) 29713* coverage: Debugging Options. (line 169) 29714* crossjumping: Optimize Options. (line 435) 29715* current_version: Darwin Options. (line 190) 29716* D: Preprocessor Options. 29717 (line 33) 29718* d: Debugging Options. (line 221) 29719* da: Debugging Options. (line 387) 29720* dA: Debugging Options. (line 234) 29721* dB: Debugging Options. (line 239) 29722* dC: Debugging Options. (line 249) 29723* dc: Debugging Options. (line 243) 29724* dD <1>: Preprocessor Options. 29725 (line 538) 29726* dD: Debugging Options. (line 263) 29727* dd: Debugging Options. (line 257) 29728* dE: Debugging Options. (line 268) 29729* dead_strip: Darwin Options. (line 190) 29730* dependency-file: Darwin Options. (line 190) 29731* df: Debugging Options. (line 273) 29732* dG: Debugging Options. (line 285) 29733* dg: Debugging Options. (line 280) 29734* dH: Debugging Options. (line 390) 29735* dh: Debugging Options. (line 292) 29736* dI: Preprocessor Options. 29737 (line 547) 29738* di: Debugging Options. (line 296) 29739* dj: Debugging Options. (line 300) 29740* dk: Debugging Options. (line 304) 29741* dL: Debugging Options. (line 313) 29742* dl: Debugging Options. (line 309) 29743* dM: Preprocessor Options. 29744 (line 526) 29745* dm: Debugging Options. (line 393) 29746* dM: Debugging Options. (line 324) 29747* dm: Debugging Options. (line 320) 29748* dN <1>: Preprocessor Options. 29749 (line 544) 29750* dN: Debugging Options. (line 333) 29751* dn: Debugging Options. (line 329) 29752* do: Debugging Options. (line 337) 29753* dP: Debugging Options. (line 402) 29754* dp: Debugging Options. (line 397) 29755* dR: Debugging Options. (line 345) 29756* dr: Debugging Options. (line 341) 29757* dS: Debugging Options. (line 354) 29758* ds: Debugging Options. (line 349) 29759* dT: Debugging Options. (line 363) 29760* dt: Debugging Options. (line 358) 29761* dumpmachine: Debugging Options. (line 770) 29762* dumpspecs: Debugging Options. (line 778) 29763* dumpversion: Debugging Options. (line 774) 29764* dv: Debugging Options. (line 406) 29765* dV: Debugging Options. (line 368) 29766* dw: Debugging Options. (line 375) 29767* dx: Debugging Options. (line 411) 29768* dy: Debugging Options. (line 415) 29769* dylib_file: Darwin Options. (line 190) 29770* dylinker_install_name: Darwin Options. (line 190) 29771* dynamic: Darwin Options. (line 190) 29772* dynamiclib: Darwin Options. (line 124) 29773* dZ: Debugging Options. (line 383) 29774* dz: Debugging Options. (line 379) 29775* E <1>: Link Options. (line 20) 29776* E: Overall Options. (line 168) 29777* EB <1>: MIPS Options. (line 7) 29778* EB: ARC Options. (line 12) 29779* EL <1>: MIPS Options. (line 10) 29780* EL: ARC Options. (line 9) 29781* exported_symbols_list: Darwin Options. (line 190) 29782* F: Darwin Options. (line 32) 29783* fabi-version: C++ Dialect Options. 29784 (line 20) 29785* falign-functions: Optimize Options. (line 902) 29786* falign-jumps: Optimize Options. (line 952) 29787* falign-labels: Optimize Options. (line 920) 29788* falign-loops: Optimize Options. (line 938) 29789* fargument-alias: Code Gen Options. (line 336) 29790* fargument-noalias: Code Gen Options. (line 336) 29791* fargument-noalias-anything: Code Gen Options. (line 336) 29792* fargument-noalias-global: Code Gen Options. (line 336) 29793* fasynchronous-unwind-tables: Code Gen Options. (line 64) 29794* fbounds-check <1>: Code Gen Options. (line 15) 29795* fbounds-check: Optimize Options. (line 326) 29796* fbranch-probabilities: Optimize Options. (line 1200) 29797* fbranch-target-load-optimize: Optimize Options. (line 1308) 29798* fbranch-target-load-optimize2: Optimize Options. (line 1314) 29799* fbtr-bb-exclusive: Optimize Options. (line 1318) 29800* fcall-saved <1>: Interoperation. (line 150) 29801* fcall-saved: Code Gen Options. (line 237) 29802* fcall-used: Code Gen Options. (line 223) 29803* fcaller-saves: Optimize Options. (line 579) 29804* fcheck-new: C++ Dialect Options. 29805 (line 34) 29806* fcommon: Variable Attributes. 29807 (line 92) 29808* fcond-mismatch: C Dialect Options. (line 235) 29809* fconserve-space: C++ Dialect Options. 29810 (line 44) 29811* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 29812 (line 30) 29813* fcse-follow-jumps: Optimize Options. (line 363) 29814* fcse-skip-blocks: Optimize Options. (line 372) 29815* fcx-limited-range: Optimize Options. (line 1186) 29816* fdata-sections: Optimize Options. (line 1289) 29817* fdelayed-branch: Optimize Options. (line 488) 29818* fdelete-null-pointer-checks: Optimize Options. (line 457) 29819* fdiagnostics-show-location: Language Independent Options. 29820 (line 21) 29821* fdiagnostics-show-option: Language Independent Options. 29822 (line 36) 29823* fdollars-in-identifiers <1>: Interoperation. (line 146) 29824* fdollars-in-identifiers: Preprocessor Options. 29825 (line 440) 29826* fdump-class-hierarchy: Debugging Options. (line 441) 29827* fdump-ipa: Debugging Options. (line 448) 29828* fdump-noaddr: Debugging Options. (line 418) 29829* fdump-rtl-all: Debugging Options. (line 387) 29830* fdump-rtl-bbro: Debugging Options. (line 239) 29831* fdump-rtl-btl: Debugging Options. (line 257) 29832* fdump-rtl-bypass: Debugging Options. (line 285) 29833* fdump-rtl-ce1: Debugging Options. (line 249) 29834* fdump-rtl-ce2: Debugging Options. (line 249) 29835* fdump-rtl-ce3: Debugging Options. (line 268) 29836* fdump-rtl-cfg: Debugging Options. (line 273) 29837* fdump-rtl-combine: Debugging Options. (line 243) 29838* fdump-rtl-cse: Debugging Options. (line 349) 29839* fdump-rtl-cse2: Debugging Options. (line 358) 29840* fdump-rtl-dbr: Debugging Options. (line 257) 29841* fdump-rtl-eh: Debugging Options. (line 292) 29842* fdump-rtl-expand: Debugging Options. (line 341) 29843* fdump-rtl-flow2: Debugging Options. (line 375) 29844* fdump-rtl-gcse: Debugging Options. (line 285) 29845* fdump-rtl-greg: Debugging Options. (line 280) 29846* fdump-rtl-jump: Debugging Options. (line 300) 29847* fdump-rtl-life: Debugging Options. (line 273) 29848* fdump-rtl-loop2: Debugging Options. (line 313) 29849* fdump-rtl-lreg: Debugging Options. (line 309) 29850* fdump-rtl-mach: Debugging Options. (line 324) 29851* fdump-rtl-peephole2: Debugging Options. (line 379) 29852* fdump-rtl-postreload: Debugging Options. (line 337) 29853* fdump-rtl-regmove: Debugging Options. (line 333) 29854* fdump-rtl-rnreg: Debugging Options. (line 329) 29855* fdump-rtl-sched: Debugging Options. (line 354) 29856* fdump-rtl-sched2: Debugging Options. (line 345) 29857* fdump-rtl-sibling: Debugging Options. (line 296) 29858* fdump-rtl-sms: Debugging Options. (line 320) 29859* fdump-rtl-stack: Debugging Options. (line 304) 29860* fdump-rtl-tracer: Debugging Options. (line 363) 29861* fdump-rtl-vartrack: Debugging Options. (line 368) 29862* fdump-rtl-vpt: Debugging Options. (line 368) 29863* fdump-rtl-web: Debugging Options. (line 383) 29864* fdump-translation-unit: Debugging Options. (line 433) 29865* fdump-tree: Debugging Options. (line 463) 29866* fdump-tree-alias: Debugging Options. (line 551) 29867* fdump-tree-all: Debugging Options. (line 636) 29868* fdump-tree-ccp: Debugging Options. (line 555) 29869* fdump-tree-cfg: Debugging Options. (line 526) 29870* fdump-tree-ch: Debugging Options. (line 538) 29871* fdump-tree-copyprop: Debugging Options. (line 571) 29872* fdump-tree-copyrename: Debugging Options. (line 617) 29873* fdump-tree-dce: Debugging Options. (line 579) 29874* fdump-tree-dom: Debugging Options. (line 597) 29875* fdump-tree-dse: Debugging Options. (line 602) 29876* fdump-tree-forwprop: Debugging Options. (line 612) 29877* fdump-tree-fre: Debugging Options. (line 567) 29878* fdump-tree-gimple: Debugging Options. (line 521) 29879* fdump-tree-mudflap: Debugging Options. (line 583) 29880* fdump-tree-nrv: Debugging Options. (line 622) 29881* fdump-tree-phiopt: Debugging Options. (line 607) 29882* fdump-tree-pre: Debugging Options. (line 563) 29883* fdump-tree-salias: Debugging Options. (line 546) 29884* fdump-tree-sink: Debugging Options. (line 593) 29885* fdump-tree-sra: Debugging Options. (line 588) 29886* fdump-tree-ssa: Debugging Options. (line 542) 29887* fdump-tree-store_copyprop: Debugging Options. (line 575) 29888* fdump-tree-storeccp: Debugging Options. (line 559) 29889* fdump-tree-vcg: Debugging Options. (line 530) 29890* fdump-tree-vect: Debugging Options. (line 627) 29891* fdump-tree-vrp: Debugging Options. (line 632) 29892* fdump-unnumbered: Debugging Options. (line 425) 29893* fearly-inlining: Optimize Options. (line 204) 29894* feliminate-dwarf2-dups: Debugging Options. (line 125) 29895* feliminate-unused-debug-symbols: Debugging Options. (line 52) 29896* feliminate-unused-debug-types: Debugging Options. (line 782) 29897* fexceptions: Code Gen Options. (line 34) 29898* fexec-charset: Preprocessor Options. 29899 (line 467) 29900* fexpensive-optimizations: Optimize Options. (line 470) 29901* fextended-identifiers: Preprocessor Options. 29902 (line 443) 29903* ffast-math: Optimize Options. (line 1070) 29904* ffinite-math-only: Optimize Options. (line 1114) 29905* ffix-and-continue: Darwin Options. (line 97) 29906* ffixed: Code Gen Options. (line 211) 29907* ffloat-store <1>: Disappointments. (line 77) 29908* ffloat-store: Optimize Options. (line 1056) 29909* ffor-scope: C++ Dialect Options. 29910 (line 86) 29911* fforce-addr: Optimize Options. (line 154) 29912* fforce-mem: Optimize Options. (line 146) 29913* ffreestanding <1>: Function Attributes. 29914 (line 314) 29915* ffreestanding <2>: Warning Options. (line 94) 29916* ffreestanding <3>: C Dialect Options. (line 190) 29917* ffreestanding: Standards. (line 81) 29918* ffriend-injection: C++ Dialect Options. 29919 (line 56) 29920* ffunction-sections: Optimize Options. (line 1289) 29921* fgcse: Optimize Options. (line 386) 29922* fgcse-after-reload: Optimize Options. (line 422) 29923* fgcse-las: Optimize Options. (line 415) 29924* fgcse-lm: Optimize Options. (line 397) 29925* fgcse-sm: Optimize Options. (line 406) 29926* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 29927 (line 39) 29928* fgnu89-inline: C Dialect Options. (line 98) 29929* fhosted: C Dialect Options. (line 183) 29930* filelist: Darwin Options. (line 190) 29931* findirect-data: Darwin Options. (line 97) 29932* finhibit-size-directive: Code Gen Options. (line 147) 29933* finline-functions: Optimize Options. (line 185) 29934* finline-functions-called-once: Optimize Options. (line 196) 29935* finline-limit: Optimize Options. (line 214) 29936* finput-charset: Preprocessor Options. 29937 (line 480) 29938* finstrument-functions <1>: Function Attributes. 29939 (line 508) 29940* finstrument-functions: Code Gen Options. (line 267) 29941* fkeep-inline-functions <1>: Inline. (line 58) 29942* fkeep-inline-functions: Optimize Options. (line 252) 29943* fkeep-static-consts: Optimize Options. (line 259) 29944* flat_namespace: Darwin Options. (line 190) 29945* fleading-underscore: Code Gen Options. (line 353) 29946* fmem-report: Debugging Options. (line 150) 29947* fmessage-length: Language Independent Options. 29948 (line 15) 29949* fmodulo-sched: Optimize Options. (line 288) 29950* fmove-loop-invariants: Optimize Options. (line 1279) 29951* fms-extensions <1>: Unnamed Fields. (line 37) 29952* fms-extensions <2>: C++ Dialect Options. 29953 (line 121) 29954* fms-extensions: C Dialect Options. (line 206) 29955* fmudflap: Optimize Options. (line 333) 29956* fmudflapir: Optimize Options. (line 333) 29957* fmudflapth: Optimize Options. (line 333) 29958* fnext-runtime: Objective-C and Objective-C++ Dialect Options. 29959 (line 43) 29960* fno-access-control: C++ Dialect Options. 29961 (line 30) 29962* fno-asm: C Dialect Options. (line 135) 29963* fno-branch-count-reg: Optimize Options. (line 293) 29964* fno-builtin <1>: Other Builtins. (line 14) 29965* fno-builtin <2>: Function Attributes. 29966 (line 314) 29967* fno-builtin <3>: Warning Options. (line 94) 29968* fno-builtin: C Dialect Options. (line 149) 29969* fno-common <1>: Variable Attributes. 29970 (line 92) 29971* fno-common: Code Gen Options. (line 135) 29972* fno-cprop-registers: Optimize Options. (line 1028) 29973* fno-cx-limited-range: Optimize Options. (line 1186) 29974* fno-default-inline <1>: Inline. (line 53) 29975* fno-default-inline <2>: Optimize Options. (line 131) 29976* fno-default-inline: C++ Dialect Options. 29977 (line 233) 29978* fno-defer-pop: Optimize Options. (line 138) 29979* fno-elide-constructors: C++ Dialect Options. 29980 (line 69) 29981* fno-enforce-eh-specs: C++ Dialect Options. 29982 (line 75) 29983* fno-for-scope: C++ Dialect Options. 29984 (line 86) 29985* fno-function-cse: Optimize Options. (line 303) 29986* fno-gnu-keywords: C++ Dialect Options. 29987 (line 98) 29988* fno-guess-branch-probability: Optimize Options. (line 787) 29989* fno-ident: Code Gen Options. (line 144) 29990* fno-implement-inlines <1>: C++ Interface. (line 75) 29991* fno-implement-inlines: C++ Dialect Options. 29992 (line 115) 29993* fno-implicit-inline-templates: C++ Dialect Options. 29994 (line 109) 29995* fno-implicit-templates <1>: Template Instantiation. 29996 (line 87) 29997* fno-implicit-templates: C++ Dialect Options. 29998 (line 103) 29999* fno-inline: Optimize Options. (line 179) 30000* fno-jump-tables: Code Gen Options. (line 203) 30001* fno-math-errno: Optimize Options. (line 1083) 30002* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 30003 (line 49) 30004* fno-nonansi-builtins: C++ Dialect Options. 30005 (line 126) 30006* fno-operator-names: C++ Dialect Options. 30007 (line 131) 30008* fno-optional-diags: C++ Dialect Options. 30009 (line 135) 30010* fno-peephole: Optimize Options. (line 778) 30011* fno-peephole2: Optimize Options. (line 778) 30012* fno-rtti: C++ Dialect Options. 30013 (line 150) 30014* fno-sched-interblock: Optimize Options. (line 514) 30015* fno-sched-spec: Optimize Options. (line 519) 30016* fno-show-column: Preprocessor Options. 30017 (line 505) 30018* fno-signed-bitfields: C Dialect Options. (line 268) 30019* fno-stack-limit: Code Gen Options. (line 319) 30020* fno-threadsafe-statics: C++ Dialect Options. 30021 (line 172) 30022* fno-trapping-math: Optimize Options. (line 1124) 30023* fno-unsigned-bitfields: C Dialect Options. (line 268) 30024* fno-use-cxa-get-exception-ptr: C++ Dialect Options. 30025 (line 185) 30026* fno-weak: C++ Dialect Options. 30027 (line 218) 30028* fno-working-directory: Preprocessor Options. 30029 (line 490) 30030* fno-zero-initialized-in-bss: Optimize Options. (line 314) 30031* fnon-call-exceptions: Code Gen Options. (line 48) 30032* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 30033 (line 56) 30034* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 30035 (line 81) 30036* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 30037 (line 85) 30038* fobjc-gc: Objective-C and Objective-C++ Dialect Options. 30039 (line 170) 30040* fomit-frame-pointer: Optimize Options. (line 158) 30041* fopenmp: C Dialect Options. (line 200) 30042* foptimize-register-move: Optimize Options. (line 477) 30043* foptimize-sibling-calls: Optimize Options. (line 174) 30044* force_cpusubtype_ALL: Darwin Options. (line 129) 30045* force_flat_namespace: Darwin Options. (line 190) 30046* fpack-struct: Code Gen Options. (line 254) 30047* fpcc-struct-return <1>: Incompatibilities. (line 170) 30048* fpcc-struct-return: Code Gen Options. (line 70) 30049* fpch-deps: Preprocessor Options. 30050 (line 280) 30051* fpch-preprocess: Preprocessor Options. 30052 (line 288) 30053* fpeel-loops: Optimize Options. (line 1271) 30054* fpermissive: C++ Dialect Options. 30055 (line 140) 30056* fPIC: Code Gen Options. (line 184) 30057* fpic: Code Gen Options. (line 163) 30058* fPIE: Code Gen Options. (line 197) 30059* fpie: Code Gen Options. (line 197) 30060* fprefetch-loop-arrays: Optimize Options. (line 767) 30061* fpreprocessed: Preprocessor Options. 30062 (line 448) 30063* fprofile-arcs <1>: Other Builtins. (line 236) 30064* fprofile-arcs: Debugging Options. (line 154) 30065* fprofile-generate: Optimize Options. (line 1035) 30066* fprofile-use: Optimize Options. (line 1044) 30067* fprofile-values: Optimize Options. (line 1219) 30068* frandom-string: Debugging Options. (line 665) 30069* freg-struct-return: Code Gen Options. (line 88) 30070* fregmove: Optimize Options. (line 477) 30071* frename-registers: Optimize Options. (line 1238) 30072* freorder-blocks: Optimize Options. (line 804) 30073* freorder-blocks-and-partition: Optimize Options. (line 810) 30074* freorder-functions: Optimize Options. (line 821) 30075* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 30076 (line 174) 30077* frepo <1>: Template Instantiation. 30078 (line 62) 30079* frepo: C++ Dialect Options. 30080 (line 145) 30081* frerun-cse-after-loop: Optimize Options. (line 380) 30082* frounding-math: Optimize Options. (line 1139) 30083* frtl-abstract-sequences: Optimize Options. (line 1159) 30084* fsched-spec-load: Optimize Options. (line 524) 30085* fsched-spec-load-dangerous: Optimize Options. (line 529) 30086* fsched-stalled-insns: Optimize Options. (line 534) 30087* fsched-stalled-insns-dep: Optimize Options. (line 539) 30088* fsched-verbose: Debugging Options. (line 675) 30089* fsched2-use-superblocks: Optimize Options. (line 546) 30090* fsched2-use-traces: Optimize Options. (line 557) 30091* fschedule-insns: Optimize Options. (line 495) 30092* fschedule-insns2: Optimize Options. (line 505) 30093* fscheduling-in-modulo-scheduled-loops: Optimize Options. (line 573) 30094* fsection-anchors: Optimize Options. (line 1334) 30095* fsee: Optimize Options. (line 569) 30096* fshort-double: Code Gen Options. (line 117) 30097* fshort-enums <1>: Non-bugs. (line 42) 30098* fshort-enums <2>: Type Attributes. (line 112) 30099* fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 30100 (line 43) 30101* fshort-enums: Code Gen Options. (line 106) 30102* fshort-wchar: Code Gen Options. (line 125) 30103* fsignaling-nans: Optimize Options. (line 1166) 30104* fsigned-bitfields <1>: Non-bugs. (line 57) 30105* fsigned-bitfields: C Dialect Options. (line 268) 30106* fsigned-char <1>: Characters implementation. 30107 (line 31) 30108* fsigned-char: C Dialect Options. (line 258) 30109* fsingle-precision-constant: Optimize Options. (line 1181) 30110* fsplit-ivs-in-unroller: Optimize Options. (line 748) 30111* fstack-check: Code Gen Options. (line 304) 30112* fstack-limit-register: Code Gen Options. (line 319) 30113* fstack-limit-symbol: Code Gen Options. (line 319) 30114* fstats: C++ Dialect Options. 30115 (line 160) 30116* fstrict-aliasing: Optimize Options. (line 834) 30117* fstrict-overflow: Optimize Options. (line 876) 30118* fsyntax-only: Warning Options. (line 23) 30119* ftabstop: Preprocessor Options. 30120 (line 461) 30121* ftemplate-depth: C++ Dialect Options. 30122 (line 165) 30123* ftest-coverage: Debugging Options. (line 210) 30124* fthread-jumps: Optimize Options. (line 354) 30125* ftime-report: Debugging Options. (line 146) 30126* ftracer: Optimize Options. (line 731) 30127* ftrapv: Code Gen Options. (line 22) 30128* ftree-vect-loop-version: Optimize Options. (line 713) 30129* ftree-vectorizer-verbose: Debugging Options. (line 640) 30130* funit-at-a-time: Optimize Options. (line 965) 30131* funroll-all-loops: Optimize Options. (line 742) 30132* funroll-loops: Optimize Options. (line 736) 30133* funsafe-loop-optimizations: Optimize Options. (line 427) 30134* funsafe-math-optimizations: Optimize Options. (line 1100) 30135* funsigned-bitfields <1>: Non-bugs. (line 57) 30136* funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 30137 (line 17) 30138* funsigned-bitfields: C Dialect Options. (line 268) 30139* funsigned-char <1>: Characters implementation. 30140 (line 31) 30141* funsigned-char: C Dialect Options. (line 240) 30142* funswitch-loops: Optimize Options. (line 1283) 30143* funwind-tables: Code Gen Options. (line 57) 30144* fuse-cxa-atexit: C++ Dialect Options. 30145 (line 178) 30146* fvar-tracking: Debugging Options. (line 718) 30147* fvariable-expansion-in-unroller: Optimize Options. (line 762) 30148* fverbose-asm: Code Gen Options. (line 154) 30149* fvisibility: Code Gen Options. (line 372) 30150* fvisibility-inlines-hidden: C++ Dialect Options. 30151 (line 190) 30152* fvpt: Optimize Options. (line 1229) 30153* fweb: Optimize Options. (line 1004) 30154* fwhole-program: Optimize Options. (line 1015) 30155* fwide-exec-charset: Preprocessor Options. 30156 (line 472) 30157* fworking-directory: Preprocessor Options. 30158 (line 490) 30159* fwrapv: Code Gen Options. (line 26) 30160* fzero-link: Objective-C and Objective-C++ Dialect Options. 30161 (line 184) 30162* G <1>: System V Options. (line 10) 30163* G <2>: RS/6000 and PowerPC Options. 30164 (line 607) 30165* G <3>: MIPS Options. (line 216) 30166* G: M32R/D Options. (line 57) 30167* g: Debugging Options. (line 10) 30168* gcoff: Debugging Options. (line 70) 30169* gdwarf-2: Debugging Options. (line 88) 30170* gen-decls: Objective-C and Objective-C++ Dialect Options. 30171 (line 194) 30172* gfull: Darwin Options. (line 64) 30173* ggdb: Debugging Options. (line 38) 30174* gnu-ld: HPPA Options. (line 113) 30175* gstabs: Debugging Options. (line 44) 30176* gstabs+: Debugging Options. (line 64) 30177* gused: Darwin Options. (line 59) 30178* gvms: Debugging Options. (line 95) 30179* gxcoff: Debugging Options. (line 75) 30180* gxcoff+: Debugging Options. (line 80) 30181* H: Preprocessor Options. 30182 (line 612) 30183* headerpad_max_install_names: Darwin Options. (line 190) 30184* help <1>: Preprocessor Options. 30185 (line 604) 30186* help: Overall Options. (line 219) 30187* hp-ld: HPPA Options. (line 125) 30188* I <1>: Directory Options. (line 10) 30189* I: Preprocessor Options. 30190 (line 64) 30191* I- <1>: Directory Options. (line 107) 30192* I-: Preprocessor Options. 30193 (line 361) 30194* idirafter: Preprocessor Options. 30195 (line 403) 30196* if-conversion: Optimize Options. (line 442) 30197* if-conversion2: Optimize Options. (line 451) 30198* imacros: Preprocessor Options. 30199 (line 394) 30200* image_base: Darwin Options. (line 190) 30201* imultilib: Preprocessor Options. 30202 (line 424) 30203* include: Preprocessor Options. 30204 (line 383) 30205* init: Darwin Options. (line 190) 30206* install_name: Darwin Options. (line 190) 30207* iprefix: Preprocessor Options. 30208 (line 408) 30209* iquote <1>: Directory Options. (line 31) 30210* iquote: Preprocessor Options. 30211 (line 434) 30212* isysroot: Preprocessor Options. 30213 (line 420) 30214* isystem: Preprocessor Options. 30215 (line 428) 30216* iwithprefix: Preprocessor Options. 30217 (line 414) 30218* iwithprefixbefore: Preprocessor Options. 30219 (line 414) 30220* keep_private_externs: Darwin Options. (line 190) 30221* L: Directory Options. (line 37) 30222* l: Link Options. (line 26) 30223* lobjc: Link Options. (line 53) 30224* M: Preprocessor Options. 30225 (line 173) 30226* m1: SH Options. (line 9) 30227* m10: PDP-11 Options. (line 29) 30228* m128bit-long-double: i386 and x86-64 Options. 30229 (line 254) 30230* m16-bit: CRIS Options. (line 69) 30231* m2: SH Options. (line 12) 30232* m210: MCore Options. (line 43) 30233* m3: SH Options. (line 18) 30234* m31: S/390 and zSeries Options. 30235 (line 79) 30236* m32 <1>: SPARC Options. (line 189) 30237* m32 <2>: RS/6000 and PowerPC Options. 30238 (line 222) 30239* m32: i386 and x86-64 Options. 30240 (line 464) 30241* m32-bit: CRIS Options. (line 69) 30242* m32r: M32R/D Options. (line 15) 30243* m32r2: M32R/D Options. (line 9) 30244* m32rx: M32R/D Options. (line 12) 30245* m340: MCore Options. (line 43) 30246* m386: i386 and x86-64 Options. 30247 (line 142) 30248* m3dnow: i386 and x86-64 Options. 30249 (line 389) 30250* m3e: SH Options. (line 21) 30251* m4: SH Options. (line 35) 30252* m4-nofpu: SH Options. (line 24) 30253* m4-single: SH Options. (line 31) 30254* m4-single-only: SH Options. (line 27) 30255* m40: PDP-11 Options. (line 23) 30256* m45: PDP-11 Options. (line 26) 30257* m486: i386 and x86-64 Options. 30258 (line 142) 30259* m4a: SH Options. (line 50) 30260* m4a-nofpu: SH Options. (line 38) 30261* m4a-single: SH Options. (line 46) 30262* m4a-single-only: SH Options. (line 42) 30263* m4al: SH Options. (line 53) 30264* m4byte-functions: MCore Options. (line 27) 30265* m5200: M680x0 Options. (line 59) 30266* m64 <1>: SPARC Options. (line 189) 30267* m64 <2>: S/390 and zSeries Options. 30268 (line 79) 30269* m64 <3>: RS/6000 and PowerPC Options. 30270 (line 222) 30271* m64: i386 and x86-64 Options. 30272 (line 464) 30273* m68000: M680x0 Options. (line 13) 30274* m68020: M680x0 Options. (line 21) 30275* m68020-40: M680x0 Options. (line 70) 30276* m68020-60: M680x0 Options. (line 77) 30277* m68030: M680x0 Options. (line 30) 30278* m68040: M680x0 Options. (line 34) 30279* m68060: M680x0 Options. (line 42) 30280* m6811: M68hc1x Options. (line 13) 30281* m6812: M68hc1x Options. (line 18) 30282* m68881: M680x0 Options. (line 25) 30283* m68hc11: M68hc1x Options. (line 13) 30284* m68hc12: M68hc1x Options. (line 18) 30285* m68hcs12: M68hc1x Options. (line 23) 30286* m68S12: M68hc1x Options. (line 23) 30287* m8-bit: CRIS Options. (line 69) 30288* m96bit-long-double: i386 and x86-64 Options. 30289 (line 254) 30290* mabi <1>: RS/6000 and PowerPC Options. 30291 (line 489) 30292* mabi: ARM Options. (line 10) 30293* mabi-mmixware: MMIX Options. (line 20) 30294* mabi=32: MIPS Options. (line 89) 30295* mabi=64: MIPS Options. (line 89) 30296* mabi=eabi: MIPS Options. (line 89) 30297* mabi=gnu: MMIX Options. (line 20) 30298* mabi=ibmlongdouble: RS/6000 and PowerPC Options. 30299 (line 502) 30300* mabi=ieeelongdouble: RS/6000 and PowerPC Options. 30301 (line 506) 30302* mabi=n32: MIPS Options. (line 89) 30303* mabi=no-spe: RS/6000 and PowerPC Options. 30304 (line 499) 30305* mabi=o64: MIPS Options. (line 89) 30306* mabi=spe: RS/6000 and PowerPC Options. 30307 (line 494) 30308* mabicalls: MIPS Options. (line 100) 30309* mabort-on-noreturn: ARM Options. (line 144) 30310* mabshi: PDP-11 Options. (line 55) 30311* mac0: PDP-11 Options. (line 16) 30312* macc-4: FRV Options. (line 113) 30313* macc-8: FRV Options. (line 116) 30314* maccumulate-outgoing-args: i386 and x86-64 Options. 30315 (line 415) 30316* madjust-unroll: SH Options. (line 175) 30317* mads: RS/6000 and PowerPC Options. 30318 (line 532) 30319* maix-struct-return: RS/6000 and PowerPC Options. 30320 (line 482) 30321* maix32: RS/6000 and PowerPC Options. 30322 (line 260) 30323* maix64: RS/6000 and PowerPC Options. 30324 (line 260) 30325* malign-300: H8/300 Options. (line 31) 30326* malign-double: i386 and x86-64 Options. 30327 (line 238) 30328* malign-int: M680x0 Options. (line 132) 30329* malign-labels: FRV Options. (line 104) 30330* malign-loops: M32R/D Options. (line 73) 30331* malign-natural: RS/6000 and PowerPC Options. 30332 (line 299) 30333* malign-power: RS/6000 and PowerPC Options. 30334 (line 299) 30335* malloc-cc: FRV Options. (line 25) 30336* malpha-as: DEC Alpha Options. (line 159) 30337* maltivec: RS/6000 and PowerPC Options. 30338 (line 164) 30339* mam33: MN10300 Options. (line 17) 30340* maout: CRIS Options. (line 92) 30341* mapcs: ARM Options. (line 22) 30342* mapcs-frame: ARM Options. (line 14) 30343* mapp-regs <1>: V850 Options. (line 57) 30344* mapp-regs: SPARC Options. (line 10) 30345* march <1>: S/390 and zSeries Options. 30346 (line 108) 30347* march <2>: MT Options. (line 9) 30348* march <3>: MIPS Options. (line 14) 30349* march <4>: i386 and x86-64 Options. 30350 (line 131) 30351* march <5>: HPPA Options. (line 9) 30352* march <6>: CRIS Options. (line 10) 30353* march: ARM Options. (line 109) 30354* masm=DIALECT: i386 and x86-64 Options. 30355 (line 194) 30356* mauto-incdec: M68hc1x Options. (line 26) 30357* mauto-pic: IA-64 Options. (line 50) 30358* mb: SH Options. (line 58) 30359* mbacc: MT Options. (line 16) 30360* mbackchain: S/390 and zSeries Options. 30361 (line 26) 30362* mbase-addresses: MMIX Options. (line 54) 30363* mbcopy: PDP-11 Options. (line 36) 30364* mbig <1>: TMS320C3x/C4x Options. 30365 (line 18) 30366* mbig: RS/6000 and PowerPC Options. 30367 (line 414) 30368* mbig-endian <1>: RS/6000 and PowerPC Options. 30369 (line 414) 30370* mbig-endian <2>: MCore Options. (line 39) 30371* mbig-endian <3>: IA-64 Options. (line 9) 30372* mbig-endian: ARM Options. (line 72) 30373* mbig-memory: TMS320C3x/C4x Options. 30374 (line 18) 30375* mbig-switch <1>: V850 Options. (line 52) 30376* mbig-switch: HPPA Options. (line 23) 30377* mbigtable: SH Options. (line 74) 30378* mbit-align: RS/6000 and PowerPC Options. 30379 (line 368) 30380* mbitfield: M680x0 Options. (line 104) 30381* mbk: TMS320C3x/C4x Options. 30382 (line 27) 30383* mbranch-cheap: PDP-11 Options. (line 65) 30384* mbranch-cost=NUMBER: M32R/D Options. (line 82) 30385* mbranch-expensive: PDP-11 Options. (line 61) 30386* mbranch-likely: MIPS Options. (line 367) 30387* mbranch-predict: MMIX Options. (line 49) 30388* mbss-plt: RS/6000 and PowerPC Options. 30389 (line 181) 30390* mbuild-constants: DEC Alpha Options. (line 142) 30391* mbwx: DEC Alpha Options. (line 171) 30392* mc68000: M680x0 Options. (line 13) 30393* mc68020: M680x0 Options. (line 21) 30394* mcall-gnu: RS/6000 and PowerPC Options. 30395 (line 474) 30396* mcall-linux: RS/6000 and PowerPC Options. 30397 (line 470) 30398* mcall-netbsd: RS/6000 and PowerPC Options. 30399 (line 478) 30400* mcall-prologues: AVR Options. (line 43) 30401* mcall-solaris: RS/6000 and PowerPC Options. 30402 (line 466) 30403* mcall-sysv: RS/6000 and PowerPC Options. 30404 (line 453) 30405* mcall-sysv-eabi: RS/6000 and PowerPC Options. 30406 (line 460) 30407* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 30408 (line 463) 30409* mcallee-super-interworking: ARM Options. (line 234) 30410* mcaller-super-interworking: ARM Options. (line 240) 30411* mcallgraph-data: MCore Options. (line 31) 30412* mcc-init: CRIS Options. (line 46) 30413* mcfv4e: M680x0 Options. (line 66) 30414* mcheck-zero-division: MIPS Options. (line 254) 30415* mcirrus-fix-invalid-insns: ARM Options. (line 187) 30416* mcix: DEC Alpha Options. (line 171) 30417* mcmodel=embmedany: SPARC Options. (line 211) 30418* mcmodel=kernel: i386 and x86-64 Options. 30419 (line 486) 30420* mcmodel=large: i386 and x86-64 Options. 30421 (line 498) 30422* mcmodel=medany: SPARC Options. (line 205) 30423* mcmodel=medium: i386 and x86-64 Options. 30424 (line 491) 30425* mcmodel=medlow: SPARC Options. (line 194) 30426* mcmodel=medmid: SPARC Options. (line 199) 30427* mcmodel=small: i386 and x86-64 Options. 30428 (line 480) 30429* mcond-exec: FRV Options. (line 152) 30430* mcond-move: FRV Options. (line 128) 30431* mconst-align: CRIS Options. (line 60) 30432* mconst16: Xtensa Options. (line 10) 30433* mconstant-gp: IA-64 Options. (line 46) 30434* mcpu <1>: TMS320C3x/C4x Options. 30435 (line 9) 30436* mcpu <2>: SPARC Options. (line 96) 30437* mcpu <3>: RS/6000 and PowerPC Options. 30438 (line 100) 30439* mcpu <4>: i386 and x86-64 Options. 30440 (line 136) 30441* mcpu <5>: FRV Options. (line 212) 30442* mcpu <6>: DEC Alpha Options. (line 223) 30443* mcpu <7>: CRIS Options. (line 10) 30444* mcpu <8>: ARM Options. (line 84) 30445* mcpu: ARC Options. (line 23) 30446* mcpu32: M680x0 Options. (line 51) 30447* mcpu=: M32C Options. (line 7) 30448* mcsync-anomaly: Blackfin Options. (line 23) 30449* MD: Preprocessor Options. 30450 (line 261) 30451* mdalign: SH Options. (line 64) 30452* mdata: ARC Options. (line 30) 30453* mdata-align: CRIS Options. (line 60) 30454* mdb: TMS320C3x/C4x Options. 30455 (line 32) 30456* mdebug <1>: S/390 and zSeries Options. 30457 (line 104) 30458* mdebug: M32R/D Options. (line 69) 30459* mdec-asm: PDP-11 Options. (line 78) 30460* mdisable-callt: V850 Options. (line 80) 30461* mdisable-fpregs: HPPA Options. (line 33) 30462* mdisable-indexing: HPPA Options. (line 40) 30463* mdiv: MCore Options. (line 15) 30464* mdiv=STRATEGY: SH Options. (line 127) 30465* mdivide-breaks: MIPS Options. (line 259) 30466* mdivide-traps: MIPS Options. (line 259) 30467* mdivsi3_libfunc=NAME: SH Options. (line 168) 30468* mdlmzb: RS/6000 and PowerPC Options. 30469 (line 362) 30470* mdouble: FRV Options. (line 38) 30471* mdouble-float: MIPS Options. (line 173) 30472* mdp-isr-reload: TMS320C3x/C4x Options. 30473 (line 45) 30474* mdsp: MIPS Options. (line 178) 30475* mdwarf2-asm: IA-64 Options. (line 79) 30476* mdword: FRV Options. (line 32) 30477* mdynamic-no-pic: RS/6000 and PowerPC Options. 30478 (line 419) 30479* meabi: RS/6000 and PowerPC Options. 30480 (line 555) 30481* mearly-stop-bits: IA-64 Options. (line 85) 30482* meb: Score Options. (line 9) 30483* mel: Score Options. (line 12) 30484* melf <1>: MMIX Options. (line 44) 30485* melf: CRIS Options. (line 95) 30486* melinux: CRIS Options. (line 99) 30487* melinux-stacksize: CRIS Options. (line 25) 30488* memb: RS/6000 and PowerPC Options. 30489 (line 550) 30490* membedded-data: MIPS Options. (line 225) 30491* memregs=: M32C Options. (line 21) 30492* mep: V850 Options. (line 16) 30493* mepsilon: MMIX Options. (line 15) 30494* mesa: S/390 and zSeries Options. 30495 (line 87) 30496* metrax100: CRIS Options. (line 31) 30497* metrax4: CRIS Options. (line 31) 30498* mexplicit-relocs <1>: MIPS Options. (line 245) 30499* mexplicit-relocs: DEC Alpha Options. (line 184) 30500* MF: Preprocessor Options. 30501 (line 207) 30502* mfast-fix: TMS320C3x/C4x Options. 30503 (line 62) 30504* mfast-indirect-calls: HPPA Options. (line 52) 30505* mfaster-structs: SPARC Options. (line 71) 30506* mfdpic: FRV Options. (line 56) 30507* mfix: DEC Alpha Options. (line 171) 30508* mfix-and-continue: Darwin Options. (line 97) 30509* mfix-r4000: MIPS Options. (line 309) 30510* mfix-r4400: MIPS Options. (line 323) 30511* mfix-sb1: MIPS Options. (line 351) 30512* mfix-vr4120: MIPS Options. (line 330) 30513* mfix-vr4130: MIPS Options. (line 344) 30514* mfixed-cc: FRV Options. (line 28) 30515* mfixed-range <1>: IA-64 Options. (line 90) 30516* mfixed-range: HPPA Options. (line 59) 30517* mfloat-abi: ARM Options. (line 59) 30518* mfloat-gprs: RS/6000 and PowerPC Options. 30519 (line 205) 30520* mfloat-ieee: DEC Alpha Options. (line 179) 30521* mfloat-vax: DEC Alpha Options. (line 179) 30522* mfloat32: PDP-11 Options. (line 52) 30523* mfloat64: PDP-11 Options. (line 48) 30524* mflush-func: MIPS Options. (line 357) 30525* mflush-func=NAME: M32R/D Options. (line 94) 30526* mflush-trap=NUMBER: M32R/D Options. (line 87) 30527* mfmovd: SH Options. (line 78) 30528* mfp: ARM Options. (line 119) 30529* mfp-exceptions: MIPS Options. (line 378) 30530* mfp-reg: DEC Alpha Options. (line 25) 30531* mfp-rounding-mode: DEC Alpha Options. (line 85) 30532* mfp-trap-mode: DEC Alpha Options. (line 63) 30533* mfp32: MIPS Options. (line 156) 30534* mfp64: MIPS Options. (line 159) 30535* mfpe: ARM Options. (line 119) 30536* mfpr-32: FRV Options. (line 13) 30537* mfpr-64: FRV Options. (line 16) 30538* mfprnd: RS/6000 and PowerPC Options. 30539 (line 25) 30540* mfpu <1>: SPARC Options. (line 20) 30541* mfpu <2>: PDP-11 Options. (line 9) 30542* mfpu: ARM Options. (line 119) 30543* mfull-toc: RS/6000 and PowerPC Options. 30544 (line 233) 30545* mfused-madd <1>: Xtensa Options. (line 19) 30546* mfused-madd <2>: S/390 and zSeries Options. 30547 (line 128) 30548* mfused-madd <3>: RS/6000 and PowerPC Options. 30549 (line 349) 30550* mfused-madd: MIPS Options. (line 294) 30551* mg: VAX Options. (line 17) 30552* MG: Preprocessor Options. 30553 (line 216) 30554* mgas <1>: HPPA Options. (line 75) 30555* mgas: DEC Alpha Options. (line 159) 30556* mgettrcost=NUMBER: SH Options. (line 190) 30557* mglibc: GNU/Linux Options. (line 9) 30558* mgnu: VAX Options. (line 13) 30559* mgnu-as: IA-64 Options. (line 18) 30560* mgnu-ld: IA-64 Options. (line 23) 30561* mgotplt: CRIS Options. (line 86) 30562* mgp32: MIPS Options. (line 150) 30563* mgp64: MIPS Options. (line 153) 30564* mgpr-32: FRV Options. (line 7) 30565* mgpr-64: FRV Options. (line 10) 30566* mgprel-ro: FRV Options. (line 79) 30567* mh: H8/300 Options. (line 14) 30568* mhard-float <1>: SPARC Options. (line 20) 30569* mhard-float <2>: S/390 and zSeries Options. 30570 (line 11) 30571* mhard-float <3>: RS/6000 and PowerPC Options. 30572 (line 311) 30573* mhard-float <4>: MIPS Options. (line 162) 30574* mhard-float <5>: FRV Options. (line 19) 30575* mhard-float: ARM Options. (line 41) 30576* mhard-quad-float: SPARC Options. (line 41) 30577* mhardlit: MCore Options. (line 10) 30578* mhitachi: SH Options. (line 81) 30579* mid-shared-library: Blackfin Options. (line 39) 30580* mieee <1>: SH Options. (line 96) 30581* mieee: DEC Alpha Options. (line 39) 30582* mieee-conformant: DEC Alpha Options. (line 134) 30583* mieee-fp: i386 and x86-64 Options. 30584 (line 200) 30585* mieee-with-inexact: DEC Alpha Options. (line 52) 30586* milp32: IA-64 Options. (line 114) 30587* mimpure-text: SPARC Options. (line 81) 30588* mindexed-addressing: SH Options. (line 180) 30589* minit-stack: AVR Options. (line 35) 30590* minline-all-stringops: i386 and x86-64 Options. 30591 (line 436) 30592* minline-float-divide-max-throughput: IA-64 Options. (line 58) 30593* minline-float-divide-min-latency: IA-64 Options. (line 54) 30594* minline-int-divide-max-throughput: IA-64 Options. (line 66) 30595* minline-int-divide-min-latency: IA-64 Options. (line 62) 30596* minline-plt: FRV Options. (line 64) 30597* minline-sqrt-max-throughput: IA-64 Options. (line 74) 30598* minline-sqrt-min-latency: IA-64 Options. (line 70) 30599* minmax: M68hc1x Options. (line 31) 30600* minsert-sched-nops: RS/6000 and PowerPC Options. 30601 (line 441) 30602* mint16: PDP-11 Options. (line 40) 30603* mint32 <1>: PDP-11 Options. (line 44) 30604* mint32: H8/300 Options. (line 28) 30605* mint8: AVR Options. (line 53) 30606* minvalid-symbols: SH Options. (line 213) 30607* mips1: MIPS Options. (line 59) 30608* mips16: MIPS Options. (line 81) 30609* mips2: MIPS Options. (line 62) 30610* mips3: MIPS Options. (line 65) 30611* mips32: MIPS Options. (line 71) 30612* mips32r2: MIPS Options. (line 74) 30613* mips3d: MIPS Options. (line 190) 30614* mips4: MIPS Options. (line 68) 30615* mips64: MIPS Options. (line 77) 30616* misel: RS/6000 and PowerPC Options. 30617 (line 187) 30618* misize: SH Options. (line 103) 30619* missue-rate=NUMBER: M32R/D Options. (line 79) 30620* mjump-in-delay: HPPA Options. (line 28) 30621* mkernel: Darwin Options. (line 75) 30622* mknuthdiv: MMIX Options. (line 33) 30623* ml: SH Options. (line 61) 30624* mlarge-data: DEC Alpha Options. (line 195) 30625* mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 30626 (line 280) 30627* mlarge-text: DEC Alpha Options. (line 213) 30628* mlibfuncs: MMIX Options. (line 10) 30629* mlibrary-pic: FRV Options. (line 110) 30630* mlinked-fp: FRV Options. (line 94) 30631* mlinker-opt: HPPA Options. (line 85) 30632* mlinux: CRIS Options. (line 104) 30633* mlittle: RS/6000 and PowerPC Options. 30634 (line 408) 30635* mlittle-endian <1>: SPARC Options. (line 183) 30636* mlittle-endian <2>: RS/6000 and PowerPC Options. 30637 (line 408) 30638* mlittle-endian <3>: MCore Options. (line 39) 30639* mlittle-endian <4>: IA-64 Options. (line 13) 30640* mlittle-endian: ARM Options. (line 68) 30641* mlong-calls <1>: V850 Options. (line 10) 30642* mlong-calls <2>: MIPS Options. (line 280) 30643* mlong-calls <3>: M68hc1x Options. (line 35) 30644* mlong-calls <4>: FRV Options. (line 99) 30645* mlong-calls <5>: Blackfin Options. (line 57) 30646* mlong-calls: ARM Options. (line 149) 30647* mlong-double-128: S/390 and zSeries Options. 30648 (line 20) 30649* mlong-double-64: S/390 and zSeries Options. 30650 (line 20) 30651* mlong-load-store: HPPA Options. (line 66) 30652* mlong32: MIPS Options. (line 199) 30653* mlong64: MIPS Options. (line 194) 30654* mlongcall: RS/6000 and PowerPC Options. 30655 (line 621) 30656* mlongcalls: Xtensa Options. (line 60) 30657* mloop-unsigned: TMS320C3x/C4x Options. 30658 (line 94) 30659* mlow-64k: Blackfin Options. (line 32) 30660* mlp64: IA-64 Options. (line 114) 30661* MM: Preprocessor Options. 30662 (line 197) 30663* mmac <1>: Score Options. (line 21) 30664* mmac: CRX Options. (line 9) 30665* mmad: MIPS Options. (line 289) 30666* mmangle-cpu: ARC Options. (line 15) 30667* mmax: DEC Alpha Options. (line 171) 30668* mmax-stack-frame: CRIS Options. (line 22) 30669* mmcu: AVR Options. (line 9) 30670* MMD: Preprocessor Options. 30671 (line 276) 30672* mmedia: FRV Options. (line 44) 30673* mmemcpy: MIPS Options. (line 274) 30674* mmemory-latency: DEC Alpha Options. (line 266) 30675* mmemparm: TMS320C3x/C4x Options. 30676 (line 109) 30677* mmfcrf: RS/6000 and PowerPC Options. 30678 (line 25) 30679* mminimal-toc: RS/6000 and PowerPC Options. 30680 (line 233) 30681* mmmx: i386 and x86-64 Options. 30682 (line 389) 30683* mmodel=large: M32R/D Options. (line 33) 30684* mmodel=medium: M32R/D Options. (line 27) 30685* mmodel=small: M32R/D Options. (line 18) 30686* mmpyi: TMS320C3x/C4x Options. 30687 (line 53) 30688* mmul-bug-workaround: CRIS Options. (line 36) 30689* mmuladd: FRV Options. (line 50) 30690* mmulhw: RS/6000 and PowerPC Options. 30691 (line 355) 30692* mmult-bug: MN10300 Options. (line 9) 30693* mmulti-cond-exec: FRV Options. (line 176) 30694* mmultiple: RS/6000 and PowerPC Options. 30695 (line 317) 30696* mmvcle: S/390 and zSeries Options. 30697 (line 97) 30698* mmvme: RS/6000 and PowerPC Options. 30699 (line 527) 30700* mn: H8/300 Options. (line 20) 30701* mnested-cond-exec: FRV Options. (line 189) 30702* mnew-mnemonics: RS/6000 and PowerPC Options. 30703 (line 85) 30704* mnhwloop: Score Options. (line 15) 30705* mno-3dnow: i386 and x86-64 Options. 30706 (line 389) 30707* mno-4byte-functions: MCore Options. (line 27) 30708* mno-abicalls: MIPS Options. (line 100) 30709* mno-abshi: PDP-11 Options. (line 58) 30710* mno-ac0: PDP-11 Options. (line 20) 30711* mno-align-double: i386 and x86-64 Options. 30712 (line 238) 30713* mno-align-int: M680x0 Options. (line 132) 30714* mno-align-loops: M32R/D Options. (line 76) 30715* mno-align-stringops: i386 and x86-64 Options. 30716 (line 431) 30717* mno-altivec: RS/6000 and PowerPC Options. 30718 (line 164) 30719* mno-am33: MN10300 Options. (line 20) 30720* mno-app-regs <1>: V850 Options. (line 61) 30721* mno-app-regs: SPARC Options. (line 10) 30722* mno-bacc: MT Options. (line 19) 30723* mno-backchain: S/390 and zSeries Options. 30724 (line 26) 30725* mno-base-addresses: MMIX Options. (line 54) 30726* mno-bit-align: RS/6000 and PowerPC Options. 30727 (line 368) 30728* mno-bk: TMS320C3x/C4x Options. 30729 (line 27) 30730* mno-branch-likely: MIPS Options. (line 367) 30731* mno-branch-predict: MMIX Options. (line 49) 30732* mno-bwx: DEC Alpha Options. (line 171) 30733* mno-callgraph-data: MCore Options. (line 31) 30734* mno-check-zero-division: MIPS Options. (line 254) 30735* mno-cirrus-fix-invalid-insns: ARM Options. (line 187) 30736* mno-cix: DEC Alpha Options. (line 171) 30737* mno-cond-exec: FRV Options. (line 158) 30738* mno-cond-move: FRV Options. (line 134) 30739* mno-const-align: CRIS Options. (line 60) 30740* mno-const16: Xtensa Options. (line 10) 30741* mno-crt0 <1>: MT Options. (line 25) 30742* mno-crt0: MN10300 Options. (line 31) 30743* mno-csync-anomaly: Blackfin Options. (line 28) 30744* mno-data-align: CRIS Options. (line 60) 30745* mno-db: TMS320C3x/C4x Options. 30746 (line 32) 30747* mno-debug: S/390 and zSeries Options. 30748 (line 104) 30749* mno-div: MCore Options. (line 15) 30750* mno-dlmzb: RS/6000 and PowerPC Options. 30751 (line 362) 30752* mno-double: FRV Options. (line 41) 30753* mno-dsp: MIPS Options. (line 178) 30754* mno-dwarf2-asm: IA-64 Options. (line 79) 30755* mno-dword: FRV Options. (line 35) 30756* mno-eabi: RS/6000 and PowerPC Options. 30757 (line 555) 30758* mno-early-stop-bits: IA-64 Options. (line 85) 30759* mno-eflags: FRV Options. (line 125) 30760* mno-embedded-data: MIPS Options. (line 225) 30761* mno-ep: V850 Options. (line 16) 30762* mno-epsilon: MMIX Options. (line 15) 30763* mno-explicit-relocs <1>: MIPS Options. (line 245) 30764* mno-explicit-relocs: DEC Alpha Options. (line 184) 30765* mno-fancy-math-387: i386 and x86-64 Options. 30766 (line 227) 30767* mno-fast-fix: TMS320C3x/C4x Options. 30768 (line 62) 30769* mno-faster-structs: SPARC Options. (line 71) 30770* mno-fix: DEC Alpha Options. (line 171) 30771* mno-fix-r4000: MIPS Options. (line 309) 30772* mno-fix-r4400: MIPS Options. (line 323) 30773* mno-float32: PDP-11 Options. (line 48) 30774* mno-float64: PDP-11 Options. (line 52) 30775* mno-flush-func: M32R/D Options. (line 99) 30776* mno-flush-trap: M32R/D Options. (line 91) 30777* mno-fp-in-toc: RS/6000 and PowerPC Options. 30778 (line 233) 30779* mno-fp-regs: DEC Alpha Options. (line 25) 30780* mno-fp-ret-in-387: i386 and x86-64 Options. 30781 (line 217) 30782* mno-fprnd: RS/6000 and PowerPC Options. 30783 (line 25) 30784* mno-fpu: SPARC Options. (line 25) 30785* mno-fused-madd <1>: Xtensa Options. (line 19) 30786* mno-fused-madd <2>: S/390 and zSeries Options. 30787 (line 128) 30788* mno-fused-madd <3>: RS/6000 and PowerPC Options. 30789 (line 349) 30790* mno-fused-madd: MIPS Options. (line 294) 30791* mno-gnu-as: IA-64 Options. (line 18) 30792* mno-gnu-ld: IA-64 Options. (line 23) 30793* mno-gotplt: CRIS Options. (line 86) 30794* mno-hardlit: MCore Options. (line 10) 30795* mno-id-shared-library: Blackfin Options. (line 45) 30796* mno-ieee-fp: i386 and x86-64 Options. 30797 (line 200) 30798* mno-int16: PDP-11 Options. (line 44) 30799* mno-int32: PDP-11 Options. (line 40) 30800* mno-interrupts: AVR Options. (line 39) 30801* mno-isel: RS/6000 and PowerPC Options. 30802 (line 187) 30803* mno-knuthdiv: MMIX Options. (line 33) 30804* mno-libfuncs: MMIX Options. (line 10) 30805* mno-long-calls <1>: V850 Options. (line 10) 30806* mno-long-calls <2>: MIPS Options. (line 280) 30807* mno-long-calls <3>: M68hc1x Options. (line 35) 30808* mno-long-calls <4>: HPPA Options. (line 138) 30809* mno-long-calls <5>: Blackfin Options. (line 57) 30810* mno-long-calls: ARM Options. (line 149) 30811* mno-longcall: RS/6000 and PowerPC Options. 30812 (line 621) 30813* mno-longcalls: Xtensa Options. (line 60) 30814* mno-loop-unsigned: TMS320C3x/C4x Options. 30815 (line 94) 30816* mno-low-64k: Blackfin Options. (line 36) 30817* mno-mad: MIPS Options. (line 289) 30818* mno-max: DEC Alpha Options. (line 171) 30819* mno-media: FRV Options. (line 47) 30820* mno-memcpy: MIPS Options. (line 274) 30821* mno-mfcrf: RS/6000 and PowerPC Options. 30822 (line 25) 30823* mno-mips16: MIPS Options. (line 81) 30824* mno-mips3d: MIPS Options. (line 190) 30825* mno-mmx: i386 and x86-64 Options. 30826 (line 389) 30827* mno-mpyi: TMS320C3x/C4x Options. 30828 (line 53) 30829* mno-mul-bug-workaround: CRIS Options. (line 36) 30830* mno-muladd: FRV Options. (line 53) 30831* mno-mulhw: RS/6000 and PowerPC Options. 30832 (line 355) 30833* mno-mult-bug: MN10300 Options. (line 13) 30834* mno-multi-cond-exec: FRV Options. (line 183) 30835* mno-multiple: RS/6000 and PowerPC Options. 30836 (line 317) 30837* mno-mvcle: S/390 and zSeries Options. 30838 (line 97) 30839* mno-nested-cond-exec: FRV Options. (line 195) 30840* mno-optimize-membar: FRV Options. (line 205) 30841* mno-pack: FRV Options. (line 122) 30842* mno-packed-stack: S/390 and zSeries Options. 30843 (line 46) 30844* mno-paired-single: MIPS Options. (line 183) 30845* mno-parallel-insns: TMS320C3x/C4x Options. 30846 (line 115) 30847* mno-parallel-mpy: TMS320C3x/C4x Options. 30848 (line 120) 30849* mno-pic: IA-64 Options. (line 26) 30850* mno-popcntb: RS/6000 and PowerPC Options. 30851 (line 25) 30852* mno-power: RS/6000 and PowerPC Options. 30853 (line 25) 30854* mno-power2: RS/6000 and PowerPC Options. 30855 (line 25) 30856* mno-powerpc: RS/6000 and PowerPC Options. 30857 (line 25) 30858* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 30859 (line 25) 30860* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 30861 (line 25) 30862* mno-powerpc64: RS/6000 and PowerPC Options. 30863 (line 25) 30864* mno-prolog-function: V850 Options. (line 23) 30865* mno-prologue-epilogue: CRIS Options. (line 76) 30866* mno-prototype: RS/6000 and PowerPC Options. 30867 (line 511) 30868* mno-push-args: i386 and x86-64 Options. 30869 (line 408) 30870* mno-register-names: IA-64 Options. (line 37) 30871* mno-regnames: RS/6000 and PowerPC Options. 30872 (line 615) 30873* mno-relax-immediate: MCore Options. (line 19) 30874* mno-relocatable: RS/6000 and PowerPC Options. 30875 (line 385) 30876* mno-relocatable-lib: RS/6000 and PowerPC Options. 30877 (line 393) 30878* mno-rptb: TMS320C3x/C4x Options. 30879 (line 72) 30880* mno-rpts: TMS320C3x/C4x Options. 30881 (line 81) 30882* mno-scc: FRV Options. (line 146) 30883* mno-sched-ar-data-spec: IA-64 Options. (line 128) 30884* mno-sched-ar-in-data-spec: IA-64 Options. (line 149) 30885* mno-sched-br-data-spec: IA-64 Options. (line 121) 30886* mno-sched-br-in-data-spec: IA-64 Options. (line 142) 30887* mno-sched-control-ldc: IA-64 Options. (line 168) 30888* mno-sched-control-spec: IA-64 Options. (line 135) 30889* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 194) 30890* mno-sched-in-control-spec: IA-64 Options. (line 156) 30891* mno-sched-ldc: IA-64 Options. (line 162) 30892* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 30893* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 30894* mno-sched-prolog: ARM Options. (line 32) 30895* mno-sched-spec-verbose: IA-64 Options. (line 176) 30896* mno-sdata <1>: RS/6000 and PowerPC Options. 30897 (line 602) 30898* mno-sdata: IA-64 Options. (line 42) 30899* mno-side-effects: CRIS Options. (line 51) 30900* mno-single-exit: MMIX Options. (line 66) 30901* mno-slow-bytes: MCore Options. (line 35) 30902* mno-small-exec: S/390 and zSeries Options. 30903 (line 72) 30904* mno-soft-float: DEC Alpha Options. (line 10) 30905* mno-space-regs: HPPA Options. (line 45) 30906* mno-spe: RS/6000 and PowerPC Options. 30907 (line 196) 30908* mno-specld-anomaly: Blackfin Options. (line 19) 30909* mno-split: PDP-11 Options. (line 71) 30910* mno-split-addresses: MIPS Options. (line 239) 30911* mno-sse: i386 and x86-64 Options. 30912 (line 389) 30913* mno-stack-align: CRIS Options. (line 60) 30914* mno-stack-bias: SPARC Options. (line 220) 30915* mno-strict-align <1>: RS/6000 and PowerPC Options. 30916 (line 380) 30917* mno-strict-align: M680x0 Options. (line 152) 30918* mno-string: RS/6000 and PowerPC Options. 30919 (line 328) 30920* mno-sum-in-toc: RS/6000 and PowerPC Options. 30921 (line 233) 30922* mno-svr3-shlib: i386 and x86-64 Options. 30923 (line 287) 30924* mno-swdiv: RS/6000 and PowerPC Options. 30925 (line 154) 30926* mno-sym32: MIPS Options. (line 209) 30927* mno-tablejump: AVR Options. (line 47) 30928* mno-target-align: Xtensa Options. (line 47) 30929* mno-text-section-literals: Xtensa Options. (line 35) 30930* mno-toc: RS/6000 and PowerPC Options. 30931 (line 402) 30932* mno-toplevel-symbols: MMIX Options. (line 40) 30933* mno-tpf-trace: S/390 and zSeries Options. 30934 (line 122) 30935* mno-unaligned-doubles: SPARC Options. (line 59) 30936* mno-uninit-const-in-rodata: MIPS Options. (line 233) 30937* mno-update: RS/6000 and PowerPC Options. 30938 (line 339) 30939* mno-v8plus: SPARC Options. (line 168) 30940* mno-vis: SPARC Options. (line 175) 30941* mno-vliw-branch: FRV Options. (line 170) 30942* mno-volatile-asm-stop: IA-64 Options. (line 32) 30943* mno-vrsave: RS/6000 and PowerPC Options. 30944 (line 173) 30945* mno-wide-bitfields: MCore Options. (line 23) 30946* mno-xgot: MIPS Options. (line 127) 30947* mno-xl-compat: RS/6000 and PowerPC Options. 30948 (line 268) 30949* mno-zero-extend: MMIX Options. (line 27) 30950* mnobitfield: M680x0 Options. (line 100) 30951* mnomacsave: SH Options. (line 92) 30952* mnominmax: M68hc1x Options. (line 31) 30953* mnop-fun-dllimport: ARM Options. (line 174) 30954* mold-mnemonics: RS/6000 and PowerPC Options. 30955 (line 85) 30956* momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 30957 (line 443) 30958* momit-leaf-frame-pointer: Blackfin Options. (line 7) 30959* mone-byte-bool: Darwin Options. (line 83) 30960* moptimize-membar: FRV Options. (line 201) 30961* MP: Preprocessor Options. 30962 (line 226) 30963* mpa-risc-1-0: HPPA Options. (line 19) 30964* mpa-risc-1-1: HPPA Options. (line 19) 30965* mpa-risc-2-0: HPPA Options. (line 19) 30966* mpack: FRV Options. (line 119) 30967* mpacked-stack: S/390 and zSeries Options. 30968 (line 46) 30969* mpadstruct: SH Options. (line 106) 30970* mpaired-single: MIPS Options. (line 183) 30971* mparallel-insns: TMS320C3x/C4x Options. 30972 (line 115) 30973* mparallel-mpy: TMS320C3x/C4x Options. 30974 (line 120) 30975* mparanoid: TMS320C3x/C4x Options. 30976 (line 45) 30977* mpcrel: M680x0 Options. (line 144) 30978* mpdebug: CRIS Options. (line 40) 30979* mpe: RS/6000 and PowerPC Options. 30980 (line 288) 30981* mpentium: i386 and x86-64 Options. 30982 (line 142) 30983* mpentiumpro: i386 and x86-64 Options. 30984 (line 142) 30985* mpic-register: ARM Options. (line 183) 30986* mpoke-function-name: ARM Options. (line 197) 30987* mpopcntb: RS/6000 and PowerPC Options. 30988 (line 25) 30989* mportable-runtime: HPPA Options. (line 71) 30990* mpower: RS/6000 and PowerPC Options. 30991 (line 25) 30992* mpower2: RS/6000 and PowerPC Options. 30993 (line 25) 30994* mpowerpc: RS/6000 and PowerPC Options. 30995 (line 25) 30996* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 30997 (line 25) 30998* mpowerpc-gpopt: RS/6000 and PowerPC Options. 30999 (line 25) 31000* mpowerpc64: RS/6000 and PowerPC Options. 31001 (line 25) 31002* mprefergot: SH Options. (line 113) 31003* mpreferred-stack-boundary: i386 and x86-64 Options. 31004 (line 351) 31005* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 31006 (line 425) 31007* mprolog-function: V850 Options. (line 23) 31008* mprologue-epilogue: CRIS Options. (line 76) 31009* mprototype: RS/6000 and PowerPC Options. 31010 (line 511) 31011* mpt-fixed: SH Options. (line 194) 31012* mpush-args <1>: i386 and x86-64 Options. 31013 (line 408) 31014* mpush-args: CRX Options. (line 13) 31015* MQ: Preprocessor Options. 31016 (line 252) 31017* mregister-names: IA-64 Options. (line 37) 31018* mregnames: RS/6000 and PowerPC Options. 31019 (line 615) 31020* mregparm <1>: TMS320C3x/C4x Options. 31021 (line 109) 31022* mregparm: i386 and x86-64 Options. 31023 (line 316) 31024* mrelax <1>: SH Options. (line 70) 31025* mrelax <2>: MN10300 Options. (line 34) 31026* mrelax: H8/300 Options. (line 9) 31027* mrelax-immediate: MCore Options. (line 19) 31028* mrelocatable: RS/6000 and PowerPC Options. 31029 (line 385) 31030* mrelocatable-lib: RS/6000 and PowerPC Options. 31031 (line 393) 31032* mreturn-pointer-on-d0: MN10300 Options. (line 24) 31033* mrodata: ARC Options. (line 30) 31034* mrptb: TMS320C3x/C4x Options. 31035 (line 72) 31036* mrpts: TMS320C3x/C4x Options. 31037 (line 81) 31038* mrtd <1>: Function Attributes. 31039 (line 100) 31040* mrtd <2>: M680x0 Options. (line 109) 31041* mrtd: i386 and x86-64 Options. 31042 (line 292) 31043* ms: H8/300 Options. (line 17) 31044* ms2600: H8/300 Options. (line 24) 31045* mscc: FRV Options. (line 140) 31046* msched-ar-data-spec: IA-64 Options. (line 128) 31047* msched-ar-in-data-spec: IA-64 Options. (line 149) 31048* msched-br-data-spec: IA-64 Options. (line 121) 31049* msched-br-in-data-spec: IA-64 Options. (line 142) 31050* msched-control-ldc: IA-64 Options. (line 168) 31051* msched-control-spec: IA-64 Options. (line 135) 31052* msched-costly-dep: RS/6000 and PowerPC Options. 31053 (line 432) 31054* msched-count-spec-in-critical-path: IA-64 Options. (line 194) 31055* msched-in-control-spec: IA-64 Options. (line 156) 31056* msched-ldc: IA-64 Options. (line 162) 31057* msched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 31058* msched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 31059* msched-spec-verbose: IA-64 Options. (line 176) 31060* mschedule: HPPA Options. (line 78) 31061* mscore5: Score Options. (line 25) 31062* mscore5u: Score Options. (line 28) 31063* mscore7: Score Options. (line 31) 31064* mscore7d: Score Options. (line 34) 31065* msda: V850 Options. (line 40) 31066* msdata <1>: RS/6000 and PowerPC Options. 31067 (line 589) 31068* msdata: IA-64 Options. (line 42) 31069* msdata-data: RS/6000 and PowerPC Options. 31070 (line 594) 31071* msdata=default: RS/6000 and PowerPC Options. 31072 (line 589) 31073* msdata=eabi: RS/6000 and PowerPC Options. 31074 (line 569) 31075* msdata=none <1>: RS/6000 and PowerPC Options. 31076 (line 602) 31077* msdata=none: M32R/D Options. (line 40) 31078* msdata=sdata: M32R/D Options. (line 49) 31079* msdata=sysv: RS/6000 and PowerPC Options. 31080 (line 580) 31081* msdata=use: M32R/D Options. (line 53) 31082* msecure-plt: RS/6000 and PowerPC Options. 31083 (line 176) 31084* mshared-library-id: Blackfin Options. (line 49) 31085* mshort <1>: M68hc1x Options. (line 40) 31086* mshort: M680x0 Options. (line 94) 31087* msim <1>: Xstormy16 Options. (line 9) 31088* msim <2>: RS/6000 and PowerPC Options. 31089 (line 521) 31090* msim <3>: MT Options. (line 22) 31091* msim: M32C Options. (line 13) 31092* msingle-exit: MMIX Options. (line 66) 31093* msingle-float: MIPS Options. (line 169) 31094* msingle-pic-base: ARM Options. (line 177) 31095* msio: HPPA Options. (line 107) 31096* msize: AVR Options. (line 32) 31097* mslow-bytes: MCore Options. (line 35) 31098* msmall: TMS320C3x/C4x Options. 31099 (line 18) 31100* msmall-data: DEC Alpha Options. (line 195) 31101* msmall-exec: S/390 and zSeries Options. 31102 (line 72) 31103* msmall-memory: TMS320C3x/C4x Options. 31104 (line 18) 31105* msmall-text: DEC Alpha Options. (line 213) 31106* msoft-float <1>: SPARC Options. (line 25) 31107* msoft-float <2>: S/390 and zSeries Options. 31108 (line 11) 31109* msoft-float <3>: RS/6000 and PowerPC Options. 31110 (line 311) 31111* msoft-float <4>: PDP-11 Options. (line 13) 31112* msoft-float <5>: MIPS Options. (line 165) 31113* msoft-float <6>: M680x0 Options. (line 84) 31114* msoft-float <7>: i386 and x86-64 Options. 31115 (line 205) 31116* msoft-float <8>: HPPA Options. (line 91) 31117* msoft-float <9>: FRV Options. (line 22) 31118* msoft-float <10>: DEC Alpha Options. (line 10) 31119* msoft-float: ARM Options. (line 45) 31120* msoft-quad-float: SPARC Options. (line 45) 31121* msoft-reg-count: M68hc1x Options. (line 43) 31122* mspace <1>: V850 Options. (line 30) 31123* mspace: SH Options. (line 110) 31124* mspe: RS/6000 and PowerPC Options. 31125 (line 196) 31126* mspecld-anomaly: Blackfin Options. (line 14) 31127* msplit: PDP-11 Options. (line 68) 31128* msplit-addresses: MIPS Options. (line 239) 31129* msse: i386 and x86-64 Options. 31130 (line 389) 31131* msseregparm: i386 and x86-64 Options. 31132 (line 327) 31133* mstack-align: CRIS Options. (line 60) 31134* mstack-bias: SPARC Options. (line 220) 31135* mstack-guard: S/390 and zSeries Options. 31136 (line 148) 31137* mstack-size: S/390 and zSeries Options. 31138 (line 148) 31139* mstackrealign: i386 and x86-64 Options. 31140 (line 337) 31141* mstrict-align <1>: RS/6000 and PowerPC Options. 31142 (line 380) 31143* mstrict-align: M680x0 Options. (line 152) 31144* mstring: RS/6000 and PowerPC Options. 31145 (line 328) 31146* mstructure-size-boundary: ARM Options. (line 129) 31147* msvr3-shlib: i386 and x86-64 Options. 31148 (line 287) 31149* msvr4-struct-return: RS/6000 and PowerPC Options. 31150 (line 485) 31151* mswdiv: RS/6000 and PowerPC Options. 31152 (line 154) 31153* msym32: MIPS Options. (line 209) 31154* mt: IA-64 Options. (line 106) 31155* MT: Preprocessor Options. 31156 (line 238) 31157* mtarget-align: Xtensa Options. (line 47) 31158* mtda: V850 Options. (line 34) 31159* mtext: ARC Options. (line 30) 31160* mtext-section-literals: Xtensa Options. (line 35) 31161* mthreads: i386 and x86-64 Options. 31162 (line 423) 31163* mthumb: ARM Options. (line 218) 31164* mthumb-interwork: ARM Options. (line 25) 31165* mti: TMS320C3x/C4x Options. 31166 (line 102) 31167* mtiny-stack: AVR Options. (line 50) 31168* mtls-direct-seg-refs: i386 and x86-64 Options. 31169 (line 451) 31170* mtls-size: IA-64 Options. (line 97) 31171* mtoc: RS/6000 and PowerPC Options. 31172 (line 402) 31173* mtomcat-stats: FRV Options. (line 209) 31174* mtoplevel-symbols: MMIX Options. (line 40) 31175* mtp: ARM Options. (line 246) 31176* mtpcs-frame: ARM Options. (line 222) 31177* mtpcs-leaf-frame: ARM Options. (line 228) 31178* mtpf-trace: S/390 and zSeries Options. 31179 (line 122) 31180* mtrap-precision: DEC Alpha Options. (line 109) 31181* mtune <1>: SPARC Options. (line 156) 31182* mtune <2>: S/390 and zSeries Options. 31183 (line 115) 31184* mtune <3>: RS/6000 and PowerPC Options. 31185 (line 144) 31186* mtune <4>: MIPS Options. (line 44) 31187* mtune <5>: IA-64 Options. (line 101) 31188* mtune <6>: i386 and x86-64 Options. 31189 (line 10) 31190* mtune <7>: DEC Alpha Options. (line 262) 31191* mtune <8>: CRIS Options. (line 16) 31192* mtune: ARM Options. (line 99) 31193* muclibc: GNU/Linux Options. (line 13) 31194* muls: Score Options. (line 18) 31195* multcost=NUMBER: SH Options. (line 124) 31196* multi_module: Darwin Options. (line 190) 31197* multilib-library-pic: FRV Options. (line 89) 31198* multiply_defined: Darwin Options. (line 190) 31199* multiply_defined_unused: Darwin Options. (line 190) 31200* munaligned-doubles: SPARC Options. (line 59) 31201* muninit-const-in-rodata: MIPS Options. (line 233) 31202* munix: VAX Options. (line 9) 31203* munix-asm: PDP-11 Options. (line 74) 31204* mupdate: RS/6000 and PowerPC Options. 31205 (line 339) 31206* musermode: SH Options. (line 118) 31207* mv850: V850 Options. (line 49) 31208* mv850e: V850 Options. (line 69) 31209* mv850e1: V850 Options. (line 64) 31210* mv8plus: SPARC Options. (line 168) 31211* mvis: SPARC Options. (line 175) 31212* mvliw-branch: FRV Options. (line 164) 31213* mvms-return-codes: DEC Alpha/VMS Options. 31214 (line 9) 31215* mvolatile-asm-stop: IA-64 Options. (line 32) 31216* mvr4130-align: MIPS Options. (line 388) 31217* mvrsave: RS/6000 and PowerPC Options. 31218 (line 173) 31219* mvxworks: RS/6000 and PowerPC Options. 31220 (line 542) 31221* mwarn-dynamicstack: S/390 and zSeries Options. 31222 (line 141) 31223* mwarn-framesize: S/390 and zSeries Options. 31224 (line 133) 31225* mwide-bitfields: MCore Options. (line 23) 31226* mwindiss: RS/6000 and PowerPC Options. 31227 (line 546) 31228* mwords-little-endian: ARM Options. (line 76) 31229* mxgot: MIPS Options. (line 127) 31230* mxl-compat: RS/6000 and PowerPC Options. 31231 (line 268) 31232* myellowknife: RS/6000 and PowerPC Options. 31233 (line 537) 31234* mzarch: S/390 and zSeries Options. 31235 (line 87) 31236* mzda: V850 Options. (line 45) 31237* mzero-extend: MMIX Options. (line 27) 31238* no-integrated-cpp: C Dialect Options. (line 217) 31239* no-red-zone: i386 and x86-64 Options. 31240 (line 472) 31241* no_dead_strip_inits_and_terms: Darwin Options. (line 190) 31242* noall_load: Darwin Options. (line 190) 31243* nocpp: MIPS Options. (line 304) 31244* nodefaultlibs: Link Options. (line 62) 31245* nofixprebinding: Darwin Options. (line 190) 31246* nolibdld: HPPA Options. (line 190) 31247* nomultidefs: Darwin Options. (line 190) 31248* noprebind: Darwin Options. (line 190) 31249* noseglinkedit: Darwin Options. (line 190) 31250* nostartfiles: Link Options. (line 57) 31251* nostdinc: Preprocessor Options. 31252 (line 373) 31253* nostdinc++ <1>: Preprocessor Options. 31254 (line 378) 31255* nostdinc++: C++ Dialect Options. 31256 (line 225) 31257* nostdlib: Link Options. (line 71) 31258* o: Preprocessor Options. 31259 (line 72) 31260* O: Optimize Options. (line 32) 31261* o: Overall Options. (line 175) 31262* O0: Optimize Options. (line 104) 31263* O1: Optimize Options. (line 32) 31264* O2: Optimize Options. (line 63) 31265* O3: Optimize Options. (line 99) 31266* Os: Optimize Options. (line 107) 31267* P: Preprocessor Options. 31268 (line 551) 31269* p: Debugging Options. (line 130) 31270* pagezero_size: Darwin Options. (line 190) 31271* param: Optimize Options. (line 1358) 31272* pass-exit-codes: Overall Options. (line 133) 31273* pedantic <1>: Warnings and Errors. 31274 (line 25) 31275* pedantic <2>: Alternate Keywords. (line 29) 31276* pedantic <3>: C Extensions. (line 6) 31277* pedantic <4>: Preprocessor Options. 31278 (line 163) 31279* pedantic <5>: Warning Options. (line 27) 31280* pedantic: Standards. (line 13) 31281* pedantic-errors <1>: Warnings and Errors. 31282 (line 25) 31283* pedantic-errors <2>: Non-bugs. (line 216) 31284* pedantic-errors <3>: Preprocessor Options. 31285 (line 168) 31286* pedantic-errors <4>: Warning Options. (line 69) 31287* pedantic-errors: Standards. (line 13) 31288* pg: Debugging Options. (line 136) 31289* pie: Link Options. (line 92) 31290* pipe: Overall Options. (line 197) 31291* prebind: Darwin Options. (line 190) 31292* prebind_all_twolevel_modules: Darwin Options. (line 190) 31293* preprocessor: Preprocessor Options. 31294 (line 24) 31295* print-file-name: Debugging Options. (line 728) 31296* print-libgcc-file-name: Debugging Options. (line 749) 31297* print-multi-directory: Debugging Options. (line 734) 31298* print-multi-lib: Debugging Options. (line 739) 31299* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 31300 (line 244) 31301* print-prog-name: Debugging Options. (line 746) 31302* print-search-dirs: Debugging Options. (line 757) 31303* private_bundle: Darwin Options. (line 190) 31304* pthread <1>: SPARC Options. (line 240) 31305* pthread <2>: RS/6000 and PowerPC Options. 31306 (line 653) 31307* pthread: IA-64 Options. (line 106) 31308* pthreads: SPARC Options. (line 234) 31309* Q: Debugging Options. (line 142) 31310* Qn: System V Options. (line 18) 31311* Qy: System V Options. (line 14) 31312* rdynamic: Link Options. (line 98) 31313* read_only_relocs: Darwin Options. (line 190) 31314* remap: Preprocessor Options. 31315 (line 599) 31316* s: Link Options. (line 105) 31317* S <1>: Link Options. (line 20) 31318* S: Overall Options. (line 158) 31319* save-temps: Debugging Options. (line 690) 31320* sectalign: Darwin Options. (line 190) 31321* sectcreate: Darwin Options. (line 190) 31322* sectobjectsymbols: Darwin Options. (line 190) 31323* sectorder: Darwin Options. (line 190) 31324* seg1addr: Darwin Options. (line 190) 31325* seg_addr_table: Darwin Options. (line 190) 31326* seg_addr_table_filename: Darwin Options. (line 190) 31327* segaddr: Darwin Options. (line 190) 31328* seglinkedit: Darwin Options. (line 190) 31329* segprot: Darwin Options. (line 190) 31330* segs_read_only_addr: Darwin Options. (line 190) 31331* segs_read_write_addr: Darwin Options. (line 190) 31332* shared: Link Options. (line 114) 31333* shared-libgcc: Link Options. (line 122) 31334* sim: CRIS Options. (line 108) 31335* sim2: CRIS Options. (line 114) 31336* single_module: Darwin Options. (line 190) 31337* specs: Directory Options. (line 84) 31338* static <1>: HPPA Options. (line 194) 31339* static <2>: Darwin Options. (line 190) 31340* static: Link Options. (line 109) 31341* static-libgcc: Link Options. (line 122) 31342* std <1>: Non-bugs. (line 107) 31343* std <2>: Other Builtins. (line 22) 31344* std <3>: C Dialect Options. (line 47) 31345* std: Standards. (line 13) 31346* std=: Preprocessor Options. 31347 (line 324) 31348* sub_library: Darwin Options. (line 190) 31349* sub_umbrella: Darwin Options. (line 190) 31350* symbolic: Link Options. (line 157) 31351* sysroot: Directory Options. (line 92) 31352* target-help <1>: Preprocessor Options. 31353 (line 604) 31354* target-help: Overall Options. (line 228) 31355* threads <1>: SPARC Options. (line 228) 31356* threads: HPPA Options. (line 207) 31357* time: Debugging Options. (line 704) 31358* tls: FRV Options. (line 75) 31359* TLS: FRV Options. (line 72) 31360* traditional <1>: Incompatibilities. (line 6) 31361* traditional: C Dialect Options. (line 229) 31362* traditional-cpp <1>: Preprocessor Options. 31363 (line 582) 31364* traditional-cpp: C Dialect Options. (line 229) 31365* trigraphs <1>: Preprocessor Options. 31366 (line 586) 31367* trigraphs: C Dialect Options. (line 213) 31368* twolevel_namespace: Darwin Options. (line 190) 31369* u: Link Options. (line 179) 31370* U: Preprocessor Options. 31371 (line 56) 31372* umbrella: Darwin Options. (line 190) 31373* undef: Preprocessor Options. 31374 (line 60) 31375* undefined: Darwin Options. (line 190) 31376* unexported_symbols_list: Darwin Options. (line 190) 31377* V: Target Options. (line 24) 31378* v <1>: Preprocessor Options. 31379 (line 608) 31380* v: Overall Options. (line 186) 31381* version <1>: Preprocessor Options. 31382 (line 621) 31383* version: Overall Options. (line 232) 31384* W: Incompatibilities. (line 64) 31385* w: Preprocessor Options. 31386 (line 159) 31387* W: Warning Options. (line 569) 31388* w: Warning Options. (line 73) 31389* Wa: Assembler Options. (line 9) 31390* Wabi: C++ Dialect Options. 31391 (line 239) 31392* Waddress: Warning Options. (line 837) 31393* Waggregate-return: Warning Options. (line 850) 31394* Wall <1>: Standard Libraries. (line 6) 31395* Wall <2>: Preprocessor Options. 31396 (line 78) 31397* Wall: Warning Options. (line 553) 31398* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 31399 (line 198) 31400* Wattributes: Warning Options. (line 855) 31401* Wbad-function-cast: Warning Options. (line 785) 31402* Wcast-align: Warning Options. (line 799) 31403* Wcast-qual: Warning Options. (line 794) 31404* Wchar-subscripts: Warning Options. (line 79) 31405* Wcomment <1>: Preprocessor Options. 31406 (line 86) 31407* Wcomment: Warning Options. (line 84) 31408* Wcomments: Preprocessor Options. 31409 (line 86) 31410* Wconversion <1>: Protoize Caveats. (line 31) 31411* Wconversion: Warning Options. (line 817) 31412* Wctor-dtor-privacy: C++ Dialect Options. 31413 (line 317) 31414* Wdeclaration-after-statement: Warning Options. (line 751) 31415* Wdisabled-optimization: Warning Options. (line 1104) 31416* Wdiv-by-zero: Warning Options. (line 643) 31417* weak_reference_mismatches: Darwin Options. (line 190) 31418* Weffc++: C++ Dialect Options. 31419 (line 343) 31420* Wendif-labels <1>: Preprocessor Options. 31421 (line 136) 31422* Wendif-labels: Warning Options. (line 761) 31423* Werror <1>: Preprocessor Options. 31424 (line 149) 31425* Werror: Warning Options. (line 1119) 31426* Werror-implicit-function-declaration: Warning Options. (line 198) 31427* Werror=: Warning Options. (line 1122) 31428* Wextra: Warning Options. (line 569) 31429* Wfatal-errors: Warning Options. (line 89) 31430* Wfloat-equal: Warning Options. (line 659) 31431* Wformat <1>: Function Attributes. 31432 (line 281) 31433* Wformat: Warning Options. (line 94) 31434* Wformat-nonliteral <1>: Function Attributes. 31435 (line 334) 31436* Wformat-nonliteral: Warning Options. (line 151) 31437* Wformat-security: Warning Options. (line 156) 31438* Wformat-y2k: Warning Options. (line 129) 31439* Wformat=2: Warning Options. (line 167) 31440* whatsloaded: Darwin Options. (line 190) 31441* whyload: Darwin Options. (line 190) 31442* Wimplicit: Warning Options. (line 204) 31443* Wimplicit-function-declaration: Warning Options. (line 198) 31444* Wimplicit-int: Warning Options. (line 193) 31445* Wimport: Preprocessor Options. 31446 (line 109) 31447* Winit-self: Warning Options. (line 179) 31448* Winline <1>: Inline. (line 42) 31449* Winline: Warning Options. (line 1048) 31450* Winvalid-pch: Warning Options. (line 1083) 31451* Wl: Link Options. (line 175) 31452* Wlarger-than: Warning Options. (line 770) 31453* Wlong-long: Warning Options. (line 1087) 31454* Wmain: Warning Options. (line 208) 31455* Wmissing-braces: Warning Options. (line 214) 31456* Wmissing-declarations: Warning Options. (line 877) 31457* Wmissing-field-initializers: Warning Options. (line 883) 31458* Wmissing-format-attribute: Warning Options. (line 909) 31459* Wmissing-include-dirs: Warning Options. (line 224) 31460* Wmissing-noreturn: Warning Options. (line 901) 31461* Wmissing-prototypes: Warning Options. (line 871) 31462* Wmultichar: Warning Options. (line 928) 31463* Wnested-externs: Warning Options. (line 1023) 31464* Wno-address: Warning Options. (line 837) 31465* Wno-attributes: Warning Options. (line 855) 31466* Wno-deprecated: C++ Dialect Options. 31467 (line 373) 31468* Wno-deprecated-declarations: Warning Options. (line 977) 31469* Wno-div-by-zero: Warning Options. (line 643) 31470* Wno-endif-labels: Warning Options. (line 761) 31471* Wno-format-extra-args: Warning Options. (line 133) 31472* Wno-format-zero-length: Warning Options. (line 147) 31473* Wno-import: Warning Options. (line 76) 31474* Wno-int-to-pointer-cast: Warning Options. (line 1075) 31475* Wno-invalid-offsetof: Warning Options. (line 1061) 31476* Wno-long-long: Warning Options. (line 1087) 31477* Wno-multichar: Warning Options. (line 928) 31478* Wno-non-template-friend: C++ Dialect Options. 31479 (line 384) 31480* Wno-overflow: Warning Options. (line 983) 31481* Wno-pmf-conversions <1>: Bound member functions. 31482 (line 35) 31483* Wno-pmf-conversions: C++ Dialect Options. 31484 (line 425) 31485* Wno-pointer-sign: Warning Options. (line 1113) 31486* Wno-pointer-to-int-cast: Warning Options. (line 1079) 31487* Wno-pragmas: Warning Options. (line 481) 31488* Wno-protocol: Objective-C and Objective-C++ Dialect Options. 31489 (line 202) 31490* Wno-variadic-macros: Warning Options. (line 1093) 31491* Wno-volatile-register-var: Warning Options. (line 1099) 31492* Wnon-virtual-dtor: C++ Dialect Options. 31493 (line 322) 31494* Wnonnull: Warning Options. (line 172) 31495* Wnormalized: Warning Options. (line 934) 31496* Wold-style-cast: C++ Dialect Options. 31497 (line 400) 31498* Wold-style-definition: Warning Options. (line 867) 31499* Woverlength-strings: Warning Options. (line 1141) 31500* Woverloaded-virtual: C++ Dialect Options. 31501 (line 406) 31502* Woverride-init: Warning Options. (line 986) 31503* Wp: Preprocessor Options. 31504 (line 13) 31505* Wpacked: Warning Options. (line 994) 31506* Wpadded: Warning Options. (line 1011) 31507* Wparentheses: Warning Options. (line 227) 31508* Wpointer-arith <1>: Pointer Arith. (line 13) 31509* Wpointer-arith: Warning Options. (line 779) 31510* Wpointer-sign: Warning Options. (line 1113) 31511* Wpragmas: Warning Options. (line 481) 31512* Wredundant-decls: Warning Options. (line 1018) 31513* Wreorder: C++ Dialect Options. 31514 (line 327) 31515* Wreturn-type: Warning Options. (line 319) 31516* Wselector: Objective-C and Objective-C++ Dialect Options. 31517 (line 212) 31518* Wsequence-point: Warning Options. (line 273) 31519* Wshadow: Warning Options. (line 765) 31520* Wsign-compare: Warning Options. (line 830) 31521* Wsign-promo: C++ Dialect Options. 31522 (line 429) 31523* Wstack-protector: Warning Options. (line 1136) 31524* Wstrict-aliasing: Warning Options. (line 486) 31525* Wstrict-aliasing=2: Warning Options. (line 493) 31526* Wstrict-null-sentinel: C++ Dialect Options. 31527 (line 377) 31528* Wstrict-overflow: Warning Options. (line 502) 31529* Wstrict-prototypes: Warning Options. (line 861) 31530* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 31531 (line 224) 31532* Wswitch: Warning Options. (line 338) 31533* Wswitch-enum: Warning Options. (line 349) 31534* Wswitch-switch: Warning Options. (line 346) 31535* Wsystem-headers <1>: Preprocessor Options. 31536 (line 153) 31537* Wsystem-headers: Warning Options. (line 648) 31538* Wtraditional <1>: Preprocessor Options. 31539 (line 103) 31540* Wtraditional: Warning Options. (line 674) 31541* Wtrigraphs <1>: Preprocessor Options. 31542 (line 91) 31543* Wtrigraphs: Warning Options. (line 355) 31544* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 31545 (line 232) 31546* Wundef <1>: Preprocessor Options. 31547 (line 112) 31548* Wundef: Warning Options. (line 758) 31549* Wuninitialized: Warning Options. (line 400) 31550* Wunknown-pragmas: Warning Options. (line 474) 31551* Wunreachable-code: Warning Options. (line 1026) 31552* Wunsafe-loop-optimizations: Warning Options. (line 773) 31553* Wunused: Warning Options. (line 393) 31554* Wunused-function: Warning Options. (line 360) 31555* Wunused-label: Warning Options. (line 365) 31556* Wunused-macros: Preprocessor Options. 31557 (line 117) 31558* Wunused-parameter: Warning Options. (line 372) 31559* Wunused-value: Warning Options. (line 387) 31560* Wunused-variable: Warning Options. (line 379) 31561* Wvariadic-macros: Warning Options. (line 1093) 31562* Wvolatile-register-var: Warning Options. (line 1099) 31563* Wwrite-strings: Warning Options. (line 805) 31564* x <1>: Preprocessor Options. 31565 (line 308) 31566* x: Overall Options. (line 109) 31567* Xassembler: Assembler Options. (line 13) 31568* Xlinker: Link Options. (line 163) 31569* Ym: System V Options. (line 26) 31570* YP: System V Options. (line 22) 31571 31572 31573File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 31574 31575Keyword Index 31576************* 31577 31578[index] 31579* Menu: 31580 31581* ! in constraint: Multi-Alternative. (line 33) 31582* # in constraint: Modifiers. (line 57) 31583* #pragma: Pragmas. (line 6) 31584* #pragma implementation: C++ Interface. (line 39) 31585* #pragma implementation, implied: C++ Interface. (line 46) 31586* #pragma interface: C++ Interface. (line 20) 31587* #pragma, reason for not using: Function Attributes. 31588 (line 916) 31589* $: Dollar Signs. (line 6) 31590* % in constraint: Modifiers. (line 45) 31591* %include: Spec Files. (line 27) 31592* %include_noerr: Spec Files. (line 31) 31593* %rename: Spec Files. (line 35) 31594* & in constraint: Modifiers. (line 25) 31595* ': Incompatibilities. (line 116) 31596* * in constraint: Modifiers. (line 62) 31597* + in constraint: Modifiers. (line 12) 31598* -lgcc, use with -nodefaultlibs: Link Options. (line 79) 31599* -lgcc, use with -nostdlib: Link Options. (line 79) 31600* -nodefaultlibs and unresolved references: Link Options. (line 79) 31601* -nostdlib and unresolved references: Link Options. (line 79) 31602* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 31603 (line 607) 31604* //: C++ Comments. (line 6) 31605* 0 in constraint: Simple Constraints. (line 115) 31606* < in constraint: Simple Constraints. (line 46) 31607* = in constraint: Modifiers. (line 8) 31608* > in constraint: Simple Constraints. (line 50) 31609* ? in constraint: Multi-Alternative. (line 27) 31610* ?: extensions: Conditionals. (line 6) 31611* ?: side effect: Conditionals. (line 20) 31612* _ in variables in macros: Typeof. (line 42) 31613* __builtin___fprintf_chk: Object Size Checking. 31614 (line 6) 31615* __builtin___memcpy_chk: Object Size Checking. 31616 (line 6) 31617* __builtin___memmove_chk: Object Size Checking. 31618 (line 6) 31619* __builtin___mempcpy_chk: Object Size Checking. 31620 (line 6) 31621* __builtin___memset_chk: Object Size Checking. 31622 (line 6) 31623* __builtin___printf_chk: Object Size Checking. 31624 (line 6) 31625* __builtin___snprintf_chk: Object Size Checking. 31626 (line 6) 31627* __builtin___sprintf_chk: Object Size Checking. 31628 (line 6) 31629* __builtin___stpcpy_chk: Object Size Checking. 31630 (line 6) 31631* __builtin___strcat_chk: Object Size Checking. 31632 (line 6) 31633* __builtin___strcpy_chk: Object Size Checking. 31634 (line 6) 31635* __builtin___strncat_chk: Object Size Checking. 31636 (line 6) 31637* __builtin___strncpy_chk: Object Size Checking. 31638 (line 6) 31639* __builtin___vfprintf_chk: Object Size Checking. 31640 (line 6) 31641* __builtin___vprintf_chk: Object Size Checking. 31642 (line 6) 31643* __builtin___vsnprintf_chk: Object Size Checking. 31644 (line 6) 31645* __builtin___vsprintf_chk: Object Size Checking. 31646 (line 6) 31647* __builtin_apply: Constructing Calls. (line 31) 31648* __builtin_apply_args: Constructing Calls. (line 20) 31649* __builtin_choose_expr: Other Builtins. (line 150) 31650* __builtin_clz: Other Builtins. (line 383) 31651* __builtin_clzl: Other Builtins. (line 401) 31652* __builtin_clzll: Other Builtins. (line 421) 31653* __builtin_constant_p: Other Builtins. (line 190) 31654* __builtin_ctz: Other Builtins. (line 387) 31655* __builtin_ctzl: Other Builtins. (line 405) 31656* __builtin_ctzll: Other Builtins. (line 425) 31657* __builtin_expect: Other Builtins. (line 236) 31658* __builtin_ffs: Other Builtins. (line 379) 31659* __builtin_ffsl: Other Builtins. (line 397) 31660* __builtin_ffsll: Other Builtins. (line 417) 31661* __builtin_frame_address: Return Address. (line 34) 31662* __builtin_huge_val: Other Builtins. (line 300) 31663* __builtin_huge_valf: Other Builtins. (line 305) 31664* __builtin_huge_vall: Other Builtins. (line 308) 31665* __builtin_inf: Other Builtins. (line 312) 31666* __builtin_infd128: Other Builtins. (line 322) 31667* __builtin_infd32: Other Builtins. (line 316) 31668* __builtin_infd64: Other Builtins. (line 319) 31669* __builtin_inff: Other Builtins. (line 326) 31670* __builtin_infl: Other Builtins. (line 331) 31671* __builtin_isgreater: Other Builtins. (line 6) 31672* __builtin_isgreaterequal: Other Builtins. (line 6) 31673* __builtin_isless: Other Builtins. (line 6) 31674* __builtin_islessequal: Other Builtins. (line 6) 31675* __builtin_islessgreater: Other Builtins. (line 6) 31676* __builtin_isunordered: Other Builtins. (line 6) 31677* __builtin_nan: Other Builtins. (line 335) 31678* __builtin_nand128: Other Builtins. (line 357) 31679* __builtin_nand32: Other Builtins. (line 351) 31680* __builtin_nand64: Other Builtins. (line 354) 31681* __builtin_nanf: Other Builtins. (line 361) 31682* __builtin_nanl: Other Builtins. (line 364) 31683* __builtin_nans: Other Builtins. (line 368) 31684* __builtin_nansf: Other Builtins. (line 372) 31685* __builtin_nansl: Other Builtins. (line 375) 31686* __builtin_object_size: Object Size Checking. 31687 (line 6) 31688* __builtin_offsetof: Offsetof. (line 6) 31689* __builtin_parity: Other Builtins. (line 394) 31690* __builtin_parityl: Other Builtins. (line 413) 31691* __builtin_parityll: Other Builtins. (line 433) 31692* __builtin_popcount: Other Builtins. (line 391) 31693* __builtin_popcountl: Other Builtins. (line 409) 31694* __builtin_popcountll: Other Builtins. (line 429) 31695* __builtin_powi: Other Builtins. (line 6) 31696* __builtin_powif: Other Builtins. (line 6) 31697* __builtin_powil: Other Builtins. (line 6) 31698* __builtin_prefetch: Other Builtins. (line 261) 31699* __builtin_return: Constructing Calls. (line 48) 31700* __builtin_return_address: Return Address. (line 11) 31701* __builtin_types_compatible_p: Other Builtins. (line 104) 31702* __complex__ keyword: Complex. (line 6) 31703* __declspec(dllexport): Function Attributes. 31704 (line 161) 31705* __declspec(dllimport): Function Attributes. 31706 (line 193) 31707* __extension__: Alternate Keywords. (line 29) 31708* __func__ identifier: Function Names. (line 6) 31709* __FUNCTION__ identifier: Function Names. (line 6) 31710* __imag__ keyword: Complex. (line 27) 31711* __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 31712* __real__ keyword: Complex. (line 27) 31713* __STDC_HOSTED__: Standards. (line 6) 31714* __sync_add_and_fetch: Atomic Builtins. (line 57) 31715* __sync_and_and_fetch: Atomic Builtins. (line 57) 31716* __sync_bool_compare_and_swap: Atomic Builtins. (line 65) 31717* __sync_fetch_and_add: Atomic Builtins. (line 45) 31718* __sync_fetch_and_and: Atomic Builtins. (line 45) 31719* __sync_fetch_and_nand: Atomic Builtins. (line 45) 31720* __sync_fetch_and_or: Atomic Builtins. (line 45) 31721* __sync_fetch_and_sub: Atomic Builtins. (line 45) 31722* __sync_fetch_and_xor: Atomic Builtins. (line 45) 31723* __sync_lock_release: Atomic Builtins. (line 95) 31724* __sync_lock_test_and_set: Atomic Builtins. (line 77) 31725* __sync_nand_and_fetch: Atomic Builtins. (line 57) 31726* __sync_or_and_fetch: Atomic Builtins. (line 57) 31727* __sync_sub_and_fetch: Atomic Builtins. (line 57) 31728* __sync_synchronize: Atomic Builtins. (line 74) 31729* __sync_val_compare_and_swap: Atomic Builtins. (line 65) 31730* __sync_xor_and_fetch: Atomic Builtins. (line 57) 31731* __thread: Thread-Local. (line 6) 31732* _Complex keyword: Complex. (line 6) 31733* _Decimal128 data type: Decimal Float. (line 6) 31734* _Decimal32 data type: Decimal Float. (line 6) 31735* _Decimal64 data type: Decimal Float. (line 6) 31736* _exit: Other Builtins. (line 6) 31737* _Exit: Other Builtins. (line 6) 31738* ABI: Compatibility. (line 6) 31739* abort: Other Builtins. (line 6) 31740* abs: Other Builtins. (line 6) 31741* accessing volatiles: Volatiles. (line 6) 31742* acos: Other Builtins. (line 6) 31743* acosf: Other Builtins. (line 6) 31744* acosh: Other Builtins. (line 6) 31745* acoshf: Other Builtins. (line 6) 31746* acoshl: Other Builtins. (line 6) 31747* acosl: Other Builtins. (line 6) 31748* Ada: G++ and GCC. (line 6) 31749* address constraints: Simple Constraints. (line 142) 31750* address of a label: Labels as Values. (line 6) 31751* address_operand: Simple Constraints. (line 146) 31752* alias attribute: Function Attributes. 31753 (line 33) 31754* aliasing of parameters: Code Gen Options. (line 332) 31755* aligned attribute <1>: Type Attributes. (line 30) 31756* aligned attribute: Variable Attributes. 31757 (line 23) 31758* alignment: Alignment. (line 6) 31759* alloca: Other Builtins. (line 6) 31760* alloca vs variable-length arrays: Variable Length. (line 27) 31761* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 31762 (line 497) 31763* alternate keywords: Alternate Keywords. (line 6) 31764* always_inline function attribute: Function Attributes. 31765 (line 46) 31766* AMD x86-64 Options: i386 and x86-64 Options. 31767 (line 6) 31768* AMD1: Standards. (line 6) 31769* ANSI C: Standards. (line 6) 31770* ANSI C standard: Standards. (line 6) 31771* ANSI C89: Standards. (line 6) 31772* ANSI support: C Dialect Options. (line 10) 31773* ANSI X3.159-1989: Standards. (line 6) 31774* apostrophes: Incompatibilities. (line 116) 31775* application binary interface: Compatibility. (line 6) 31776* ARC Options: ARC Options. (line 6) 31777* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 31778 (line 6) 31779* ARM options: ARM Options. (line 6) 31780* arrays of length zero: Zero Length. (line 6) 31781* arrays of variable length: Variable Length. (line 6) 31782* arrays, non-lvalue: Subscripting. (line 6) 31783* asin: Other Builtins. (line 6) 31784* asinf: Other Builtins. (line 6) 31785* asinh: Other Builtins. (line 6) 31786* asinhf: Other Builtins. (line 6) 31787* asinhl: Other Builtins. (line 6) 31788* asinl: Other Builtins. (line 6) 31789* asm constraints: Constraints. (line 6) 31790* asm expressions: Extended Asm. (line 6) 31791* assembler instructions: Extended Asm. (line 6) 31792* assembler names for identifiers: Asm Labels. (line 6) 31793* assembly code, invalid: Bug Criteria. (line 12) 31794* atan: Other Builtins. (line 6) 31795* atan2: Other Builtins. (line 6) 31796* atan2f: Other Builtins. (line 6) 31797* atan2l: Other Builtins. (line 6) 31798* atanf: Other Builtins. (line 6) 31799* atanh: Other Builtins. (line 6) 31800* atanhf: Other Builtins. (line 6) 31801* atanhl: Other Builtins. (line 6) 31802* atanl: Other Builtins. (line 6) 31803* attribute of types: Type Attributes. (line 6) 31804* attribute of variables: Variable Attributes. 31805 (line 6) 31806* attribute syntax: Attribute Syntax. (line 6) 31807* autoincrement/decrement addressing: Simple Constraints. (line 28) 31808* automatic inline for C++ member fns: Inline. (line 53) 31809* AVR Options: AVR Options. (line 6) 31810* Backwards Compatibility: Backwards Compatibility. 31811 (line 6) 31812* base class members: Name lookup. (line 6) 31813* bcmp: Other Builtins. (line 6) 31814* below100 attribute: Variable Attributes. 31815 (line 449) 31816* binary compatibility: Compatibility. (line 6) 31817* Blackfin Options: Blackfin Options. (line 6) 31818* bound pointer to member function: Bound member functions. 31819 (line 6) 31820* bounds checking: Optimize Options. (line 333) 31821* bug criteria: Bug Criteria. (line 6) 31822* bugs: Bugs. (line 6) 31823* bugs, known: Trouble. (line 6) 31824* built-in functions <1>: Other Builtins. (line 6) 31825* built-in functions: C Dialect Options. (line 149) 31826* bzero: Other Builtins. (line 6) 31827* C compilation options: Invoking GCC. (line 17) 31828* C intermediate output, nonexistent: G++ and GCC. (line 35) 31829* C language extensions: C Extensions. (line 6) 31830* C language, traditional: C Dialect Options. (line 227) 31831* C standard: Standards. (line 6) 31832* C standards: Standards. (line 6) 31833* c++: Invoking G++. (line 13) 31834* C++: G++ and GCC. (line 30) 31835* C++ comments: C++ Comments. (line 6) 31836* C++ compilation options: Invoking GCC. (line 23) 31837* C++ interface and implementation headers: C++ Interface. (line 6) 31838* C++ language extensions: C++ Extensions. (line 6) 31839* C++ member fns, automatically inline: Inline. (line 53) 31840* C++ misunderstandings: C++ Misunderstandings. 31841 (line 6) 31842* C++ options, command line: C++ Dialect Options. 31843 (line 6) 31844* C++ pragmas, effect on inlining: C++ Interface. (line 66) 31845* C++ source file suffixes: Invoking G++. (line 6) 31846* C++ static data, declaring and defining: Static Definitions. 31847 (line 6) 31848* C89: Standards. (line 6) 31849* C90: Standards. (line 6) 31850* C94: Standards. (line 6) 31851* C95: Standards. (line 6) 31852* C99: Standards. (line 6) 31853* C9X: Standards. (line 6) 31854* C_INCLUDE_PATH: Environment Variables. 31855 (line 124) 31856* cabs: Other Builtins. (line 6) 31857* cabsf: Other Builtins. (line 6) 31858* cabsl: Other Builtins. (line 6) 31859* cacos: Other Builtins. (line 6) 31860* cacosf: Other Builtins. (line 6) 31861* cacosh: Other Builtins. (line 6) 31862* cacoshf: Other Builtins. (line 6) 31863* cacoshl: Other Builtins. (line 6) 31864* cacosl: Other Builtins. (line 6) 31865* calling functions through the function vector on the H8/300 processors: Function Attributes. 31866 (line 373) 31867* calloc: Other Builtins. (line 6) 31868* carg: Other Builtins. (line 6) 31869* cargf: Other Builtins. (line 6) 31870* cargl: Other Builtins. (line 6) 31871* case labels in initializers: Designated Inits. (line 6) 31872* case ranges: Case Ranges. (line 6) 31873* casin: Other Builtins. (line 6) 31874* casinf: Other Builtins. (line 6) 31875* casinh: Other Builtins. (line 6) 31876* casinhf: Other Builtins. (line 6) 31877* casinhl: Other Builtins. (line 6) 31878* casinl: Other Builtins. (line 6) 31879* cast to a union: Cast to Union. (line 6) 31880* catan: Other Builtins. (line 6) 31881* catanf: Other Builtins. (line 6) 31882* catanh: Other Builtins. (line 6) 31883* catanhf: Other Builtins. (line 6) 31884* catanhl: Other Builtins. (line 6) 31885* catanl: Other Builtins. (line 6) 31886* cbrt: Other Builtins. (line 6) 31887* cbrtf: Other Builtins. (line 6) 31888* cbrtl: Other Builtins. (line 6) 31889* ccos: Other Builtins. (line 6) 31890* ccosf: Other Builtins. (line 6) 31891* ccosh: Other Builtins. (line 6) 31892* ccoshf: Other Builtins. (line 6) 31893* ccoshl: Other Builtins. (line 6) 31894* ccosl: Other Builtins. (line 6) 31895* ceil: Other Builtins. (line 6) 31896* ceilf: Other Builtins. (line 6) 31897* ceill: Other Builtins. (line 6) 31898* cexp: Other Builtins. (line 6) 31899* cexpf: Other Builtins. (line 6) 31900* cexpl: Other Builtins. (line 6) 31901* character set, execution: Preprocessor Options. 31902 (line 467) 31903* character set, input: Preprocessor Options. 31904 (line 480) 31905* character set, input normalization: Warning Options. (line 934) 31906* character set, wide execution: Preprocessor Options. 31907 (line 472) 31908* cimag: Other Builtins. (line 6) 31909* cimagf: Other Builtins. (line 6) 31910* cimagl: Other Builtins. (line 6) 31911* cleanup attribute: Variable Attributes. 31912 (line 76) 31913* clog: Other Builtins. (line 6) 31914* clogf: Other Builtins. (line 6) 31915* clogl: Other Builtins. (line 6) 31916* COBOL: G++ and GCC. (line 23) 31917* code generation conventions: Code Gen Options. (line 6) 31918* code, mixed with declarations: Mixed Declarations. (line 6) 31919* command options: Invoking GCC. (line 6) 31920* comments, C++ style: C++ Comments. (line 6) 31921* common attribute: Variable Attributes. 31922 (line 92) 31923* comparison of signed and unsigned values, warning: Warning Options. 31924 (line 830) 31925* compiler bugs, reporting: Bug Reporting. (line 6) 31926* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 31927* compiler options, C++: C++ Dialect Options. 31928 (line 6) 31929* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 31930 (line 6) 31931* compiler version, specifying: Target Options. (line 6) 31932* COMPILER_PATH: Environment Variables. 31933 (line 85) 31934* complex conjugation: Complex. (line 34) 31935* complex numbers: Complex. (line 6) 31936* compound literals: Compound Literals. (line 6) 31937* computed gotos: Labels as Values. (line 6) 31938* conditional expressions, extensions: Conditionals. (line 6) 31939* conflicting types: Disappointments. (line 21) 31940* conj: Other Builtins. (line 6) 31941* conjf: Other Builtins. (line 6) 31942* conjl: Other Builtins. (line 6) 31943* const applied to function: Function Attributes. 31944 (line 6) 31945* const function attribute: Function Attributes. 31946 (line 106) 31947* constants in constraints: Simple Constraints. (line 58) 31948* constraint modifier characters: Modifiers. (line 6) 31949* constraint, matching: Simple Constraints. (line 127) 31950* constraints, asm: Constraints. (line 6) 31951* constraints, machine specific: Machine Constraints. 31952 (line 6) 31953* constructing calls: Constructing Calls. (line 6) 31954* constructor expressions: Compound Literals. (line 6) 31955* constructor function attribute: Function Attributes. 31956 (line 132) 31957* contributors: Contributors. (line 6) 31958* copysign: Other Builtins. (line 6) 31959* copysignf: Other Builtins. (line 6) 31960* copysignl: Other Builtins. (line 6) 31961* core dump: Bug Criteria. (line 9) 31962* cos: Other Builtins. (line 6) 31963* cosf: Other Builtins. (line 6) 31964* cosh: Other Builtins. (line 6) 31965* coshf: Other Builtins. (line 6) 31966* coshl: Other Builtins. (line 6) 31967* cosl: Other Builtins. (line 6) 31968* CPATH: Environment Variables. 31969 (line 123) 31970* CPLUS_INCLUDE_PATH: Environment Variables. 31971 (line 125) 31972* cpow: Other Builtins. (line 6) 31973* cpowf: Other Builtins. (line 6) 31974* cpowl: Other Builtins. (line 6) 31975* cproj: Other Builtins. (line 6) 31976* cprojf: Other Builtins. (line 6) 31977* cprojl: Other Builtins. (line 6) 31978* creal: Other Builtins. (line 6) 31979* crealf: Other Builtins. (line 6) 31980* creall: Other Builtins. (line 6) 31981* CRIS Options: CRIS Options. (line 6) 31982* cross compiling: Target Options. (line 6) 31983* CRX Options: CRX Options. (line 6) 31984* csin: Other Builtins. (line 6) 31985* csinf: Other Builtins. (line 6) 31986* csinh: Other Builtins. (line 6) 31987* csinhf: Other Builtins. (line 6) 31988* csinhl: Other Builtins. (line 6) 31989* csinl: Other Builtins. (line 6) 31990* csqrt: Other Builtins. (line 6) 31991* csqrtf: Other Builtins. (line 6) 31992* csqrtl: Other Builtins. (line 6) 31993* ctan: Other Builtins. (line 6) 31994* ctanf: Other Builtins. (line 6) 31995* ctanh: Other Builtins. (line 6) 31996* ctanhf: Other Builtins. (line 6) 31997* ctanhl: Other Builtins. (line 6) 31998* ctanl: Other Builtins. (line 6) 31999* Darwin options: Darwin Options. (line 6) 32000* dcgettext: Other Builtins. (line 6) 32001* DD integer suffix: Decimal Float. (line 6) 32002* dd integer suffix: Decimal Float. (line 6) 32003* deallocating variable length arrays: Variable Length. (line 23) 32004* debugging information options: Debugging Options. (line 6) 32005* decimal floating types: Decimal Float. (line 6) 32006* declaration scope: Incompatibilities. (line 80) 32007* declarations inside expressions: Statement Exprs. (line 6) 32008* declarations, mixed with code: Mixed Declarations. (line 6) 32009* declaring attributes of functions: Function Attributes. 32010 (line 6) 32011* declaring static data in C++: Static Definitions. (line 6) 32012* defining static data in C++: Static Definitions. (line 6) 32013* dependencies for make as output: Environment Variables. 32014 (line 151) 32015* dependencies, make: Preprocessor Options. 32016 (line 173) 32017* DEPENDENCIES_OUTPUT: Environment Variables. 32018 (line 150) 32019* dependent name lookup: Name lookup. (line 6) 32020* deprecated attribute: Variable Attributes. 32021 (line 100) 32022* deprecated attribute.: Function Attributes. 32023 (line 143) 32024* designated initializers: Designated Inits. (line 6) 32025* designator lists: Designated Inits. (line 94) 32026* designators: Designated Inits. (line 61) 32027* destructor function attribute: Function Attributes. 32028 (line 132) 32029* DF integer suffix: Decimal Float. (line 6) 32030* df integer suffix: Decimal Float. (line 6) 32031* dgettext: Other Builtins. (line 6) 32032* diagnostic messages: Language Independent Options. 32033 (line 6) 32034* dialect options: C Dialect Options. (line 6) 32035* digits in constraint: Simple Constraints. (line 115) 32036* directory options: Directory Options. (line 6) 32037* DL integer suffix: Decimal Float. (line 6) 32038* dl integer suffix: Decimal Float. (line 6) 32039* dollar signs in identifier names: Dollar Signs. (line 6) 32040* double-word arithmetic: Long Long. (line 6) 32041* downward funargs: Nested Functions. (line 6) 32042* drem: Other Builtins. (line 6) 32043* dremf: Other Builtins. (line 6) 32044* dreml: Other Builtins. (line 6) 32045* E in constraint: Simple Constraints. (line 77) 32046* earlyclobber operand: Modifiers. (line 25) 32047* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 32048 (line 240) 32049* empty structures: Empty Structures. (line 6) 32050* environment variables: Environment Variables. 32051 (line 6) 32052* erf: Other Builtins. (line 6) 32053* erfc: Other Builtins. (line 6) 32054* erfcf: Other Builtins. (line 6) 32055* erfcl: Other Builtins. (line 6) 32056* erff: Other Builtins. (line 6) 32057* erfl: Other Builtins. (line 6) 32058* error messages: Warnings and Errors. 32059 (line 6) 32060* escaped newlines: Escaped Newlines. (line 6) 32061* exception handler functions on the Blackfin processor: Function Attributes. 32062 (line 250) 32063* exclamation point: Multi-Alternative. (line 33) 32064* exit: Other Builtins. (line 6) 32065* exp: Other Builtins. (line 6) 32066* exp10: Other Builtins. (line 6) 32067* exp10f: Other Builtins. (line 6) 32068* exp10l: Other Builtins. (line 6) 32069* exp2: Other Builtins. (line 6) 32070* exp2f: Other Builtins. (line 6) 32071* exp2l: Other Builtins. (line 6) 32072* expf: Other Builtins. (line 6) 32073* expl: Other Builtins. (line 6) 32074* explicit register variables: Explicit Reg Vars. (line 6) 32075* expm1: Other Builtins. (line 6) 32076* expm1f: Other Builtins. (line 6) 32077* expm1l: Other Builtins. (line 6) 32078* expressions containing statements: Statement Exprs. (line 6) 32079* expressions, constructor: Compound Literals. (line 6) 32080* extended asm: Extended Asm. (line 6) 32081* extensible constraints: Simple Constraints. (line 151) 32082* extensions, ?:: Conditionals. (line 6) 32083* extensions, C language: C Extensions. (line 6) 32084* extensions, C++ language: C++ Extensions. (line 6) 32085* external declaration scope: Incompatibilities. (line 80) 32086* externally_visible attribute.: Function Attributes. 32087 (line 907) 32088* F in constraint: Simple Constraints. (line 82) 32089* fabs: Other Builtins. (line 6) 32090* fabsf: Other Builtins. (line 6) 32091* fabsl: Other Builtins. (line 6) 32092* fatal signal: Bug Criteria. (line 9) 32093* fdim: Other Builtins. (line 6) 32094* fdimf: Other Builtins. (line 6) 32095* fdiml: Other Builtins. (line 6) 32096* FDL, GNU Free Documentation License: GNU Free Documentation License. 32097 (line 6) 32098* ffs: Other Builtins. (line 6) 32099* file name suffix: Overall Options. (line 14) 32100* file names: Link Options. (line 10) 32101* flatten function attribute: Function Attributes. 32102 (line 91) 32103* flexible array members: Zero Length. (line 6) 32104* float as function value type: Incompatibilities. (line 141) 32105* floating point precision <1>: Disappointments. (line 68) 32106* floating point precision: Optimize Options. (line 1060) 32107* floor: Other Builtins. (line 6) 32108* floorf: Other Builtins. (line 6) 32109* floorl: Other Builtins. (line 6) 32110* fma: Other Builtins. (line 6) 32111* fmaf: Other Builtins. (line 6) 32112* fmal: Other Builtins. (line 6) 32113* fmax: Other Builtins. (line 6) 32114* fmaxf: Other Builtins. (line 6) 32115* fmaxl: Other Builtins. (line 6) 32116* fmin: Other Builtins. (line 6) 32117* fminf: Other Builtins. (line 6) 32118* fminl: Other Builtins. (line 6) 32119* fmod: Other Builtins. (line 6) 32120* fmodf: Other Builtins. (line 6) 32121* fmodl: Other Builtins. (line 6) 32122* force_align_arg_pointer attribute: Function Attributes. 32123 (line 636) 32124* format function attribute: Function Attributes. 32125 (line 281) 32126* format_arg function attribute: Function Attributes. 32127 (line 334) 32128* Fortran: G++ and GCC. (line 6) 32129* forwarding calls: Constructing Calls. (line 6) 32130* fprintf: Other Builtins. (line 6) 32131* fprintf_unlocked: Other Builtins. (line 6) 32132* fputs: Other Builtins. (line 6) 32133* fputs_unlocked: Other Builtins. (line 6) 32134* freestanding environment: Standards. (line 6) 32135* freestanding implementation: Standards. (line 6) 32136* frexp: Other Builtins. (line 6) 32137* frexpf: Other Builtins. (line 6) 32138* frexpl: Other Builtins. (line 6) 32139* FRV Options: FRV Options. (line 6) 32140* fscanf: Other Builtins. (line 6) 32141* fscanf, and constant strings: Incompatibilities. (line 17) 32142* function addressability on the M32R/D: Function Attributes. 32143 (line 457) 32144* function attributes: Function Attributes. 32145 (line 6) 32146* function pointers, arithmetic: Pointer Arith. (line 6) 32147* function prototype declarations: Function Prototypes. 32148 (line 6) 32149* function without a prologue/epilogue code: Function Attributes. 32150 (line 485) 32151* function, size of pointer to: Pointer Arith. (line 6) 32152* functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 32153 (line 428) 32154* functions in arbitrary sections: Function Attributes. 32155 (line 6) 32156* functions that are passed arguments in registers on the 386: Function Attributes. 32157 (line 6) 32158* functions that behave like malloc: Function Attributes. 32159 (line 6) 32160* functions that do not pop the argument stack on the 386: Function Attributes. 32161 (line 6) 32162* functions that do pop the argument stack on the 386: Function Attributes. 32163 (line 100) 32164* functions that have no side effects: Function Attributes. 32165 (line 6) 32166* functions that never return: Function Attributes. 32167 (line 6) 32168* functions that pop the argument stack on the 386: Function Attributes. 32169 (line 6) 32170* functions that return more than once: Function Attributes. 32171 (line 6) 32172* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 32173 (line 491) 32174* functions which handle memory bank switching: Function Attributes. 32175 (line 256) 32176* functions with non-null pointer arguments: Function Attributes. 32177 (line 6) 32178* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 32179 (line 6) 32180* g in constraint: Simple Constraints. (line 108) 32181* G in constraint: Simple Constraints. (line 86) 32182* g++: Invoking G++. (line 13) 32183* G++: G++ and GCC. (line 30) 32184* gamma: Other Builtins. (line 6) 32185* gammaf: Other Builtins. (line 6) 32186* gammal: Other Builtins. (line 6) 32187* GCC: G++ and GCC. (line 6) 32188* GCC command options: Invoking GCC. (line 6) 32189* GCC_EXEC_PREFIX: Environment Variables. 32190 (line 52) 32191* gcc_struct: Type Attributes. (line 302) 32192* gcc_struct attribute: Variable Attributes. 32193 (line 313) 32194* gcov: Debugging Options. (line 168) 32195* gettext: Other Builtins. (line 6) 32196* global offset table: Code Gen Options. (line 163) 32197* global register after longjmp: Global Reg Vars. (line 66) 32198* global register variables: Global Reg Vars. (line 6) 32199* GNAT: G++ and GCC. (line 30) 32200* GNU C Compiler: G++ and GCC. (line 6) 32201* GNU Compiler Collection: G++ and GCC. (line 6) 32202* gnu_inline function attribute: Function Attributes. 32203 (line 51) 32204* goto with computed label: Labels as Values. (line 6) 32205* gp-relative references (MIPS): MIPS Options. (line 216) 32206* gprof: Debugging Options. (line 135) 32207* grouping options: Invoking GCC. (line 26) 32208* H in constraint: Simple Constraints. (line 86) 32209* hardware models and configurations, specifying: Submodel Options. 32210 (line 6) 32211* hex floats: Hex Floats. (line 6) 32212* hosted environment <1>: C Dialect Options. (line 183) 32213* hosted environment: Standards. (line 6) 32214* hosted implementation: Standards. (line 6) 32215* HPPA Options: HPPA Options. (line 6) 32216* hypot: Other Builtins. (line 6) 32217* hypotf: Other Builtins. (line 6) 32218* hypotl: Other Builtins. (line 6) 32219* I in constraint: Simple Constraints. (line 69) 32220* i in constraint: Simple Constraints. (line 58) 32221* i386 Options: i386 and x86-64 Options. 32222 (line 6) 32223* IA-64 Options: IA-64 Options. (line 6) 32224* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 32225 (line 6) 32226* identifier names, dollar signs in: Dollar Signs. (line 6) 32227* identifiers, names in assembler code: Asm Labels. (line 6) 32228* ilogb: Other Builtins. (line 6) 32229* ilogbf: Other Builtins. (line 6) 32230* ilogbl: Other Builtins. (line 6) 32231* imaxabs: Other Builtins. (line 6) 32232* implementation-defined behavior, C language: C Implementation. 32233 (line 6) 32234* implied #pragma implementation: C++ Interface. (line 46) 32235* incompatibilities of GCC: Incompatibilities. (line 6) 32236* increment operators: Bug Criteria. (line 17) 32237* index: Other Builtins. (line 6) 32238* indirect calls on ARM: Function Attributes. 32239 (line 418) 32240* indirect calls on MIPS: Function Attributes. 32241 (line 440) 32242* init_priority attribute: C++ Attributes. (line 9) 32243* initializations in expressions: Compound Literals. (line 6) 32244* initializers with labeled elements: Designated Inits. (line 6) 32245* initializers, non-constant: Initializers. (line 6) 32246* inline automatic for C++ member fns: Inline. (line 53) 32247* inline functions: Inline. (line 6) 32248* inline functions, omission of: Inline. (line 58) 32249* inlining and C++ pragmas: C++ Interface. (line 66) 32250* installation trouble: Trouble. (line 6) 32251* integrating function code: Inline. (line 6) 32252* Intel 386 Options: i386 and x86-64 Options. 32253 (line 6) 32254* interface and implementation headers, C++: C++ Interface. (line 6) 32255* intermediate C version, nonexistent: G++ and GCC. (line 35) 32256* interrupt handler functions: Function Attributes. 32257 (line 384) 32258* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 32259 (line 406) 32260* introduction: Top. (line 6) 32261* invalid assembly code: Bug Criteria. (line 12) 32262* invalid input: Bug Criteria. (line 42) 32263* invoking g++: Invoking G++. (line 21) 32264* isalnum: Other Builtins. (line 6) 32265* isalpha: Other Builtins. (line 6) 32266* isascii: Other Builtins. (line 6) 32267* isblank: Other Builtins. (line 6) 32268* iscntrl: Other Builtins. (line 6) 32269* isdigit: Other Builtins. (line 6) 32270* isgraph: Other Builtins. (line 6) 32271* islower: Other Builtins. (line 6) 32272* ISO 9899: Standards. (line 6) 32273* ISO C: Standards. (line 6) 32274* ISO C standard: Standards. (line 6) 32275* ISO C90: Standards. (line 6) 32276* ISO C94: Standards. (line 6) 32277* ISO C95: Standards. (line 6) 32278* ISO C99: Standards. (line 6) 32279* ISO C9X: Standards. (line 6) 32280* ISO support: C Dialect Options. (line 10) 32281* ISO/IEC 9899: Standards. (line 6) 32282* isprint: Other Builtins. (line 6) 32283* ispunct: Other Builtins. (line 6) 32284* isspace: Other Builtins. (line 6) 32285* isupper: Other Builtins. (line 6) 32286* iswalnum: Other Builtins. (line 6) 32287* iswalpha: Other Builtins. (line 6) 32288* iswblank: Other Builtins. (line 6) 32289* iswcntrl: Other Builtins. (line 6) 32290* iswdigit: Other Builtins. (line 6) 32291* iswgraph: Other Builtins. (line 6) 32292* iswlower: Other Builtins. (line 6) 32293* iswprint: Other Builtins. (line 6) 32294* iswpunct: Other Builtins. (line 6) 32295* iswspace: Other Builtins. (line 6) 32296* iswupper: Other Builtins. (line 6) 32297* iswxdigit: Other Builtins. (line 6) 32298* isxdigit: Other Builtins. (line 6) 32299* j0: Other Builtins. (line 6) 32300* j0f: Other Builtins. (line 6) 32301* j0l: Other Builtins. (line 6) 32302* j1: Other Builtins. (line 6) 32303* j1f: Other Builtins. (line 6) 32304* j1l: Other Builtins. (line 6) 32305* Java: G++ and GCC. (line 6) 32306* java_interface attribute: C++ Attributes. (line 29) 32307* jn: Other Builtins. (line 6) 32308* jnf: Other Builtins. (line 6) 32309* jnl: Other Builtins. (line 6) 32310* keywords, alternate: Alternate Keywords. (line 6) 32311* known causes of trouble: Trouble. (line 6) 32312* labeled elements in initializers: Designated Inits. (line 6) 32313* labels as values: Labels as Values. (line 6) 32314* labs: Other Builtins. (line 6) 32315* LANG: Environment Variables. 32316 (line 21) 32317* language dialect options: C Dialect Options. (line 6) 32318* LC_ALL: Environment Variables. 32319 (line 21) 32320* LC_CTYPE: Environment Variables. 32321 (line 21) 32322* LC_MESSAGES: Environment Variables. 32323 (line 21) 32324* ldexp: Other Builtins. (line 6) 32325* ldexpf: Other Builtins. (line 6) 32326* ldexpl: Other Builtins. (line 6) 32327* length-zero arrays: Zero Length. (line 6) 32328* lgamma: Other Builtins. (line 6) 32329* lgammaf: Other Builtins. (line 6) 32330* lgammal: Other Builtins. (line 6) 32331* Libraries: Link Options. (line 24) 32332* LIBRARY_PATH: Environment Variables. 32333 (line 91) 32334* link options: Link Options. (line 6) 32335* LL integer suffix: Long Long. (line 6) 32336* llabs: Other Builtins. (line 6) 32337* llrint: Other Builtins. (line 6) 32338* llrintf: Other Builtins. (line 6) 32339* llrintl: Other Builtins. (line 6) 32340* llround: Other Builtins. (line 6) 32341* llroundf: Other Builtins. (line 6) 32342* llroundl: Other Builtins. (line 6) 32343* load address instruction: Simple Constraints. (line 142) 32344* local labels: Local Labels. (line 6) 32345* local variables in macros: Typeof. (line 42) 32346* local variables, specifying registers: Local Reg Vars. (line 6) 32347* locale: Environment Variables. 32348 (line 21) 32349* locale definition: Environment Variables. 32350 (line 100) 32351* log: Other Builtins. (line 6) 32352* log10: Other Builtins. (line 6) 32353* log10f: Other Builtins. (line 6) 32354* log10l: Other Builtins. (line 6) 32355* log1p: Other Builtins. (line 6) 32356* log1pf: Other Builtins. (line 6) 32357* log1pl: Other Builtins. (line 6) 32358* log2: Other Builtins. (line 6) 32359* log2f: Other Builtins. (line 6) 32360* log2l: Other Builtins. (line 6) 32361* logb: Other Builtins. (line 6) 32362* logbf: Other Builtins. (line 6) 32363* logbl: Other Builtins. (line 6) 32364* logf: Other Builtins. (line 6) 32365* logl: Other Builtins. (line 6) 32366* long long data types: Long Long. (line 6) 32367* longjmp: Global Reg Vars. (line 66) 32368* longjmp incompatibilities: Incompatibilities. (line 39) 32369* longjmp warnings: Warning Options. (line 457) 32370* lrint: Other Builtins. (line 6) 32371* lrintf: Other Builtins. (line 6) 32372* lrintl: Other Builtins. (line 6) 32373* lround: Other Builtins. (line 6) 32374* lroundf: Other Builtins. (line 6) 32375* lroundl: Other Builtins. (line 6) 32376* m in constraint: Simple Constraints. (line 17) 32377* M32C options: M32C Options. (line 6) 32378* M32R/D options: M32R/D Options. (line 6) 32379* M680x0 options: M680x0 Options. (line 6) 32380* M68hc1x options: M68hc1x Options. (line 6) 32381* machine dependent options: Submodel Options. (line 6) 32382* machine specific constraints: Machine Constraints. 32383 (line 6) 32384* macro with variable arguments: Variadic Macros. (line 6) 32385* macros containing asm: Extended Asm. (line 239) 32386* macros, inline alternative: Inline. (line 6) 32387* macros, local labels: Local Labels. (line 6) 32388* macros, local variables in: Typeof. (line 42) 32389* macros, statements in expressions: Statement Exprs. (line 6) 32390* macros, types of arguments: Typeof. (line 6) 32391* make: Preprocessor Options. 32392 (line 173) 32393* malloc: Other Builtins. (line 6) 32394* malloc attribute: Function Attributes. 32395 (line 447) 32396* matching constraint: Simple Constraints. (line 127) 32397* MCore options: MCore Options. (line 6) 32398* member fns, automatically inline: Inline. (line 53) 32399* memcmp: Other Builtins. (line 6) 32400* memcpy: Other Builtins. (line 6) 32401* memory references in constraints: Simple Constraints. (line 17) 32402* mempcpy: Other Builtins. (line 6) 32403* memset: Other Builtins. (line 6) 32404* Mercury: G++ and GCC. (line 23) 32405* message formatting: Language Independent Options. 32406 (line 6) 32407* messages, warning: Warning Options. (line 6) 32408* messages, warning and error: Warnings and Errors. 32409 (line 6) 32410* middle-operands, omitted: Conditionals. (line 6) 32411* MIPS options: MIPS Options. (line 6) 32412* misunderstandings in C++: C++ Misunderstandings. 32413 (line 6) 32414* mixed declarations and code: Mixed Declarations. (line 6) 32415* mktemp, and constant strings: Incompatibilities. (line 13) 32416* MMIX Options: MMIX Options. (line 6) 32417* MN10300 options: MN10300 Options. (line 6) 32418* mode attribute: Variable Attributes. 32419 (line 118) 32420* modf: Other Builtins. (line 6) 32421* modff: Other Builtins. (line 6) 32422* modfl: Other Builtins. (line 6) 32423* modifiers in constraints: Modifiers. (line 6) 32424* ms_struct: Type Attributes. (line 302) 32425* ms_struct attribute: Variable Attributes. 32426 (line 313) 32427* MT options: MT Options. (line 6) 32428* mudflap: Optimize Options. (line 333) 32429* multiple alternative constraints: Multi-Alternative. (line 6) 32430* multiprecision arithmetic: Long Long. (line 6) 32431* n in constraint: Simple Constraints. (line 63) 32432* names used in assembler code: Asm Labels. (line 6) 32433* naming convention, implementation headers: C++ Interface. (line 46) 32434* nearbyint: Other Builtins. (line 6) 32435* nearbyintf: Other Builtins. (line 6) 32436* nearbyintl: Other Builtins. (line 6) 32437* nested functions: Nested Functions. (line 6) 32438* newlines (escaped): Escaped Newlines. (line 6) 32439* nextafter: Other Builtins. (line 6) 32440* nextafterf: Other Builtins. (line 6) 32441* nextafterl: Other Builtins. (line 6) 32442* nexttoward: Other Builtins. (line 6) 32443* nexttowardf: Other Builtins. (line 6) 32444* nexttowardl: Other Builtins. (line 6) 32445* NFC: Warning Options. (line 934) 32446* NFKC: Warning Options. (line 934) 32447* NMI handler functions on the Blackfin processor: Function Attributes. 32448 (line 502) 32449* no_instrument_function function attribute: Function Attributes. 32450 (line 508) 32451* nocommon attribute: Variable Attributes. 32452 (line 92) 32453* noinline function attribute: Function Attributes. 32454 (line 513) 32455* non-constant initializers: Initializers. (line 6) 32456* non-static inline function: Inline. (line 70) 32457* nonnull function attribute: Function Attributes. 32458 (line 517) 32459* noreturn function attribute: Function Attributes. 32460 (line 540) 32461* nothrow function attribute: Function Attributes. 32462 (line 582) 32463* o in constraint: Simple Constraints. (line 21) 32464* OBJC_INCLUDE_PATH: Environment Variables. 32465 (line 126) 32466* Objective-C <1>: Standards. (line 110) 32467* Objective-C: G++ and GCC. (line 6) 32468* Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 32469 (line 6) 32470* Objective-C++ <1>: Standards. (line 110) 32471* Objective-C++: G++ and GCC. (line 6) 32472* offsettable address: Simple Constraints. (line 21) 32473* old-style function definitions: Function Prototypes. 32474 (line 6) 32475* omitted middle-operands: Conditionals. (line 6) 32476* open coding: Inline. (line 6) 32477* openmp parallel: C Dialect Options. (line 200) 32478* operand constraints, asm: Constraints. (line 6) 32479* optimize options: Optimize Options. (line 6) 32480* options to control diagnostics formatting: Language Independent Options. 32481 (line 6) 32482* options to control warnings: Warning Options. (line 6) 32483* options, C++: C++ Dialect Options. 32484 (line 6) 32485* options, code generation: Code Gen Options. (line 6) 32486* options, debugging: Debugging Options. (line 6) 32487* options, dialect: C Dialect Options. (line 6) 32488* options, directory search: Directory Options. (line 6) 32489* options, GCC command: Invoking GCC. (line 6) 32490* options, grouping: Invoking GCC. (line 26) 32491* options, linking: Link Options. (line 6) 32492* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 32493 (line 6) 32494* options, optimization: Optimize Options. (line 6) 32495* options, order: Invoking GCC. (line 30) 32496* options, preprocessor: Preprocessor Options. 32497 (line 6) 32498* order of evaluation, side effects: Non-bugs. (line 196) 32499* order of options: Invoking GCC. (line 30) 32500* other register constraints: Simple Constraints. (line 151) 32501* output file option: Overall Options. (line 174) 32502* overloaded virtual fn, warning: C++ Dialect Options. 32503 (line 406) 32504* p in constraint: Simple Constraints. (line 142) 32505* packed attribute: Variable Attributes. 32506 (line 129) 32507* parameter forward declaration: Variable Length. (line 60) 32508* parameters, aliased: Code Gen Options. (line 332) 32509* Pascal: G++ and GCC. (line 23) 32510* PDP-11 Options: PDP-11 Options. (line 6) 32511* PIC: Code Gen Options. (line 163) 32512* pmf: Bound member functions. 32513 (line 6) 32514* pointer arguments: Function Attributes. 32515 (line 111) 32516* pointer to member function: Bound member functions. 32517 (line 6) 32518* portions of temporary objects, pointers to: Temporaries. (line 6) 32519* pow: Other Builtins. (line 6) 32520* pow10: Other Builtins. (line 6) 32521* pow10f: Other Builtins. (line 6) 32522* pow10l: Other Builtins. (line 6) 32523* PowerPC options: PowerPC Options. (line 6) 32524* powf: Other Builtins. (line 6) 32525* powl: Other Builtins. (line 6) 32526* pragma, align: Solaris Pragmas. (line 11) 32527* pragma, diagnostic: Diagnostic Pragmas. (line 14) 32528* pragma, extern_prefix: Symbol-Renaming Pragmas. 32529 (line 19) 32530* pragma, fini: Solaris Pragmas. (line 19) 32531* pragma, init: Solaris Pragmas. (line 24) 32532* pragma, long_calls: ARM Pragmas. (line 11) 32533* pragma, long_calls_off: ARM Pragmas. (line 17) 32534* pragma, longcall: RS/6000 and PowerPC Pragmas. 32535 (line 14) 32536* pragma, mark: Darwin Pragmas. (line 11) 32537* pragma, memregs: M32C Pragmas. (line 7) 32538* pragma, no_long_calls: ARM Pragmas. (line 14) 32539* pragma, options align: Darwin Pragmas. (line 14) 32540* pragma, reason for not using: Function Attributes. 32541 (line 916) 32542* pragma, redefine_extname: Symbol-Renaming Pragmas. 32543 (line 14) 32544* pragma, segment: Darwin Pragmas. (line 21) 32545* pragma, unused: Darwin Pragmas. (line 24) 32546* pragma, visibility: Visibility Pragmas. (line 8) 32547* pragma, weak: Weak Pragmas. (line 10) 32548* pragmas: Pragmas. (line 6) 32549* pragmas in C++, effect on inlining: C++ Interface. (line 66) 32550* pragmas, interface and implementation: C++ Interface. (line 6) 32551* pragmas, warning of unknown: Warning Options. (line 474) 32552* precompiled headers: Precompiled Headers. 32553 (line 6) 32554* preprocessing numbers: Incompatibilities. (line 173) 32555* preprocessing tokens: Incompatibilities. (line 173) 32556* preprocessor options: Preprocessor Options. 32557 (line 6) 32558* printf: Other Builtins. (line 6) 32559* printf_unlocked: Other Builtins. (line 6) 32560* prof: Debugging Options. (line 129) 32561* promotion of formal parameters: Function Prototypes. 32562 (line 6) 32563* pure function attribute: Function Attributes. 32564 (line 590) 32565* push address instruction: Simple Constraints. (line 142) 32566* putchar: Other Builtins. (line 6) 32567* puts: Other Builtins. (line 6) 32568* qsort, and global register variables: Global Reg Vars. (line 42) 32569* question mark: Multi-Alternative. (line 27) 32570* r in constraint: Simple Constraints. (line 54) 32571* ranges in case statements: Case Ranges. (line 6) 32572* read-only strings: Incompatibilities. (line 9) 32573* register variable after longjmp: Global Reg Vars. (line 66) 32574* registers: Extended Asm. (line 6) 32575* registers for local variables: Local Reg Vars. (line 6) 32576* registers in constraints: Simple Constraints. (line 54) 32577* registers, global allocation: Explicit Reg Vars. (line 6) 32578* registers, global variables in: Global Reg Vars. (line 6) 32579* regparm attribute: Function Attributes. 32580 (line 612) 32581* relocation truncated to fit (MIPS): MIPS Options. (line 135) 32582* remainder: Other Builtins. (line 6) 32583* remainderf: Other Builtins. (line 6) 32584* remainderl: Other Builtins. (line 6) 32585* remquo: Other Builtins. (line 6) 32586* remquof: Other Builtins. (line 6) 32587* remquol: Other Builtins. (line 6) 32588* reordering, warning: C++ Dialect Options. 32589 (line 327) 32590* reporting bugs: Bugs. (line 6) 32591* rest argument (in macro): Variadic Macros. (line 6) 32592* restricted pointers: Restricted Pointers. 32593 (line 6) 32594* restricted references: Restricted Pointers. 32595 (line 6) 32596* restricted this pointer: Restricted Pointers. 32597 (line 6) 32598* returns_twice attribute: Function Attributes. 32599 (line 649) 32600* rindex: Other Builtins. (line 6) 32601* rint: Other Builtins. (line 6) 32602* rintf: Other Builtins. (line 6) 32603* rintl: Other Builtins. (line 6) 32604* round: Other Builtins. (line 6) 32605* roundf: Other Builtins. (line 6) 32606* roundl: Other Builtins. (line 6) 32607* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 32608 (line 6) 32609* RTTI: Vague Linkage. (line 43) 32610* run-time options: Code Gen Options. (line 6) 32611* s in constraint: Simple Constraints. (line 90) 32612* S/390 and zSeries Options: S/390 and zSeries Options. 32613 (line 6) 32614* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 32615 (line 658) 32616* scalb: Other Builtins. (line 6) 32617* scalbf: Other Builtins. (line 6) 32618* scalbl: Other Builtins. (line 6) 32619* scalbln: Other Builtins. (line 6) 32620* scalblnf: Other Builtins. (line 6) 32621* scalbn: Other Builtins. (line 6) 32622* scalbnf: Other Builtins. (line 6) 32623* scanf, and constant strings: Incompatibilities. (line 17) 32624* scanfnl: Other Builtins. (line 6) 32625* scope of a variable length array: Variable Length. (line 23) 32626* scope of declaration: Disappointments. (line 21) 32627* scope of external declarations: Incompatibilities. (line 80) 32628* Score Options: Score Options. (line 6) 32629* search path: Directory Options. (line 6) 32630* section function attribute: Function Attributes. 32631 (line 663) 32632* section variable attribute: Variable Attributes. 32633 (line 144) 32634* sentinel function attribute: Function Attributes. 32635 (line 679) 32636* setjmp: Global Reg Vars. (line 66) 32637* setjmp incompatibilities: Incompatibilities. (line 39) 32638* shared strings: Incompatibilities. (line 9) 32639* shared variable attribute: Variable Attributes. 32640 (line 189) 32641* side effect in ?:: Conditionals. (line 20) 32642* side effects, macro argument: Statement Exprs. (line 35) 32643* side effects, order of evaluation: Non-bugs. (line 196) 32644* signal handler functions on the AVR processors: Function Attributes. 32645 (line 710) 32646* signbit: Other Builtins. (line 6) 32647* signbitf: Other Builtins. (line 6) 32648* signbitl: Other Builtins. (line 6) 32649* signed and unsigned values, comparison warning: Warning Options. 32650 (line 830) 32651* significand: Other Builtins. (line 6) 32652* significandf: Other Builtins. (line 6) 32653* significandl: Other Builtins. (line 6) 32654* simple constraints: Simple Constraints. (line 6) 32655* sin: Other Builtins. (line 6) 32656* sincos: Other Builtins. (line 6) 32657* sincosf: Other Builtins. (line 6) 32658* sincosl: Other Builtins. (line 6) 32659* sinf: Other Builtins. (line 6) 32660* sinh: Other Builtins. (line 6) 32661* sinhf: Other Builtins. (line 6) 32662* sinhl: Other Builtins. (line 6) 32663* sinl: Other Builtins. (line 6) 32664* sizeof: Typeof. (line 6) 32665* smaller data references: M32R/D Options. (line 57) 32666* smaller data references (MIPS): MIPS Options. (line 216) 32667* smaller data references (PowerPC): RS/6000 and PowerPC Options. 32668 (line 607) 32669* snprintf: Other Builtins. (line 6) 32670* SPARC options: SPARC Options. (line 6) 32671* Spec Files: Spec Files. (line 6) 32672* specified registers: Explicit Reg Vars. (line 6) 32673* specifying compiler version and target machine: Target Options. 32674 (line 6) 32675* specifying hardware config: Submodel Options. (line 6) 32676* specifying machine version: Target Options. (line 6) 32677* specifying registers for local variables: Local Reg Vars. (line 6) 32678* speed of compilation: Precompiled Headers. 32679 (line 6) 32680* sprintf: Other Builtins. (line 6) 32681* sqrt: Other Builtins. (line 6) 32682* sqrtf: Other Builtins. (line 6) 32683* sqrtl: Other Builtins. (line 6) 32684* sscanf: Other Builtins. (line 6) 32685* sscanf, and constant strings: Incompatibilities. (line 17) 32686* sseregparm attribute: Function Attributes. 32687 (line 629) 32688* statements inside expressions: Statement Exprs. (line 6) 32689* static data in C++, declaring and defining: Static Definitions. 32690 (line 6) 32691* stpcpy: Other Builtins. (line 6) 32692* stpncpy: Other Builtins. (line 6) 32693* strcasecmp: Other Builtins. (line 6) 32694* strcat: Other Builtins. (line 6) 32695* strchr: Other Builtins. (line 6) 32696* strcmp: Other Builtins. (line 6) 32697* strcpy: Other Builtins. (line 6) 32698* strcspn: Other Builtins. (line 6) 32699* strdup: Other Builtins. (line 6) 32700* strfmon: Other Builtins. (line 6) 32701* strftime: Other Builtins. (line 6) 32702* string constants: Incompatibilities. (line 9) 32703* strlen: Other Builtins. (line 6) 32704* strncasecmp: Other Builtins. (line 6) 32705* strncat: Other Builtins. (line 6) 32706* strncmp: Other Builtins. (line 6) 32707* strncpy: Other Builtins. (line 6) 32708* strndup: Other Builtins. (line 6) 32709* strpbrk: Other Builtins. (line 6) 32710* strrchr: Other Builtins. (line 6) 32711* strspn: Other Builtins. (line 6) 32712* strstr: Other Builtins. (line 6) 32713* struct: Unnamed Fields. (line 6) 32714* structures: Incompatibilities. (line 146) 32715* structures, constructor expression: Compound Literals. (line 6) 32716* submodel options: Submodel Options. (line 6) 32717* subscripting: Subscripting. (line 6) 32718* subscripting and function values: Subscripting. (line 6) 32719* suffixes for C++ source: Invoking G++. (line 6) 32720* SUNPRO_DEPENDENCIES: Environment Variables. 32721 (line 166) 32722* suppressing warnings: Warning Options. (line 6) 32723* surprises in C++: C++ Misunderstandings. 32724 (line 6) 32725* syntax checking: Warning Options. (line 22) 32726* system headers, warnings from: Warning Options. (line 648) 32727* tan: Other Builtins. (line 6) 32728* tanf: Other Builtins. (line 6) 32729* tanh: Other Builtins. (line 6) 32730* tanhf: Other Builtins. (line 6) 32731* tanhl: Other Builtins. (line 6) 32732* tanl: Other Builtins. (line 6) 32733* target machine, specifying: Target Options. (line 6) 32734* target options: Target Options. (line 6) 32735* TC1: Standards. (line 6) 32736* TC2: Standards. (line 6) 32737* Technical Corrigenda: Standards. (line 6) 32738* Technical Corrigendum 1: Standards. (line 6) 32739* Technical Corrigendum 2: Standards. (line 6) 32740* template instantiation: Template Instantiation. 32741 (line 6) 32742* temporaries, lifetime of: Temporaries. (line 6) 32743* tgamma: Other Builtins. (line 6) 32744* tgammaf: Other Builtins. (line 6) 32745* tgammal: Other Builtins. (line 6) 32746* Thread-Local Storage: Thread-Local. (line 6) 32747* thunks: Nested Functions. (line 6) 32748* tiny data section on the H8/300H and H8S: Function Attributes. 32749 (line 732) 32750* TLS: Thread-Local. (line 6) 32751* tls_model attribute: Variable Attributes. 32752 (line 213) 32753* TMPDIR: Environment Variables. 32754 (line 45) 32755* TMS320C3x/C4x Options: TMS320C3x/C4x Options. 32756 (line 6) 32757* toascii: Other Builtins. (line 6) 32758* tolower: Other Builtins. (line 6) 32759* toupper: Other Builtins. (line 6) 32760* towlower: Other Builtins. (line 6) 32761* towupper: Other Builtins. (line 6) 32762* traditional C language: C Dialect Options. (line 227) 32763* treelang <1>: Standards. (line 123) 32764* treelang: G++ and GCC. (line 6) 32765* trunc: Other Builtins. (line 6) 32766* truncf: Other Builtins. (line 6) 32767* truncl: Other Builtins. (line 6) 32768* two-stage name lookup: Name lookup. (line 6) 32769* type alignment: Alignment. (line 6) 32770* type attributes: Type Attributes. (line 6) 32771* type_info: Vague Linkage. (line 43) 32772* typedef names as function parameters: Incompatibilities. (line 97) 32773* typeof: Typeof. (line 6) 32774* ULL integer suffix: Long Long. (line 6) 32775* Ultrix calling convention: Interoperation. (line 150) 32776* undefined behavior: Bug Criteria. (line 17) 32777* undefined function value: Bug Criteria. (line 17) 32778* underscores in variables in macros: Typeof. (line 42) 32779* union: Unnamed Fields. (line 6) 32780* union, casting to a: Cast to Union. (line 6) 32781* unions: Incompatibilities. (line 146) 32782* unknown pragmas, warning: Warning Options. (line 474) 32783* unresolved references and -nodefaultlibs: Link Options. (line 79) 32784* unresolved references and -nostdlib: Link Options. (line 79) 32785* unused attribute.: Function Attributes. 32786 (line 744) 32787* used attribute.: Function Attributes. 32788 (line 749) 32789* User stack pointer in interrupts on the Blackfin: Function Attributes. 32790 (line 413) 32791* V in constraint: Simple Constraints. (line 41) 32792* V850 Options: V850 Options. (line 6) 32793* vague linkage: Vague Linkage. (line 6) 32794* value after longjmp: Global Reg Vars. (line 66) 32795* variable addressability on the IA-64: Function Attributes. 32796 (line 457) 32797* variable addressability on the M32R/D: Variable Attributes. 32798 (line 294) 32799* variable alignment: Alignment. (line 6) 32800* variable attributes: Variable Attributes. 32801 (line 6) 32802* variable number of arguments: Variadic Macros. (line 6) 32803* variable-length array scope: Variable Length. (line 23) 32804* variable-length arrays: Variable Length. (line 6) 32805* variables in specified registers: Explicit Reg Vars. (line 6) 32806* variables, local, in macros: Typeof. (line 42) 32807* variadic macros: Variadic Macros. (line 6) 32808* VAX calling convention: Interoperation. (line 150) 32809* VAX options: VAX Options. (line 6) 32810* vfprintf: Other Builtins. (line 6) 32811* vfscanf: Other Builtins. (line 6) 32812* visibility attribute: Function Attributes. 32813 (line 755) 32814* VLAs: Variable Length. (line 6) 32815* void pointers, arithmetic: Pointer Arith. (line 6) 32816* void, size of pointer to: Pointer Arith. (line 6) 32817* volatile access: Volatiles. (line 6) 32818* volatile applied to function: Function Attributes. 32819 (line 6) 32820* volatile read: Volatiles. (line 6) 32821* volatile write: Volatiles. (line 6) 32822* vprintf: Other Builtins. (line 6) 32823* vscanf: Other Builtins. (line 6) 32824* vsnprintf: Other Builtins. (line 6) 32825* vsprintf: Other Builtins. (line 6) 32826* vsscanf: Other Builtins. (line 6) 32827* vtable: Vague Linkage. (line 28) 32828* warn_unused_result attribute: Function Attributes. 32829 (line 849) 32830* warning for comparison of signed and unsigned values: Warning Options. 32831 (line 830) 32832* warning for overloaded virtual fn: C++ Dialect Options. 32833 (line 406) 32834* warning for reordering of member initializers: C++ Dialect Options. 32835 (line 327) 32836* warning for unknown pragmas: Warning Options. (line 474) 32837* warning messages: Warning Options. (line 6) 32838* warnings from system headers: Warning Options. (line 648) 32839* warnings vs errors: Warnings and Errors. 32840 (line 6) 32841* weak attribute: Function Attributes. 32842 (line 866) 32843* weakref attribute: Function Attributes. 32844 (line 875) 32845* whitespace: Incompatibilities. (line 112) 32846* X in constraint: Simple Constraints. (line 112) 32847* X3.159-1989: Standards. (line 6) 32848* x86-64 options: x86-64 Options. (line 6) 32849* x86-64 Options: i386 and x86-64 Options. 32850 (line 6) 32851* Xstormy16 Options: Xstormy16 Options. (line 6) 32852* Xtensa Options: Xtensa Options. (line 6) 32853* y0: Other Builtins. (line 6) 32854* y0f: Other Builtins. (line 6) 32855* y0l: Other Builtins. (line 6) 32856* y1: Other Builtins. (line 6) 32857* y1f: Other Builtins. (line 6) 32858* y1l: Other Builtins. (line 6) 32859* yn: Other Builtins. (line 6) 32860* ynf: Other Builtins. (line 6) 32861* ynl: Other Builtins. (line 6) 32862* zero-length arrays: Zero Length. (line 6) 32863* zero-size structures: Empty Structures. (line 6) 32864* zSeries options: zSeries Options. (line 6) 32865 32866 32867 32868Tag Table: 32869Node: Top2067 32870Node: G++ and GCC3749 32871Node: Standards5814 32872Node: Invoking GCC12942 32873Node: Option Summary16703 32874Node: Overall Options45263 32875Node: Invoking G++54489 32876Node: C Dialect Options55968 32877Node: C++ Dialect Options68381 32878Node: Objective-C and Objective-C++ Dialect Options87431 32879Node: Language Independent Options99027 32880Node: Warning Options101109 32881Node: Debugging Options152492 32882Node: Optimize Options184360 32883Node: Preprocessor Options264634 32884Ref: Wtrigraphs268598 32885Ref: dashMF273355 32886Ref: fdollars-in-identifiers282513 32887Node: Assembler Options290569 32888Node: Link Options291274 32889Ref: Link Options-Footnote-1299842 32890Node: Directory Options300176 32891Node: Spec Files306238 32892Node: Target Options325544 32893Node: Submodel Options326968 32894Node: ARC Options328598 32895Node: ARM Options329788 32896Node: AVR Options341399 32897Node: Blackfin Options343532 32898Node: CRIS Options346300 32899Node: CRX Options350519 32900Node: Darwin Options350944 32901Node: DEC Alpha Options357897 32902Node: DEC Alpha/VMS Options369374 32903Node: FRV Options369759 32904Node: GNU/Linux Options376429 32905Node: H8/300 Options376887 32906Node: HPPA Options377954 32907Node: i386 and x86-64 Options387547 32908Node: IA-64 Options408992 32909Node: M32C Options416309 32910Node: M32R/D Options417600 32911Node: M680x0 Options421187 32912Node: M68hc1x Options428564 32913Node: MCore Options430132 32914Node: MIPS Options431153 32915Node: MMIX Options446236 32916Node: MN10300 Options448718 32917Node: MT Options450136 32918Node: PDP-11 Options451050 32919Node: PowerPC Options452884 32920Node: RS/6000 and PowerPC Options453118 32921Node: S/390 and zSeries Options481787 32922Node: Score Options489102 32923Node: SH Options489930 32924Node: SPARC Options499154 32925Node: System V Options509997 32926Node: TMS320C3x/C4x Options510831 32927Node: V850 Options516356 32928Node: VAX Options519501 32929Node: x86-64 Options520048 32930Node: Xstormy16 Options520262 32931Node: Xtensa Options520551 32932Node: zSeries Options524391 32933Node: Code Gen Options524587 32934Node: Environment Variables545236 32935Node: Precompiled Headers552908 32936Node: Running Protoize559145 32937Node: C Implementation565482 32938Node: Translation implementation567145 32939Node: Environment implementation567719 32940Node: Identifiers implementation568269 32941Node: Characters implementation569323 32942Node: Integers implementation572129 32943Node: Floating point implementation573954 32944Node: Arrays and pointers implementation576883 32945Ref: Arrays and pointers implementation-Footnote-1578318 32946Node: Hints implementation578442 32947Node: Structures unions enumerations and bit-fields implementation579908 32948Node: Qualifiers implementation581871 32949Node: Declarators implementation583643 32950Node: Statements implementation583985 32951Node: Preprocessing directives implementation584312 32952Node: Library functions implementation586417 32953Node: Architecture implementation587057 32954Node: Locale-specific behavior implementation587760 32955Node: C Extensions588065 32956Node: Statement Exprs592463 32957Node: Local Labels596976 32958Node: Labels as Values599955 32959Ref: Labels as Values-Footnote-1602009 32960Node: Nested Functions602192 32961Node: Constructing Calls606086 32962Node: Typeof608422 32963Node: Conditionals611588 32964Node: Long Long612479 32965Node: Complex613980 32966Node: Decimal Float616549 32967Node: Hex Floats618230 32968Node: Zero Length619271 32969Node: Empty Structures622548 32970Node: Variable Length622964 32971Node: Variadic Macros625731 32972Node: Escaped Newlines628113 32973Node: Subscripting628952 32974Node: Pointer Arith629675 32975Node: Initializers630243 32976Node: Compound Literals630739 32977Node: Designated Inits632914 32978Node: Case Ranges636569 32979Node: Cast to Union637252 32980Node: Mixed Declarations638348 32981Node: Function Attributes638854 32982Node: Attribute Syntax682699 32983Node: Function Prototypes693570 32984Node: C++ Comments695351 32985Node: Dollar Signs695870 32986Node: Character Escapes696335 32987Node: Alignment696629 32988Node: Variable Attributes697946 32989Ref: i386 Variable Attributes710969 32990Node: Type Attributes716466 32991Ref: i386 Type Attributes729768 32992Ref: PowerPC Type Attributes730612 32993Node: Inline731465 32994Node: Extended Asm736797 32995Ref: Example of asm with clobbered asm reg742883 32996Node: Constraints756979 32997Node: Simple Constraints757829 32998Node: Multi-Alternative764356 32999Node: Modifiers766073 33000Node: Machine Constraints768967 33001Node: Asm Labels796214 33002Node: Explicit Reg Vars797890 33003Node: Global Reg Vars799498 33004Node: Local Reg Vars804048 33005Node: Alternate Keywords806489 33006Node: Incomplete Enums807917 33007Node: Function Names808674 33008Node: Return Address810864 33009Node: Vector Extensions813661 33010Node: Offsetof817163 33011Node: Atomic Builtins817949 33012Node: Object Size Checking823034 33013Node: Other Builtins828391 33014Node: Target Builtins850479 33015Node: Alpha Built-in Functions851212 33016Node: ARM Built-in Functions854204 33017Node: Blackfin Built-in Functions860911 33018Node: FR-V Built-in Functions861528 33019Node: Argument Types862387 33020Node: Directly-mapped Integer Functions864143 33021Node: Directly-mapped Media Functions865225 33022Node: Raw read/write Functions872257 33023Node: Other Built-in Functions873169 33024Node: X86 Built-in Functions874358 33025Node: MIPS DSP Built-in Functions892481 33026Node: MIPS Paired-Single Support900906 33027Node: Paired-Single Arithmetic902516 33028Node: Paired-Single Built-in Functions903456 33029Node: MIPS-3D Built-in Functions906120 33030Node: PowerPC AltiVec Built-in Functions911489 33031Node: SPARC VIS Built-in Functions1012793 33032Node: Target Format Checks1014452 33033Node: Solaris Format Checks1014859 33034Node: Pragmas1015256 33035Node: ARM Pragmas1015886 33036Node: M32C Pragmas1016489 33037Node: RS/6000 and PowerPC Pragmas1017065 33038Node: Darwin Pragmas1017807 33039Node: Solaris Pragmas1018874 33040Node: Symbol-Renaming Pragmas1020035 33041Node: Structure-Packing Pragmas1022657 33042Node: Weak Pragmas1024288 33043Node: Diagnostic Pragmas1025090 33044Node: Visibility Pragmas1027083 33045Node: Unnamed Fields1027804 33046Node: Thread-Local1029314 33047Node: C99 Thread-Local Edits1031398 33048Node: C++98 Thread-Local Edits1033410 33049Node: C++ Extensions1036855 33050Node: Volatiles1038431 33051Node: Restricted Pointers1041107 33052Node: Vague Linkage1042701 33053Node: C++ Interface1046357 33054Ref: C++ Interface-Footnote-11050654 33055Node: Template Instantiation1050791 33056Node: Bound member functions1057803 33057Node: C++ Attributes1059346 33058Node: Namespace Association1061004 33059Node: Java Exceptions1062422 33060Node: Deprecated Features1063827 33061Node: Backwards Compatibility1066802 33062Node: Objective-C1068157 33063Node: Executing code before main1068738 33064Node: What you can and what you cannot do in +load1071344 33065Node: Type encoding1073511 33066Node: Garbage Collection1076898 33067Node: Constant string objects1079522 33068Node: compatibility_alias1082030 33069Node: Compatibility1082908 33070Node: Gcov1089475 33071Node: Gcov Intro1089999 33072Node: Invoking Gcov1092715 33073Node: Gcov and Optimization1104575 33074Node: Gcov Data Files1107228 33075Node: Cross-profiling1108366 33076Node: Trouble1110192 33077Node: Actual Bugs1111732 33078Node: Cross-Compiler Problems1112472 33079Node: Interoperation1112886 33080Node: Incompatibilities1120484 33081Node: Fixed Headers1128634 33082Node: Standard Libraries1130297 33083Node: Disappointments1131669 33084Node: C++ Misunderstandings1136027 33085Node: Static Definitions1136846 33086Node: Name lookup1137899 33087Ref: Name lookup-Footnote-11142677 33088Node: Temporaries1142864 33089Node: Copy Assignment1144840 33090Node: Protoize Caveats1146647 33091Node: Non-bugs1150609 33092Node: Warnings and Errors1161113 33093Node: Bugs1162877 33094Node: Bug Criteria1163441 33095Node: Bug Reporting1165651 33096Node: Service1166043 33097Node: Contributing1166862 33098Node: Funding1167602 33099Node: GNU Project1170091 33100Node: Copying1170737 33101Node: GNU Free Documentation License1189914 33102Node: Contributors1212320 33103Node: Option Index1248176 33104Node: Keyword Index1384054 33105 33106End Tag Table 33107