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 -Wbounded -Wc++-compat -Wcast-align -Wcast-qual -Wchar-subscripts 426 -Wcomment-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`-Wbounded' 2391 Check calls to functions with the `bounded' attribute (*note Function 2392 Attributes::). 2393 2394`-Wformat' 2395 Check calls to `printf' and `scanf', etc., to make sure that the 2396 arguments supplied have types appropriate to the format string 2397 specified, and that the conversions specified in the format string 2398 make sense. This includes standard functions, and others 2399 specified by format attributes (*note Function Attributes::), in 2400 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 2401 extension, not in the C standard) families (or other 2402 target-specific families). Which functions are checked without 2403 format attributes having been specified depends on the standard 2404 version selected, and such checks of functions without the 2405 attribute specified are disabled by `-ffreestanding' or 2406 `-fno-builtin'. 2407 2408 The formats are checked against the format features supported by 2409 GNU libc version 2.2. These include all ISO C90 and C99 features, 2410 as well as features from the Single Unix Specification and some 2411 BSD and GNU extensions. Other library implementations may not 2412 support all these features; GCC does not support warning about 2413 features that go beyond a particular library's limitations. 2414 However, if `-pedantic' is used with `-Wformat', warnings will be 2415 given about format features not in the selected standard version 2416 (but not for `strfmon' formats, since those are not in any version 2417 of the C standard). *Note Options Controlling C Dialect: C 2418 Dialect Options. 2419 2420 Since `-Wformat' also checks for null format arguments for several 2421 functions, `-Wformat' also implies `-Wnonnull'. 2422 2423 `-Wformat' is included in `-Wall'. For more control over some 2424 aspects of format checking, the options `-Wformat-y2k', 2425 `-Wno-format-extra-args', `-Wno-format-zero-length', 2426 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 2427 available, but are not included in `-Wall'. 2428 2429`-Wformat-y2k' 2430 If `-Wformat' is specified, also warn about `strftime' formats 2431 which may yield only a two-digit year. 2432 2433`-Wno-format-extra-args' 2434 If `-Wformat' is specified, do not warn about excess arguments to a 2435 `printf' or `scanf' format function. The C standard specifies 2436 that such arguments are ignored. 2437 2438 Where the unused arguments lie between used arguments that are 2439 specified with `$' operand number specifications, normally 2440 warnings are still given, since the implementation could not know 2441 what type to pass to `va_arg' to skip the unused arguments. 2442 However, in the case of `scanf' formats, this option will suppress 2443 the warning if the unused arguments are all pointers, since the 2444 Single Unix Specification says that such unused arguments are 2445 allowed. 2446 2447`-Wno-format-zero-length' 2448 If `-Wformat' is specified, do not warn about zero-length formats. 2449 The C standard specifies that zero-length formats are allowed. 2450 2451`-Wformat-nonliteral' 2452 If `-Wformat' is specified, also warn if the format string is not a 2453 string literal and so cannot be checked, unless the format function 2454 takes its format arguments as a `va_list'. 2455 2456`-Wformat-security' 2457 If `-Wformat' is specified, also warn about uses of format 2458 functions that represent possible security problems. At present, 2459 this warns about calls to `printf' and `scanf' functions where the 2460 format string is not a string literal and there are no format 2461 arguments, as in `printf (foo);'. This may be a security hole if 2462 the format string came from untrusted input and contains `%n'. 2463 (This is currently a subset of what `-Wformat-nonliteral' warns 2464 about, but in future warnings may be added to `-Wformat-security' 2465 that are not included in `-Wformat-nonliteral'.) 2466 2467`-Wformat=2' 2468 Enable `-Wformat' plus format checks not included in `-Wformat'. 2469 Currently equivalent to `-Wformat -Wformat-nonliteral 2470 -Wformat-security -Wformat-y2k'. 2471 2472`-Wnonnull' 2473 Warn about passing a null pointer for arguments marked as 2474 requiring a non-null value by the `nonnull' function attribute. 2475 2476 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 2477 disabled with the `-Wno-nonnull' option. 2478 2479`-Winit-self (C, C++, Objective-C and Objective-C++ only)' 2480 Warn about uninitialized variables which are initialized with 2481 themselves. Note this option can only be used with the 2482 `-Wuninitialized' option, which in turn only works with `-O1' and 2483 above. 2484 2485 For example, GCC will warn about `i' being uninitialized in the 2486 following snippet only when `-Winit-self' has been specified: 2487 int f() 2488 { 2489 int i = i; 2490 return i; 2491 } 2492 2493`-Wimplicit-int' 2494 Warn when a declaration does not specify a type. This warning is 2495 enabled by `-Wall'. 2496 2497`-Wimplicit-function-declaration' 2498`-Werror-implicit-function-declaration' 2499 Give a warning (or error) whenever a function is used before being 2500 declared. The form `-Wno-error-implicit-function-declaration' is 2501 not supported. This warning is enabled by `-Wall' (as a warning, 2502 not an error). 2503 2504`-Wimplicit' 2505 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 2506 This warning is enabled by `-Wall'. 2507 2508`-Wmain' 2509 Warn if the type of `main' is suspicious. `main' should be a 2510 function with external linkage, returning int, taking either zero 2511 arguments, two, or three arguments of appropriate types. This 2512 warning is enabled by `-Wall'. 2513 2514`-Wmissing-braces' 2515 Warn if an aggregate or union initializer is not fully bracketed. 2516 In the following example, the initializer for `a' is not fully 2517 bracketed, but that for `b' is fully bracketed. 2518 2519 int a[2][2] = { 0, 1, 2, 3 }; 2520 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 2521 2522 This warning is enabled by `-Wall'. 2523 2524`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 2525 Warn if a user-supplied include directory does not exist. 2526 2527`-Wparentheses' 2528 Warn if parentheses are omitted in certain contexts, such as when 2529 there is an assignment in a context where a truth value is 2530 expected, or when operators are nested whose precedence people 2531 often get confused about. Only the warning for an assignment used 2532 as a truth value is supported when compiling C++; the other 2533 warnings are only supported when compiling C. 2534 2535 Also warn if a comparison like `x<=y<=z' appears; this is 2536 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 2537 interpretation from that of ordinary mathematical notation. 2538 2539 Also warn about constructions where there may be confusion to which 2540 `if' statement an `else' branch belongs. Here is an example of 2541 such a case: 2542 2543 { 2544 if (a) 2545 if (b) 2546 foo (); 2547 else 2548 bar (); 2549 } 2550 2551 In C, every `else' branch belongs to the innermost possible `if' 2552 statement, which in this example is `if (b)'. This is often not 2553 what the programmer expected, as illustrated in the above example 2554 by indentation the programmer chose. When there is the potential 2555 for this confusion, GCC will issue a warning when this flag is 2556 specified. To eliminate the warning, add explicit braces around 2557 the innermost `if' statement so there is no way the `else' could 2558 belong to the enclosing `if'. The resulting code would look like 2559 this: 2560 2561 { 2562 if (a) 2563 { 2564 if (b) 2565 foo (); 2566 else 2567 bar (); 2568 } 2569 } 2570 2571 This warning is enabled by `-Wall'. 2572 2573`-Wsequence-point' 2574 Warn about code that may have undefined semantics because of 2575 violations of sequence point rules in the C and C++ standards. 2576 2577 The C and C++ standards defines the order in which expressions in 2578 a C/C++ program are evaluated in terms of "sequence points", which 2579 represent a partial ordering between the execution of parts of the 2580 program: those executed before the sequence point, and those 2581 executed after it. These occur after the evaluation of a full 2582 expression (one which is not part of a larger expression), after 2583 the evaluation of the first operand of a `&&', `||', `? :' or `,' 2584 (comma) operator, before a function is called (but after the 2585 evaluation of its arguments and the expression denoting the called 2586 function), and in certain other places. Other than as expressed 2587 by the sequence point rules, the order of evaluation of 2588 subexpressions of an expression is not specified. All these rules 2589 describe only a partial order rather than a total order, since, 2590 for example, if two functions are called within one expression 2591 with no sequence point between them, the order in which the 2592 functions are called is not specified. However, the standards 2593 committee have ruled that function calls do not overlap. 2594 2595 It is not specified when between sequence points modifications to 2596 the values of objects take effect. Programs whose behavior 2597 depends on this have undefined behavior; the C and C++ standards 2598 specify that "Between the previous and next sequence point an 2599 object shall have its stored value modified at most once by the 2600 evaluation of an expression. Furthermore, the prior value shall 2601 be read only to determine the value to be stored.". If a program 2602 breaks these rules, the results on any particular implementation 2603 are entirely unpredictable. 2604 2605 Examples of code with undefined behavior are `a = a++;', `a[n] = 2606 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 2607 diagnosed by this option, and it may give an occasional false 2608 positive result, but in general it has been found fairly effective 2609 at detecting this sort of problem in programs. 2610 2611 The standard is worded confusingly, therefore there is some debate 2612 over the precise meaning of the sequence point rules in subtle 2613 cases. Links to discussions of the problem, including proposed 2614 formal definitions, may be found on the GCC readings page, at 2615 `http://gcc.gnu.org/readings.html'. 2616 2617 This warning is enabled by `-Wall' for C and C++. 2618 2619`-Wreturn-type' 2620 Warn whenever a function is defined with a return-type that 2621 defaults to `int'. Also warn about any `return' statement with no 2622 return-value in a function whose return-type is not `void'. 2623 2624 For C, also warn if the return type of a function has a type 2625 qualifier such as `const'. Such a type qualifier has no effect, 2626 since the value returned by a function is not an lvalue. ISO C 2627 prohibits qualified `void' return types on function definitions, 2628 so such return types always receive a warning even without this 2629 option. 2630 2631 For C++, a function without return type always produces a 2632 diagnostic message, even when `-Wno-return-type' is specified. 2633 The only exceptions are `main' and functions defined in system 2634 headers. 2635 2636 This warning is enabled by `-Wall'. 2637 2638`-Wswitch' 2639 Warn whenever a `switch' statement has an index of enumerated type 2640 and lacks a `case' for one or more of the named codes of that 2641 enumeration. (The presence of a `default' label prevents this 2642 warning.) `case' labels outside the enumeration range also 2643 provoke warnings when this option is used. This warning is 2644 enabled by `-Wall'. 2645 2646`-Wswitch-default' 2647 Warn whenever a `switch' statement does not have a `default' case. 2648 2649`-Wswitch-enum' 2650 Warn whenever a `switch' statement has an index of enumerated type 2651 and lacks a `case' for one or more of the named codes of that 2652 enumeration. `case' labels outside the enumeration range also 2653 provoke warnings when this option is used. 2654 2655`-Wtrigraphs' 2656 Warn if any trigraphs are encountered that might change the 2657 meaning of the program (trigraphs within comments are not warned 2658 about). This warning is enabled by `-Wall'. 2659 2660`-Wunused-function' 2661 Warn whenever a static function is declared but not defined or a 2662 non-inline static function is unused. This warning is enabled by 2663 `-Wall'. 2664 2665`-Wunused-label' 2666 Warn whenever a label is declared but not used. This warning is 2667 enabled by `-Wall'. 2668 2669 To suppress this warning use the `unused' attribute (*note 2670 Variable Attributes::). 2671 2672`-Wunused-parameter' 2673 Warn whenever a function parameter is unused aside from its 2674 declaration. 2675 2676 To suppress this warning use the `unused' attribute (*note 2677 Variable Attributes::). 2678 2679`-Wunused-variable' 2680 Warn whenever a local variable or non-constant static variable is 2681 unused aside from its declaration. This warning is enabled by 2682 `-Wall'. 2683 2684 To suppress this warning use the `unused' attribute (*note 2685 Variable Attributes::). 2686 2687`-Wunused-value' 2688 Warn whenever a statement computes a result that is explicitly not 2689 used. This warning is enabled by `-Wall'. 2690 2691 To suppress this warning cast the expression to `void'. 2692 2693`-Wunused' 2694 All the above `-Wunused' options combined. 2695 2696 In order to get a warning about an unused function parameter, you 2697 must either specify `-Wextra -Wunused' (note that `-Wall' implies 2698 `-Wunused'), or separately specify `-Wunused-parameter'. 2699 2700`-Wuninitialized' 2701 Warn if an automatic variable is used without first being 2702 initialized or if a variable may be clobbered by a `setjmp' call. 2703 2704 These warnings are possible only in optimizing compilation, 2705 because they require data flow information that is computed only 2706 when optimizing. If you do not specify `-O', you will not get 2707 these warnings. Instead, GCC will issue a warning about 2708 `-Wuninitialized' requiring `-O'. 2709 2710 If you want to warn about code which uses the uninitialized value 2711 of the variable in its own initializer, use the `-Winit-self' 2712 option. 2713 2714 These warnings occur for individual uninitialized or clobbered 2715 elements of structure, union or array variables as well as for 2716 variables which are uninitialized or clobbered as a whole. They do 2717 not occur for variables or elements declared `volatile'. Because 2718 these warnings depend on optimization, the exact variables or 2719 elements for which there are warnings will depend on the precise 2720 optimization options and version of GCC used. 2721 2722 Note that there may be no warning about a variable that is used 2723 only to compute a value that itself is never used, because such 2724 computations may be deleted by data flow analysis before the 2725 warnings are printed. 2726 2727 These warnings are made optional because GCC is not smart enough 2728 to see all the reasons why the code might be correct despite 2729 appearing to have an error. Here is one example of how this can 2730 happen: 2731 2732 { 2733 int x; 2734 switch (y) 2735 { 2736 case 1: x = 1; 2737 break; 2738 case 2: x = 4; 2739 break; 2740 case 3: x = 5; 2741 } 2742 foo (x); 2743 } 2744 2745 If the value of `y' is always 1, 2 or 3, then `x' is always 2746 initialized, but GCC doesn't know this. Here is another common 2747 case: 2748 2749 { 2750 int save_y; 2751 if (change_y) save_y = y, y = new_y; 2752 ... 2753 if (change_y) y = save_y; 2754 } 2755 2756 This has no bug because `save_y' is used only if it is set. 2757 2758 This option also warns when a non-volatile automatic variable 2759 might be changed by a call to `longjmp'. These warnings as well 2760 are possible only in optimizing compilation. 2761 2762 The compiler sees only the calls to `setjmp'. It cannot know 2763 where `longjmp' will be called; in fact, a signal handler could 2764 call it at any point in the code. As a result, you may get a 2765 warning even when there is in fact no problem because `longjmp' 2766 cannot in fact be called at the place which would cause a problem. 2767 2768 Some spurious warnings can be avoided if you declare all the 2769 functions you use that never return as `noreturn'. *Note Function 2770 Attributes::. 2771 2772 This warning is enabled by `-Wall'. 2773 2774`-Wunknown-pragmas' 2775 Warn when a #pragma directive is encountered which is not 2776 understood by GCC. If this command line option is used, warnings 2777 will even be issued for unknown pragmas in system header files. 2778 This is not the case if the warnings were only enabled by the 2779 `-Wall' command line option. 2780 2781`-Wno-pragmas' 2782 Do not warn about misuses of pragmas, such as incorrect parameters, 2783 invalid syntax, or conflicts between pragmas. See also 2784 `-Wunknown-pragmas'. 2785 2786`-Wstrict-aliasing' 2787 This option is only active when `-fstrict-aliasing' is active. It 2788 warns about code which might break the strict aliasing rules that 2789 the compiler is using for optimization. The warning does not 2790 catch all cases, but does attempt to catch the more common 2791 pitfalls. It is included in `-Wall'. 2792 2793`-Wstrict-aliasing=2' 2794 This option is only active when `-fstrict-aliasing' is active. It 2795 warns about code which might break the strict aliasing rules that 2796 the compiler is using for optimization. This warning catches more 2797 cases than `-Wstrict-aliasing', but it will also give a warning 2798 for some ambiguous cases that are safe. 2799 2800`-Wstrict-overflow' 2801 2802`-Wstrict-overflow=N' 2803 This option is only active when `-fstrict-overflow' is active. It 2804 warns about cases where the compiler optimizes based on the 2805 assumption that signed overflow does not occur. Note that it does 2806 not warn about all cases where the code might overflow: it only 2807 warns about cases where the compiler implements some optimization. 2808 Thus this warning depends on the optimization level. 2809 2810 An optimization which assumes that signed overflow does not occur 2811 is perfectly safe if the values of the variables involved are such 2812 that overflow never does, in fact, occur. Therefore this warning 2813 can easily give a false positive: a warning about code which is not 2814 actually a problem. To help focus on important issues, several 2815 warning levels are defined. No warnings are issued for the use of 2816 undefined signed overflow when estimating how many iterations a 2817 loop will require, in particular when determining whether a loop 2818 will be executed at all. 2819 2820 `-Wstrict-overflow=1' 2821 Warn about cases which are both questionable and easy to 2822 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 2823 the compiler will simplify this to `1'. This level of 2824 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 2825 not, and must be explicitly requested. 2826 2827 `-Wstrict-overflow=2' 2828 Also warn about other cases where a comparison is simplified 2829 to a constant. For example: `abs (x) >= 0'. This can only be 2830 simplified when `-fstrict-overflow' is in effect, because 2831 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 2832 zero. `-Wstrict-overflow' (with no level) is the same as 2833 `-Wstrict-overflow=2'. 2834 2835 `-Wstrict-overflow=3' 2836 Also warn about other cases where a comparison is simplified. 2837 For example: `x + 1 > 1' will be simplified to `x > 0'. 2838 2839 `-Wstrict-overflow=4' 2840 Also warn about other simplifications not covered by the 2841 above cases. For example: `(x * 10) / 5' will be simplified 2842 to `x * 2'. 2843 2844 `-Wstrict-overflow=5' 2845 Also warn about cases where the compiler reduces the 2846 magnitude of a constant involved in a comparison. For 2847 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 2848 This is reported only at the highest warning level because 2849 this simplification applies to many comparisons, so this 2850 warning level will give a very large number of false 2851 positives. 2852 2853`-Wall' 2854 All of the above `-W' options combined. This enables all the 2855 warnings about constructions that some users consider 2856 questionable, and that are easy to avoid (or modify to prevent the 2857 warning), even in conjunction with macros. This also enables some 2858 language-specific warnings described in *Note C++ Dialect 2859 Options:: and *Note Objective-C and Objective-C++ Dialect 2860 Options::. 2861 2862 The following `-W...' options are not implied by `-Wall'. Some of 2863them warn about constructions that users generally do not consider 2864questionable, but which occasionally you might wish to check for; 2865others warn about constructions that are necessary or hard to avoid in 2866some cases, and there is no simple way to modify the code to suppress 2867the warning. 2868 2869`-Wextra' 2870 (This option used to be called `-W'. The older name is still 2871 supported, but the newer name is more descriptive.) Print extra 2872 warning messages for these events: 2873 2874 * A function can return either with or without a value. 2875 (Falling off the end of the function body is considered 2876 returning without a value.) For example, this function would 2877 evoke such a warning: 2878 2879 foo (a) 2880 { 2881 if (a > 0) 2882 return a; 2883 } 2884 2885 * An expression-statement or the left-hand side of a comma 2886 expression contains no side effects. To suppress the 2887 warning, cast the unused expression to void. For example, an 2888 expression such as `x[i,j]' will cause a warning, but 2889 `x[(void)i,j]' will not. 2890 2891 * An unsigned value is compared against zero with `<' or `>='. 2892 2893 * Storage-class specifiers like `static' are not the first 2894 things in a declaration. According to the C Standard, this 2895 usage is obsolescent. 2896 2897 * If `-Wall' or `-Wunused' is also specified, warn about unused 2898 arguments. 2899 2900 * A comparison between signed and unsigned values could produce 2901 an incorrect result when the signed value is converted to 2902 unsigned. (But don't warn if `-Wno-sign-compare' is also 2903 specified.) 2904 2905 * An aggregate has an initializer which does not initialize all 2906 members. This warning can be independently controlled by 2907 `-Wmissing-field-initializers'. 2908 2909 * An initialized field without side effects is overridden when 2910 using designated initializers (*note Designated Initializers: 2911 Designated Inits.). This warning can be independently 2912 controlled by `-Woverride-init'. 2913 2914 * A function parameter is declared without a type specifier in 2915 K&R-style functions: 2916 2917 void foo(bar) { } 2918 2919 * An empty body occurs in an `if' or `else' statement. 2920 2921 * A pointer is compared against integer zero with `<', `<=', 2922 `>', or `>='. 2923 2924 * A variable might be changed by `longjmp' or `vfork'. 2925 2926 * (C++ only) An enumerator and a non-enumerator both appear in 2927 a conditional expression. 2928 2929 * (C++ only) A non-static reference or non-static `const' 2930 member appears in a class without constructors. 2931 2932 * (C++ only) Ambiguous virtual bases. 2933 2934 * (C++ only) Subscripting an array which has been declared 2935 `register'. 2936 2937 * (C++ only) Taking the address of a variable which has been 2938 declared `register'. 2939 2940 * (C++ only) A base class is not initialized in a derived 2941 class' copy constructor. 2942 2943`-Wno-div-by-zero' 2944 Do not warn about compile-time integer division by zero. Floating 2945 point division by zero is not warned about, as it can be a 2946 legitimate way of obtaining infinities and NaNs. 2947 2948`-Wsystem-headers' 2949 Print warning messages for constructs found in system header files. 2950 Warnings from system headers are normally suppressed, on the 2951 assumption that they usually do not indicate real problems and 2952 would only make the compiler output harder to read. Using this 2953 command line option tells GCC to emit warnings from system headers 2954 as if they occurred in user code. However, note that using 2955 `-Wall' in conjunction with this option will _not_ warn about 2956 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 2957 must also be used. 2958 2959`-Wfloat-equal' 2960 Warn if floating point values are used in equality comparisons. 2961 2962 The idea behind this is that sometimes it is convenient (for the 2963 programmer) to consider floating-point values as approximations to 2964 infinitely precise real numbers. If you are doing this, then you 2965 need to compute (by analyzing the code, or in some other way) the 2966 maximum or likely maximum error that the computation introduces, 2967 and allow for it when performing comparisons (and when producing 2968 output, but that's a different problem). In particular, instead 2969 of testing for equality, you would check to see whether the two 2970 values have ranges that overlap; and this is done with the 2971 relational operators, so equality comparisons are probably 2972 mistaken. 2973 2974`-Wtraditional (C only)' 2975 Warn about certain constructs that behave differently in 2976 traditional and ISO C. Also warn about ISO C constructs that have 2977 no traditional C equivalent, and/or problematic constructs which 2978 should be avoided. 2979 2980 * Macro parameters that appear within string literals in the 2981 macro body. In traditional C macro replacement takes place 2982 within string literals, but does not in ISO C. 2983 2984 * In traditional C, some preprocessor directives did not exist. 2985 Traditional preprocessors would only consider a line to be a 2986 directive if the `#' appeared in column 1 on the line. 2987 Therefore `-Wtraditional' warns about directives that 2988 traditional C understands but would ignore because the `#' 2989 does not appear as the first character on the line. It also 2990 suggests you hide directives like `#pragma' not understood by 2991 traditional C by indenting them. Some traditional 2992 implementations would not recognize `#elif', so it suggests 2993 avoiding it altogether. 2994 2995 * A function-like macro that appears without arguments. 2996 2997 * The unary plus operator. 2998 2999 * The `U' integer constant suffix, or the `F' or `L' floating 3000 point constant suffixes. (Traditional C does support the `L' 3001 suffix on integer constants.) Note, these suffixes appear in 3002 macros defined in the system headers of most modern systems, 3003 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3004 macros in user code might normally lead to spurious warnings, 3005 however GCC's integrated preprocessor has enough context to 3006 avoid warning in these cases. 3007 3008 * A function declared external in one block and then used after 3009 the end of the block. 3010 3011 * A `switch' statement has an operand of type `long'. 3012 3013 * A non-`static' function declaration follows a `static' one. 3014 This construct is not accepted by some traditional C 3015 compilers. 3016 3017 * The ISO type of an integer constant has a different width or 3018 signedness from its traditional type. This warning is only 3019 issued if the base of the constant is ten. I.e. hexadecimal 3020 or octal values, which typically represent bit patterns, are 3021 not warned about. 3022 3023 * Usage of ISO string concatenation is detected. 3024 3025 * Initialization of automatic aggregates. 3026 3027 * Identifier conflicts with labels. Traditional C lacks a 3028 separate namespace for labels. 3029 3030 * Initialization of unions. If the initializer is zero, the 3031 warning is omitted. This is done under the assumption that 3032 the zero initializer in user code appears conditioned on e.g. 3033 `__STDC__' to avoid missing initializer warnings and relies 3034 on default initialization to zero in the traditional C case. 3035 3036 * Conversions by prototypes between fixed/floating point values 3037 and vice versa. The absence of these prototypes when 3038 compiling with traditional C would cause serious problems. 3039 This is a subset of the possible conversion warnings, for the 3040 full set use `-Wconversion'. 3041 3042 * Use of ISO C style function definitions. This warning 3043 intentionally is _not_ issued for prototype declarations or 3044 variadic functions because these ISO C features will appear 3045 in your code when using libiberty's traditional C 3046 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3047 is also bypassed for nested functions because that feature is 3048 already a GCC extension and thus not relevant to traditional 3049 C compatibility. 3050 3051`-Wdeclaration-after-statement (C only)' 3052 Warn when a declaration is found after a statement in a block. 3053 This construct, known from C++, was introduced with ISO C99 and is 3054 by default allowed in GCC. It is not supported by ISO C90 and was 3055 not supported by GCC versions before GCC 3.0. *Note Mixed 3056 Declarations::. 3057 3058`-Wundef' 3059 Warn if an undefined identifier is evaluated in an `#if' directive. 3060 3061`-Wno-endif-labels' 3062 Do not warn whenever an `#else' or an `#endif' are followed by 3063 text. 3064 3065`-Wshadow' 3066 Warn whenever a local variable shadows another local variable, 3067 parameter or global variable or whenever a built-in function is 3068 shadowed. 3069 3070`-Wlarger-than-LEN' 3071 Warn whenever an object of larger than LEN bytes is defined. 3072 3073`-Wunsafe-loop-optimizations' 3074 Warn if the loop cannot be optimized because the compiler could not 3075 assume anything on the bounds of the loop indices. With 3076 `-funsafe-loop-optimizations' warn if the compiler made such 3077 assumptions. 3078 3079`-Wpointer-arith' 3080 Warn about anything that depends on the "size of" a function type 3081 or of `void'. GNU C assigns these types a size of 1, for 3082 convenience in calculations with `void *' pointers and pointers to 3083 functions. 3084 3085`-Wbad-function-cast (C only)' 3086 Warn whenever a function call is cast to a non-matching type. For 3087 example, warn if `int malloc()' is cast to `anything *'. 3088 3089`-Wc++-compat' 3090 Warn about ISO C constructs that are outside of the common subset 3091 of ISO C and ISO C++, e.g. request for implicit conversion from 3092 `void *' to a pointer to non-`void' type. 3093 3094`-Wcast-qual' 3095 Warn whenever a pointer is cast so as to remove a type qualifier 3096 from the target type. For example, warn if a `const char *' is 3097 cast to an ordinary `char *'. 3098 3099`-Wcast-align' 3100 Warn whenever a pointer is cast such that the required alignment 3101 of the target is increased. For example, warn if a `char *' is 3102 cast to an `int *' on machines where integers can only be accessed 3103 at two- or four-byte boundaries. 3104 3105`-Wwrite-strings' 3106 When compiling C, give string constants the type `const 3107 char[LENGTH]' so that copying the address of one into a 3108 non-`const' `char *' pointer will get a warning; when compiling 3109 C++, warn about the deprecated conversion from string literals to 3110 `char *'. This warning, by default, is enabled for C++ programs. 3111 These warnings will help you find at compile time code that can 3112 try to write into a string constant, but only if you have been 3113 very careful about using `const' in declarations and prototypes. 3114 Otherwise, it will just be a nuisance; this is why we did not make 3115 `-Wall' request these warnings. 3116 3117`-Wconversion' 3118 Warn if a prototype causes a type conversion that is different 3119 from what would happen to the same argument in the absence of a 3120 prototype. This includes conversions of fixed point to floating 3121 and vice versa, and conversions changing the width or signedness 3122 of a fixed point argument except when the same as the default 3123 promotion. 3124 3125 Also, warn if a negative integer constant expression is implicitly 3126 converted to an unsigned type. For example, warn about the 3127 assignment `x = -1' if `x' is unsigned. But do not warn about 3128 explicit casts like `(unsigned) -1'. 3129 3130`-Wsign-compare' 3131 Warn when a comparison between signed and unsigned values could 3132 produce an incorrect result when the signed value is converted to 3133 unsigned. This warning is also enabled by `-Wextra'; to get the 3134 other warnings of `-Wextra' without this warning, use `-Wextra 3135 -Wno-sign-compare'. 3136 3137`-Waddress' 3138 Warn about suspicious uses of memory addresses. These include using 3139 the address of a function in a conditional expression, such as 3140 `void func(void); if (func)', and comparisons against the memory 3141 address of a string literal, such as `if (x == "abc")'. Such uses 3142 typically indicate a programmer error: the address of a function 3143 always evaluates to true, so their use in a conditional usually 3144 indicate that the programmer forgot the parentheses in a function 3145 call; and comparisons against string literals result in unspecified 3146 behavior and are not portable in C, so they usually indicate that 3147 the programmer intended to use `strcmp'. This warning is enabled 3148 by `-Wall'. 3149 3150`-Waggregate-return' 3151 Warn if any functions that return structures or unions are defined 3152 or called. (In languages where you can return an array, this also 3153 elicits a warning.) 3154 3155`-Wno-attributes' 3156 Do not warn if an unexpected `__attribute__' is used, such as 3157 unrecognized attributes, function attributes applied to variables, 3158 etc. This will not stop errors for incorrect use of supported 3159 attributes. 3160 3161`-Wstrict-prototypes (C only)' 3162 Warn if a function is declared or defined without specifying the 3163 argument types. (An old-style function definition is permitted 3164 without a warning if preceded by a declaration which specifies the 3165 argument types.) 3166 3167`-Wold-style-definition (C only)' 3168 Warn if an old-style function definition is used. A warning is 3169 given even if there is a previous prototype. 3170 3171`-Wmissing-prototypes (C only)' 3172 Warn if a global function is defined without a previous prototype 3173 declaration. This warning is issued even if the definition itself 3174 provides a prototype. The aim is to detect global functions that 3175 fail to be declared in header files. 3176 3177`-Wmissing-declarations (C only)' 3178 Warn if a global function is defined without a previous 3179 declaration. Do so even if the definition itself provides a 3180 prototype. Use this option to detect global functions that are 3181 not declared in header files. 3182 3183`-Wmissing-field-initializers' 3184 Warn if a structure's initializer has some fields missing. For 3185 example, the following code would cause such a warning, because 3186 `x.h' is implicitly zero: 3187 3188 struct s { int f, g, h; }; 3189 struct s x = { 3, 4 }; 3190 3191 This option does not warn about designated initializers, so the 3192 following modification would not trigger a warning: 3193 3194 struct s { int f, g, h; }; 3195 struct s x = { .f = 3, .g = 4 }; 3196 3197 This warning is included in `-Wextra'. To get other `-Wextra' 3198 warnings without this one, use `-Wextra 3199 -Wno-missing-field-initializers'. 3200 3201`-Wmissing-noreturn' 3202 Warn about functions which might be candidates for attribute 3203 `noreturn'. Note these are only possible candidates, not absolute 3204 ones. Care should be taken to manually verify functions actually 3205 do not ever return before adding the `noreturn' attribute, 3206 otherwise subtle code generation bugs could be introduced. You 3207 will not get a warning for `main' in hosted C environments. 3208 3209`-Wmissing-format-attribute' 3210 Warn about function pointers which might be candidates for `format' 3211 attributes. Note these are only possible candidates, not absolute 3212 ones. GCC will guess that function pointers with `format' 3213 attributes that are used in assignment, initialization, parameter 3214 passing or return statements should have a corresponding `format' 3215 attribute in the resulting type. I.e. the left-hand side of the 3216 assignment or initialization, the type of the parameter variable, 3217 or the return type of the containing function respectively should 3218 also have a `format' attribute to avoid the warning. 3219 3220 GCC will also warn about function definitions which might be 3221 candidates for `format' attributes. Again, these are only 3222 possible candidates. GCC will guess that `format' attributes 3223 might be appropriate for any function that calls a function like 3224 `vprintf' or `vscanf', but this might not always be the case, and 3225 some functions for which `format' attributes are appropriate may 3226 not be detected. 3227 3228`-Wno-multichar' 3229 Do not warn if a multicharacter constant (`'FOOF'') is used. 3230 Usually they indicate a typo in the user's code, as they have 3231 implementation-defined values, and should not be used in portable 3232 code. 3233 3234`-Wnormalized=<none|id|nfc|nfkc>' 3235 In ISO C and ISO C++, two identifiers are different if they are 3236 different sequences of characters. However, sometimes when 3237 characters outside the basic ASCII character set are used, you can 3238 have two different character sequences that look the same. To 3239 avoid confusion, the ISO 10646 standard sets out some 3240 "normalization rules" which when applied ensure that two sequences 3241 that look the same are turned into the same sequence. GCC can 3242 warn you if you are using identifiers which have not been 3243 normalized; this option controls that warning. 3244 3245 There are four levels of warning that GCC supports. The default is 3246 `-Wnormalized=nfc', which warns about any identifier which is not 3247 in the ISO 10646 "C" normalized form, "NFC". NFC is the 3248 recommended form for most uses. 3249 3250 Unfortunately, there are some characters which ISO C and ISO C++ 3251 allow in identifiers that when turned into NFC aren't allowable as 3252 identifiers. That is, there's no way to use these symbols in 3253 portable ISO C or C++ and have all your identifiers in NFC. 3254 `-Wnormalized=id' suppresses the warning for these characters. It 3255 is hoped that future versions of the standards involved will 3256 correct this, which is why this option is not the default. 3257 3258 You can switch the warning off for all characters by writing 3259 `-Wnormalized=none'. You would only want to do this if you were 3260 using some other normalization scheme (like "D"), because 3261 otherwise you can easily create bugs that are literally impossible 3262 to see. 3263 3264 Some characters in ISO 10646 have distinct meanings but look 3265 identical in some fonts or display methodologies, especially once 3266 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 3267 LATIN SMALL LETTER N", will display just like a regular `n' which 3268 has been placed in a superscript. ISO 10646 defines the "NFKC" 3269 normalization scheme to convert all these into a standard form as 3270 well, and GCC will warn if your code is not in NFKC if you use 3271 `-Wnormalized=nfkc'. This warning is comparable to warning about 3272 every identifier that contains the letter O because it might be 3273 confused with the digit 0, and so is not the default, but may be 3274 useful as a local coding convention if the programming environment 3275 is unable to be fixed to display these characters distinctly. 3276 3277`-Wno-deprecated-declarations' 3278 Do not warn about uses of functions (*note Function Attributes::), 3279 variables (*note Variable Attributes::), and types (*note Type 3280 Attributes::) marked as deprecated by using the `deprecated' 3281 attribute. 3282 3283`-Wno-overflow' 3284 Do not warn about compile-time overflow in constant expressions. 3285 3286`-Woverride-init' 3287 Warn if an initialized field without side effects is overridden 3288 when using designated initializers (*note Designated Initializers: 3289 Designated Inits.). 3290 3291 This warning is included in `-Wextra'. To get other `-Wextra' 3292 warnings without this one, use `-Wextra -Wno-override-init'. 3293 3294`-Wpacked' 3295 Warn if a structure is given the packed attribute, but the packed 3296 attribute has no effect on the layout or size of the structure. 3297 Such structures may be mis-aligned for little benefit. For 3298 instance, in this code, the variable `f.x' in `struct bar' will be 3299 misaligned even though `struct bar' does not itself have the 3300 packed attribute: 3301 3302 struct foo { 3303 int x; 3304 char a, b, c, d; 3305 } __attribute__((packed)); 3306 struct bar { 3307 char z; 3308 struct foo f; 3309 }; 3310 3311`-Wpadded' 3312 Warn if padding is included in a structure, either to align an 3313 element of the structure or to align the whole structure. 3314 Sometimes when this happens it is possible to rearrange the fields 3315 of the structure to reduce the padding and so make the structure 3316 smaller. 3317 3318`-Wredundant-decls' 3319 Warn if anything is declared more than once in the same scope, 3320 even in cases where multiple declaration is valid and changes 3321 nothing. 3322 3323`-Wnested-externs (C only)' 3324 Warn if an `extern' declaration is encountered within a function. 3325 3326`-Wunreachable-code' 3327 Warn if the compiler detects that code will never be executed. 3328 3329 This option is intended to warn when the compiler detects that at 3330 least a whole line of source code will never be executed, because 3331 some condition is never satisfied or because it is after a 3332 procedure that never returns. 3333 3334 It is possible for this option to produce a warning even though 3335 there are circumstances under which part of the affected line can 3336 be executed, so care should be taken when removing 3337 apparently-unreachable code. 3338 3339 For instance, when a function is inlined, a warning may mean that 3340 the line is unreachable in only one inlined copy of the function. 3341 3342 This option is not made part of `-Wall' because in a debugging 3343 version of a program there is often substantial code which checks 3344 correct functioning of the program and is, hopefully, unreachable 3345 because the program does work. Another common use of unreachable 3346 code is to provide behavior which is selectable at compile-time. 3347 3348`-Winline' 3349 Warn if a function can not be inlined and it was declared as 3350 inline. Even with this option, the compiler will not warn about 3351 failures to inline functions declared in system headers. 3352 3353 The compiler uses a variety of heuristics to determine whether or 3354 not to inline a function. For example, the compiler takes into 3355 account the size of the function being inlined and the amount of 3356 inlining that has already been done in the current function. 3357 Therefore, seemingly insignificant changes in the source program 3358 can cause the warnings produced by `-Winline' to appear or 3359 disappear. 3360 3361`-Wno-invalid-offsetof (C++ only)' 3362 Suppress warnings from applying the `offsetof' macro to a non-POD 3363 type. According to the 1998 ISO C++ standard, applying `offsetof' 3364 to a non-POD type is undefined. In existing C++ implementations, 3365 however, `offsetof' typically gives meaningful results even when 3366 applied to certain kinds of non-POD types. (Such as a simple 3367 `struct' that fails to be a POD type only by virtue of having a 3368 constructor.) This flag is for users who are aware that they are 3369 writing nonportable code and who have deliberately chosen to 3370 ignore the warning about it. 3371 3372 The restrictions on `offsetof' may be relaxed in a future version 3373 of the C++ standard. 3374 3375`-Wno-int-to-pointer-cast (C only)' 3376 Suppress warnings from casts to pointer type of an integer of a 3377 different size. 3378 3379`-Wno-pointer-to-int-cast (C only)' 3380 Suppress warnings from casts from a pointer to an integer type of a 3381 different size. 3382 3383`-Winvalid-pch' 3384 Warn if a precompiled header (*note Precompiled Headers::) is 3385 found in the search path but can't be used. 3386 3387`-Wlong-long' 3388 Warn if `long long' type is used. This is default. To inhibit 3389 the warning messages, use `-Wno-long-long'. Flags `-Wlong-long' 3390 and `-Wno-long-long' are taken into account only when `-pedantic' 3391 flag is used. 3392 3393`-Wvariadic-macros' 3394 Warn if variadic macros are used in pedantic ISO C90 mode, or the 3395 GNU alternate syntax when in pedantic ISO C99 mode. This is 3396 default. To inhibit the warning messages, use 3397 `-Wno-variadic-macros'. 3398 3399`-Wvolatile-register-var' 3400 Warn if a register variable is declared volatile. The volatile 3401 modifier does not inhibit all optimizations that may eliminate 3402 reads and/or writes to register variables. 3403 3404`-Wdisabled-optimization' 3405 Warn if a requested optimization pass is disabled. This warning 3406 does not generally indicate that there is anything wrong with your 3407 code; it merely indicates that GCC's optimizers were unable to 3408 handle the code effectively. Often, the problem is that your code 3409 is too big or too complex; GCC will refuse to optimize programs 3410 when the optimization itself is likely to take inordinate amounts 3411 of time. 3412 3413`-Wpointer-sign' 3414 Warn for pointer argument passing or assignment with different 3415 signedness. This option is only supported for C and Objective-C. 3416 It is implied by `-Wall' and by `-pedantic', which can be disabled 3417 with `-Wno-pointer-sign'. 3418 3419`-Werror' 3420 Make all warnings into errors. 3421 3422`-Werror=' 3423 Make the specified warning into an errors. The specifier for a 3424 warning is appended, for example `-Werror=switch' turns the 3425 warnings controlled by `-Wswitch' into errors. This switch takes 3426 a negative form, to be used to negate `-Werror' for specific 3427 warnings, for example `-Wno-error=switch' makes `-Wswitch' 3428 warnings not be errors, even when `-Werror' is in effect. You can 3429 use the `-fdiagnostics-show-option' option to have each 3430 controllable warning amended with the option which controls it, to 3431 determine what to use with this option. 3432 3433 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 3434 However, `-Wno-error='FOO does not imply anything. 3435 3436`-Wstack-protector' 3437 This option is only active when `-fstack-protector' is active. It 3438 warns about functions that will not be protected against stack 3439 smashing. 3440 3441`-Woverlength-strings' 3442 Warn about string constants which are longer than the "minimum 3443 maximum" length specified in the C standard. Modern compilers 3444 generally allow string constants which are much longer than the 3445 standard's minimum limit, but very portable programs should avoid 3446 using longer strings. 3447 3448 The limit applies _after_ string constant concatenation, and does 3449 not count the trailing NUL. In C89, the limit was 509 characters; 3450 in C99, it was raised to 4095. C++98 does not specify a normative 3451 minimum maximum, so we do not diagnose overlength strings in C++. 3452 3453 This option is implied by `-pedantic', and can be disabled with 3454 `-Wno-overlength-strings'. 3455 3456 3457File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 3458 34593.9 Options for Debugging Your Program or GCC 3460============================================= 3461 3462GCC has various special options that are used for debugging either your 3463program or GCC: 3464 3465`-g' 3466 Produce debugging information in the operating system's native 3467 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 3468 debugging information. 3469 3470 On most systems that use stabs format, `-g' enables use of extra 3471 debugging information that only GDB can use; this extra information 3472 makes debugging work better in GDB but will probably make other 3473 debuggers crash or refuse to read the program. If you want to 3474 control for certain whether to generate the extra information, use 3475 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 3476 below). 3477 3478 GCC allows you to use `-g' with `-O'. The shortcuts taken by 3479 optimized code may occasionally produce surprising results: some 3480 variables you declared may not exist at all; flow of control may 3481 briefly move where you did not expect it; some statements may not 3482 be executed because they compute constant results or their values 3483 were already at hand; some statements may execute in different 3484 places because they were moved out of loops. 3485 3486 Nevertheless it proves possible to debug optimized output. This 3487 makes it reasonable to use the optimizer for programs that might 3488 have bugs. 3489 3490 The following options are useful when GCC is generated with the 3491 capability for more than one debugging format. 3492 3493`-ggdb' 3494 Produce debugging information for use by GDB. This means to use 3495 the most expressive format available (DWARF 2, stabs, or the 3496 native format if neither of those are supported), including GDB 3497 extensions if at all possible. 3498 3499`-gstabs' 3500 Produce debugging information in stabs format (if that is 3501 supported), without GDB extensions. This is the format used by 3502 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 3503 systems this option produces stabs debugging output which is not 3504 understood by DBX or SDB. On System V Release 4 systems this 3505 option requires the GNU assembler. 3506 3507`-feliminate-unused-debug-symbols' 3508 Produce debugging information in stabs format (if that is 3509 supported), for only symbols that are actually used. 3510 3511`-femit-class-debug-always' 3512 Instead of emitting debugging information for a C++ class in only 3513 one object file, emit it in all object files using the class. 3514 This option should be used only with debuggers that are unable to 3515 handle the way GCC normally emits debugging information for 3516 classes because using this option will increase the size of 3517 debugging information by as much as a factor of two. 3518 3519`-gstabs+' 3520 Produce debugging information in stabs format (if that is 3521 supported), using GNU extensions understood only by the GNU 3522 debugger (GDB). The use of these extensions is likely to make 3523 other debuggers crash or refuse to read the program. 3524 3525`-gcoff' 3526 Produce debugging information in COFF format (if that is 3527 supported). This is the format used by SDB on most System V 3528 systems prior to System V Release 4. 3529 3530`-gxcoff' 3531 Produce debugging information in XCOFF format (if that is 3532 supported). This is the format used by the DBX debugger on IBM 3533 RS/6000 systems. 3534 3535`-gxcoff+' 3536 Produce debugging information in XCOFF format (if that is 3537 supported), using GNU extensions understood only by the GNU 3538 debugger (GDB). The use of these extensions is likely to make 3539 other debuggers crash or refuse to read the program, and may cause 3540 assemblers other than the GNU assembler (GAS) to fail with an 3541 error. 3542 3543`-gdwarf-2' 3544 Produce debugging information in DWARF version 2 format (if that is 3545 supported). This is the format used by DBX on IRIX 6. With this 3546 option, GCC uses features of DWARF version 3 when they are useful; 3547 version 3 is upward compatible with version 2, but may still cause 3548 problems for older debuggers. 3549 3550`-gvms' 3551 Produce debugging information in VMS debug format (if that is 3552 supported). This is the format used by DEBUG on VMS systems. 3553 3554`-gLEVEL' 3555`-ggdbLEVEL' 3556`-gstabsLEVEL' 3557`-gcoffLEVEL' 3558`-gxcoffLEVEL' 3559`-gvmsLEVEL' 3560 Request debugging information and also use LEVEL to specify how 3561 much information. The default level is 2. 3562 3563 Level 1 produces minimal information, enough for making backtraces 3564 in parts of the program that you don't plan to debug. This 3565 includes descriptions of functions and external variables, but no 3566 information about local variables and no line numbers. 3567 3568 Level 3 includes extra information, such as all the macro 3569 definitions present in the program. Some debuggers support macro 3570 expansion when you use `-g3'. 3571 3572 `-gdwarf-2' does not accept a concatenated debug level, because 3573 GCC used to support an option `-gdwarf' that meant to generate 3574 debug information in version 1 of the DWARF format (which is very 3575 different from version 2), and it would have been too confusing. 3576 That debug format is long obsolete, but the option cannot be 3577 changed now. Instead use an additional `-gLEVEL' option to change 3578 the debug level for DWARF2. 3579 3580`-feliminate-dwarf2-dups' 3581 Compress DWARF2 debugging information by eliminating duplicated 3582 information about each symbol. This option only makes sense when 3583 generating DWARF2 debugging information with `-gdwarf-2'. 3584 3585`-p' 3586 Generate extra code to write profile information suitable for the 3587 analysis program `prof'. You must use this option when compiling 3588 the source files you want data about, and you must also use it when 3589 linking. 3590 3591`-pg' 3592 Generate extra code to write profile information suitable for the 3593 analysis program `gprof'. You must use this option when compiling 3594 the source files you want data about, and you must also use it when 3595 linking. 3596 3597`-Q' 3598 Makes the compiler print out each function name as it is compiled, 3599 and print some statistics about each pass when it finishes. 3600 3601`-ftime-report' 3602 Makes the compiler print some statistics about the time consumed 3603 by each pass when it finishes. 3604 3605`-fmem-report' 3606 Makes the compiler print some statistics about permanent memory 3607 allocation when it finishes. 3608 3609`-fprofile-arcs' 3610 Add code so that program flow "arcs" are instrumented. During 3611 execution the program records how many times each branch and call 3612 is executed and how many times it is taken or returns. When the 3613 compiled program exits it saves this data to a file called 3614 `AUXNAME.gcda' for each source file. The data may be used for 3615 profile-directed optimizations (`-fbranch-probabilities'), or for 3616 test coverage analysis (`-ftest-coverage'). Each object file's 3617 AUXNAME is generated from the name of the output file, if 3618 explicitly specified and it is not the final executable, otherwise 3619 it is the basename of the source file. In both cases any suffix 3620 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 3621 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 3622 *Note Cross-profiling::. 3623 3624`--coverage' 3625 This option is used to compile and link code instrumented for 3626 coverage analysis. The option is a synonym for `-fprofile-arcs' 3627 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 3628 See the documentation for those options for more details. 3629 3630 * Compile the source files with `-fprofile-arcs' plus 3631 optimization and code generation options. For test coverage 3632 analysis, use the additional `-ftest-coverage' option. You 3633 do not need to profile every source file in a program. 3634 3635 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 3636 latter implies the former). 3637 3638 * Run the program on a representative workload to generate the 3639 arc profile information. This may be repeated any number of 3640 times. You can run concurrent instances of your program, and 3641 provided that the file system supports locking, the data 3642 files will be correctly updated. Also `fork' calls are 3643 detected and correctly handled (double counting will not 3644 happen). 3645 3646 * For profile-directed optimizations, compile the source files 3647 again with the same optimization and code generation options 3648 plus `-fbranch-probabilities' (*note Options that Control 3649 Optimization: Optimize Options.). 3650 3651 * For test coverage analysis, use `gcov' to produce human 3652 readable information from the `.gcno' and `.gcda' files. 3653 Refer to the `gcov' documentation for further information. 3654 3655 3656 With `-fprofile-arcs', for each function of your program GCC 3657 creates a program flow graph, then finds a spanning tree for the 3658 graph. Only arcs that are not on the spanning tree have to be 3659 instrumented: the compiler adds code to count the number of times 3660 that these arcs are executed. When an arc is the only exit or 3661 only entrance to a block, the instrumentation code can be added to 3662 the block; otherwise, a new basic block must be created to hold 3663 the instrumentation code. 3664 3665`-ftest-coverage' 3666 Produce a notes file that the `gcov' code-coverage utility (*note 3667 `gcov'--a Test Coverage Program: Gcov.) can use to show program 3668 coverage. Each source file's note file is called `AUXNAME.gcno'. 3669 Refer to the `-fprofile-arcs' option above for a description of 3670 AUXNAME and instructions on how to generate test coverage data. 3671 Coverage data will match the source files more closely, if you do 3672 not optimize. 3673 3674`-dLETTERS' 3675 3676`-fdump-rtl-PASS' 3677 Says to make debugging dumps during compilation at times specified 3678 by LETTERS. This is used for debugging the RTL-based passes of 3679 the compiler. The file names for most of the dumps are made by 3680 appending a pass number and a word to the DUMPNAME. DUMPNAME is 3681 generated from the name of the output file, if explicitly 3682 specified and it is not an executable, otherwise it is the 3683 basename of the source file. 3684 3685 Most debug dumps can be enabled either passing a letter to the `-d' 3686 option, or with a long `-fdump-rtl' switch; here are the possible 3687 letters for use in LETTERS and PASS, and their meanings: 3688 3689 `-dA' 3690 Annotate the assembler output with miscellaneous debugging 3691 information. 3692 3693 `-dB' 3694 `-fdump-rtl-bbro' 3695 Dump after block reordering, to `FILE.148r.bbro'. 3696 3697 `-dc' 3698 `-fdump-rtl-combine' 3699 Dump after instruction combination, to the file 3700 `FILE.129r.combine'. 3701 3702 `-dC' 3703 `-fdump-rtl-ce1' 3704 `-fdump-rtl-ce2' 3705 `-dC' and `-fdump-rtl-ce1' enable dumping after the first if 3706 conversion, to the file `FILE.117r.ce1'. `-dC' and 3707 `-fdump-rtl-ce2' enable dumping after the second if 3708 conversion, to the file `FILE.130r.ce2'. 3709 3710 `-dd' 3711 `-fdump-rtl-btl' 3712 `-fdump-rtl-dbr' 3713 `-dd' and `-fdump-rtl-btl' enable dumping after branch target 3714 load optimization, to `FILE.31.btl'. `-dd' and 3715 `-fdump-rtl-dbr' enable dumping after delayed branch 3716 scheduling, to `FILE.36.dbr'. 3717 3718 `-dD' 3719 Dump all macro definitions, at the end of preprocessing, in 3720 addition to normal output. 3721 3722 `-dE' 3723 `-fdump-rtl-ce3' 3724 Dump after the third if conversion, to `FILE.146r.ce3'. 3725 3726 `-df' 3727 `-fdump-rtl-cfg' 3728 `-fdump-rtl-life' 3729 `-df' and `-fdump-rtl-cfg' enable dumping after control and 3730 data flow analysis, to `FILE.116r.cfg'. `-df' and 3731 `-fdump-rtl-cfg' enable dumping dump after life analysis, to 3732 `FILE.128r.life1' and `FILE.135r.life2'. 3733 3734 `-dg' 3735 `-fdump-rtl-greg' 3736 Dump after global register allocation, to `FILE.139r.greg'. 3737 3738 `-dG' 3739 `-fdump-rtl-gcse' 3740 `-fdump-rtl-bypass' 3741 `-dG' and `-fdump-rtl-gcse' enable dumping after GCSE, to 3742 `FILE.114r.gcse'. `-dG' and `-fdump-rtl-bypass' enable 3743 dumping after jump bypassing and control flow optimizations, 3744 to `FILE.115r.bypass'. 3745 3746 `-dh' 3747 `-fdump-rtl-eh' 3748 Dump after finalization of EH handling code, to `FILE.02.eh'. 3749 3750 `-di' 3751 `-fdump-rtl-sibling' 3752 Dump after sibling call optimizations, to `FILE.106r.sibling'. 3753 3754 `-dj' 3755 `-fdump-rtl-jump' 3756 Dump after the first jump optimization, to `FILE.112r.jump'. 3757 3758 `-dk' 3759 `-fdump-rtl-stack' 3760 Dump after conversion from registers to stack, to 3761 `FILE.152r.stack'. 3762 3763 `-dl' 3764 `-fdump-rtl-lreg' 3765 Dump after local register allocation, to `FILE.138r.lreg'. 3766 3767 `-dL' 3768 `-fdump-rtl-loop2' 3769 `-dL' and `-fdump-rtl-loop2' enable dumping after the loop 3770 optimization pass, to `FILE.119r.loop2', 3771 `FILE.120r.loop2_init', `FILE.121r.loop2_invariant', and 3772 `FILE.125r.loop2_done'. 3773 3774 `-dm' 3775 `-fdump-rtl-sms' 3776 Dump after modulo scheduling, to `FILE.136r.sms'. 3777 3778 `-dM' 3779 `-fdump-rtl-mach' 3780 Dump after performing the machine dependent reorganization 3781 pass, to `FILE.155r.mach'. 3782 3783 `-dn' 3784 `-fdump-rtl-rnreg' 3785 Dump after register renumbering, to `FILE.147r.rnreg'. 3786 3787 `-dN' 3788 `-fdump-rtl-regmove' 3789 Dump after the register move pass, to `FILE.132r.regmove'. 3790 3791 `-do' 3792 `-fdump-rtl-postreload' 3793 Dump after post-reload optimizations, to `FILE.24.postreload'. 3794 3795 `-dr' 3796 `-fdump-rtl-expand' 3797 Dump after RTL generation, to `FILE.104r.expand'. 3798 3799 `-dR' 3800 `-fdump-rtl-sched2' 3801 Dump after the second scheduling pass, to `FILE.150r.sched2'. 3802 3803 `-ds' 3804 `-fdump-rtl-cse' 3805 Dump after CSE (including the jump optimization that 3806 sometimes follows CSE), to `FILE.113r.cse'. 3807 3808 `-dS' 3809 `-fdump-rtl-sched' 3810 Dump after the first scheduling pass, to `FILE.21.sched'. 3811 3812 `-dt' 3813 `-fdump-rtl-cse2' 3814 Dump after the second CSE pass (including the jump 3815 optimization that sometimes follows CSE), to `FILE.127r.cse2'. 3816 3817 `-dT' 3818 `-fdump-rtl-tracer' 3819 Dump after running tracer, to `FILE.118r.tracer'. 3820 3821 `-dV' 3822 `-fdump-rtl-vpt' 3823 `-fdump-rtl-vartrack' 3824 `-dV' and `-fdump-rtl-vpt' enable dumping after the value 3825 profile transformations, to `FILE.10.vpt'. `-dV' and 3826 `-fdump-rtl-vartrack' enable dumping after variable tracking, 3827 to `FILE.154r.vartrack'. 3828 3829 `-dw' 3830 `-fdump-rtl-flow2' 3831 Dump after the second flow pass, to `FILE.142r.flow2'. 3832 3833 `-dz' 3834 `-fdump-rtl-peephole2' 3835 Dump after the peephole pass, to `FILE.145r.peephole2'. 3836 3837 `-dZ' 3838 `-fdump-rtl-web' 3839 Dump after live range splitting, to `FILE.126r.web'. 3840 3841 `-da' 3842 `-fdump-rtl-all' 3843 Produce all the dumps listed above. 3844 3845 `-dH' 3846 Produce a core dump whenever an error occurs. 3847 3848 `-dm' 3849 Print statistics on memory usage, at the end of the run, to 3850 standard error. 3851 3852 `-dp' 3853 Annotate the assembler output with a comment indicating which 3854 pattern and alternative was used. The length of each 3855 instruction is also printed. 3856 3857 `-dP' 3858 Dump the RTL in the assembler output as a comment before each 3859 instruction. Also turns on `-dp' annotation. 3860 3861 `-dv' 3862 For each of the other indicated dump files (either with `-d' 3863 or `-fdump-rtl-PASS'), dump a representation of the control 3864 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 3865 3866 `-dx' 3867 Just generate RTL for a function instead of compiling it. 3868 Usually used with `r' (`-fdump-rtl-expand'). 3869 3870 `-dy' 3871 Dump debugging information during parsing, to standard error. 3872 3873`-fdump-noaddr' 3874 When doing debugging dumps (see `-d' option above), suppress 3875 address output. This makes it more feasible to use diff on 3876 debugging dumps for compiler invocations with different compiler 3877 binaries and/or different text / bss / data / heap / stack / dso 3878 start locations. 3879 3880`-fdump-unnumbered' 3881 When doing debugging dumps (see `-d' option above), suppress 3882 instruction numbers, line number note and address output. This 3883 makes it more feasible to use diff on debugging dumps for compiler 3884 invocations with different options, in particular with and without 3885 `-g'. 3886 3887`-fdump-translation-unit (C++ only)' 3888`-fdump-translation-unit-OPTIONS (C++ only)' 3889 Dump a representation of the tree structure for the entire 3890 translation unit to a file. The file name is made by appending 3891 `.tu' to the source file name. If the `-OPTIONS' form is used, 3892 OPTIONS controls the details of the dump as described for the 3893 `-fdump-tree' options. 3894 3895`-fdump-class-hierarchy (C++ only)' 3896`-fdump-class-hierarchy-OPTIONS (C++ only)' 3897 Dump a representation of each class's hierarchy and virtual 3898 function table layout to a file. The file name is made by 3899 appending `.class' to the source file name. If the `-OPTIONS' 3900 form is used, OPTIONS controls the details of the dump as 3901 described for the `-fdump-tree' options. 3902 3903`-fdump-ipa-SWITCH' 3904 Control the dumping at various stages of inter-procedural analysis 3905 language tree to a file. The file name is generated by appending 3906 a switch specific suffix to the source file name. The following 3907 dumps are possible: 3908 3909 `all' 3910 Enables all inter-procedural analysis dumps; currently the 3911 only produced dump is the `cgraph' dump. 3912 3913 `cgraph' 3914 Dumps information about call-graph optimization, unused 3915 function removal, and inlining decisions. 3916 3917`-fdump-tree-SWITCH' 3918`-fdump-tree-SWITCH-OPTIONS' 3919 Control the dumping at various stages of processing the 3920 intermediate language tree to a file. The file name is generated 3921 by appending a switch specific suffix to the source file name. If 3922 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 3923 options that control the details of the dump. Not all options are 3924 applicable to all dumps, those which are not meaningful will be 3925 ignored. The following options are available 3926 3927 `address' 3928 Print the address of each node. Usually this is not 3929 meaningful as it changes according to the environment and 3930 source file. Its primary use is for tying up a dump file 3931 with a debug environment. 3932 3933 `slim' 3934 Inhibit dumping of members of a scope or body of a function 3935 merely because that scope has been reached. Only dump such 3936 items when they are directly reachable by some other path. 3937 When dumping pretty-printed trees, this option inhibits 3938 dumping the bodies of control structures. 3939 3940 `raw' 3941 Print a raw representation of the tree. By default, trees are 3942 pretty-printed into a C-like representation. 3943 3944 `details' 3945 Enable more detailed dumps (not honored by every dump option). 3946 3947 `stats' 3948 Enable dumping various statistics about the pass (not honored 3949 by every dump option). 3950 3951 `blocks' 3952 Enable showing basic block boundaries (disabled in raw dumps). 3953 3954 `vops' 3955 Enable showing virtual operands for every statement. 3956 3957 `lineno' 3958 Enable showing line numbers for statements. 3959 3960 `uid' 3961 Enable showing the unique ID (`DECL_UID') for each variable. 3962 3963 `all' 3964 Turn on all options, except `raw', `slim' and `lineno'. 3965 3966 The following tree dumps are possible: 3967 `original' 3968 Dump before any tree based optimization, to `FILE.original'. 3969 3970 `optimized' 3971 Dump after all tree based optimization, to `FILE.optimized'. 3972 3973 `inlined' 3974 Dump after function inlining, to `FILE.inlined'. 3975 3976 `gimple' 3977 Dump each function before and after the gimplification pass 3978 to a file. The file name is made by appending `.gimple' to 3979 the source file name. 3980 3981 `cfg' 3982 Dump the control flow graph of each function to a file. The 3983 file name is made by appending `.cfg' to the source file name. 3984 3985 `vcg' 3986 Dump the control flow graph of each function to a file in VCG 3987 format. The file name is made by appending `.vcg' to the 3988 source file name. Note that if the file contains more than 3989 one function, the generated file cannot be used directly by 3990 VCG. You will need to cut and paste each function's graph 3991 into its own separate file first. 3992 3993 `ch' 3994 Dump each function after copying loop headers. The file name 3995 is made by appending `.ch' to the source file name. 3996 3997 `ssa' 3998 Dump SSA related information to a file. The file name is 3999 made by appending `.ssa' to the source file name. 4000 4001 `salias' 4002 Dump structure aliasing variable information to a file. This 4003 file name is made by appending `.salias' to the source file 4004 name. 4005 4006 `alias' 4007 Dump aliasing information for each function. The file name 4008 is made by appending `.alias' to the source file name. 4009 4010 `ccp' 4011 Dump each function after CCP. The file name is made by 4012 appending `.ccp' to the source file name. 4013 4014 `storeccp' 4015 Dump each function after STORE-CCP. The file name is made by 4016 appending `.storeccp' to the source file name. 4017 4018 `pre' 4019 Dump trees after partial redundancy elimination. The file 4020 name is made by appending `.pre' to the source file name. 4021 4022 `fre' 4023 Dump trees after full redundancy elimination. The file name 4024 is made by appending `.fre' to the source file name. 4025 4026 `copyprop' 4027 Dump trees after copy propagation. The file name is made by 4028 appending `.copyprop' to the source file name. 4029 4030 `store_copyprop' 4031 Dump trees after store copy-propagation. The file name is 4032 made by appending `.store_copyprop' to the source file name. 4033 4034 `dce' 4035 Dump each function after dead code elimination. The file 4036 name is made by appending `.dce' to the source file name. 4037 4038 `mudflap' 4039 Dump each function after adding mudflap instrumentation. The 4040 file name is made by appending `.mudflap' to the source file 4041 name. 4042 4043 `sra' 4044 Dump each function after performing scalar replacement of 4045 aggregates. The file name is made by appending `.sra' to the 4046 source file name. 4047 4048 `sink' 4049 Dump each function after performing code sinking. The file 4050 name is made by appending `.sink' to the source file name. 4051 4052 `dom' 4053 Dump each function after applying dominator tree 4054 optimizations. The file name is made by appending `.dom' to 4055 the source file name. 4056 4057 `dse' 4058 Dump each function after applying dead store elimination. 4059 The file name is made by appending `.dse' to the source file 4060 name. 4061 4062 `phiopt' 4063 Dump each function after optimizing PHI nodes into 4064 straightline code. The file name is made by appending 4065 `.phiopt' to the source file name. 4066 4067 `forwprop' 4068 Dump each function after forward propagating single use 4069 variables. The file name is made by appending `.forwprop' to 4070 the source file name. 4071 4072 `copyrename' 4073 Dump each function after applying the copy rename 4074 optimization. The file name is made by appending 4075 `.copyrename' to the source file name. 4076 4077 `nrv' 4078 Dump each function after applying the named return value 4079 optimization on generic trees. The file name is made by 4080 appending `.nrv' to the source file name. 4081 4082 `vect' 4083 Dump each function after applying vectorization of loops. 4084 The file name is made by appending `.vect' to the source file 4085 name. 4086 4087 `vrp' 4088 Dump each function after Value Range Propagation (VRP). The 4089 file name is made by appending `.vrp' to the source file name. 4090 4091 `all' 4092 Enable all the available tree dumps with the flags provided 4093 in this option. 4094 4095`-ftree-vectorizer-verbose=N' 4096 This option controls the amount of debugging output the vectorizer 4097 prints. This information is written to standard error, unless 4098 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 4099 case it is output to the usual dump listing file, `.vect'. For 4100 N=0 no diagnostic information is reported. If N=1 the vectorizer 4101 reports each loop that got vectorized, and the total number of 4102 loops that got vectorized. If N=2 the vectorizer also reports 4103 non-vectorized loops that passed the first analysis phase 4104 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 4105 single-entry/exit loops. This is the same verbosity level that 4106 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 4107 either more information dumped for each reported loop, or same 4108 amount of information reported for more loops: If N=3, alignment 4109 related information is added to the reports. If N=4, 4110 data-references related information (e.g. memory dependences, 4111 memory access-patterns) is added to the reports. If N=5, the 4112 vectorizer reports also non-vectorized inner-most loops that did 4113 not pass the first analysis phase (i.e. may not be countable, or 4114 may have complicated control-flow). If N=6, the vectorizer 4115 reports also non-vectorized nested loops. For N=7, all the 4116 information the vectorizer generates during its analysis and 4117 transformation is reported. This is the same verbosity level that 4118 `-fdump-tree-vect-details' uses. 4119 4120`-frandom-seed=STRING' 4121 This option provides a seed that GCC uses when it would otherwise 4122 use random numbers. It is used to generate certain symbol names 4123 that have to be different in every compiled file. It is also used 4124 to place unique stamps in coverage data files and the object files 4125 that produce them. You can use the `-frandom-seed' option to 4126 produce reproducibly identical object files. 4127 4128 The STRING should be different for every file you compile. 4129 4130`-fsched-verbose=N' 4131 On targets that use instruction scheduling, this option controls 4132 the amount of debugging output the scheduler prints. This 4133 information is written to standard error, unless `-dS' or `-dR' is 4134 specified, in which case it is output to the usual dump listing 4135 file, `.sched' or `.sched2' respectively. However for N greater 4136 than nine, the output is always printed to standard error. 4137 4138 For N greater than zero, `-fsched-verbose' outputs the same 4139 information as `-dRS'. For N greater than one, it also output 4140 basic block probabilities, detailed ready list information and 4141 unit/insn info. For N greater than two, it includes RTL at abort 4142 point, control-flow and regions info. And for N over four, 4143 `-fsched-verbose' also includes dependence info. 4144 4145`-save-temps' 4146 Store the usual "temporary" intermediate files permanently; place 4147 them in the current directory and name them based on the source 4148 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 4149 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 4150 preprocessed `foo.i' output file even though the compiler now 4151 normally uses an integrated preprocessor. 4152 4153 When used in combination with the `-x' command line option, 4154 `-save-temps' is sensible enough to avoid over writing an input 4155 source file with the same extension as an intermediate file. The 4156 corresponding intermediate file may be obtained by renaming the 4157 source file before using `-save-temps'. 4158 4159`-time' 4160 Report the CPU time taken by each subprocess in the compilation 4161 sequence. For C source files, this is the compiler proper and 4162 assembler (plus the linker if linking is done). The output looks 4163 like this: 4164 4165 # cc1 0.12 0.01 4166 # as 0.00 0.01 4167 4168 The first number on each line is the "user time", that is time 4169 spent executing the program itself. The second number is "system 4170 time", time spent executing operating system routines on behalf of 4171 the program. Both numbers are in seconds. 4172 4173`-fvar-tracking' 4174 Run variable tracking pass. It computes where variables are 4175 stored at each position in code. Better debugging information is 4176 then generated (if the debugging information format supports this 4177 information). 4178 4179 It is enabled by default when compiling with optimization (`-Os', 4180 `-O', `-O2', ...), debugging information (`-g') and the debug info 4181 format supports it. 4182 4183`-print-file-name=LIBRARY' 4184 Print the full absolute name of the library file LIBRARY that 4185 would be used when linking--and don't do anything else. With this 4186 option, GCC does not compile or link anything; it just prints the 4187 file name. 4188 4189`-print-multi-directory' 4190 Print the directory name corresponding to the multilib selected by 4191 any other switches present in the command line. This directory is 4192 supposed to exist in `GCC_EXEC_PREFIX'. 4193 4194`-print-multi-lib' 4195 Print the mapping from multilib directory names to compiler 4196 switches that enable them. The directory name is separated from 4197 the switches by `;', and each switch starts with an `@' instead of 4198 the `-', without spaces between multiple switches. This is 4199 supposed to ease shell-processing. 4200 4201`-print-prog-name=PROGRAM' 4202 Like `-print-file-name', but searches for a program such as `cpp'. 4203 4204`-print-libgcc-file-name' 4205 Same as `-print-file-name=libgcc.a'. 4206 4207 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 4208 you do want to link with `libgcc.a'. You can do 4209 4210 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 4211 4212`-print-search-dirs' 4213 Print the name of the configured installation directory and a list 4214 of program and library directories `gcc' will search--and don't do 4215 anything else. 4216 4217 This is useful when `gcc' prints the error message `installation 4218 problem, cannot exec cpp0: No such file or directory'. To resolve 4219 this you either need to put `cpp0' and the other compiler 4220 components where `gcc' expects to find them, or you can set the 4221 environment variable `GCC_EXEC_PREFIX' to the directory where you 4222 installed them. Don't forget the trailing `/'. *Note Environment 4223 Variables::. 4224 4225`-dumpmachine' 4226 Print the compiler's target machine (for example, 4227 `i686-pc-linux-gnu')--and don't do anything else. 4228 4229`-dumpversion' 4230 Print the compiler version (for example, `3.0')--and don't do 4231 anything else. 4232 4233`-dumpspecs' 4234 Print the compiler's built-in specs--and don't do anything else. 4235 (This is used when GCC itself is being built.) *Note Spec Files::. 4236 4237`-feliminate-unused-debug-types' 4238 Normally, when producing DWARF2 output, GCC will emit debugging 4239 information for all types declared in a compilation unit, 4240 regardless of whether or not they are actually used in that 4241 compilation unit. Sometimes this is useful, such as if, in the 4242 debugger, you want to cast a value to a type that is not actually 4243 used in your program (but is declared). More often, however, this 4244 results in a significant amount of wasted space. With this 4245 option, GCC will avoid producing debug symbol output for types 4246 that are nowhere used in the source file being compiled. 4247 4248 4249File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 4250 42513.10 Options That Control Optimization 4252====================================== 4253 4254These options control various sorts of optimizations. 4255 4256 Without any optimization option, the compiler's goal is to reduce the 4257cost of compilation and to make debugging produce the expected results. 4258Statements are independent: if you stop the program with a breakpoint 4259between statements, you can then assign a new value to any variable or 4260change the program counter to any other statement in the function and 4261get exactly the results you would expect from the source code. 4262 4263 Turning on optimization flags makes the compiler attempt to improve 4264the performance and/or code size at the expense of compilation time and 4265possibly the ability to debug the program. 4266 4267 The compiler performs optimization based on the knowledge it has of 4268the program. Optimization levels `-O' and above, in particular, enable 4269_unit-at-a-time_ mode, which allows the compiler to consider 4270information gained from later functions in the file when compiling a 4271function. Compiling multiple files at once to a single output file in 4272_unit-at-a-time_ mode allows the compiler to use information gained 4273from all of the files when compiling each of them. 4274 4275 Not all optimizations are controlled directly by a flag. Only 4276optimizations that have a flag are listed. 4277 4278`-O' 4279`-O1' 4280 Optimize. Optimizing compilation takes somewhat more time, and a 4281 lot more memory for a large function. 4282 4283 With `-O', the compiler tries to reduce code size and execution 4284 time, without performing any optimizations that take a great deal 4285 of compilation time. 4286 4287 `-O' turns on the following optimization flags: 4288 -fdefer-pop 4289 -fdelayed-branch 4290 -fguess-branch-probability 4291 -fcprop-registers 4292 -fif-conversion 4293 -fif-conversion2 4294 -ftree-ccp 4295 -ftree-dce 4296 -ftree-dominator-opts 4297 -ftree-dse 4298 -ftree-ter 4299 -ftree-lrs 4300 -ftree-sra 4301 -ftree-copyrename 4302 -ftree-fre 4303 -ftree-ch 4304 -funit-at-a-time 4305 -fmerge-constants 4306 4307 `-O' also turns on `-fomit-frame-pointer' on machines where doing 4308 so does not interfere with debugging. 4309 4310`-O2' 4311 Optimize even more. GCC performs nearly all supported 4312 optimizations that do not involve a space-speed tradeoff. The 4313 compiler does not perform loop unrolling or function inlining when 4314 you specify `-O2'. As compared to `-O', this option increases 4315 both compilation time and the performance of the generated code. 4316 4317 `-O2' turns on all optimization flags specified by `-O'. It also 4318 turns on the following optimization flags: 4319 -fthread-jumps 4320 -fcrossjumping 4321 -foptimize-sibling-calls 4322 -fcse-follow-jumps -fcse-skip-blocks 4323 -fgcse -fgcse-lm 4324 -fexpensive-optimizations 4325 -frerun-cse-after-loop 4326 -fcaller-saves 4327 -fpeephole2 4328 -fschedule-insns -fschedule-insns2 4329 -fsched-interblock -fsched-spec 4330 -fregmove 4331 -fstrict-aliasing -fstrict-overflow 4332 -fdelete-null-pointer-checks 4333 -freorder-blocks -freorder-functions 4334 -falign-functions -falign-jumps 4335 -falign-loops -falign-labels 4336 -ftree-vrp 4337 -ftree-pre 4338 4339 Please note the warning under `-fgcse' about invoking `-O2' on 4340 programs that use computed gotos. 4341 4342 `-O2' doesn't turn on `-ftree-vrp' for the Ada compiler. This 4343 option must be explicitly specified on the command line to be 4344 enabled for the Ada compiler. 4345 4346`-O3' 4347 Optimize yet more. `-O3' turns on all optimizations specified by 4348 `-O2' and also turns on the `-finline-functions', 4349 `-funswitch-loops' and `-fgcse-after-reload' options. 4350 4351`-O0' 4352 Do not optimize. This is the default. 4353 4354`-Os' 4355 Optimize for size. `-Os' enables all `-O2' optimizations that do 4356 not typically increase code size. It also performs further 4357 optimizations designed to reduce code size. 4358 4359 `-Os' disables the following optimization flags: 4360 -falign-functions -falign-jumps -falign-loops 4361 -falign-labels -freorder-blocks -freorder-blocks-and-partition 4362 -fprefetch-loop-arrays -ftree-vect-loop-version 4363 4364 If you use multiple `-O' options, with or without level numbers, 4365 the last such option is the one that is effective. 4366 4367 Options of the form `-fFLAG' specify machine-independent flags. Most 4368flags have both positive and negative forms; the negative form of 4369`-ffoo' would be `-fno-foo'. In the table below, only one of the forms 4370is listed--the one you typically will use. You can figure out the 4371other form by either removing `no-' or adding it. 4372 4373 The following options control specific optimizations. They are either 4374activated by `-O' options or are related to ones that are. You can use 4375the following flags in the rare cases when "fine-tuning" of 4376optimizations to be performed is desired. 4377 4378`-fno-default-inline' 4379 Do not make member functions inline by default merely because they 4380 are defined inside the class scope (C++ only). Otherwise, when 4381 you specify `-O', member functions defined inside class scope are 4382 compiled inline by default; i.e., you don't need to add `inline' 4383 in front of the member function name. 4384 4385`-fno-defer-pop' 4386 Always pop the arguments to each function call as soon as that 4387 function returns. For machines which must pop arguments after a 4388 function call, the compiler normally lets arguments accumulate on 4389 the stack for several function calls and pops them all at once. 4390 4391 Disabled at levels `-O', `-O2', `-O3', `-Os'. 4392 4393`-fforce-mem' 4394 Force memory operands to be copied into registers before doing 4395 arithmetic on them. This produces better code by making all memory 4396 references potential common subexpressions. When they are not 4397 common subexpressions, instruction combination should eliminate 4398 the separate register-load. This option is now a nop and will be 4399 removed in 4.3. 4400 4401`-fforce-addr' 4402 Force memory address constants to be copied into registers before 4403 doing arithmetic on them. 4404 4405`-fomit-frame-pointer' 4406 Don't keep the frame pointer in a register for functions that 4407 don't need one. This avoids the instructions to save, set up and 4408 restore frame pointers; it also makes an extra register available 4409 in many functions. *It also makes debugging impossible on some 4410 machines.* 4411 4412 On some machines, such as the VAX, this flag has no effect, because 4413 the standard calling sequence automatically handles the frame 4414 pointer and nothing is saved by pretending it doesn't exist. The 4415 machine-description macro `FRAME_POINTER_REQUIRED' controls 4416 whether a target machine supports this flag. *Note Register 4417 Usage: (gccint)Registers. 4418 4419 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4420 4421`-foptimize-sibling-calls' 4422 Optimize sibling and tail recursive calls. 4423 4424 Enabled at levels `-O2', `-O3', `-Os'. 4425 4426`-fno-inline' 4427 Don't pay attention to the `inline' keyword. Normally this option 4428 is used to keep the compiler from expanding any functions inline. 4429 Note that if you are not optimizing, no functions can be expanded 4430 inline. 4431 4432`-finline-functions' 4433 Integrate all simple functions into their callers. The compiler 4434 heuristically decides which functions are simple enough to be worth 4435 integrating in this way. 4436 4437 If all calls to a given function are integrated, and the function 4438 is declared `static', then the function is normally not output as 4439 assembler code in its own right. 4440 4441 Enabled at level `-O3'. 4442 4443`-finline-functions-called-once' 4444 Consider all `static' functions called once for inlining into their 4445 caller even if they are not marked `inline'. If a call to a given 4446 function is integrated, then the function is not output as 4447 assembler code in its own right. 4448 4449 Enabled if `-funit-at-a-time' is enabled. 4450 4451`-fearly-inlining' 4452 Inline functions marked by `always_inline' and functions whose 4453 body seems smaller than the function call overhead early before 4454 doing `-fprofile-generate' instrumentation and real inlining pass. 4455 Doing so makes profiling significantly cheaper and usually 4456 inlining faster on programs having large chains of nested wrapper 4457 functions. 4458 4459 Enabled by default. 4460 4461`-finline-limit=N' 4462 By default, GCC limits the size of functions that can be inlined. 4463 This flag allows the control of this limit for functions that are 4464 explicitly marked as inline (i.e., marked with the inline keyword 4465 or defined within the class definition in c++). N is the size of 4466 functions that can be inlined in number of pseudo instructions 4467 (not counting parameter handling). The default value of N is 600. 4468 Increasing this value can result in more inlined code at the cost 4469 of compilation time and memory consumption. Decreasing usually 4470 makes the compilation faster and less code will be inlined (which 4471 presumably means slower programs). This option is particularly 4472 useful for programs that use inlining heavily such as those based 4473 on recursive templates with C++. 4474 4475 Inlining is actually controlled by a number of parameters, which 4476 may be specified individually by using `--param NAME=VALUE'. The 4477 `-finline-limit=N' option sets some of these parameters as follows: 4478 4479 `max-inline-insns-single' 4480 is set to N/2. 4481 4482 `max-inline-insns-auto' 4483 is set to N/2. 4484 4485 `min-inline-insns' 4486 is set to 130 or N/4, whichever is smaller. 4487 4488 `max-inline-insns-rtl' 4489 is set to N. 4490 4491 See below for a documentation of the individual parameters 4492 controlling inlining. 4493 4494 _Note:_ pseudo instruction represents, in this particular context, 4495 an abstract measurement of function's size. In no way does it 4496 represent a count of assembly instructions and as such its exact 4497 meaning might change from one release to an another. 4498 4499`-fkeep-inline-functions' 4500 In C, emit `static' functions that are declared `inline' into the 4501 object file, even if the function has been inlined into all of its 4502 callers. This switch does not affect functions using the `extern 4503 inline' extension in GNU C. In C++, emit any and all inline 4504 functions into the object file. 4505 4506`-fkeep-static-consts' 4507 Emit variables declared `static const' when optimization isn't 4508 turned on, even if the variables aren't referenced. 4509 4510 GCC enables this option by default. If you want to force the 4511 compiler to check if the variable was referenced, regardless of 4512 whether or not optimization is turned on, use the 4513 `-fno-keep-static-consts' option. 4514 4515`-fmerge-constants' 4516 Attempt to merge identical constants (string constants and 4517 floating point constants) across compilation units. 4518 4519 This option is the default for optimized compilation if the 4520 assembler and linker support it. Use `-fno-merge-constants' to 4521 inhibit this behavior. 4522 4523 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4524 4525`-fmerge-all-constants' 4526 Attempt to merge identical constants and identical variables. 4527 4528 This option implies `-fmerge-constants'. In addition to 4529 `-fmerge-constants' this considers e.g. even constant initialized 4530 arrays or initialized constant variables with integral or floating 4531 point types. Languages like C or C++ require each non-automatic 4532 variable to have distinct location, so using this option will 4533 result in non-conforming behavior. 4534 4535`-fmodulo-sched' 4536 Perform swing modulo scheduling immediately before the first 4537 scheduling pass. This pass looks at innermost loops and reorders 4538 their instructions by overlapping different iterations. 4539 4540`-fno-branch-count-reg' 4541 Do not use "decrement and branch" instructions on a count register, 4542 but instead generate a sequence of instructions that decrement a 4543 register, compare it against zero, then branch based upon the 4544 result. This option is only meaningful on architectures that 4545 support such instructions, which include x86, PowerPC, IA-64 and 4546 S/390. 4547 4548 The default is `-fbranch-count-reg'. 4549 4550`-fno-function-cse' 4551 Do not put function addresses in registers; make each instruction 4552 that calls a constant function contain the function's address 4553 explicitly. 4554 4555 This option results in less efficient code, but some strange hacks 4556 that alter the assembler output may be confused by the 4557 optimizations performed when this option is not used. 4558 4559 The default is `-ffunction-cse' 4560 4561`-fno-zero-initialized-in-bss' 4562 If the target supports a BSS section, GCC by default puts 4563 variables that are initialized to zero into BSS. This can save 4564 space in the resulting code. 4565 4566 This option turns off this behavior because some programs 4567 explicitly rely on variables going to the data section. E.g., so 4568 that the resulting executable can find the beginning of that 4569 section and/or make assumptions based on that. 4570 4571 The default is `-fzero-initialized-in-bss'. 4572 4573`-fbounds-check' 4574 For front-ends that support it, generate additional code to check 4575 that indices used to access arrays are within the declared range. 4576 This is currently only supported by the Java and Fortran 4577 front-ends, where this option defaults to true and false 4578 respectively. 4579 4580`-fmudflap -fmudflapth -fmudflapir' 4581 For front-ends that support it (C and C++), instrument all risky 4582 pointer/array dereferencing operations, some standard library 4583 string/heap functions, and some other associated constructs with 4584 range/validity tests. Modules so instrumented should be immune to 4585 buffer overflows, invalid heap use, and some other classes of C/C++ 4586 programming errors. The instrumentation relies on a separate 4587 runtime library (`libmudflap'), which will be linked into a 4588 program if `-fmudflap' is given at link time. Run-time behavior 4589 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 4590 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 4591 its options. 4592 4593 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 4594 your program is multi-threaded. Use `-fmudflapir', in addition to 4595 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 4596 pointer reads. This produces less instrumentation (and therefore 4597 faster execution) and still provides some protection against 4598 outright memory corrupting writes, but allows erroneously read 4599 data to propagate within a program. 4600 4601`-fthread-jumps' 4602 Perform optimizations where we check to see if a jump branches to a 4603 location where another comparison subsumed by the first is found. 4604 If so, the first branch is redirected to either the destination of 4605 the second branch or a point immediately following it, depending 4606 on whether the condition is known to be true or false. 4607 4608 Enabled at levels `-O2', `-O3', `-Os'. 4609 4610`-fcse-follow-jumps' 4611 In common subexpression elimination, scan through jump instructions 4612 when the target of the jump is not reached by any other path. For 4613 example, when CSE encounters an `if' statement with an `else' 4614 clause, CSE will follow the jump when the condition tested is 4615 false. 4616 4617 Enabled at levels `-O2', `-O3', `-Os'. 4618 4619`-fcse-skip-blocks' 4620 This is similar to `-fcse-follow-jumps', but causes CSE to follow 4621 jumps which conditionally skip over blocks. When CSE encounters a 4622 simple `if' statement with no else clause, `-fcse-skip-blocks' 4623 causes CSE to follow the jump around the body of the `if'. 4624 4625 Enabled at levels `-O2', `-O3', `-Os'. 4626 4627`-frerun-cse-after-loop' 4628 Re-run common subexpression elimination after loop optimizations 4629 has been performed. 4630 4631 Enabled at levels `-O2', `-O3', `-Os'. 4632 4633`-fgcse' 4634 Perform a global common subexpression elimination pass. This pass 4635 also performs global constant and copy propagation. 4636 4637 _Note:_ When compiling a program using computed gotos, a GCC 4638 extension, you may get better runtime performance if you disable 4639 the global common subexpression elimination pass by adding 4640 `-fno-gcse' to the command line. 4641 4642 Enabled at levels `-O2', `-O3', `-Os'. 4643 4644`-fgcse-lm' 4645 When `-fgcse-lm' is enabled, global common subexpression 4646 elimination will attempt to move loads which are only killed by 4647 stores into themselves. This allows a loop containing a 4648 load/store sequence to be changed to a load outside the loop, and 4649 a copy/store within the loop. 4650 4651 Enabled by default when gcse is enabled. 4652 4653`-fgcse-sm' 4654 When `-fgcse-sm' is enabled, a store motion pass is run after 4655 global common subexpression elimination. This pass will attempt 4656 to move stores out of loops. When used in conjunction with 4657 `-fgcse-lm', loops containing a load/store sequence can be changed 4658 to a load before the loop and a store after the loop. 4659 4660 Not enabled at any optimization level. 4661 4662`-fgcse-las' 4663 When `-fgcse-las' is enabled, the global common subexpression 4664 elimination pass eliminates redundant loads that come after stores 4665 to the same memory location (both partial and full redundancies). 4666 4667 Not enabled at any optimization level. 4668 4669`-fgcse-after-reload' 4670 When `-fgcse-after-reload' is enabled, a redundant load elimination 4671 pass is performed after reload. The purpose of this pass is to 4672 cleanup redundant spilling. 4673 4674`-funsafe-loop-optimizations' 4675 If given, the loop optimizer will assume that loop indices do not 4676 overflow, and that the loops with nontrivial exit condition are not 4677 infinite. This enables a wider range of loop optimizations even if 4678 the loop optimizer itself cannot prove that these assumptions are 4679 valid. Using `-Wunsafe-loop-optimizations', the compiler will 4680 warn you if it finds this kind of loop. 4681 4682`-fcrossjumping' 4683 Perform cross-jumping transformation. This transformation unifies 4684 equivalent code and save code size. The resulting code may or may 4685 not perform better than without cross-jumping. 4686 4687 Enabled at levels `-O2', `-O3', `-Os'. 4688 4689`-fif-conversion' 4690 Attempt to transform conditional jumps into branch-less 4691 equivalents. This include use of conditional moves, min, max, set 4692 flags and abs instructions, and some tricks doable by standard 4693 arithmetics. The use of conditional execution on chips where it 4694 is available is controlled by `if-conversion2'. 4695 4696 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4697 4698`-fif-conversion2' 4699 Use conditional execution (where available) to transform 4700 conditional jumps into branch-less equivalents. 4701 4702 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4703 4704`-fdelete-null-pointer-checks' 4705 Use global dataflow analysis to identify and eliminate useless 4706 checks for null pointers. The compiler assumes that dereferencing 4707 a null pointer would have halted the program. If a pointer is 4708 checked after it has already been dereferenced, it cannot be null. 4709 4710 In some environments, this assumption is not true, and programs can 4711 safely dereference null pointers. Use 4712 `-fno-delete-null-pointer-checks' to disable this optimization for 4713 programs which depend on that behavior. 4714 4715 Enabled at levels `-O2', `-O3', `-Os'. 4716 4717`-fexpensive-optimizations' 4718 Perform a number of minor optimizations that are relatively 4719 expensive. 4720 4721 Enabled at levels `-O2', `-O3', `-Os'. 4722 4723`-foptimize-register-move' 4724`-fregmove' 4725 Attempt to reassign register numbers in move instructions and as 4726 operands of other simple instructions in order to maximize the 4727 amount of register tying. This is especially helpful on machines 4728 with two-operand instructions. 4729 4730 Note `-fregmove' and `-foptimize-register-move' are the same 4731 optimization. 4732 4733 Enabled at levels `-O2', `-O3', `-Os'. 4734 4735`-fdelayed-branch' 4736 If supported for the target machine, attempt to reorder 4737 instructions to exploit instruction slots available after delayed 4738 branch instructions. 4739 4740 Enabled at levels `-O', `-O2', `-O3', `-Os'. 4741 4742`-fschedule-insns' 4743 If supported for the target machine, attempt to reorder 4744 instructions to eliminate execution stalls due to required data 4745 being unavailable. This helps machines that have slow floating 4746 point or memory load instructions by allowing other instructions 4747 to be issued until the result of the load or floating point 4748 instruction is required. 4749 4750 Enabled at levels `-O2', `-O3', `-Os'. 4751 4752`-fschedule-insns2' 4753 Similar to `-fschedule-insns', but requests an additional pass of 4754 instruction scheduling after register allocation has been done. 4755 This is especially useful on machines with a relatively small 4756 number of registers and where memory load instructions take more 4757 than one cycle. 4758 4759 Enabled at levels `-O2', `-O3', `-Os'. 4760 4761`-fno-sched-interblock' 4762 Don't schedule instructions across basic blocks. This is normally 4763 enabled by default when scheduling before register allocation, i.e. 4764 with `-fschedule-insns' or at `-O2' or higher. 4765 4766`-fno-sched-spec' 4767 Don't allow speculative motion of non-load instructions. This is 4768 normally enabled by default when scheduling before register 4769 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 4770 4771`-fsched-spec-load' 4772 Allow speculative motion of some load instructions. This only 4773 makes sense when scheduling before register allocation, i.e. with 4774 `-fschedule-insns' or at `-O2' or higher. 4775 4776`-fsched-spec-load-dangerous' 4777 Allow speculative motion of more load instructions. This only 4778 makes sense when scheduling before register allocation, i.e. with 4779 `-fschedule-insns' or at `-O2' or higher. 4780 4781`-fsched-stalled-insns=N' 4782 Define how many insns (if any) can be moved prematurely from the 4783 queue of stalled insns into the ready list, during the second 4784 scheduling pass. 4785 4786`-fsched-stalled-insns-dep=N' 4787 Define how many insn groups (cycles) will be examined for a 4788 dependency on a stalled insn that is candidate for premature 4789 removal from the queue of stalled insns. Has an effect only 4790 during the second scheduling pass, and only if 4791 `-fsched-stalled-insns' is used and its value is not zero. 4792 4793`-fsched2-use-superblocks' 4794 When scheduling after register allocation, do use superblock 4795 scheduling algorithm. Superblock scheduling allows motion across 4796 basic block boundaries resulting on faster schedules. This option 4797 is experimental, as not all machine descriptions used by GCC model 4798 the CPU closely enough to avoid unreliable results from the 4799 algorithm. 4800 4801 This only makes sense when scheduling after register allocation, 4802 i.e. with `-fschedule-insns2' or at `-O2' or higher. 4803 4804`-fsched2-use-traces' 4805 Use `-fsched2-use-superblocks' algorithm when scheduling after 4806 register allocation and additionally perform code duplication in 4807 order to increase the size of superblocks using tracer pass. See 4808 `-ftracer' for details on trace formation. 4809 4810 This mode should produce faster but significantly longer programs. 4811 Also without `-fbranch-probabilities' the traces constructed may 4812 not match the reality and hurt the performance. This only makes 4813 sense when scheduling after register allocation, i.e. with 4814 `-fschedule-insns2' or at `-O2' or higher. 4815 4816`-fsee' 4817 Eliminates redundant extension instructions and move the non 4818 redundant ones to optimal placement using LCM. 4819 4820`-freschedule-modulo-scheduled-loops' 4821 The modulo scheduling comes before the traditional scheduling, if 4822 a loop was modulo scheduled we may want to prevent the later 4823 scheduling passes from changing its schedule, we use this option 4824 to control that. 4825 4826`-fcaller-saves' 4827 Enable values to be allocated in registers that will be clobbered 4828 by function calls, by emitting extra instructions to save and 4829 restore the registers around such calls. Such allocation is done 4830 only when it seems to result in better code than would otherwise 4831 be produced. 4832 4833 This option is always enabled by default on certain machines, 4834 usually those which have no call-preserved registers to use 4835 instead. 4836 4837 Enabled at levels `-O2', `-O3', `-Os'. 4838 4839`-ftree-pre' 4840 Perform Partial Redundancy Elimination (PRE) on trees. This flag 4841 is enabled by default at `-O2' and `-O3'. 4842 4843`-ftree-fre' 4844 Perform Full Redundancy Elimination (FRE) on trees. The difference 4845 between FRE and PRE is that FRE only considers expressions that 4846 are computed on all paths leading to the redundant computation. 4847 This analysis faster than PRE, though it exposes fewer 4848 redundancies. This flag is enabled by default at `-O' and higher. 4849 4850`-ftree-copy-prop' 4851 Perform copy propagation on trees. This pass eliminates 4852 unnecessary copy operations. This flag is enabled by default at 4853 `-O' and higher. 4854 4855`-ftree-store-copy-prop' 4856 Perform copy propagation of memory loads and stores. This pass 4857 eliminates unnecessary copy operations in memory references 4858 (structures, global variables, arrays, etc). This flag is enabled 4859 by default at `-O2' and higher. 4860 4861`-ftree-salias' 4862 Perform structural alias analysis on trees. This flag is enabled 4863 by default at `-O' and higher. 4864 4865`-fipa-pta' 4866 Perform interprocedural pointer analysis. 4867 4868`-ftree-sink' 4869 Perform forward store motion on trees. This flag is enabled by 4870 default at `-O' and higher. 4871 4872`-ftree-ccp' 4873 Perform sparse conditional constant propagation (CCP) on trees. 4874 This pass only operates on local scalar variables and is enabled 4875 by default at `-O' and higher. 4876 4877`-ftree-store-ccp' 4878 Perform sparse conditional constant propagation (CCP) on trees. 4879 This pass operates on both local scalar variables and memory 4880 stores and loads (global variables, structures, arrays, etc). 4881 This flag is enabled by default at `-O2' and higher. 4882 4883`-ftree-dce' 4884 Perform dead code elimination (DCE) on trees. This flag is 4885 enabled by default at `-O' and higher. 4886 4887`-ftree-dominator-opts' 4888 Perform a variety of simple scalar cleanups (constant/copy 4889 propagation, redundancy elimination, range propagation and 4890 expression simplification) based on a dominator tree traversal. 4891 This also performs jump threading (to reduce jumps to jumps). This 4892 flag is enabled by default at `-O' and higher. 4893 4894`-ftree-ch' 4895 Perform loop header copying on trees. This is beneficial since it 4896 increases effectiveness of code motion optimizations. It also 4897 saves one jump. This flag is enabled by default at `-O' and 4898 higher. It is not enabled for `-Os', since it usually increases 4899 code size. 4900 4901`-ftree-loop-optimize' 4902 Perform loop optimizations on trees. This flag is enabled by 4903 default at `-O' and higher. 4904 4905`-ftree-loop-linear' 4906 Perform linear loop transformations on tree. This flag can 4907 improve cache performance and allow further loop optimizations to 4908 take place. 4909 4910`-ftree-loop-im' 4911 Perform loop invariant motion on trees. This pass moves only 4912 invariants that would be hard to handle at RTL level (function 4913 calls, operations that expand to nontrivial sequences of insns). 4914 With `-funswitch-loops' it also moves operands of conditions that 4915 are invariant out of the loop, so that we can use just trivial 4916 invariantness analysis in loop unswitching. The pass also includes 4917 store motion. 4918 4919`-ftree-loop-ivcanon' 4920 Create a canonical counter for number of iterations in the loop 4921 for that determining number of iterations requires complicated 4922 analysis. Later optimizations then may determine the number 4923 easily. Useful especially in connection with unrolling. 4924 4925`-fivopts' 4926 Perform induction variable optimizations (strength reduction, 4927 induction variable merging and induction variable elimination) on 4928 trees. 4929 4930`-ftree-sra' 4931 Perform scalar replacement of aggregates. This pass replaces 4932 structure references with scalars to prevent committing structures 4933 to memory too early. This flag is enabled by default at `-O' and 4934 higher. 4935 4936`-ftree-copyrename' 4937 Perform copy renaming on trees. This pass attempts to rename 4938 compiler temporaries to other variables at copy locations, usually 4939 resulting in variable names which more closely resemble the 4940 original variables. This flag is enabled by default at `-O' and 4941 higher. 4942 4943`-ftree-ter' 4944 Perform temporary expression replacement during the SSA->normal 4945 phase. Single use/single def temporaries are replaced at their 4946 use location with their defining expression. This results in 4947 non-GIMPLE code, but gives the expanders much more complex trees 4948 to work on resulting in better RTL generation. This is enabled by 4949 default at `-O' and higher. 4950 4951`-ftree-lrs' 4952 Perform live range splitting during the SSA->normal phase. 4953 Distinct live ranges of a variable are split into unique 4954 variables, allowing for better optimization later. This is 4955 enabled by default at `-O' and higher. 4956 4957`-ftree-vectorize' 4958 Perform loop vectorization on trees. 4959 4960`-ftree-vect-loop-version' 4961 Perform loop versioning when doing loop vectorization on trees. 4962 When a loop appears to be vectorizable except that data alignment 4963 or data dependence cannot be determined at compile time then 4964 vectorized and non-vectorized versions of the loop are generated 4965 along with runtime checks for alignment or dependence to control 4966 which version is executed. This option is enabled by default 4967 except at level `-Os' where it is disabled. 4968 4969`-ftree-vrp' 4970 Perform Value Range Propagation on trees. This is similar to the 4971 constant propagation pass, but instead of values, ranges of values 4972 are propagated. This allows the optimizers to remove unnecessary 4973 range checks like array bound checks and null pointer checks. 4974 This is enabled by default at `-O2' and higher. Null pointer check 4975 elimination is only done if `-fdelete-null-pointer-checks' is 4976 enabled. 4977 4978`-ftracer' 4979 Perform tail duplication to enlarge superblock size. This 4980 transformation simplifies the control flow of the function 4981 allowing other optimizations to do better job. 4982 4983`-funroll-loops' 4984 Unroll loops whose number of iterations can be determined at 4985 compile time or upon entry to the loop. `-funroll-loops' implies 4986 `-frerun-cse-after-loop'. This option makes code larger, and may 4987 or may not make it run faster. 4988 4989`-funroll-all-loops' 4990 Unroll all loops, even if their number of iterations is uncertain 4991 when the loop is entered. This usually makes programs run more 4992 slowly. `-funroll-all-loops' implies the same options as 4993 `-funroll-loops', 4994 4995`-fsplit-ivs-in-unroller' 4996 Enables expressing of values of induction variables in later 4997 iterations of the unrolled loop using the value in the first 4998 iteration. This breaks long dependency chains, thus improving 4999 efficiency of the scheduling passes. 5000 5001 Combination of `-fweb' and CSE is often sufficient to obtain the 5002 same effect. However in cases the loop body is more complicated 5003 than a single basic block, this is not reliable. It also does not 5004 work at all on some of the architectures due to restrictions in 5005 the CSE pass. 5006 5007 This optimization is enabled by default. 5008 5009`-fvariable-expansion-in-unroller' 5010 With this option, the compiler will create multiple copies of some 5011 local variables when unrolling a loop which can result in superior 5012 code. 5013 5014`-fprefetch-loop-arrays' 5015 If supported by the target machine, generate instructions to 5016 prefetch memory to improve the performance of loops that access 5017 large arrays. 5018 5019 This option may generate better or worse code; results are highly 5020 dependent on the structure of loops within the source code. 5021 5022 Disabled at level `-Os'. 5023 5024`-fno-peephole' 5025`-fno-peephole2' 5026 Disable any machine-specific peephole optimizations. The 5027 difference between `-fno-peephole' and `-fno-peephole2' is in how 5028 they are implemented in the compiler; some targets use one, some 5029 use the other, a few use both. 5030 5031 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 5032 levels `-O2', `-O3', `-Os'. 5033 5034`-fno-guess-branch-probability' 5035 Do not guess branch probabilities using heuristics. 5036 5037 GCC will use heuristics to guess branch probabilities if they are 5038 not provided by profiling feedback (`-fprofile-arcs'). These 5039 heuristics are based on the control flow graph. If some branch 5040 probabilities are specified by `__builtin_expect', then the 5041 heuristics will be used to guess branch probabilities for the rest 5042 of the control flow graph, taking the `__builtin_expect' info into 5043 account. The interactions between the heuristics and 5044 `__builtin_expect' can be complex, and in some cases, it may be 5045 useful to disable the heuristics so that the effects of 5046 `__builtin_expect' are easier to understand. 5047 5048 The default is `-fguess-branch-probability' at levels `-O', `-O2', 5049 `-O3', `-Os'. 5050 5051`-freorder-blocks' 5052 Reorder basic blocks in the compiled function in order to reduce 5053 number of taken branches and improve code locality. 5054 5055 Enabled at levels `-O2', `-O3'. 5056 5057`-freorder-blocks-and-partition' 5058 In addition to reordering basic blocks in the compiled function, 5059 in order to reduce number of taken branches, partitions hot and 5060 cold basic blocks into separate sections of the assembly and .o 5061 files, to improve paging and cache locality performance. 5062 5063 This optimization is automatically turned off in the presence of 5064 exception handling, for linkonce sections, for functions with a 5065 user-defined section attribute and on any architecture that does 5066 not support named sections. 5067 5068`-freorder-functions' 5069 Reorder functions in the object file in order to improve code 5070 locality. This is implemented by using special subsections 5071 `.text.hot' for most frequently executed functions and 5072 `.text.unlikely' for unlikely executed functions. Reordering is 5073 done by the linker so object file format must support named 5074 sections and linker must place them in a reasonable way. 5075 5076 Also profile feedback must be available in to make this option 5077 effective. See `-fprofile-arcs' for details. 5078 5079 Enabled at levels `-O2', `-O3', `-Os'. 5080 5081`-fstrict-aliasing' 5082 Allows the compiler to assume the strictest aliasing rules 5083 applicable to the language being compiled. For C (and C++), this 5084 activates optimizations based on the type of expressions. In 5085 particular, an object of one type is assumed never to reside at 5086 the same address as an object of a different type, unless the 5087 types are almost the same. For example, an `unsigned int' can 5088 alias an `int', but not a `void*' or a `double'. A character type 5089 may alias any other type. 5090 5091 Pay special attention to code like this: 5092 union a_union { 5093 int i; 5094 double d; 5095 }; 5096 5097 int f() { 5098 a_union t; 5099 t.d = 3.0; 5100 return t.i; 5101 } 5102 The practice of reading from a different union member than the one 5103 most recently written to (called "type-punning") is common. Even 5104 with `-fstrict-aliasing', type-punning is allowed, provided the 5105 memory is accessed through the union type. So, the code above 5106 will work as expected. However, this code might not: 5107 int f() { 5108 a_union t; 5109 int* ip; 5110 t.d = 3.0; 5111 ip = &t.i; 5112 return *ip; 5113 } 5114 5115 Every language that wishes to perform language-specific alias 5116 analysis should define a function that computes, given an `tree' 5117 node, an alias set for the node. Nodes in different alias sets 5118 are not allowed to alias. For an example, see the C front-end 5119 function `c_get_alias_set'. 5120 5121 Enabled at levels `-O2', `-O3', `-Os'. 5122 5123`-fstrict-overflow' 5124 Allow the compiler to assume strict signed overflow rules, 5125 depending on the language being compiled. For C (and C++) this 5126 means that overflow when doing arithmetic with signed numbers is 5127 undefined, which means that the compiler may assume that it will 5128 not happen. This permits various optimizations. For example, the 5129 compiler will assume that an expression like `i + 10 > i' will 5130 always be true for signed `i'. This assumption is only valid if 5131 signed overflow is undefined, as the expression is false if `i + 5132 10' overflows when using twos complement arithmetic. When this 5133 option is in effect any attempt to determine whether an operation 5134 on signed numbers will overflow must be written carefully to not 5135 actually involve overflow. 5136 5137 See also the `-fwrapv' option. Using `-fwrapv' means that signed 5138 overflow is fully defined: it wraps. When `-fwrapv' is used, 5139 there is no difference between `-fstrict-overflow' and 5140 `-fno-strict-overflow'. With `-fwrapv' certain types of overflow 5141 are permitted. For example, if the compiler gets an overflow when 5142 doing arithmetic on constants, the overflowed value can still be 5143 used with `-fwrapv', but not otherwise. 5144 5145 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 5146 `-Os'. 5147 5148`-falign-functions' 5149`-falign-functions=N' 5150 Align the start of functions to the next power-of-two greater than 5151 N, skipping up to N bytes. For instance, `-falign-functions=32' 5152 aligns functions to the next 32-byte boundary, but 5153 `-falign-functions=24' would align to the next 32-byte boundary 5154 only if this can be done by skipping 23 bytes or less. 5155 5156 `-fno-align-functions' and `-falign-functions=1' are equivalent 5157 and mean that functions will not be aligned. 5158 5159 Some assemblers only support this flag when N is a power of two; 5160 in that case, it is rounded up. 5161 5162 If N is not specified or is zero, use a machine-dependent default. 5163 5164 Enabled at levels `-O2', `-O3'. 5165 5166`-falign-labels' 5167`-falign-labels=N' 5168 Align all branch targets to a power-of-two boundary, skipping up to 5169 N bytes like `-falign-functions'. This option can easily make 5170 code slower, because it must insert dummy operations for when the 5171 branch target is reached in the usual flow of the code. 5172 5173 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 5174 that labels will not be aligned. 5175 5176 If `-falign-loops' or `-falign-jumps' are applicable and are 5177 greater than this value, then their values are used instead. 5178 5179 If N is not specified or is zero, use a machine-dependent default 5180 which is very likely to be `1', meaning no alignment. 5181 5182 Enabled at levels `-O2', `-O3'. 5183 5184`-falign-loops' 5185`-falign-loops=N' 5186 Align loops to a power-of-two boundary, skipping up to N bytes 5187 like `-falign-functions'. The hope is that the loop will be 5188 executed many times, which will make up for any execution of the 5189 dummy operations. 5190 5191 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 5192 that loops will not be aligned. 5193 5194 If N is not specified or is zero, use a machine-dependent default. 5195 5196 Enabled at levels `-O2', `-O3'. 5197 5198`-falign-jumps' 5199`-falign-jumps=N' 5200 Align branch targets to a power-of-two boundary, for branch targets 5201 where the targets can only be reached by jumping, skipping up to N 5202 bytes like `-falign-functions'. In this case, no dummy operations 5203 need be executed. 5204 5205 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 5206 that loops will not be aligned. 5207 5208 If N is not specified or is zero, use a machine-dependent default. 5209 5210 Enabled at levels `-O2', `-O3'. 5211 5212`-funit-at-a-time' 5213 Parse the whole compilation unit before starting to produce code. 5214 This allows some extra optimizations to take place but consumes 5215 more memory (in general). There are some compatibility issues 5216 with _unit-at-a-time_ mode: 5217 * enabling _unit-at-a-time_ mode may change the order in which 5218 functions, variables, and top-level `asm' statements are 5219 emitted, and will likely break code relying on some particular 5220 ordering. The majority of such top-level `asm' statements, 5221 though, can be replaced by `section' attributes. The 5222 `fno-toplevel-reorder' option may be used to keep the ordering 5223 used in the input file, at the cost of some optimizations. 5224 5225 * _unit-at-a-time_ mode removes unreferenced static variables 5226 and functions. This may result in undefined references when 5227 an `asm' statement refers directly to variables or functions 5228 that are otherwise unused. In that case either the 5229 variable/function shall be listed as an operand of the `asm' 5230 statement operand or, in the case of top-level `asm' 5231 statements the attribute `used' shall be used on the 5232 declaration. 5233 5234 * Static functions now can use non-standard passing conventions 5235 that may break `asm' statements calling functions directly. 5236 Again, attribute `used' will prevent this behavior. 5237 5238 As a temporary workaround, `-fno-unit-at-a-time' can be used, but 5239 this scheme may not be supported by future releases of GCC. 5240 5241 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5242 5243`-fno-toplevel-reorder' 5244 Do not reorder top-level functions, variables, and `asm' 5245 statements. Output them in the same order that they appear in the 5246 input file. When this option is used, unreferenced static 5247 variables will not be removed. This option is intended to support 5248 existing code which relies on a particular ordering. For new 5249 code, it is better to use attributes. 5250 5251`-fweb' 5252 Constructs webs as commonly used for register allocation purposes 5253 and assign each web individual pseudo register. This allows the 5254 register allocation pass to operate on pseudos directly, but also 5255 strengthens several other optimization passes, such as CSE, loop 5256 optimizer and trivial dead code remover. It can, however, make 5257 debugging impossible, since variables will no longer stay in a 5258 "home register". 5259 5260 Enabled by default with `-funroll-loops'. 5261 5262`-fwhole-program' 5263 Assume that the current compilation unit represents whole program 5264 being compiled. All public functions and variables with the 5265 exception of `main' and those merged by attribute 5266 `externally_visible' become static functions and in a affect gets 5267 more aggressively optimized by interprocedural optimizers. While 5268 this option is equivalent to proper use of `static' keyword for 5269 programs consisting of single file, in combination with option 5270 `--combine' this flag can be used to compile most of smaller scale 5271 C programs since the functions and variables become local for the 5272 whole combined compilation unit, not for the single source file 5273 itself. 5274 5275`-fno-cprop-registers' 5276 After register allocation and post-register allocation instruction 5277 splitting, we perform a copy-propagation pass to try to reduce 5278 scheduling dependencies and occasionally eliminate the copy. 5279 5280 Disabled at levels `-O', `-O2', `-O3', `-Os'. 5281 5282`-fprofile-generate' 5283 Enable options usually used for instrumenting application to 5284 produce profile useful for later recompilation with profile 5285 feedback based optimization. You must use `-fprofile-generate' 5286 both when compiling and when linking your program. 5287 5288 The following options are enabled: `-fprofile-arcs', 5289 `-fprofile-values', `-fvpt'. 5290 5291`-fprofile-use' 5292 Enable profile feedback directed optimizations, and optimizations 5293 generally profitable only with profile feedback available. 5294 5295 The following options are enabled: `-fbranch-probabilities', 5296 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer' 5297 5298 5299 The following options control compiler behavior regarding floating 5300point arithmetic. These options trade off between speed and 5301correctness. All must be specifically enabled. 5302 5303`-ffloat-store' 5304 Do not store floating point variables in registers, and inhibit 5305 other options that might change whether a floating point value is 5306 taken from a register or memory. 5307 5308 This option prevents undesirable excess precision on machines such 5309 as the 68000 where the floating registers (of the 68881) keep more 5310 precision than a `double' is supposed to have. Similarly for the 5311 x86 architecture. For most programs, the excess precision does 5312 only good, but a few programs rely on the precise definition of 5313 IEEE floating point. Use `-ffloat-store' for such programs, after 5314 modifying them to store all pertinent intermediate computations 5315 into variables. 5316 5317`-ffast-math' 5318 Sets `-fno-math-errno', `-funsafe-math-optimizations', 5319 `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math', 5320 `-fno-signaling-nans' and `fcx-limited-range'. 5321 5322 This option causes the preprocessor macro `__FAST_MATH__' to be 5323 defined. 5324 5325 This option should never be turned on by any `-O' option since it 5326 can result in incorrect output for programs which depend on an 5327 exact implementation of IEEE or ISO rules/specifications for math 5328 functions. 5329 5330`-fno-math-errno' 5331 Do not set ERRNO after calling math functions that are executed 5332 with a single instruction, e.g., sqrt. A program that relies on 5333 IEEE exceptions for math error handling may want to use this flag 5334 for speed while maintaining IEEE arithmetic compatibility. 5335 5336 This option should never be turned on by any `-O' option since it 5337 can result in incorrect output for programs which depend on an 5338 exact implementation of IEEE or ISO rules/specifications for math 5339 functions. 5340 5341 The default is `-fmath-errno'. 5342 5343 On Darwin systems, the math library never sets `errno'. There is 5344 therefore no reason for the compiler to consider the possibility 5345 that it might, and `-fno-math-errno' is the default. 5346 5347`-funsafe-math-optimizations' 5348 Allow optimizations for floating-point arithmetic that (a) assume 5349 that arguments and results are valid and (b) may violate IEEE or 5350 ANSI standards. When used at link-time, it may include libraries 5351 or startup files that change the default FPU control word or other 5352 similar optimizations. 5353 5354 This option should never be turned on by any `-O' option since it 5355 can result in incorrect output for programs which depend on an 5356 exact implementation of IEEE or ISO rules/specifications for math 5357 functions. 5358 5359 The default is `-fno-unsafe-math-optimizations'. 5360 5361`-ffinite-math-only' 5362 Allow optimizations for floating-point arithmetic that assume that 5363 arguments and results are not NaNs or +-Infs. 5364 5365 This option should never be turned on by any `-O' option since it 5366 can result in incorrect output for programs which depend on an 5367 exact implementation of IEEE or ISO rules/specifications. 5368 5369 The default is `-fno-finite-math-only'. 5370 5371`-fno-trapping-math' 5372 Compile code assuming that floating-point operations cannot 5373 generate user-visible traps. These traps include division by 5374 zero, overflow, underflow, inexact result and invalid operation. 5375 This option implies `-fno-signaling-nans'. Setting this option 5376 may allow faster code if one relies on "non-stop" IEEE arithmetic, 5377 for example. 5378 5379 This option should never be turned on by any `-O' option since it 5380 can result in incorrect output for programs which depend on an 5381 exact implementation of IEEE or ISO rules/specifications for math 5382 functions. 5383 5384 The default is `-ftrapping-math'. 5385 5386`-frounding-math' 5387 Disable transformations and optimizations that assume default 5388 floating point rounding behavior. This is round-to-zero for all 5389 floating point to integer conversions, and round-to-nearest for 5390 all other arithmetic truncations. This option should be specified 5391 for programs that change the FP rounding mode dynamically, or that 5392 may be executed with a non-default rounding mode. This option 5393 disables constant folding of floating point expressions at 5394 compile-time (which may be affected by rounding mode) and 5395 arithmetic transformations that are unsafe in the presence of 5396 sign-dependent rounding modes. 5397 5398 The default is `-fno-rounding-math'. 5399 5400 This option is experimental and does not currently guarantee to 5401 disable all GCC optimizations that are affected by rounding mode. 5402 Future versions of GCC may provide finer control of this setting 5403 using C99's `FENV_ACCESS' pragma. This command line option will 5404 be used to specify the default state for `FENV_ACCESS'. 5405 5406`-frtl-abstract-sequences' 5407 It is a size optimization method. This option is to find identical 5408 sequences of code, which can be turned into pseudo-procedures and 5409 then replace all occurrences with calls to the newly created 5410 subroutine. It is kind of an opposite of `-finline-functions'. 5411 This optimization runs at RTL level. 5412 5413`-fsignaling-nans' 5414 Compile code assuming that IEEE signaling NaNs may generate 5415 user-visible traps during floating-point operations. Setting this 5416 option disables optimizations that may change the number of 5417 exceptions visible with signaling NaNs. This option implies 5418 `-ftrapping-math'. 5419 5420 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 5421 defined. 5422 5423 The default is `-fno-signaling-nans'. 5424 5425 This option is experimental and does not currently guarantee to 5426 disable all GCC optimizations that affect signaling NaN behavior. 5427 5428`-fsingle-precision-constant' 5429 Treat floating point constant as single precision constant instead 5430 of implicitly converting it to double precision constant. 5431 5432`-fcx-limited-range' 5433`-fno-cx-limited-range' 5434 When enabled, this option states that a range reduction step is not 5435 needed when performing complex division. The default is 5436 `-fno-cx-limited-range', but is enabled by `-ffast-math'. 5437 5438 This option controls the default setting of the ISO C99 5439 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 5440 all languages. 5441 5442 5443 The following options control optimizations that may improve 5444performance, but are not enabled by any `-O' options. This section 5445includes experimental options that may produce broken code. 5446 5447`-fbranch-probabilities' 5448 After running a program compiled with `-fprofile-arcs' (*note 5449 Options for Debugging Your Program or `gcc': Debugging Options.), 5450 you can compile it a second time using `-fbranch-probabilities', 5451 to improve optimizations based on the number of times each branch 5452 was taken. When the program compiled with `-fprofile-arcs' exits 5453 it saves arc execution counts to a file called `SOURCENAME.gcda' 5454 for each source file The information in this data file is very 5455 dependent on the structure of the generated code, so you must use 5456 the same source code and the same optimization options for both 5457 compilations. 5458 5459 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 5460 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 5461 optimization. Currently, they are only used in one place: in 5462 `reorg.c', instead of guessing which path a branch is mostly to 5463 take, the `REG_BR_PROB' values are used to exactly determine which 5464 path is taken more often. 5465 5466`-fprofile-values' 5467 If combined with `-fprofile-arcs', it adds code so that some data 5468 about values of expressions in the program is gathered. 5469 5470 With `-fbranch-probabilities', it reads back the data gathered 5471 from profiling values of expressions and adds `REG_VALUE_PROFILE' 5472 notes to instructions for their later usage in optimizations. 5473 5474 Enabled with `-fprofile-generate' and `-fprofile-use'. 5475 5476`-fvpt' 5477 If combined with `-fprofile-arcs', it instructs the compiler to add 5478 a code to gather information about values of expressions. 5479 5480 With `-fbranch-probabilities', it reads back the data gathered and 5481 actually performs the optimizations based on them. Currently the 5482 optimizations include specialization of division operation using 5483 the knowledge about the value of the denominator. 5484 5485`-frename-registers' 5486 Attempt to avoid false dependencies in scheduled code by making use 5487 of registers left over after register allocation. This 5488 optimization will most benefit processors with lots of registers. 5489 Depending on the debug information format adopted by the target, 5490 however, it can make debugging impossible, since variables will no 5491 longer stay in a "home register". 5492 5493 Enabled by default with `-funroll-loops'. 5494 5495`-ftracer' 5496 Perform tail duplication to enlarge superblock size. This 5497 transformation simplifies the control flow of the function 5498 allowing other optimizations to do better job. 5499 5500 Enabled with `-fprofile-use'. 5501 5502`-funroll-loops' 5503 Unroll loops whose number of iterations can be determined at 5504 compile time or upon entry to the loop. `-funroll-loops' implies 5505 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 5506 also turns on complete loop peeling (i.e. complete removal of 5507 loops with small constant number of iterations). This option 5508 makes code larger, and may or may not make it run faster. 5509 5510 Enabled with `-fprofile-use'. 5511 5512`-funroll-all-loops' 5513 Unroll all loops, even if their number of iterations is uncertain 5514 when the loop is entered. This usually makes programs run more 5515 slowly. `-funroll-all-loops' implies the same options as 5516 `-funroll-loops'. 5517 5518`-fpeel-loops' 5519 Peels the loops for that there is enough information that they do 5520 not roll much (from profile feedback). It also turns on complete 5521 loop peeling (i.e. complete removal of loops with small constant 5522 number of iterations). 5523 5524 Enabled with `-fprofile-use'. 5525 5526`-fmove-loop-invariants' 5527 Enables the loop invariant motion pass in the RTL loop optimizer. 5528 Enabled at level `-O1' 5529 5530`-funswitch-loops' 5531 Move branches with loop invariant conditions out of the loop, with 5532 duplicates of the loop on both branches (modified according to 5533 result of the condition). 5534 5535`-ffunction-sections' 5536`-fdata-sections' 5537 Place each function or data item into its own section in the output 5538 file if the target supports arbitrary sections. The name of the 5539 function or the name of the data item determines the section's name 5540 in the output file. 5541 5542 Use these options on systems where the linker can perform 5543 optimizations to improve locality of reference in the instruction 5544 space. Most systems using the ELF object format and SPARC 5545 processors running Solaris 2 have linkers with such optimizations. 5546 AIX may have these optimizations in the future. 5547 5548 Only use these options when there are significant benefits from 5549 doing so. When you specify these options, the assembler and 5550 linker will create larger object and executable files and will 5551 also be slower. You will not be able to use `gprof' on all 5552 systems if you specify this option and you may have problems with 5553 debugging if you specify both this option and `-g'. 5554 5555`-fbranch-target-load-optimize' 5556 Perform branch target register load optimization before prologue / 5557 epilogue threading. The use of target registers can typically be 5558 exposed only during reload, thus hoisting loads out of loops and 5559 doing inter-block scheduling needs a separate optimization pass. 5560 5561`-fbranch-target-load-optimize2' 5562 Perform branch target register load optimization after prologue / 5563 epilogue threading. 5564 5565`-fbtr-bb-exclusive' 5566 When performing branch target register load optimization, don't 5567 reuse branch target registers in within any basic block. 5568 5569`-fstack-protector' 5570 Emit extra code to check for buffer overflows, such as stack 5571 smashing attacks. This is done by adding a guard variable to 5572 functions with vulnerable objects. This includes functions that 5573 call alloca, and functions with buffers larger than 8 bytes. The 5574 guards are initialized when a function is entered and then checked 5575 when the function exits. If a guard check fails, an error message 5576 is printed and the program exits. 5577 5578`-fstack-protector-all' 5579 Like `-fstack-protector' except that all functions are protected. 5580 5581`-fsection-anchors' 5582 Try to reduce the number of symbolic address calculations by using 5583 shared "anchor" symbols to address nearby objects. This 5584 transformation can help to reduce the number of GOT entries and 5585 GOT accesses on some targets. 5586 5587 For example, the implementation of the following function `foo': 5588 5589 static int a, b, c; 5590 int foo (void) { return a + b + c; } 5591 5592 would usually calculate the addresses of all three variables, but 5593 if you compile it with `-fsection-anchors', it will access the 5594 variables from a common anchor point instead. The effect is 5595 similar to the following pseudocode (which isn't valid C): 5596 5597 int foo (void) 5598 { 5599 register int *xr = &x; 5600 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 5601 } 5602 5603 Not all targets support this option. 5604 5605`--param NAME=VALUE' 5606 In some places, GCC uses various constants to control the amount of 5607 optimization that is done. For example, GCC will not inline 5608 functions that contain more that a certain number of instructions. 5609 You can control some of these constants on the command-line using 5610 the `--param' option. 5611 5612 The names of specific parameters, and the meaning of the values, 5613 are tied to the internals of the compiler, and are subject to 5614 change without notice in future releases. 5615 5616 In each case, the VALUE is an integer. The allowable choices for 5617 NAME are given in the following table: 5618 5619 `salias-max-implicit-fields' 5620 The maximum number of fields in a variable without direct 5621 structure accesses for which structure aliasing will consider 5622 trying to track each field. The default is 5 5623 5624 `salias-max-array-elements' 5625 The maximum number of elements an array can have and its 5626 elements still be tracked individually by structure aliasing. 5627 The default is 4 5628 5629 `sra-max-structure-size' 5630 The maximum structure size, in bytes, at which the scalar 5631 replacement of aggregates (SRA) optimization will perform 5632 block copies. The default value, 0, implies that GCC will 5633 select the most appropriate size itself. 5634 5635 `sra-field-structure-ratio' 5636 The threshold ratio (as a percentage) between instantiated 5637 fields and the complete structure size. We say that if the 5638 ratio of the number of bytes in instantiated fields to the 5639 number of bytes in the complete structure exceeds this 5640 parameter, then block copies are not used. The default is 75. 5641 5642 `max-crossjump-edges' 5643 The maximum number of incoming edges to consider for 5644 crossjumping. The algorithm used by `-fcrossjumping' is 5645 O(N^2) in the number of edges incoming to each block. 5646 Increasing values mean more aggressive optimization, making 5647 the compile time increase with probably small improvement in 5648 executable size. 5649 5650 `min-crossjump-insns' 5651 The minimum number of instructions which must be matched at 5652 the end of two blocks before crossjumping will be performed 5653 on them. This value is ignored in the case where all 5654 instructions in the block being crossjumped from are matched. 5655 The default value is 5. 5656 5657 `max-grow-copy-bb-insns' 5658 The maximum code size expansion factor when copying basic 5659 blocks instead of jumping. The expansion is relative to a 5660 jump instruction. The default value is 8. 5661 5662 `max-goto-duplication-insns' 5663 The maximum number of instructions to duplicate to a block 5664 that jumps to a computed goto. To avoid O(N^2) behavior in a 5665 number of passes, GCC factors computed gotos early in the 5666 compilation process, and unfactors them as late as possible. 5667 Only computed jumps at the end of a basic blocks with no more 5668 than max-goto-duplication-insns are unfactored. The default 5669 value is 8. 5670 5671 `max-delay-slot-insn-search' 5672 The maximum number of instructions to consider when looking 5673 for an instruction to fill a delay slot. If more than this 5674 arbitrary number of instructions is searched, the time 5675 savings from filling the delay slot will be minimal so stop 5676 searching. Increasing values mean more aggressive 5677 optimization, making the compile time increase with probably 5678 small improvement in executable run time. 5679 5680 `max-delay-slot-live-search' 5681 When trying to fill delay slots, the maximum number of 5682 instructions to consider when searching for a block with 5683 valid live register information. Increasing this arbitrarily 5684 chosen value means more aggressive optimization, increasing 5685 the compile time. This parameter should be removed when the 5686 delay slot code is rewritten to maintain the control-flow 5687 graph. 5688 5689 `max-gcse-memory' 5690 The approximate maximum amount of memory that will be 5691 allocated in order to perform the global common subexpression 5692 elimination optimization. If more memory than specified is 5693 required, the optimization will not be done. 5694 5695 `max-gcse-passes' 5696 The maximum number of passes of GCSE to run. The default is 5697 1. 5698 5699 `max-pending-list-length' 5700 The maximum number of pending dependencies scheduling will 5701 allow before flushing the current state and starting over. 5702 Large functions with few branches or calls can create 5703 excessively large lists which needlessly consume memory and 5704 resources. 5705 5706 `max-inline-insns-single' 5707 Several parameters control the tree inliner used in gcc. 5708 This number sets the maximum number of instructions (counted 5709 in GCC's internal representation) in a single function that 5710 the tree inliner will consider for inlining. This only 5711 affects functions declared inline and methods implemented in 5712 a class declaration (C++). The default value is 450. 5713 5714 `max-inline-insns-auto' 5715 When you use `-finline-functions' (included in `-O3'), a lot 5716 of functions that would otherwise not be considered for 5717 inlining by the compiler will be investigated. To those 5718 functions, a different (more restrictive) limit compared to 5719 functions declared inline can be applied. The default value 5720 is 90. 5721 5722 `large-function-insns' 5723 The limit specifying really large functions. For functions 5724 larger than this limit after inlining inlining is constrained 5725 by `--param large-function-growth'. This parameter is useful 5726 primarily to avoid extreme compilation time caused by 5727 non-linear algorithms used by the backend. This parameter is 5728 ignored when `-funit-at-a-time' is not used. The default 5729 value is 2700. 5730 5731 `large-function-growth' 5732 Specifies maximal growth of large function caused by inlining 5733 in percents. This parameter is ignored when 5734 `-funit-at-a-time' is not used. The default value is 100 5735 which limits large function growth to 2.0 times the original 5736 size. 5737 5738 `large-unit-insns' 5739 The limit specifying large translation unit. Growth caused 5740 by inlining of units larger than this limit is limited by 5741 `--param inline-unit-growth'. For small units this might be 5742 too tight (consider unit consisting of function A that is 5743 inline and B that just calls A three time. If B is small 5744 relative to A, the growth of unit is 300\% and yet such 5745 inlining is very sane. For very large units consisting of 5746 small inlininable functions however the overall unit growth 5747 limit is needed to avoid exponential explosion of code size. 5748 Thus for smaller units, the size is increased to `--param 5749 large-unit-insns' before applying `--param 5750 inline-unit-growth'. The default is 10000 5751 5752 `inline-unit-growth' 5753 Specifies maximal overall growth of the compilation unit 5754 caused by inlining. This parameter is ignored when 5755 `-funit-at-a-time' is not used. The default value is 50 5756 which limits unit growth to 1.5 times the original size. 5757 5758 `max-inline-insns-recursive' 5759 `max-inline-insns-recursive-auto' 5760 Specifies maximum number of instructions out-of-line copy of 5761 self recursive inline function can grow into by performing 5762 recursive inlining. 5763 5764 For functions declared inline `--param 5765 max-inline-insns-recursive' is taken into account. For 5766 function not declared inline, recursive inlining happens only 5767 when `-finline-functions' (included in `-O3') is enabled and 5768 `--param max-inline-insns-recursive-auto' is used. The 5769 default value is 450. 5770 5771 `max-inline-recursive-depth' 5772 `max-inline-recursive-depth-auto' 5773 Specifies maximum recursion depth used by the recursive 5774 inlining. 5775 5776 For functions declared inline `--param 5777 max-inline-recursive-depth' is taken into account. For 5778 function not declared inline, recursive inlining happens only 5779 when `-finline-functions' (included in `-O3') is enabled and 5780 `--param max-inline-recursive-depth-auto' is used. The 5781 default value is 450. 5782 5783 `min-inline-recursive-probability' 5784 Recursive inlining is profitable only for function having 5785 deep recursion in average and can hurt for function having 5786 little recursion depth by increasing the prologue size or 5787 complexity of function body to other optimizers. 5788 5789 When profile feedback is available (see `-fprofile-generate') 5790 the actual recursion depth can be guessed from probability 5791 that function will recurse via given call expression. This 5792 parameter limits inlining only to call expression whose 5793 probability exceeds given threshold (in percents). The 5794 default value is 10. 5795 5796 `inline-call-cost' 5797 Specify cost of call instruction relative to simple 5798 arithmetics operations (having cost of 1). Increasing this 5799 cost disqualifies inlining of non-leaf functions and at the 5800 same time increases size of leaf function that is believed to 5801 reduce function size by being inlined. In effect it 5802 increases amount of inlining for code having large 5803 abstraction penalty (many functions that just pass the 5804 arguments to other functions) and decrease inlining for code 5805 with low abstraction penalty. The default value is 16. 5806 5807 `max-unrolled-insns' 5808 The maximum number of instructions that a loop should have if 5809 that loop is unrolled, and if the loop is unrolled, it 5810 determines how many times the loop code is unrolled. 5811 5812 `max-average-unrolled-insns' 5813 The maximum number of instructions biased by probabilities of 5814 their execution that a loop should have if that loop is 5815 unrolled, and if the loop is unrolled, it determines how many 5816 times the loop code is unrolled. 5817 5818 `max-unroll-times' 5819 The maximum number of unrollings of a single loop. 5820 5821 `max-peeled-insns' 5822 The maximum number of instructions that a loop should have if 5823 that loop is peeled, and if the loop is peeled, it determines 5824 how many times the loop code is peeled. 5825 5826 `max-peel-times' 5827 The maximum number of peelings of a single loop. 5828 5829 `max-completely-peeled-insns' 5830 The maximum number of insns of a completely peeled loop. 5831 5832 `max-completely-peel-times' 5833 The maximum number of iterations of a loop to be suitable for 5834 complete peeling. 5835 5836 `max-unswitch-insns' 5837 The maximum number of insns of an unswitched loop. 5838 5839 `max-unswitch-level' 5840 The maximum number of branches unswitched in a single loop. 5841 5842 `lim-expensive' 5843 The minimum cost of an expensive expression in the loop 5844 invariant motion. 5845 5846 `iv-consider-all-candidates-bound' 5847 Bound on number of candidates for induction variables below 5848 that all candidates are considered for each use in induction 5849 variable optimizations. Only the most relevant candidates 5850 are considered if there are more candidates, to avoid 5851 quadratic time complexity. 5852 5853 `iv-max-considered-uses' 5854 The induction variable optimizations give up on loops that 5855 contain more induction variable uses. 5856 5857 `iv-always-prune-cand-set-bound' 5858 If number of candidates in the set is smaller than this value, 5859 we always try to remove unnecessary ivs from the set during 5860 its optimization when a new iv is added to the set. 5861 5862 `scev-max-expr-size' 5863 Bound on size of expressions used in the scalar evolutions 5864 analyzer. Large expressions slow the analyzer. 5865 5866 `vect-max-version-checks' 5867 The maximum number of runtime checks that can be performed 5868 when doing loop versioning in the vectorizer. See option 5869 ftree-vect-loop-version for more information. 5870 5871 `max-iterations-to-track' 5872 The maximum number of iterations of a loop the brute force 5873 algorithm for analysis of # of iterations of the loop tries 5874 to evaluate. 5875 5876 `hot-bb-count-fraction' 5877 Select fraction of the maximal count of repetitions of basic 5878 block in program given basic block needs to have to be 5879 considered hot. 5880 5881 `hot-bb-frequency-fraction' 5882 Select fraction of the maximal frequency of executions of 5883 basic block in function given basic block needs to have to be 5884 considered hot 5885 5886 `max-predicted-iterations' 5887 The maximum number of loop iterations we predict statically. 5888 This is useful in cases where function contain single loop 5889 with known bound and other loop with unknown. We predict the 5890 known number of iterations correctly, while the unknown 5891 number of iterations average to roughly 10. This means that 5892 the loop without bounds would appear artificially cold 5893 relative to the other one. 5894 5895 `tracer-dynamic-coverage' 5896 `tracer-dynamic-coverage-feedback' 5897 This value is used to limit superblock formation once the 5898 given percentage of executed instructions is covered. This 5899 limits unnecessary code size expansion. 5900 5901 The `tracer-dynamic-coverage-feedback' is used only when 5902 profile feedback is available. The real profiles (as opposed 5903 to statically estimated ones) are much less balanced allowing 5904 the threshold to be larger value. 5905 5906 `tracer-max-code-growth' 5907 Stop tail duplication once code growth has reached given 5908 percentage. This is rather hokey argument, as most of the 5909 duplicates will be eliminated later in cross jumping, so it 5910 may be set to much higher values than is the desired code 5911 growth. 5912 5913 `tracer-min-branch-ratio' 5914 Stop reverse growth when the reverse probability of best edge 5915 is less than this threshold (in percent). 5916 5917 `tracer-min-branch-ratio' 5918 `tracer-min-branch-ratio-feedback' 5919 Stop forward growth if the best edge do have probability 5920 lower than this threshold. 5921 5922 Similarly to `tracer-dynamic-coverage' two values are 5923 present, one for compilation for profile feedback and one for 5924 compilation without. The value for compilation with profile 5925 feedback needs to be more conservative (higher) in order to 5926 make tracer effective. 5927 5928 `max-cse-path-length' 5929 Maximum number of basic blocks on path that cse considers. 5930 The default is 10. 5931 5932 `max-cse-insns' 5933 The maximum instructions CSE process before flushing. The 5934 default is 1000. 5935 5936 `global-var-threshold' 5937 Counts the number of function calls (N) and the number of 5938 call-clobbered variables (V). If NxV is larger than this 5939 limit, a single artificial variable will be created to 5940 represent all the call-clobbered variables at function call 5941 sites. This artificial variable will then be made to alias 5942 every call-clobbered variable. (done as `int * size_t' on 5943 the host machine; beware overflow). 5944 5945 `max-aliased-vops' 5946 Maximum number of virtual operands allowed to represent 5947 aliases before triggering the alias grouping heuristic. 5948 Alias grouping reduces compile times and memory consumption 5949 needed for aliasing at the expense of precision loss in alias 5950 information. 5951 5952 `ggc-min-expand' 5953 GCC uses a garbage collector to manage its own memory 5954 allocation. This parameter specifies the minimum percentage 5955 by which the garbage collector's heap should be allowed to 5956 expand between collections. Tuning this may improve 5957 compilation speed; it has no effect on code generation. 5958 5959 The default is 30% + 70% * (RAM/1GB) with an upper bound of 5960 100% when RAM >= 1GB. If `getrlimit' is available, the 5961 notion of "RAM" is the smallest of actual RAM and 5962 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 5963 calculate RAM on a particular platform, the lower bound of 5964 30% is used. Setting this parameter and `ggc-min-heapsize' 5965 to zero causes a full collection to occur at every 5966 opportunity. This is extremely slow, but can be useful for 5967 debugging. 5968 5969 `ggc-min-heapsize' 5970 Minimum size of the garbage collector's heap before it begins 5971 bothering to collect garbage. The first collection occurs 5972 after the heap expands by `ggc-min-expand'% beyond 5973 `ggc-min-heapsize'. Again, tuning this may improve 5974 compilation speed, and has no effect on code generation. 5975 5976 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 5977 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 5978 exceeded, but with a lower bound of 4096 (four megabytes) and 5979 an upper bound of 131072 (128 megabytes). If GCC is not able 5980 to calculate RAM on a particular platform, the lower bound is 5981 used. Setting this parameter very large effectively disables 5982 garbage collection. Setting this parameter and 5983 `ggc-min-expand' to zero causes a full collection to occur at 5984 every opportunity. 5985 5986 `max-reload-search-insns' 5987 The maximum number of instruction reload should look backward 5988 for equivalent register. Increasing values mean more 5989 aggressive optimization, making the compile time increase 5990 with probably slightly better performance. The default value 5991 is 100. 5992 5993 `max-cselib-memory-locations' 5994 The maximum number of memory locations cselib should take 5995 into account. Increasing values mean more aggressive 5996 optimization, making the compile time increase with probably 5997 slightly better performance. The default value is 500. 5998 5999 `max-flow-memory-locations' 6000 Similar as `max-cselib-memory-locations' but for dataflow 6001 liveness. The default value is 100. 6002 6003 `reorder-blocks-duplicate' 6004 `reorder-blocks-duplicate-feedback' 6005 Used by basic block reordering pass to decide whether to use 6006 unconditional branch or duplicate the code on its 6007 destination. Code is duplicated when its estimated size is 6008 smaller than this value multiplied by the estimated size of 6009 unconditional jump in the hot spots of the program. 6010 6011 The `reorder-block-duplicate-feedback' is used only when 6012 profile feedback is available and may be set to higher values 6013 than `reorder-block-duplicate' since information about the 6014 hot spots is more accurate. 6015 6016 `max-sched-ready-insns' 6017 The maximum number of instructions ready to be issued the 6018 scheduler should consider at any given time during the first 6019 scheduling pass. Increasing values mean more thorough 6020 searches, making the compilation time increase with probably 6021 little benefit. The default value is 100. 6022 6023 `max-sched-region-blocks' 6024 The maximum number of blocks in a region to be considered for 6025 interblock scheduling. The default value is 10. 6026 6027 `max-sched-region-insns' 6028 The maximum number of insns in a region to be considered for 6029 interblock scheduling. The default value is 100. 6030 6031 `min-spec-prob' 6032 The minimum probability (in percents) of reaching a source 6033 block for interblock speculative scheduling. The default 6034 value is 40. 6035 6036 `max-sched-extend-regions-iters' 6037 The maximum number of iterations through CFG to extend 6038 regions. 0 - disable region extension, N - do at most N 6039 iterations. The default value is 0. 6040 6041 `max-sched-insn-conflict-delay' 6042 The maximum conflict delay for an insn to be considered for 6043 speculative motion. The default value is 3. 6044 6045 `sched-spec-prob-cutoff' 6046 The minimal probability of speculation success (in percents), 6047 so that speculative insn will be scheduled. The default 6048 value is 40. 6049 6050 `max-last-value-rtl' 6051 The maximum size measured as number of RTLs that can be 6052 recorded in an expression in combiner for a pseudo register 6053 as last known value of that register. The default is 10000. 6054 6055 `integer-share-limit' 6056 Small integer constants can use a shared data structure, 6057 reducing the compiler's memory usage and increasing its 6058 speed. This sets the maximum value of a shared integer 6059 constant's. The default value is 256. 6060 6061 `min-virtual-mappings' 6062 Specifies the minimum number of virtual mappings in the 6063 incremental SSA updater that should be registered to trigger 6064 the virtual mappings heuristic defined by 6065 virtual-mappings-ratio. The default value is 100. 6066 6067 `virtual-mappings-ratio' 6068 If the number of virtual mappings is virtual-mappings-ratio 6069 bigger than the number of virtual symbols to be updated, then 6070 the incremental SSA updater switches to a full update for 6071 those symbols. The default ratio is 3. 6072 6073 `ssp-buffer-size' 6074 The minimum size of buffers (i.e. arrays) that will receive 6075 stack smashing protection when `-fstack-protection' is used. 6076 6077 `max-jump-thread-duplication-stmts' 6078 Maximum number of statements allowed in a block that needs to 6079 be duplicated when threading jumps. 6080 6081 `max-fields-for-field-sensitive' 6082 Maximum number of fields in a structure we will treat in a 6083 field sensitive manner during pointer analysis. 6084 6085 6086 6087File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 6088 60893.11 Options Controlling the Preprocessor 6090========================================= 6091 6092These options control the C preprocessor, which is run on each C source 6093file before actual compilation. 6094 6095 If you use the `-E' option, nothing is done except preprocessing. 6096Some of these options make sense only together with `-E' because they 6097cause the preprocessor output to be unsuitable for actual compilation. 6098 6099 You can use `-Wp,OPTION' to bypass the compiler driver and pass 6100 OPTION directly through to the preprocessor. If OPTION contains 6101 commas, it is split into multiple options at the commas. However, 6102 many options are modified, translated or interpreted by the 6103 compiler driver before being passed to the preprocessor, and `-Wp' 6104 forcibly bypasses this phase. The preprocessor's direct interface 6105 is undocumented and subject to change, so whenever possible you 6106 should avoid using `-Wp' and let the driver handle the options 6107 instead. 6108 6109`-Xpreprocessor OPTION' 6110 Pass OPTION as an option to the preprocessor. You can use this to 6111 supply system-specific preprocessor options which GCC does not 6112 know how to recognize. 6113 6114 If you want to pass an option that takes an argument, you must use 6115 `-Xpreprocessor' twice, once for the option and once for the 6116 argument. 6117 6118`-D NAME' 6119 Predefine NAME as a macro, with definition `1'. 6120 6121`-D NAME=DEFINITION' 6122 The contents of DEFINITION are tokenized and processed as if they 6123 appeared during translation phase three in a `#define' directive. 6124 In particular, the definition will be truncated by embedded 6125 newline characters. 6126 6127 If you are invoking the preprocessor from a shell or shell-like 6128 program you may need to use the shell's quoting syntax to protect 6129 characters such as spaces that have a meaning in the shell syntax. 6130 6131 If you wish to define a function-like macro on the command line, 6132 write its argument list with surrounding parentheses before the 6133 equals sign (if any). Parentheses are meaningful to most shells, 6134 so you will need to quote the option. With `sh' and `csh', 6135 `-D'NAME(ARGS...)=DEFINITION'' works. 6136 6137 `-D' and `-U' options are processed in the order they are given on 6138 the command line. All `-imacros FILE' and `-include FILE' options 6139 are processed after all `-D' and `-U' options. 6140 6141`-U NAME' 6142 Cancel any previous definition of NAME, either built in or 6143 provided with a `-D' option. 6144 6145`-undef' 6146 Do not predefine any system-specific or GCC-specific macros. The 6147 standard predefined macros remain defined. 6148 6149`-I DIR' 6150 Add the directory DIR to the list of directories to be searched 6151 for header files. Directories named by `-I' are searched before 6152 the standard system include directories. If the directory DIR is 6153 a standard system include directory, the option is ignored to 6154 ensure that the default search order for system directories and 6155 the special treatment of system headers are not defeated . 6156 6157`-o FILE' 6158 Write output to FILE. This is the same as specifying FILE as the 6159 second non-option argument to `cpp'. `gcc' has a different 6160 interpretation of a second non-option argument, so you must use 6161 `-o' to specify the output file. 6162 6163`-Wall' 6164 Turns on all optional warnings which are desirable for normal code. 6165 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 6166 warning about integer promotion causing a change of sign in `#if' 6167 expressions. Note that many of the preprocessor's warnings are on 6168 by default and have no options to control them. 6169 6170`-Wcomment' 6171`-Wcomments' 6172 Warn whenever a comment-start sequence `/*' appears in a `/*' 6173 comment, or whenever a backslash-newline appears in a `//' comment. 6174 (Both forms have the same effect.) 6175 6176`-Wtrigraphs' 6177 Most trigraphs in comments cannot affect the meaning of the 6178 program. However, a trigraph that would form an escaped newline 6179 (`??/' at the end of a line) can, by changing where the comment 6180 begins or ends. Therefore, only trigraphs that would form escaped 6181 newlines produce warnings inside a comment. 6182 6183 This option is implied by `-Wall'. If `-Wall' is not given, this 6184 option is still enabled unless trigraphs are enabled. To get 6185 trigraph conversion without warnings, but get the other `-Wall' 6186 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 6187 6188`-Wtraditional' 6189 Warn about certain constructs that behave differently in 6190 traditional and ISO C. Also warn about ISO C constructs that have 6191 no traditional C equivalent, and problematic constructs which 6192 should be avoided. 6193 6194`-Wimport' 6195 Warn the first time `#import' is used. 6196 6197`-Wundef' 6198 Warn whenever an identifier which is not a macro is encountered in 6199 an `#if' directive, outside of `defined'. Such identifiers are 6200 replaced with zero. 6201 6202`-Wunused-macros' 6203 Warn about macros defined in the main file that are unused. A 6204 macro is "used" if it is expanded or tested for existence at least 6205 once. The preprocessor will also warn if the macro has not been 6206 used at the time it is redefined or undefined. 6207 6208 Built-in macros, macros defined on the command line, and macros 6209 defined in include files are not warned about. 6210 6211 _Note:_ If a macro is actually used, but only used in skipped 6212 conditional blocks, then CPP will report it as unused. To avoid 6213 the warning in such a case, you might improve the scope of the 6214 macro's definition by, for example, moving it into the first 6215 skipped block. Alternatively, you could provide a dummy use with 6216 something like: 6217 6218 #if defined the_macro_causing_the_warning 6219 #endif 6220 6221`-Wendif-labels' 6222 Warn whenever an `#else' or an `#endif' are followed by text. 6223 This usually happens in code of the form 6224 6225 #if FOO 6226 ... 6227 #else FOO 6228 ... 6229 #endif FOO 6230 6231 The second and third `FOO' should be in comments, but often are not 6232 in older programs. This warning is on by default. 6233 6234`-Werror' 6235 Make all warnings into hard errors. Source code which triggers 6236 warnings will be rejected. 6237 6238`-Wsystem-headers' 6239 Issue warnings for code in system headers. These are normally 6240 unhelpful in finding bugs in your own code, therefore suppressed. 6241 If you are responsible for the system library, you may want to see 6242 them. 6243 6244`-w' 6245 Suppress all warnings, including those which GNU CPP issues by 6246 default. 6247 6248`-pedantic' 6249 Issue all the mandatory diagnostics listed in the C standard. 6250 Some of them are left out by default, since they trigger 6251 frequently on harmless code. 6252 6253`-pedantic-errors' 6254 Issue all the mandatory diagnostics, and make all mandatory 6255 diagnostics into errors. This includes mandatory diagnostics that 6256 GCC issues without `-pedantic' but treats as warnings. 6257 6258`-M' 6259 Instead of outputting the result of preprocessing, output a rule 6260 suitable for `make' describing the dependencies of the main source 6261 file. The preprocessor outputs one `make' rule containing the 6262 object file name for that source file, a colon, and the names of 6263 all the included files, including those coming from `-include' or 6264 `-imacros' command line options. 6265 6266 Unless specified explicitly (with `-MT' or `-MQ'), the object file 6267 name consists of the basename of the source file with any suffix 6268 replaced with object file suffix. If there are many included 6269 files then the rule is split into several lines using `\'-newline. 6270 The rule has no commands. 6271 6272 This option does not suppress the preprocessor's debug output, 6273 such as `-dM'. To avoid mixing such debug output with the 6274 dependency rules you should explicitly specify the dependency 6275 output file with `-MF', or use an environment variable like 6276 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 6277 output will still be sent to the regular output stream as normal. 6278 6279 Passing `-M' to the driver implies `-E', and suppresses warnings 6280 with an implicit `-w'. 6281 6282`-MM' 6283 Like `-M' but do not mention header files that are found in system 6284 header directories, nor header files that are included, directly 6285 or indirectly, from such a header. 6286 6287 This implies that the choice of angle brackets or double quotes in 6288 an `#include' directive does not in itself determine whether that 6289 header will appear in `-MM' dependency output. This is a slight 6290 change in semantics from GCC versions 3.0 and earlier. 6291 6292`-MF FILE' 6293 When used with `-M' or `-MM', specifies a file to write the 6294 dependencies to. If no `-MF' switch is given the preprocessor 6295 sends the rules to the same place it would have sent preprocessed 6296 output. 6297 6298 When used with the driver options `-MD' or `-MMD', `-MF' overrides 6299 the default dependency output file. 6300 6301`-MG' 6302 In conjunction with an option such as `-M' requesting dependency 6303 generation, `-MG' assumes missing header files are generated files 6304 and adds them to the dependency list without raising an error. 6305 The dependency filename is taken directly from the `#include' 6306 directive without prepending any path. `-MG' also suppresses 6307 preprocessed output, as a missing header file renders this useless. 6308 6309 This feature is used in automatic updating of makefiles. 6310 6311`-MP' 6312 This option instructs CPP to add a phony target for each dependency 6313 other than the main file, causing each to depend on nothing. These 6314 dummy rules work around errors `make' gives if you remove header 6315 files without updating the `Makefile' to match. 6316 6317 This is typical output: 6318 6319 test.o: test.c test.h 6320 6321 test.h: 6322 6323`-MT TARGET' 6324 Change the target of the rule emitted by dependency generation. By 6325 default CPP takes the name of the main input file, including any 6326 path, deletes any file suffix such as `.c', and appends the 6327 platform's usual object suffix. The result is the target. 6328 6329 An `-MT' option will set the target to be exactly the string you 6330 specify. If you want multiple targets, you can specify them as a 6331 single argument to `-MT', or use multiple `-MT' options. 6332 6333 For example, `-MT '$(objpfx)foo.o'' might give 6334 6335 $(objpfx)foo.o: foo.c 6336 6337`-MQ TARGET' 6338 Same as `-MT', but it quotes any characters which are special to 6339 Make. `-MQ '$(objpfx)foo.o'' gives 6340 6341 $$(objpfx)foo.o: foo.c 6342 6343 The default target is automatically quoted, as if it were given 6344 with `-MQ'. 6345 6346`-MD' 6347 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 6348 implied. The driver determines FILE based on whether an `-o' 6349 option is given. If it is, the driver uses its argument but with 6350 a suffix of `.d', otherwise it take the basename of the input file 6351 and applies a `.d' suffix. 6352 6353 If `-MD' is used in conjunction with `-E', any `-o' switch is 6354 understood to specify the dependency output file (*note -MF: 6355 dashMF.), but if used without `-E', each `-o' is understood to 6356 specify a target object file. 6357 6358 Since `-E' is not implied, `-MD' can be used to generate a 6359 dependency output file as a side-effect of the compilation process. 6360 6361`-MMD' 6362 Like `-MD' except mention only user header files, not system 6363 header files. 6364 6365`-fpch-deps' 6366 When using precompiled headers (*note Precompiled Headers::), this 6367 flag will cause the dependency-output flags to also list the files 6368 from the precompiled header's dependencies. If not specified only 6369 the precompiled header would be listed and not the files that were 6370 used to create it because those files are not consulted when a 6371 precompiled header is used. 6372 6373`-fpch-preprocess' 6374 This option allows use of a precompiled header (*note Precompiled 6375 Headers::) together with `-E'. It inserts a special `#pragma', 6376 `#pragma GCC pch_preprocess "<filename>"' in the output to mark 6377 the place where the precompiled header was found, and its 6378 filename. When `-fpreprocessed' is in use, GCC recognizes this 6379 `#pragma' and loads the PCH. 6380 6381 This option is off by default, because the resulting preprocessed 6382 output is only really suitable as input to GCC. It is switched on 6383 by `-save-temps'. 6384 6385 You should not write this `#pragma' in your own code, but it is 6386 safe to edit the filename if the PCH file is available in a 6387 different location. The filename may be absolute or it may be 6388 relative to GCC's current directory. 6389 6390`-x c' 6391`-x c++' 6392`-x objective-c' 6393`-x assembler-with-cpp' 6394 Specify the source language: C, C++, Objective-C, or assembly. 6395 This has nothing to do with standards conformance or extensions; 6396 it merely selects which base syntax to expect. If you give none 6397 of these options, cpp will deduce the language from the extension 6398 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 6399 extensions for C++ and assembly are also recognized. If cpp does 6400 not recognize the extension, it will treat the file as C; this is 6401 the most generic mode. 6402 6403 _Note:_ Previous versions of cpp accepted a `-lang' option which 6404 selected both the language and the standards conformance level. 6405 This option has been removed, because it conflicts with the `-l' 6406 option. 6407 6408`-std=STANDARD' 6409`-ansi' 6410 Specify the standard to which the code should conform. Currently 6411 CPP knows about C and C++ standards; others may be added in the 6412 future. 6413 6414 STANDARD may be one of: 6415 `iso9899:1990' 6416 `c89' 6417 The ISO C standard from 1990. `c89' is the customary 6418 shorthand for this version of the standard. 6419 6420 The `-ansi' option is equivalent to `-std=c89'. 6421 6422 `iso9899:199409' 6423 The 1990 C standard, as amended in 1994. 6424 6425 `iso9899:1999' 6426 `c99' 6427 `iso9899:199x' 6428 `c9x' 6429 The revised ISO C standard, published in December 1999. 6430 Before publication, this was known as C9X. 6431 6432 `gnu89' 6433 The 1990 C standard plus GNU extensions. This is the default. 6434 6435 `gnu99' 6436 `gnu9x' 6437 The 1999 C standard plus GNU extensions. 6438 6439 `c++98' 6440 The 1998 ISO C++ standard plus amendments. 6441 6442 `gnu++98' 6443 The same as `-std=c++98' plus GNU extensions. This is the 6444 default for C++ code. 6445 6446`-I-' 6447 Split the include path. Any directories specified with `-I' 6448 options before `-I-' are searched only for headers requested with 6449 `#include "FILE"'; they are not searched for `#include <FILE>'. 6450 If additional directories are specified with `-I' options after 6451 the `-I-', those directories are searched for all `#include' 6452 directives. 6453 6454 In addition, `-I-' inhibits the use of the directory of the current 6455 file directory as the first search directory for `#include "FILE"'. 6456 This option has been deprecated. 6457 6458`-nostdinc' 6459 Do not search the standard system directories for header files. 6460 Only the directories you have specified with `-I' options (and the 6461 directory of the current file, if appropriate) are searched. 6462 6463`-nostdinc++' 6464 Do not search for header files in the C++-specific standard 6465 directories, but do still search the other standard directories. 6466 (This option is used when building the C++ library.) 6467 6468`-include FILE' 6469 Process FILE as if `#include "file"' appeared as the first line of 6470 the primary source file. However, the first directory searched 6471 for FILE is the preprocessor's working directory _instead of_ the 6472 directory containing the main source file. If not found there, it 6473 is searched for in the remainder of the `#include "..."' search 6474 chain as normal. 6475 6476 If multiple `-include' options are given, the files are included 6477 in the order they appear on the command line. 6478 6479`-imacros FILE' 6480 Exactly like `-include', except that any output produced by 6481 scanning FILE is thrown away. Macros it defines remain defined. 6482 This allows you to acquire all the macros from a header without 6483 also processing its declarations. 6484 6485 All files specified by `-imacros' are processed before all files 6486 specified by `-include'. 6487 6488`-idirafter DIR' 6489 Search DIR for header files, but do it _after_ all directories 6490 specified with `-I' and the standard system directories have been 6491 exhausted. DIR is treated as a system include directory. 6492 6493`-iprefix PREFIX' 6494 Specify PREFIX as the prefix for subsequent `-iwithprefix' 6495 options. If the prefix represents a directory, you should include 6496 the final `/'. 6497 6498`-iwithprefix DIR' 6499`-iwithprefixbefore DIR' 6500 Append DIR to the prefix specified previously with `-iprefix', and 6501 add the resulting directory to the include search path. 6502 `-iwithprefixbefore' puts it in the same place `-I' would; 6503 `-iwithprefix' puts it where `-idirafter' would. 6504 6505`-isysroot DIR' 6506 This option is like the `--sysroot' option, but applies only to 6507 header files. See the `--sysroot' option for more information. 6508 6509`-imultilib DIR' 6510 Use DIR as a subdirectory of the directory containing 6511 target-specific C++ headers. 6512 6513`-isystem DIR' 6514 Search DIR for header files, after all directories specified by 6515 `-I' but before the standard system directories. Mark it as a 6516 system directory, so that it gets the same special treatment as is 6517 applied to the standard system directories. 6518 6519`-iquote DIR' 6520 Search DIR only for header files requested with `#include "FILE"'; 6521 they are not searched for `#include <FILE>', before all 6522 directories specified by `-I' and before the standard system 6523 directories. 6524 6525`-fdollars-in-identifiers' 6526 Accept `$' in identifiers. 6527 6528`-fextended-identifiers' 6529 Accept universal character names in identifiers. This option is 6530 experimental; in a future version of GCC, it will be enabled by 6531 default for C99 and C++. 6532 6533`-fpreprocessed' 6534 Indicate to the preprocessor that the input file has already been 6535 preprocessed. This suppresses things like macro expansion, 6536 trigraph conversion, escaped newline splicing, and processing of 6537 most directives. The preprocessor still recognizes and removes 6538 comments, so that you can pass a file preprocessed with `-C' to 6539 the compiler without problems. In this mode the integrated 6540 preprocessor is little more than a tokenizer for the front ends. 6541 6542 `-fpreprocessed' is implicit if the input file has one of the 6543 extensions `.i', `.ii' or `.mi'. These are the extensions that 6544 GCC uses for preprocessed files created by `-save-temps'. 6545 6546`-ftabstop=WIDTH' 6547 Set the distance between tab stops. This helps the preprocessor 6548 report correct column numbers in warnings or errors, even if tabs 6549 appear on the line. If the value is less than 1 or greater than 6550 100, the option is ignored. The default is 8. 6551 6552`-fexec-charset=CHARSET' 6553 Set the execution character set, used for string and character 6554 constants. The default is UTF-8. CHARSET can be any encoding 6555 supported by the system's `iconv' library routine. 6556 6557`-fwide-exec-charset=CHARSET' 6558 Set the wide execution character set, used for wide string and 6559 character constants. The default is UTF-32 or UTF-16, whichever 6560 corresponds to the width of `wchar_t'. As with `-fexec-charset', 6561 CHARSET can be any encoding supported by the system's `iconv' 6562 library routine; however, you will have problems with encodings 6563 that do not fit exactly in `wchar_t'. 6564 6565`-finput-charset=CHARSET' 6566 Set the input character set, used for translation from the 6567 character set of the input file to the source character set used 6568 by GCC. If the locale does not specify, or GCC cannot get this 6569 information from the locale, the default is UTF-8. This can be 6570 overridden by either the locale or this command line option. 6571 Currently the command line option takes precedence if there's a 6572 conflict. CHARSET can be any encoding supported by the system's 6573 `iconv' library routine. 6574 6575`-fworking-directory' 6576 Enable generation of linemarkers in the preprocessor output that 6577 will let the compiler know the current working directory at the 6578 time of preprocessing. When this option is enabled, the 6579 preprocessor will emit, after the initial linemarker, a second 6580 linemarker with the current working directory followed by two 6581 slashes. GCC will use this directory, when it's present in the 6582 preprocessed input, as the directory emitted as the current 6583 working directory in some debugging information formats. This 6584 option is implicitly enabled if debugging information is enabled, 6585 but this can be inhibited with the negated form 6586 `-fno-working-directory'. If the `-P' flag is present in the 6587 command line, this option has no effect, since no `#line' 6588 directives are emitted whatsoever. 6589 6590`-fno-show-column' 6591 Do not print column numbers in diagnostics. This may be necessary 6592 if diagnostics are being scanned by a program that does not 6593 understand the column numbers, such as `dejagnu'. 6594 6595`-A PREDICATE=ANSWER' 6596 Make an assertion with the predicate PREDICATE and answer ANSWER. 6597 This form is preferred to the older form `-A PREDICATE(ANSWER)', 6598 which is still supported, because it does not use shell special 6599 characters. 6600 6601`-A -PREDICATE=ANSWER' 6602 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 6603 6604`-dCHARS' 6605 CHARS is a sequence of one or more of the following characters, 6606 and must not be preceded by a space. Other characters are 6607 interpreted by the compiler proper, or reserved for future 6608 versions of GCC, and so are silently ignored. If you specify 6609 characters whose behavior conflicts, the result is undefined. 6610 6611 `M' 6612 Instead of the normal output, generate a list of `#define' 6613 directives for all the macros defined during the execution of 6614 the preprocessor, including predefined macros. This gives 6615 you a way of finding out what is predefined in your version 6616 of the preprocessor. Assuming you have no file `foo.h', the 6617 command 6618 6619 touch foo.h; cpp -dM foo.h 6620 6621 will show all the predefined macros. 6622 6623 `D' 6624 Like `M' except in two respects: it does _not_ include the 6625 predefined macros, and it outputs _both_ the `#define' 6626 directives and the result of preprocessing. Both kinds of 6627 output go to the standard output file. 6628 6629 `N' 6630 Like `D', but emit only the macro names, not their expansions. 6631 6632 `I' 6633 Output `#include' directives in addition to the result of 6634 preprocessing. 6635 6636`-P' 6637 Inhibit generation of linemarkers in the output from the 6638 preprocessor. This might be useful when running the preprocessor 6639 on something that is not C code, and will be sent to a program 6640 which might be confused by the linemarkers. 6641 6642`-C' 6643 Do not discard comments. All comments are passed through to the 6644 output file, except for comments in processed directives, which 6645 are deleted along with the directive. 6646 6647 You should be prepared for side effects when using `-C'; it causes 6648 the preprocessor to treat comments as tokens in their own right. 6649 For example, comments appearing at the start of what would be a 6650 directive line have the effect of turning that line into an 6651 ordinary source line, since the first token on the line is no 6652 longer a `#'. 6653 6654`-CC' 6655 Do not discard comments, including during macro expansion. This is 6656 like `-C', except that comments contained within macros are also 6657 passed through to the output file where the macro is expanded. 6658 6659 In addition to the side-effects of the `-C' option, the `-CC' 6660 option causes all C++-style comments inside a macro to be 6661 converted to C-style comments. This is to prevent later use of 6662 that macro from inadvertently commenting out the remainder of the 6663 source line. 6664 6665 The `-CC' option is generally used to support lint comments. 6666 6667`-traditional-cpp' 6668 Try to imitate the behavior of old-fashioned C preprocessors, as 6669 opposed to ISO C preprocessors. 6670 6671`-trigraphs' 6672 Process trigraph sequences. These are three-character sequences, 6673 all starting with `??', that are defined by ISO C to stand for 6674 single characters. For example, `??/' stands for `\', so `'??/n'' 6675 is a character constant for a newline. By default, GCC ignores 6676 trigraphs, but in standard-conforming modes it converts them. See 6677 the `-std' and `-ansi' options. 6678 6679 The nine trigraphs and their replacements are 6680 6681 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 6682 Replacement: [ ] { } # \ ^ | ~ 6683 6684`-remap' 6685 Enable special code to work around file systems which only permit 6686 very short file names, such as MS-DOS. 6687 6688`--help' 6689`--target-help' 6690 Print text describing all the command line options instead of 6691 preprocessing anything. 6692 6693`-v' 6694 Verbose mode. Print out GNU CPP's version number at the beginning 6695 of execution, and report the final form of the include path. 6696 6697`-H' 6698 Print the name of each header file used, in addition to other 6699 normal activities. Each name is indented to show how deep in the 6700 `#include' stack it is. Precompiled header files are also 6701 printed, even if they are found to be invalid; an invalid 6702 precompiled header file is printed with `...x' and a valid one 6703 with `...!' . 6704 6705`-version' 6706`--version' 6707 Print out GNU CPP's version number. With one dash, proceed to 6708 preprocess as normal. With two dashes, exit immediately. 6709 6710 6711File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 6712 67133.12 Passing Options to the Assembler 6714===================================== 6715 6716You can pass options to the assembler. 6717 6718`-Wa,OPTION' 6719 Pass OPTION as an option to the assembler. If OPTION contains 6720 commas, it is split into multiple options at the commas. 6721 6722`-Xassembler OPTION' 6723 Pass OPTION as an option to the assembler. You can use this to 6724 supply system-specific assembler options which GCC does not know 6725 how to recognize. 6726 6727 If you want to pass an option that takes an argument, you must use 6728 `-Xassembler' twice, once for the option and once for the argument. 6729 6730 6731 6732File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 6733 67343.13 Options for Linking 6735======================== 6736 6737These options come into play when the compiler links object files into 6738an executable output file. They are meaningless if the compiler is not 6739doing a link step. 6740 6741`OBJECT-FILE-NAME' 6742 A file name that does not end in a special recognized suffix is 6743 considered to name an object file or library. (Object files are 6744 distinguished from libraries by the linker according to the file 6745 contents.) If linking is done, these object files are used as 6746 input to the linker. 6747 6748`-c' 6749`-S' 6750`-E' 6751 If any of these options is used, then the linker is not run, and 6752 object file names should not be used as arguments. *Note Overall 6753 Options::. 6754 6755`-lLIBRARY' 6756`-l LIBRARY' 6757 Search the library named LIBRARY when linking. (The second 6758 alternative with the library as a separate argument is only for 6759 POSIX compliance and is not recommended.) 6760 6761 It makes a difference where in the command you write this option; 6762 the linker searches and processes libraries and object files in 6763 the order they are specified. Thus, `foo.o -lz bar.o' searches 6764 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 6765 refers to functions in `z', those functions may not be loaded. 6766 6767 The linker searches a standard list of directories for the library, 6768 which is actually a file named `libLIBRARY.a'. The linker then 6769 uses this file as if it had been specified precisely by name. 6770 6771 The directories searched include several standard system 6772 directories plus any that you specify with `-L'. 6773 6774 Normally the files found this way are library files--archive files 6775 whose members are object files. The linker handles an archive 6776 file by scanning through it for members which define symbols that 6777 have so far been referenced but not defined. But if the file that 6778 is found is an ordinary object file, it is linked in the usual 6779 fashion. The only difference between using an `-l' option and 6780 specifying a file name is that `-l' surrounds LIBRARY with `lib' 6781 and `.a' and searches several directories. 6782 6783`-lobjc' 6784 You need this special case of the `-l' option in order to link an 6785 Objective-C or Objective-C++ program. 6786 6787`-nostartfiles' 6788 Do not use the standard system startup files when linking. The 6789 standard system libraries are used normally, unless `-nostdlib' or 6790 `-nodefaultlibs' is used. 6791 6792`-nodefaultlibs' 6793 Do not use the standard system libraries when linking. Only the 6794 libraries you specify will be passed to the linker. The standard 6795 startup files are used normally, unless `-nostartfiles' is used. 6796 The compiler may generate calls to `memcmp', `memset', `memcpy' 6797 and `memmove'. These entries are usually resolved by entries in 6798 libc. These entry points should be supplied through some other 6799 mechanism when this option is specified. 6800 6801`-nostdlib' 6802 Do not use the standard system startup files or libraries when 6803 linking. No startup files and only the libraries you specify will 6804 be passed to the linker. The compiler may generate calls to 6805 `memcmp', `memset', `memcpy' and `memmove'. These entries are 6806 usually resolved by entries in libc. These entry points should be 6807 supplied through some other mechanism when this option is 6808 specified. 6809 6810 One of the standard libraries bypassed by `-nostdlib' and 6811 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 6812 that GCC uses to overcome shortcomings of particular machines, or 6813 special needs for some languages. (*Note Interfacing to GCC 6814 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 6815 most cases, you need `libgcc.a' even when you want to avoid other 6816 standard libraries. In other words, when you specify `-nostdlib' 6817 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 6818 This ensures that you have no unresolved references to internal GCC 6819 library subroutines. (For example, `__main', used to ensure C++ 6820 constructors will be called; *note `collect2': (gccint)Collect2.) 6821 6822`-pie' 6823 Produce a position independent executable on targets which support 6824 it. For predictable results, you must also specify the same set 6825 of options that were used to generate code (`-fpie', `-fPIE', or 6826 model suboptions) when you specify this option. 6827 6828`-rdynamic' 6829 Pass the flag `-export-dynamic' to the ELF linker, on targets that 6830 support it. This instructs the linker to add all symbols, not only 6831 used ones, to the dynamic symbol table. This option is needed for 6832 some uses of `dlopen' or to allow obtaining backtraces from within 6833 a program. 6834 6835`-s' 6836 Remove all symbol table and relocation information from the 6837 executable. 6838 6839`-static' 6840 On systems that support dynamic linking, this prevents linking 6841 with the shared libraries. On other systems, this option has no 6842 effect. 6843 6844`-shared' 6845 Produce a shared object which can then be linked with other 6846 objects to form an executable. Not all systems support this 6847 option. For predictable results, you must also specify the same 6848 set of options that were used to generate code (`-fpic', `-fPIC', 6849 or model suboptions) when you specify this option.(1) 6850 6851`-shared-libgcc' 6852`-static-libgcc' 6853 On systems that provide `libgcc' as a shared library, these options 6854 force the use of either the shared or static version respectively. 6855 If no shared version of `libgcc' was built when the compiler was 6856 configured, these options have no effect. 6857 6858 There are several situations in which an application should use the 6859 shared `libgcc' instead of the static version. The most common of 6860 these is when the application wishes to throw and catch exceptions 6861 across different shared libraries. In that case, each of the 6862 libraries as well as the application itself should use the shared 6863 `libgcc'. 6864 6865 Therefore, the G++ and GCJ drivers automatically add 6866 `-shared-libgcc' whenever you build a shared library or a main 6867 executable, because C++ and Java programs typically use 6868 exceptions, so this is the right thing to do. 6869 6870 If, instead, you use the GCC driver to create shared libraries, 6871 you may find that they will not always be linked with the shared 6872 `libgcc'. If GCC finds, at its configuration time, that you have 6873 a non-GNU linker or a GNU linker that does not support option 6874 `--eh-frame-hdr', it will link the shared version of `libgcc' into 6875 shared libraries by default. Otherwise, it will take advantage of 6876 the linker and optimize away the linking with the shared version 6877 of `libgcc', linking with the static version of libgcc by default. 6878 This allows exceptions to propagate through such shared 6879 libraries, without incurring relocation costs at library load time. 6880 6881 However, if a library or main executable is supposed to throw or 6882 catch exceptions, you must link it using the G++ or GCJ driver, as 6883 appropriate for the languages used in the program, or using the 6884 option `-shared-libgcc', such that it is linked with the shared 6885 `libgcc'. 6886 6887`-symbolic' 6888 Bind references to global symbols when building a shared object. 6889 Warn about any unresolved references (unless overridden by the 6890 link editor option `-Xlinker -z -Xlinker defs'). Only a few 6891 systems support this option. 6892 6893`-Xlinker OPTION' 6894 Pass OPTION as an option to the linker. You can use this to 6895 supply system-specific linker options which GCC does not know how 6896 to recognize. 6897 6898 If you want to pass an option that takes an argument, you must use 6899 `-Xlinker' twice, once for the option and once for the argument. 6900 For example, to pass `-assert definitions', you must write 6901 `-Xlinker -assert -Xlinker definitions'. It does not work to write 6902 `-Xlinker "-assert definitions"', because this passes the entire 6903 string as a single argument, which is not what the linker expects. 6904 6905`-Wl,OPTION' 6906 Pass OPTION as an option to the linker. If OPTION contains 6907 commas, it is split into multiple options at the commas. 6908 6909`-u SYMBOL' 6910 Pretend the symbol SYMBOL is undefined, to force linking of 6911 library modules to define it. You can use `-u' multiple times with 6912 different symbols to force loading of additional library modules. 6913 6914 ---------- Footnotes ---------- 6915 6916 (1) On some systems, `gcc -shared' needs to build supplementary stub 6917code for constructors to work. On multi-libbed systems, `gcc -shared' 6918must select the correct support libraries to link against. Failing to 6919supply the correct flags may lead to subtle defects. Supplying them in 6920cases where they are not necessary is innocuous. 6921 6922 6923File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 6924 69253.14 Options for Directory Search 6926================================= 6927 6928These options specify directories to search for header files, for 6929libraries and for parts of the compiler: 6930 6931`-IDIR' 6932 Add the directory DIR to the head of the list of directories to be 6933 searched for header files. This can be used to override a system 6934 header file, substituting your own version, since these 6935 directories are searched before the system header file 6936 directories. However, you should not use this option to add 6937 directories that contain vendor-supplied system header files (use 6938 `-isystem' for that). If you use more than one `-I' option, the 6939 directories are scanned in left-to-right order; the standard 6940 system directories come after. 6941 6942 If a standard system include directory, or a directory specified 6943 with `-isystem', is also specified with `-I', the `-I' option will 6944 be ignored. The directory will still be searched but as a system 6945 directory at its normal position in the system include chain. 6946 This is to ensure that GCC's procedure to fix buggy system headers 6947 and the ordering for the include_next directive are not 6948 inadvertently changed. If you really need to change the search 6949 order for system directories, use the `-nostdinc' and/or 6950 `-isystem' options. 6951 6952`-iquoteDIR' 6953 Add the directory DIR to the head of the list of directories to be 6954 searched for header files only for the case of `#include "FILE"'; 6955 they are not searched for `#include <FILE>', otherwise just like 6956 `-I'. 6957 6958`-LDIR' 6959 Add directory DIR to the list of directories to be searched for 6960 `-l'. 6961 6962`-BPREFIX' 6963 This option specifies where to find the executables, libraries, 6964 include files, and data files of the compiler itself. 6965 6966 The compiler driver program runs one or more of the subprograms 6967 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 6968 program it tries to run, both with and without `MACHINE/VERSION/' 6969 (*note Target Options::). 6970 6971 For each subprogram to be run, the compiler driver first tries the 6972 `-B' prefix, if any. If that name is not found, or if `-B' was 6973 not specified, the driver tries two standard prefixes, which are 6974 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 6975 results in a file name that is found, the unmodified program name 6976 is searched for using the directories specified in your `PATH' 6977 environment variable. 6978 6979 The compiler will check to see if the path provided by the `-B' 6980 refers to a directory, and if necessary it will add a directory 6981 separator character at the end of the path. 6982 6983 `-B' prefixes that effectively specify directory names also apply 6984 to libraries in the linker, because the compiler translates these 6985 options into `-L' options for the linker. They also apply to 6986 includes files in the preprocessor, because the compiler 6987 translates these options into `-isystem' options for the 6988 preprocessor. In this case, the compiler appends `include' to the 6989 prefix. 6990 6991 The run-time support file `libgcc.a' can also be searched for using 6992 the `-B' prefix, if needed. If it is not found there, the two 6993 standard prefixes above are tried, and that is all. The file is 6994 left out of the link if it is not found by those means. 6995 6996 Another way to specify a prefix much like the `-B' prefix is to use 6997 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 6998 Variables::. 6999 7000 As a special kludge, if the path provided by `-B' is 7001 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 7002 will be replaced by `[dir/]include'. This is to help with 7003 boot-strapping the compiler. 7004 7005`-specs=FILE' 7006 Process FILE after the compiler reads in the standard `specs' 7007 file, in order to override the defaults that the `gcc' driver 7008 program uses when determining what switches to pass to `cc1', 7009 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 7010 specified on the command line, and they are processed in order, 7011 from left to right. 7012 7013`--sysroot=DIR' 7014 Use DIR as the logical root directory for headers and libraries. 7015 For example, if the compiler would normally search for headers in 7016 `/usr/include' and libraries in `/usr/lib', it will instead search 7017 `DIR/usr/include' and `DIR/usr/lib'. 7018 7019 If you use both this option and the `-isysroot' option, then the 7020 `--sysroot' option will apply to libraries, but the `-isysroot' 7021 option will apply to header files. 7022 7023 The GNU linker (beginning with version 2.16) has the necessary 7024 support for this option. If your linker does not support this 7025 option, the header file aspect of `--sysroot' will still work, but 7026 the library aspect will not. 7027 7028`-I-' 7029 This option has been deprecated. Please use `-iquote' instead for 7030 `-I' directories before the `-I-' and remove the `-I-'. Any 7031 directories you specify with `-I' options before the `-I-' option 7032 are searched only for the case of `#include "FILE"'; they are not 7033 searched for `#include <FILE>'. 7034 7035 If additional directories are specified with `-I' options after 7036 the `-I-', these directories are searched for all `#include' 7037 directives. (Ordinarily _all_ `-I' directories are used this way.) 7038 7039 In addition, the `-I-' option inhibits the use of the current 7040 directory (where the current input file came from) as the first 7041 search directory for `#include "FILE"'. There is no way to 7042 override this effect of `-I-'. With `-I.' you can specify 7043 searching the directory which was current when the compiler was 7044 invoked. That is not exactly the same as what the preprocessor 7045 does by default, but it is often satisfactory. 7046 7047 `-I-' does not inhibit the use of the standard system directories 7048 for header files. Thus, `-I-' and `-nostdinc' are independent. 7049 7050 7051File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 7052 70533.15 Specifying subprocesses and the switches to pass to them 7054============================================================= 7055 7056`gcc' is a driver program. It performs its job by invoking a sequence 7057of other programs to do the work of compiling, assembling and linking. 7058GCC interprets its command-line parameters and uses these to deduce 7059which programs it should invoke, and which command-line options it 7060ought to place on their command lines. This behavior is controlled by 7061"spec strings". In most cases there is one spec string for each 7062program that GCC can invoke, but a few programs have multiple spec 7063strings to control their behavior. The spec strings built into GCC can 7064be overridden by using the `-specs=' command-line switch to specify a 7065spec file. 7066 7067 "Spec files" are plaintext files that are used to construct spec 7068strings. They consist of a sequence of directives separated by blank 7069lines. The type of directive is determined by the first non-whitespace 7070character on the line and it can be one of the following: 7071 7072`%COMMAND' 7073 Issues a COMMAND to the spec file processor. The commands that can 7074 appear here are: 7075 7076 `%include <FILE>' 7077 Search for FILE and insert its text at the current point in 7078 the specs file. 7079 7080 `%include_noerr <FILE>' 7081 Just like `%include', but do not generate an error message if 7082 the include file cannot be found. 7083 7084 `%rename OLD_NAME NEW_NAME' 7085 Rename the spec string OLD_NAME to NEW_NAME. 7086 7087 7088`*[SPEC_NAME]:' 7089 This tells the compiler to create, override or delete the named 7090 spec string. All lines after this directive up to the next 7091 directive or blank line are considered to be the text for the spec 7092 string. If this results in an empty string then the spec will be 7093 deleted. (Or, if the spec did not exist, then nothing will 7094 happened.) Otherwise, if the spec does not currently exist a new 7095 spec will be created. If the spec does exist then its contents 7096 will be overridden by the text of this directive, unless the first 7097 character of that text is the `+' character, in which case the 7098 text will be appended to the spec. 7099 7100`[SUFFIX]:' 7101 Creates a new `[SUFFIX] spec' pair. All lines after this directive 7102 and up to the next directive or blank line are considered to make 7103 up the spec string for the indicated suffix. When the compiler 7104 encounters an input file with the named suffix, it will processes 7105 the spec string in order to work out how to compile that file. 7106 For example: 7107 7108 .ZZ: 7109 z-compile -input %i 7110 7111 This says that any input file whose name ends in `.ZZ' should be 7112 passed to the program `z-compile', which should be invoked with the 7113 command-line switch `-input' and with the result of performing the 7114 `%i' substitution. (See below.) 7115 7116 As an alternative to providing a spec string, the text that 7117 follows a suffix directive can be one of the following: 7118 7119 `@LANGUAGE' 7120 This says that the suffix is an alias for a known LANGUAGE. 7121 This is similar to using the `-x' command-line switch to GCC 7122 to specify a language explicitly. For example: 7123 7124 .ZZ: 7125 @c++ 7126 7127 Says that .ZZ files are, in fact, C++ source files. 7128 7129 `#NAME' 7130 This causes an error messages saying: 7131 7132 NAME compiler not installed on this system. 7133 7134 GCC already has an extensive list of suffixes built into it. This 7135 directive will add an entry to the end of the list of suffixes, but 7136 since the list is searched from the end backwards, it is 7137 effectively possible to override earlier entries using this 7138 technique. 7139 7140 7141 GCC has the following spec strings built into it. Spec files can 7142override these strings or create their own. Note that individual 7143targets can also add their own spec strings to this list. 7144 7145 asm Options to pass to the assembler 7146 asm_final Options to pass to the assembler post-processor 7147 cpp Options to pass to the C preprocessor 7148 cc1 Options to pass to the C compiler 7149 cc1plus Options to pass to the C++ compiler 7150 endfile Object files to include at the end of the link 7151 link Options to pass to the linker 7152 lib Libraries to include on the command line to the linker 7153 libgcc Decides which GCC support library to pass to the linker 7154 linker Sets the name of the linker 7155 predefines Defines to be passed to the C preprocessor 7156 signed_char Defines to pass to CPP to say whether `char' is signed 7157 by default 7158 startfile Object files to include at the start of the link 7159 7160 Here is a small example of a spec file: 7161 7162 %rename lib old_lib 7163 7164 *lib: 7165 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 7166 7167 This example renames the spec called `lib' to `old_lib' and then 7168overrides the previous definition of `lib' with a new one. The new 7169definition adds in some extra command-line options before including the 7170text of the old definition. 7171 7172 "Spec strings" are a list of command-line options to be passed to their 7173corresponding program. In addition, the spec strings can contain 7174`%'-prefixed sequences to substitute variable text or to conditionally 7175insert text into the command line. Using these constructs it is 7176possible to generate quite complex command lines. 7177 7178 Here is a table of all defined `%'-sequences for spec strings. Note 7179that spaces are not generated automatically around the results of 7180expanding these sequences. Therefore you can concatenate them together 7181or combine them with constant text in a single argument. 7182 7183`%%' 7184 Substitute one `%' into the program name or argument. 7185 7186`%i' 7187 Substitute the name of the input file being processed. 7188 7189`%b' 7190 Substitute the basename of the input file being processed. This 7191 is the substring up to (and not including) the last period and not 7192 including the directory. 7193 7194`%B' 7195 This is the same as `%b', but include the file suffix (text after 7196 the last period). 7197 7198`%d' 7199 Marks the argument containing or following the `%d' as a temporary 7200 file name, so that that file will be deleted if GCC exits 7201 successfully. Unlike `%g', this contributes no text to the 7202 argument. 7203 7204`%gSUFFIX' 7205 Substitute a file name that has suffix SUFFIX and is chosen once 7206 per compilation, and mark the argument in the same way as `%d'. 7207 To reduce exposure to denial-of-service attacks, the file name is 7208 now chosen in a way that is hard to predict even when previously 7209 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 7210 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 7211 matches the regexp `[.A-Za-z]*' or the special string `%O', which 7212 is treated exactly as if `%O' had been preprocessed. Previously, 7213 `%g' was simply substituted with a file name chosen once per 7214 compilation, without regard to any appended suffix (which was 7215 therefore treated just like ordinary text), making such attacks 7216 more likely to succeed. 7217 7218`%uSUFFIX' 7219 Like `%g', but generates a new temporary file name even if 7220 `%uSUFFIX' was already seen. 7221 7222`%USUFFIX' 7223 Substitutes the last file name generated with `%uSUFFIX', 7224 generating a new one if there is no such last file name. In the 7225 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 7226 they don't share the same suffix _space_, so `%g.s ... %U.s ... 7227 %g.s ... %U.s' would involve the generation of two distinct file 7228 names, one for each `%g.s' and another for each `%U.s'. 7229 Previously, `%U' was simply substituted with a file name chosen 7230 for the previous `%u', without regard to any appended suffix. 7231 7232`%jSUFFIX' 7233 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 7234 writable, and if save-temps is off; otherwise, substitute the name 7235 of a temporary file, just like `%u'. This temporary file is not 7236 meant for communication between processes, but rather as a junk 7237 disposal mechanism. 7238 7239`%|SUFFIX' 7240`%mSUFFIX' 7241 Like `%g', except if `-pipe' is in effect. In that case `%|' 7242 substitutes a single dash and `%m' substitutes nothing at all. 7243 These are the two most common ways to instruct a program that it 7244 should read from standard input or write to standard output. If 7245 you need something more elaborate you can use an `%{pipe:`X'}' 7246 construct: see for example `f/lang-specs.h'. 7247 7248`%.SUFFIX' 7249 Substitutes .SUFFIX for the suffixes of a matched switch's args 7250 when it is subsequently output with `%*'. SUFFIX is terminated by 7251 the next space or %. 7252 7253`%w' 7254 Marks the argument containing or following the `%w' as the 7255 designated output file of this compilation. This puts the argument 7256 into the sequence of arguments that `%o' will substitute later. 7257 7258`%o' 7259 Substitutes the names of all the output files, with spaces 7260 automatically placed around them. You should write spaces around 7261 the `%o' as well or the results are undefined. `%o' is for use in 7262 the specs for running the linker. Input files whose names have no 7263 recognized suffix are not compiled at all, but they are included 7264 among the output files, so they will be linked. 7265 7266`%O' 7267 Substitutes the suffix for object files. Note that this is 7268 handled specially when it immediately follows `%g, %u, or %U', 7269 because of the need for those to form complete file names. The 7270 handling is such that `%O' is treated exactly as if it had already 7271 been substituted, except that `%g, %u, and %U' do not currently 7272 support additional SUFFIX characters following `%O' as they would 7273 following, for example, `.o'. 7274 7275`%p' 7276 Substitutes the standard macro predefinitions for the current 7277 target machine. Use this when running `cpp'. 7278 7279`%P' 7280 Like `%p', but puts `__' before and after the name of each 7281 predefined macro, except for macros that start with `__' or with 7282 `_L', where L is an uppercase letter. This is for ISO C. 7283 7284`%I' 7285 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 7286 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 7287 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 7288 necessary. 7289 7290`%s' 7291 Current argument is the name of a library or startup file of some 7292 sort. Search for that file in a standard list of directories and 7293 substitute the full name found. 7294 7295`%eSTR' 7296 Print STR as an error message. STR is terminated by a newline. 7297 Use this when inconsistent options are detected. 7298 7299`%(NAME)' 7300 Substitute the contents of spec string NAME at this point. 7301 7302`%[NAME]' 7303 Like `%(...)' but put `__' around `-D' arguments. 7304 7305`%x{OPTION}' 7306 Accumulate an option for `%X'. 7307 7308`%X' 7309 Output the accumulated linker options specified by `-Wl' or a `%x' 7310 spec string. 7311 7312`%Y' 7313 Output the accumulated assembler options specified by `-Wa'. 7314 7315`%Z' 7316 Output the accumulated preprocessor options specified by `-Wp'. 7317 7318`%a' 7319 Process the `asm' spec. This is used to compute the switches to 7320 be passed to the assembler. 7321 7322`%A' 7323 Process the `asm_final' spec. This is a spec string for passing 7324 switches to an assembler post-processor, if such a program is 7325 needed. 7326 7327`%l' 7328 Process the `link' spec. This is the spec for computing the 7329 command line passed to the linker. Typically it will make use of 7330 the `%L %G %S %D and %E' sequences. 7331 7332`%D' 7333 Dump out a `-L' option for each directory that GCC believes might 7334 contain startup files. If the target supports multilibs then the 7335 current multilib directory will be prepended to each of these 7336 paths. 7337 7338`%L' 7339 Process the `lib' spec. This is a spec string for deciding which 7340 libraries should be included on the command line to the linker. 7341 7342`%G' 7343 Process the `libgcc' spec. This is a spec string for deciding 7344 which GCC support library should be included on the command line 7345 to the linker. 7346 7347`%S' 7348 Process the `startfile' spec. This is a spec for deciding which 7349 object files should be the first ones passed to the linker. 7350 Typically this might be a file named `crt0.o'. 7351 7352`%E' 7353 Process the `endfile' spec. This is a spec string that specifies 7354 the last object files that will be passed to the linker. 7355 7356`%C' 7357 Process the `cpp' spec. This is used to construct the arguments 7358 to be passed to the C preprocessor. 7359 7360`%1' 7361 Process the `cc1' spec. This is used to construct the options to 7362 be passed to the actual C compiler (`cc1'). 7363 7364`%2' 7365 Process the `cc1plus' spec. This is used to construct the options 7366 to be passed to the actual C++ compiler (`cc1plus'). 7367 7368`%*' 7369 Substitute the variable part of a matched option. See below. 7370 Note that each comma in the substituted string is replaced by a 7371 single space. 7372 7373`%<`S'' 7374 Remove all occurrences of `-S' from the command line. Note--this 7375 command is position dependent. `%' commands in the spec string 7376 before this one will see `-S', `%' commands in the spec string 7377 after this one will not. 7378 7379`%:FUNCTION(ARGS)' 7380 Call the named function FUNCTION, passing it ARGS. ARGS is first 7381 processed as a nested spec string, then split into an argument 7382 vector in the usual fashion. The function returns a string which 7383 is processed as if it had appeared literally as part of the 7384 current spec. 7385 7386 The following built-in spec functions are provided: 7387 7388 ``if-exists'' 7389 The `if-exists' spec function takes one argument, an absolute 7390 pathname to a file. If the file exists, `if-exists' returns 7391 the pathname. Here is a small example of its usage: 7392 7393 *startfile: 7394 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 7395 7396 ``if-exists-else'' 7397 The `if-exists-else' spec function is similar to the 7398 `if-exists' spec function, except that it takes two 7399 arguments. The first argument is an absolute pathname to a 7400 file. If the file exists, `if-exists-else' returns the 7401 pathname. If it does not exist, it returns the second 7402 argument. This way, `if-exists-else' can be used to select 7403 one file or another, based on the existence of the first. 7404 Here is a small example of its usage: 7405 7406 *startfile: 7407 crt0%O%s %:if-exists(crti%O%s) \ 7408 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 7409 7410 ``replace-outfile'' 7411 The `replace-outfile' spec function takes two arguments. It 7412 looks for the first argument in the outfiles array and 7413 replaces it with the second argument. Here is a small 7414 example of its usage: 7415 7416 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 7417 7418 7419`%{`S'}' 7420 Substitutes the `-S' switch, if that switch was given to GCC. If 7421 that switch was not specified, this substitutes nothing. Note that 7422 the leading dash is omitted when specifying this option, and it is 7423 automatically inserted if the substitution is performed. Thus the 7424 spec string `%{foo}' would match the command-line option `-foo' 7425 and would output the command line option `-foo'. 7426 7427`%W{`S'}' 7428 Like %{`S'} but mark last argument supplied within as a file to be 7429 deleted on failure. 7430 7431`%{`S'*}' 7432 Substitutes all the switches specified to GCC whose names start 7433 with `-S', but which also take an argument. This is used for 7434 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 7435 being one switch whose names starts with `o'. %{o*} would 7436 substitute this text, including the space. Thus two arguments 7437 would be generated. 7438 7439`%{`S'*&`T'*}' 7440 Like %{`S'*}, but preserve order of `S' and `T' options (the order 7441 of `S' and `T' in the spec is not significant). There can be any 7442 number of ampersand-separated variables; for each the wild card is 7443 optional. Useful for CPP as `%{D*&U*&A*}'. 7444 7445`%{`S':`X'}' 7446 Substitutes `X', if the `-S' switch was given to GCC. 7447 7448`%{!`S':`X'}' 7449 Substitutes `X', if the `-S' switch was _not_ given to GCC. 7450 7451`%{`S'*:`X'}' 7452 Substitutes `X' if one or more switches whose names start with 7453 `-S' are specified to GCC. Normally `X' is substituted only once, 7454 no matter how many such switches appeared. However, if `%*' 7455 appears somewhere in `X', then `X' will be substituted once for 7456 each matching switch, with the `%*' replaced by the part of that 7457 switch that matched the `*'. 7458 7459`%{.`S':`X'}' 7460 Substitutes `X', if processing a file with suffix `S'. 7461 7462`%{!.`S':`X'}' 7463 Substitutes `X', if _not_ processing a file with suffix `S'. 7464 7465`%{`S'|`P':`X'}' 7466 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 7467 be combined with `!', `.', and `*' sequences as well, although 7468 they have a stronger binding than the `|'. If `%*' appears in 7469 `X', all of the alternatives must be starred, and only the first 7470 matching alternative is substituted. 7471 7472 For example, a spec string like this: 7473 7474 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 7475 7476 will output the following command-line options from the following 7477 input command-line options: 7478 7479 fred.c -foo -baz 7480 jim.d -bar -boggle 7481 -d fred.c -foo -baz -boggle 7482 -d jim.d -bar -baz -boggle 7483 7484`%{S:X; T:Y; :D}' 7485 If `S' was given to GCC, substitutes `X'; else if `T' was given to 7486 GCC, substitutes `Y'; else substitutes `D'. There can be as many 7487 clauses as you need. This may be combined with `.', `!', `|', and 7488 `*' as needed. 7489 7490 7491 The conditional text `X' in a %{`S':`X'} or similar construct may 7492contain other nested `%' constructs or spaces, or even newlines. They 7493are processed as usual, as described above. Trailing white space in 7494`X' is ignored. White space may also appear anywhere on the left side 7495of the colon in these constructs, except between `.' or `*' and the 7496corresponding word. 7497 7498 The `-O', `-f', `-m', and `-W' switches are handled specifically in 7499these constructs. If another value of `-O' or the negated form of a 7500`-f', `-m', or `-W' switch is found later in the command line, the 7501earlier switch value is ignored, except with {`S'*} where `S' is just 7502one letter, which passes all matching options. 7503 7504 The character `|' at the beginning of the predicate text is used to 7505indicate that a command should be piped to the following command, but 7506only if `-pipe' is specified. 7507 7508 It is built into GCC which switches take arguments and which do not. 7509(You might think it would be useful to generalize this to allow each 7510compiler's spec to say which switches take arguments. But this cannot 7511be done in a consistent fashion. GCC cannot even decide which input 7512files have been specified without knowing which switches take arguments, 7513and it must know which input files to compile in order to tell which 7514compilers to run). 7515 7516 GCC also knows implicitly that arguments starting in `-l' are to be 7517treated as compiler output files, and passed to the linker in their 7518proper position among the other output files. 7519 7520 7521File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 7522 75233.16 Specifying Target Machine and Compiler Version 7524=================================================== 7525 7526The usual way to run GCC is to run the executable called `gcc', or 7527`<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to 7528run a version other than the one that was installed last. Sometimes 7529this is inconvenient, so GCC provides options that will switch to 7530another cross-compiler or version. 7531 7532`-b MACHINE' 7533 The argument MACHINE specifies the target machine for compilation. 7534 7535 The value to use for MACHINE is the same as was specified as the 7536 machine type when configuring GCC as a cross-compiler. For 7537 example, if a cross-compiler was configured with `configure 7538 arm-elf', meaning to compile for an arm processor with elf 7539 binaries, then you would specify `-b arm-elf' to run that cross 7540 compiler. Because there are other options beginning with `-b', the 7541 configuration must contain a hyphen. 7542 7543`-V VERSION' 7544 The argument VERSION specifies which version of GCC to run. This 7545 is useful when multiple versions are installed. For example, 7546 VERSION might be `4.0', meaning to run GCC version 4.0. 7547 7548 The `-V' and `-b' options work by running the 7549`<machine>-gcc-<version>' executable, so there's no real reason to use 7550them if you can just run that directly. 7551 7552 7553File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 7554 75553.17 Hardware Models and Configurations 7556======================================= 7557 7558Earlier we discussed the standard option `-b' which chooses among 7559different installed compilers for completely different target machines, 7560such as VAX vs. 68000 vs. 80386. 7561 7562 In addition, each of these target machine types can have its own 7563special options, starting with `-m', to choose among various hardware 7564models or configurations--for example, 68010 vs 68020, floating 7565coprocessor or none. A single installed version of the compiler can 7566compile for any model or configuration, according to the options 7567specified. 7568 7569 Some configurations of the compiler also support additional special 7570options, usually for compatibility with other compilers on the same 7571platform. 7572 7573* Menu: 7574 7575* ARC Options:: 7576* ARM Options:: 7577* AVR Options:: 7578* Blackfin Options:: 7579* CRIS Options:: 7580* CRX Options:: 7581* Darwin Options:: 7582* DEC Alpha Options:: 7583* DEC Alpha/VMS Options:: 7584* FRV Options:: 7585* GNU/Linux Options:: 7586* H8/300 Options:: 7587* HPPA Options:: 7588* i386 and x86-64 Options:: 7589* IA-64 Options:: 7590* M32C Options:: 7591* M32R/D Options:: 7592* M680x0 Options:: 7593* M68hc1x Options:: 7594* MCore Options:: 7595* MIPS Options:: 7596* MMIX Options:: 7597* MN10300 Options:: 7598* MT Options:: 7599* PDP-11 Options:: 7600* PowerPC Options:: 7601* RS/6000 and PowerPC Options:: 7602* S/390 and zSeries Options:: 7603* Score Options:: 7604* SH Options:: 7605* SPARC Options:: 7606* System V Options:: 7607* TMS320C3x/C4x Options:: 7608* V850 Options:: 7609* VAX Options:: 7610* x86-64 Options:: 7611* Xstormy16 Options:: 7612* Xtensa Options:: 7613* zSeries Options:: 7614 7615 7616File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 7617 76183.17.1 ARC Options 7619------------------ 7620 7621These options are defined for ARC implementations: 7622 7623`-EL' 7624 Compile code for little endian mode. This is the default. 7625 7626`-EB' 7627 Compile code for big endian mode. 7628 7629`-mmangle-cpu' 7630 Prepend the name of the cpu to all public symbol names. In 7631 multiple-processor systems, there are many ARC variants with 7632 different instruction and register set characteristics. This flag 7633 prevents code compiled for one cpu to be linked with code compiled 7634 for another. No facility exists for handling variants that are 7635 "almost identical". This is an all or nothing option. 7636 7637`-mcpu=CPU' 7638 Compile code for ARC variant CPU. Which variants are supported 7639 depend on the configuration. All variants support `-mcpu=base', 7640 this is the default. 7641 7642`-mtext=TEXT-SECTION' 7643`-mdata=DATA-SECTION' 7644`-mrodata=READONLY-DATA-SECTION' 7645 Put functions, data, and readonly data in TEXT-SECTION, 7646 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 7647 This can be overridden with the `section' attribute. *Note 7648 Variable Attributes::. 7649 7650 7651 7652File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 7653 76543.17.2 ARM Options 7655------------------ 7656 7657These `-m' options are defined for Advanced RISC Machines (ARM) 7658architectures: 7659 7660`-mabi=NAME' 7661 Generate code for the specified ABI. Permissible values are: 7662 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 7663 7664`-mapcs-frame' 7665 Generate a stack frame that is compliant with the ARM Procedure 7666 Call Standard for all functions, even if this is not strictly 7667 necessary for correct execution of the code. Specifying 7668 `-fomit-frame-pointer' with this option will cause the stack 7669 frames not to be generated for leaf functions. The default is 7670 `-mno-apcs-frame'. 7671 7672`-mapcs' 7673 This is a synonym for `-mapcs-frame'. 7674 7675`-mthumb-interwork' 7676 Generate code which supports calling between the ARM and Thumb 7677 instruction sets. Without this option the two instruction sets 7678 cannot be reliably used inside one program. The default is 7679 `-mno-thumb-interwork', since slightly larger code is generated 7680 when `-mthumb-interwork' is specified. 7681 7682`-mno-sched-prolog' 7683 Prevent the reordering of instructions in the function prolog, or 7684 the merging of those instruction with the instructions in the 7685 function's body. This means that all functions will start with a 7686 recognizable set of instructions (or in fact one of a choice from 7687 a small set of different function prologues), and this information 7688 can be used to locate the start if functions inside an executable 7689 piece of code. The default is `-msched-prolog'. 7690 7691`-mhard-float' 7692 Generate output containing floating point instructions. This is 7693 the default. 7694 7695`-msoft-float' 7696 Generate output containing library calls for floating point. 7697 *Warning:* the requisite libraries are not available for all ARM 7698 targets. Normally the facilities of the machine's usual C 7699 compiler are used, but this cannot be done directly in 7700 cross-compilation. You must make your own arrangements to provide 7701 suitable library functions for cross-compilation. 7702 7703 `-msoft-float' changes the calling convention in the output file; 7704 therefore, it is only useful if you compile _all_ of a program with 7705 this option. In particular, you need to compile `libgcc.a', the 7706 library that comes with GCC, with `-msoft-float' in order for this 7707 to work. 7708 7709`-mfloat-abi=NAME' 7710 Specifies which ABI to use for floating point values. Permissible 7711 values are: `soft', `softfp' and `hard'. 7712 7713 `soft' and `hard' are equivalent to `-msoft-float' and 7714 `-mhard-float' respectively. `softfp' allows the generation of 7715 floating point instructions, but still uses the soft-float calling 7716 conventions. 7717 7718`-mlittle-endian' 7719 Generate code for a processor running in little-endian mode. This 7720 is the default for all standard configurations. 7721 7722`-mbig-endian' 7723 Generate code for a processor running in big-endian mode; the 7724 default is to compile code for a little-endian processor. 7725 7726`-mwords-little-endian' 7727 This option only applies when generating code for big-endian 7728 processors. Generate code for a little-endian word order but a 7729 big-endian byte order. That is, a byte order of the form 7730 `32107654'. Note: this option should only be used if you require 7731 compatibility with code for big-endian ARM processors generated by 7732 versions of the compiler prior to 2.8. 7733 7734`-mcpu=NAME' 7735 This specifies the name of the target ARM processor. GCC uses 7736 this name to determine what kind of instructions it can emit when 7737 generating assembly code. Permissible names are: `arm2', `arm250', 7738 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 7739 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 7740 `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe', 7741 `arm7tdmi', `arm7tdmi-s', `arm8', `strongarm', `strongarm110', 7742 `strongarm1100', `arm8', `arm810', `arm9', `arm9e', `arm920', 7743 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 7744 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 7745 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 7746 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1176jz-s', 7747 `arm1176jzf-s', `xscale', `iwmmxt', `ep9312'. 7748 7749`-mtune=NAME' 7750 This option is very similar to the `-mcpu=' option, except that 7751 instead of specifying the actual target processor type, and hence 7752 restricting which instructions can be used, it specifies that GCC 7753 should tune the performance of the code as if the target were of 7754 the type specified in this option, but still choosing the 7755 instructions that it will generate based on the cpu specified by a 7756 `-mcpu=' option. For some ARM implementations better performance 7757 can be obtained by using this option. 7758 7759`-march=NAME' 7760 This specifies the name of the target ARM architecture. GCC uses 7761 this name to determine what kind of instructions it can emit when 7762 generating assembly code. This option can be used in conjunction 7763 with or instead of the `-mcpu=' option. Permissible names are: 7764 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 7765 `armv5t', `armv5te', `armv6', `armv6j', `iwmmxt', `ep9312'. 7766 7767`-mfpu=NAME' 7768`-mfpe=NUMBER' 7769`-mfp=NUMBER' 7770 This specifies what floating point hardware (or hardware 7771 emulation) is available on the target. Permissible names are: 7772 `fpa', `fpe2', `fpe3', `maverick', `vfp'. `-mfp' and `-mfpe' are 7773 synonyms for `-mfpu'=`fpe'NUMBER, for compatibility with older 7774 versions of GCC. 7775 7776 If `-msoft-float' is specified this specifies the format of 7777 floating point values. 7778 7779`-mstructure-size-boundary=N' 7780 The size of all structures and unions will be rounded up to a 7781 multiple of the number of bits set by this option. Permissible 7782 values are 8, 32 and 64. The default value varies for different 7783 toolchains. For the COFF targeted toolchain the default value is 7784 8. A value of 64 is only allowed if the underlying ABI supports 7785 it. 7786 7787 Specifying the larger number can produce faster, more efficient 7788 code, but can also increase the size of the program. Different 7789 values are potentially incompatible. Code compiled with one value 7790 cannot necessarily expect to work with code or libraries compiled 7791 with another value, if they exchange information using structures 7792 or unions. 7793 7794`-mabort-on-noreturn' 7795 Generate a call to the function `abort' at the end of a `noreturn' 7796 function. It will be executed if the function tries to return. 7797 7798`-mlong-calls' 7799`-mno-long-calls' 7800 Tells the compiler to perform function calls by first loading the 7801 address of the function into a register and then performing a 7802 subroutine call on this register. This switch is needed if the 7803 target function will lie outside of the 64 megabyte addressing 7804 range of the offset based version of subroutine call instruction. 7805 7806 Even if this switch is enabled, not all function calls will be 7807 turned into long calls. The heuristic is that static functions, 7808 functions which have the `short-call' attribute, functions that 7809 are inside the scope of a `#pragma no_long_calls' directive and 7810 functions whose definitions have already been compiled within the 7811 current compilation unit, will not be turned into long calls. The 7812 exception to this rule is that weak function definitions, 7813 functions with the `long-call' attribute or the `section' 7814 attribute, and functions that are within the scope of a `#pragma 7815 long_calls' directive, will always be turned into long calls. 7816 7817 This feature is not enabled by default. Specifying 7818 `-mno-long-calls' will restore the default behavior, as will 7819 placing the function calls within the scope of a `#pragma 7820 long_calls_off' directive. Note these switches have no effect on 7821 how the compiler generates code to handle function calls via 7822 function pointers. 7823 7824`-mnop-fun-dllimport' 7825 Disable support for the `dllimport' attribute. 7826 7827`-msingle-pic-base' 7828 Treat the register used for PIC addressing as read-only, rather 7829 than loading it in the prologue for each function. The run-time 7830 system is responsible for initializing this register with an 7831 appropriate value before execution begins. 7832 7833`-mpic-register=REG' 7834 Specify the register to be used for PIC addressing. The default 7835 is R10 unless stack-checking is enabled, when R9 is used. 7836 7837`-mcirrus-fix-invalid-insns' 7838 Insert NOPs into the instruction stream to in order to work around 7839 problems with invalid Maverick instruction combinations. This 7840 option is only valid if the `-mcpu=ep9312' option has been used to 7841 enable generation of instructions for the Cirrus Maverick floating 7842 point co-processor. This option is not enabled by default, since 7843 the problem is only present in older Maverick implementations. 7844 The default can be re-enabled by use of the 7845 `-mno-cirrus-fix-invalid-insns' switch. 7846 7847`-mpoke-function-name' 7848 Write the name of each function into the text section, directly 7849 preceding the function prologue. The generated code is similar to 7850 this: 7851 7852 t0 7853 .ascii "arm_poke_function_name", 0 7854 .align 7855 t1 7856 .word 0xff000000 + (t1 - t0) 7857 arm_poke_function_name 7858 mov ip, sp 7859 stmfd sp!, {fp, ip, lr, pc} 7860 sub fp, ip, #4 7861 7862 When performing a stack backtrace, code can inspect the value of 7863 `pc' stored at `fp + 0'. If the trace function then looks at 7864 location `pc - 12' and the top 8 bits are set, then we know that 7865 there is a function name embedded immediately preceding this 7866 location and has length `((pc[-3]) & 0xff000000)'. 7867 7868`-mthumb' 7869 Generate code for the 16-bit Thumb instruction set. The default 7870 is to use the 32-bit ARM instruction set. 7871 7872`-mtpcs-frame' 7873 Generate a stack frame that is compliant with the Thumb Procedure 7874 Call Standard for all non-leaf functions. (A leaf function is one 7875 that does not call any other functions.) The default is 7876 `-mno-tpcs-frame'. 7877 7878`-mtpcs-leaf-frame' 7879 Generate a stack frame that is compliant with the Thumb Procedure 7880 Call Standard for all leaf functions. (A leaf function is one 7881 that does not call any other functions.) The default is 7882 `-mno-apcs-leaf-frame'. 7883 7884`-mcallee-super-interworking' 7885 Gives all externally visible functions in the file being compiled 7886 an ARM instruction set header which switches to Thumb mode before 7887 executing the rest of the function. This allows these functions 7888 to be called from non-interworking code. 7889 7890`-mcaller-super-interworking' 7891 Allows calls via function pointers (including virtual functions) to 7892 execute correctly regardless of whether the target code has been 7893 compiled for interworking or not. There is a small overhead in 7894 the cost of executing a function pointer if this option is enabled. 7895 7896`-mtp=NAME' 7897 Specify the access model for the thread local storage pointer. 7898 The valid models are `soft', which generates calls to 7899 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 7900 `cp15' directly (supported in the arm6k architecture), and `auto', 7901 which uses the best available method for the selected processor. 7902 The default setting is `auto'. 7903 7904 7905 7906File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 7907 79083.17.3 AVR Options 7909------------------ 7910 7911These options are defined for AVR implementations: 7912 7913`-mmcu=MCU' 7914 Specify ATMEL AVR instruction set or MCU type. 7915 7916 Instruction set avr1 is for the minimal AVR core, not supported by 7917 the C compiler, only for assembler programs (MCU types: at90s1200, 7918 attiny10, attiny11, attiny12, attiny15, attiny28). 7919 7920 Instruction set avr2 (default) is for the classic AVR core with up 7921 to 8K program memory space (MCU types: at90s2313, at90s2323, 7922 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 7923 at90s8515, at90c8534, at90s8535). 7924 7925 Instruction set avr3 is for the classic AVR core with up to 128K 7926 program memory space (MCU types: atmega103, atmega603, at43usb320, 7927 at76c711). 7928 7929 Instruction set avr4 is for the enhanced AVR core with up to 8K 7930 program memory space (MCU types: atmega8, atmega83, atmega85). 7931 7932 Instruction set avr5 is for the enhanced AVR core with up to 128K 7933 program memory space (MCU types: atmega16, atmega161, atmega163, 7934 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 7935 7936`-msize' 7937 Output instruction sizes to the asm file. 7938 7939`-minit-stack=N' 7940 Specify the initial stack address, which may be a symbol or 7941 numeric value, `__stack' is the default. 7942 7943`-mno-interrupts' 7944 Generated code is not compatible with hardware interrupts. Code 7945 size will be smaller. 7946 7947`-mcall-prologues' 7948 Functions prologues/epilogues expanded as call to appropriate 7949 subroutines. Code size will be smaller. 7950 7951`-mno-tablejump' 7952 Do not generate tablejump insns which sometimes increase code size. 7953 7954`-mtiny-stack' 7955 Change only the low 8 bits of the stack pointer. 7956 7957`-mint8' 7958 Assume int to be 8 bit integer. This affects the sizes of all 7959 types: A char will be 1 byte, an int will be 1 byte, an long will 7960 be 2 bytes and long long will be 4 bytes. Please note that this 7961 option does not comply to the C standards, but it will provide you 7962 with smaller code size. 7963 7964 7965File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 7966 79673.17.4 Blackfin Options 7968----------------------- 7969 7970`-momit-leaf-frame-pointer' 7971 Don't keep the frame pointer in a register for leaf functions. 7972 This avoids the instructions to save, set up and restore frame 7973 pointers and makes an extra register available in leaf functions. 7974 The option `-fomit-frame-pointer' removes the frame pointer for 7975 all functions which might make debugging harder. 7976 7977`-mspecld-anomaly' 7978 When enabled, the compiler will ensure that the generated code 7979 does not contain speculative loads after jump instructions. This 7980 option is enabled by default. 7981 7982`-mno-specld-anomaly' 7983 Don't generate extra code to prevent speculative loads from 7984 occurring. 7985 7986`-mcsync-anomaly' 7987 When enabled, the compiler will ensure that the generated code 7988 does not contain CSYNC or SSYNC instructions too soon after 7989 conditional branches. This option is enabled by default. 7990 7991`-mno-csync-anomaly' 7992 Don't generate extra code to prevent CSYNC or SSYNC instructions 7993 from occurring too soon after a conditional branch. 7994 7995`-mlow-64k' 7996 When enabled, the compiler is free to take advantage of the 7997 knowledge that the entire program fits into the low 64k of memory. 7998 7999`-mno-low-64k' 8000 Assume that the program is arbitrarily large. This is the default. 8001 8002`-mid-shared-library' 8003 Generate code that supports shared libraries via the library ID 8004 method. This allows for execute in place and shared libraries in 8005 an environment without virtual memory management. This option 8006 implies `-fPIC'. 8007 8008`-mno-id-shared-library' 8009 Generate code that doesn't assume ID based shared libraries are 8010 being used. This is the default. 8011 8012`-mshared-library-id=n' 8013 Specified the identification number of the ID based shared library 8014 being compiled. Specifying a value of 0 will generate more 8015 compact code, specifying other values will force the allocation of 8016 that number to the current library but is no more space or time 8017 efficient than omitting this option. 8018 8019`-mlong-calls' 8020`-mno-long-calls' 8021 Tells the compiler to perform function calls by first loading the 8022 address of the function into a register and then performing a 8023 subroutine call on this register. This switch is needed if the 8024 target function will lie outside of the 24 bit addressing range of 8025 the offset based version of subroutine call instruction. 8026 8027 This feature is not enabled by default. Specifying 8028 `-mno-long-calls' will restore the default behavior. Note these 8029 switches have no effect on how the compiler generates code to 8030 handle function calls via function pointers. 8031 8032 8033File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 8034 80353.17.5 CRIS Options 8036------------------- 8037 8038These options are defined specifically for the CRIS ports. 8039 8040`-march=ARCHITECTURE-TYPE' 8041`-mcpu=ARCHITECTURE-TYPE' 8042 Generate code for the specified architecture. The choices for 8043 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 8044 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 8045 cris-axis-linux-gnu, where the default is `v10'. 8046 8047`-mtune=ARCHITECTURE-TYPE' 8048 Tune to ARCHITECTURE-TYPE everything applicable about the generated 8049 code, except for the ABI and the set of available instructions. 8050 The choices for ARCHITECTURE-TYPE are the same as for 8051 `-march=ARCHITECTURE-TYPE'. 8052 8053`-mmax-stack-frame=N' 8054 Warn when the stack frame of a function exceeds N bytes. 8055 8056`-melinux-stacksize=N' 8057 Only available with the `cris-axis-aout' target. Arranges for 8058 indications in the program to the kernel loader that the stack of 8059 the program should be set to N bytes. 8060 8061`-metrax4' 8062`-metrax100' 8063 The options `-metrax4' and `-metrax100' are synonyms for 8064 `-march=v3' and `-march=v8' respectively. 8065 8066`-mmul-bug-workaround' 8067`-mno-mul-bug-workaround' 8068 Work around a bug in the `muls' and `mulu' instructions for CPU 8069 models where it applies. This option is active by default. 8070 8071`-mpdebug' 8072 Enable CRIS-specific verbose debug-related information in the 8073 assembly code. This option also has the effect to turn off the 8074 `#NO_APP' formatted-code indicator to the assembler at the 8075 beginning of the assembly file. 8076 8077`-mcc-init' 8078 Do not use condition-code results from previous instruction; 8079 always emit compare and test instructions before use of condition 8080 codes. 8081 8082`-mno-side-effects' 8083 Do not emit instructions with side-effects in addressing modes 8084 other than post-increment. 8085 8086`-mstack-align' 8087`-mno-stack-align' 8088`-mdata-align' 8089`-mno-data-align' 8090`-mconst-align' 8091`-mno-const-align' 8092 These options (no-options) arranges (eliminate arrangements) for 8093 the stack-frame, individual data and constants to be aligned for 8094 the maximum single data access size for the chosen CPU model. The 8095 default is to arrange for 32-bit alignment. ABI details such as 8096 structure layout are not affected by these options. 8097 8098`-m32-bit' 8099`-m16-bit' 8100`-m8-bit' 8101 Similar to the stack- data- and const-align options above, these 8102 options arrange for stack-frame, writable data and constants to 8103 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 8104 alignment. 8105 8106`-mno-prologue-epilogue' 8107`-mprologue-epilogue' 8108 With `-mno-prologue-epilogue', the normal function prologue and 8109 epilogue that sets up the stack-frame are omitted and no return 8110 instructions or return sequences are generated in the code. Use 8111 this option only together with visual inspection of the compiled 8112 code: no warnings or errors are generated when call-saved 8113 registers must be saved, or storage for local variable needs to be 8114 allocated. 8115 8116`-mno-gotplt' 8117`-mgotplt' 8118 With `-fpic' and `-fPIC', don't generate (do generate) instruction 8119 sequences that load addresses for functions from the PLT part of 8120 the GOT rather than (traditional on other architectures) calls to 8121 the PLT. The default is `-mgotplt'. 8122 8123`-maout' 8124 Legacy no-op option only recognized with the cris-axis-aout target. 8125 8126`-melf' 8127 Legacy no-op option only recognized with the cris-axis-elf and 8128 cris-axis-linux-gnu targets. 8129 8130`-melinux' 8131 Only recognized with the cris-axis-aout target, where it selects a 8132 GNU/linux-like multilib, include files and instruction set for 8133 `-march=v8'. 8134 8135`-mlinux' 8136 Legacy no-op option only recognized with the cris-axis-linux-gnu 8137 target. 8138 8139`-sim' 8140 This option, recognized for the cris-axis-aout and cris-axis-elf 8141 arranges to link with input-output functions from a simulator 8142 library. Code, initialized data and zero-initialized data are 8143 allocated consecutively. 8144 8145`-sim2' 8146 Like `-sim', but pass linker options to locate initialized data at 8147 0x40000000 and zero-initialized data at 0x80000000. 8148 8149 8150File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 8151 81523.17.6 CRX Options 8153------------------ 8154 8155These options are defined specifically for the CRX ports. 8156 8157`-mmac' 8158 Enable the use of multiply-accumulate instructions. Disabled by 8159 default. 8160 8161`-mpush-args' 8162 Push instructions will be used to pass outgoing arguments when 8163 functions are called. Enabled by default. 8164 8165 8166File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 8167 81683.17.7 Darwin Options 8169--------------------- 8170 8171These options are defined for all architectures running the Darwin 8172operating system. 8173 8174 FSF GCC on Darwin does not create "fat" object files; it will create 8175an object file for the single architecture that it was built to target. 8176Apple's GCC on Darwin does create "fat" files if multiple `-arch' 8177options are used; it does so by running the compiler or linker multiple 8178times and joining the results together with `lipo'. 8179 8180 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 8181is determined by the flags that specify the ISA that GCC is targetting, 8182like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 8183used to override this. 8184 8185 The Darwin tools vary in their behavior when presented with an ISA 8186mismatch. The assembler, `as', will only permit instructions to be 8187used that are valid for the subtype of the file it is generating, so 8188you cannot put 64-bit instructions in an `ppc750' object file. The 8189linker for shared libraries, `/usr/bin/libtool', will fail and print an 8190error if asked to create a shared library with a less restrictive 8191subtype than its input files (for instance, trying to put a `ppc970' 8192object file in a `ppc7400' library). The linker for executables, `ld', 8193will quietly give the executable the most restrictive subtype of any of 8194its input files. 8195 8196`-FDIR' 8197 Add the framework directory DIR to the head of the list of 8198 directories to be searched for header files. These directories are 8199 interleaved with those specified by `-I' options and are scanned 8200 in a left-to-right order. 8201 8202 A framework directory is a directory with frameworks in it. A 8203 framework is a directory with a `"Headers"' and/or 8204 `"PrivateHeaders"' directory contained directly in it that ends in 8205 `".framework"'. The name of a framework is the name of this 8206 directory excluding the `".framework"'. Headers associated with 8207 the framework are found in one of those two directories, with 8208 `"Headers"' being searched first. A subframework is a framework 8209 directory that is in a framework's `"Frameworks"' directory. 8210 Includes of subframework headers can only appear in a header of a 8211 framework that contains the subframework, or in a sibling 8212 subframework header. Two subframeworks are siblings if they occur 8213 in the same framework. A subframework should not have the same 8214 name as a framework, a warning will be issued if this is violated. 8215 Currently a subframework cannot have subframeworks, in the 8216 future, the mechanism may be extended to support this. The 8217 standard frameworks can be found in `"/System/Library/Frameworks"' 8218 and `"/Library/Frameworks"'. An example include looks like 8219 `#include <Framework/header.h>', where `Framework' denotes the 8220 name of the framework and header.h is found in the 8221 `"PrivateHeaders"' or `"Headers"' directory. 8222 8223`-gused' 8224 Emit debugging information for symbols that are used. For STABS 8225 debugging format, this enables `-feliminate-unused-debug-symbols'. 8226 This is by default ON. 8227 8228`-gfull' 8229 Emit debugging information for all symbols and types. 8230 8231`-mmacosx-version-min=VERSION' 8232 The earliest version of MacOS X that this executable will run on 8233 is VERSION. Typical values of VERSION include `10.1', `10.2', and 8234 `10.3.9'. 8235 8236 The default for this option is to make choices that seem to be most 8237 useful. 8238 8239`-mkernel' 8240 Enable kernel development mode. The `-mkernel' option sets 8241 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 8242 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 8243 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 8244 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 8245 targets. 8246 8247`-mone-byte-bool' 8248 Override the defaults for `bool' so that `sizeof(bool)==1'. By 8249 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 8250 and `1' when compiling for Darwin/x86, so this option has no 8251 effect on x86. 8252 8253 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 8254 code that is not binary compatible with code generated without 8255 that switch. Using this switch may require recompiling all other 8256 modules in a program, including system libraries. Use this switch 8257 to conform to a non-default data model. 8258 8259`-mfix-and-continue' 8260`-ffix-and-continue' 8261`-findirect-data' 8262 Generate code suitable for fast turn around development. Needed to 8263 enable gdb to dynamically load `.o' files into already running 8264 programs. `-findirect-data' and `-ffix-and-continue' are provided 8265 for backwards compatibility. 8266 8267`-all_load' 8268 Loads all members of static archive libraries. See man ld(1) for 8269 more information. 8270 8271`-arch_errors_fatal' 8272 Cause the errors having to do with files that have the wrong 8273 architecture to be fatal. 8274 8275`-bind_at_load' 8276 Causes the output file to be marked such that the dynamic linker 8277 will bind all undefined references when the file is loaded or 8278 launched. 8279 8280`-bundle' 8281 Produce a Mach-o bundle format file. See man ld(1) for more 8282 information. 8283 8284`-bundle_loader EXECUTABLE' 8285 This option specifies the EXECUTABLE that will be loading the build 8286 output file being linked. See man ld(1) for more information. 8287 8288`-dynamiclib' 8289 When passed this option, GCC will produce a dynamic library 8290 instead of an executable when linking, using the Darwin `libtool' 8291 command. 8292 8293`-force_cpusubtype_ALL' 8294 This causes GCC's output file to have the ALL subtype, instead of 8295 one controlled by the `-mcpu' or `-march' option. 8296 8297`-allowable_client CLIENT_NAME' 8298`-client_name' 8299`-compatibility_version' 8300`-current_version' 8301`-dead_strip' 8302`-dependency-file' 8303`-dylib_file' 8304`-dylinker_install_name' 8305`-dynamic' 8306`-exported_symbols_list' 8307`-filelist' 8308`-flat_namespace' 8309`-force_flat_namespace' 8310`-headerpad_max_install_names' 8311`-image_base' 8312`-init' 8313`-install_name' 8314`-keep_private_externs' 8315`-multi_module' 8316`-multiply_defined' 8317`-multiply_defined_unused' 8318`-noall_load' 8319`-no_dead_strip_inits_and_terms' 8320`-nofixprebinding' 8321`-nomultidefs' 8322`-noprebind' 8323`-noseglinkedit' 8324`-pagezero_size' 8325`-prebind' 8326`-prebind_all_twolevel_modules' 8327`-private_bundle' 8328`-read_only_relocs' 8329`-sectalign' 8330`-sectobjectsymbols' 8331`-whyload' 8332`-seg1addr' 8333`-sectcreate' 8334`-sectobjectsymbols' 8335`-sectorder' 8336`-segaddr' 8337`-segs_read_only_addr' 8338`-segs_read_write_addr' 8339`-seg_addr_table' 8340`-seg_addr_table_filename' 8341`-seglinkedit' 8342`-segprot' 8343`-segs_read_only_addr' 8344`-segs_read_write_addr' 8345`-single_module' 8346`-static' 8347`-sub_library' 8348`-sub_umbrella' 8349`-twolevel_namespace' 8350`-umbrella' 8351`-undefined' 8352`-unexported_symbols_list' 8353`-weak_reference_mismatches' 8354`-whatsloaded' 8355 These options are passed to the Darwin linker. The Darwin linker 8356 man page describes them in detail. 8357 8358 8359File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 8360 83613.17.8 DEC Alpha Options 8362------------------------ 8363 8364These `-m' options are defined for the DEC Alpha implementations: 8365 8366`-mno-soft-float' 8367`-msoft-float' 8368 Use (do not use) the hardware floating-point instructions for 8369 floating-point operations. When `-msoft-float' is specified, 8370 functions in `libgcc.a' will be used to perform floating-point 8371 operations. Unless they are replaced by routines that emulate the 8372 floating-point operations, or compiled in such a way as to call 8373 such emulations routines, these routines will issue floating-point 8374 operations. If you are compiling for an Alpha without 8375 floating-point operations, you must ensure that the library is 8376 built so as not to call them. 8377 8378 Note that Alpha implementations without floating-point operations 8379 are required to have floating-point registers. 8380 8381`-mfp-reg' 8382`-mno-fp-regs' 8383 Generate code that uses (does not use) the floating-point register 8384 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 8385 register set is not used, floating point operands are passed in 8386 integer registers as if they were integers and floating-point 8387 results are passed in `$0' instead of `$f0'. This is a 8388 non-standard calling sequence, so any function with a 8389 floating-point argument or return value called by code compiled 8390 with `-mno-fp-regs' must also be compiled with that option. 8391 8392 A typical use of this option is building a kernel that does not 8393 use, and hence need not save and restore, any floating-point 8394 registers. 8395 8396`-mieee' 8397 The Alpha architecture implements floating-point hardware 8398 optimized for maximum performance. It is mostly compliant with 8399 the IEEE floating point standard. However, for full compliance, 8400 software assistance is required. This option generates code fully 8401 IEEE compliant code _except_ that the INEXACT-FLAG is not 8402 maintained (see below). If this option is turned on, the 8403 preprocessor macro `_IEEE_FP' is defined during compilation. The 8404 resulting code is less efficient but is able to correctly support 8405 denormalized numbers and exceptional IEEE values such as 8406 not-a-number and plus/minus infinity. Other Alpha compilers call 8407 this option `-ieee_with_no_inexact'. 8408 8409`-mieee-with-inexact' 8410 This is like `-mieee' except the generated code also maintains the 8411 IEEE INEXACT-FLAG. Turning on this option causes the generated 8412 code to implement fully-compliant IEEE math. In addition to 8413 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 8414 On some Alpha implementations the resulting code may execute 8415 significantly slower than the code generated by default. Since 8416 there is very little code that depends on the INEXACT-FLAG, you 8417 should normally not specify this option. Other Alpha compilers 8418 call this option `-ieee_with_inexact'. 8419 8420`-mfp-trap-mode=TRAP-MODE' 8421 This option controls what floating-point related traps are enabled. 8422 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 8423 trap mode can be set to one of four values: 8424 8425 `n' 8426 This is the default (normal) setting. The only traps that 8427 are enabled are the ones that cannot be disabled in software 8428 (e.g., division by zero trap). 8429 8430 `u' 8431 In addition to the traps enabled by `n', underflow traps are 8432 enabled as well. 8433 8434 `su' 8435 Like `u', but the instructions are marked to be safe for 8436 software completion (see Alpha architecture manual for 8437 details). 8438 8439 `sui' 8440 Like `su', but inexact traps are enabled as well. 8441 8442`-mfp-rounding-mode=ROUNDING-MODE' 8443 Selects the IEEE rounding mode. Other Alpha compilers call this 8444 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 8445 8446 `n' 8447 Normal IEEE rounding mode. Floating point numbers are 8448 rounded towards the nearest machine number or towards the 8449 even machine number in case of a tie. 8450 8451 `m' 8452 Round towards minus infinity. 8453 8454 `c' 8455 Chopped rounding mode. Floating point numbers are rounded 8456 towards zero. 8457 8458 `d' 8459 Dynamic rounding mode. A field in the floating point control 8460 register (FPCR, see Alpha architecture reference manual) 8461 controls the rounding mode in effect. The C library 8462 initializes this register for rounding towards plus infinity. 8463 Thus, unless your program modifies the FPCR, `d' corresponds 8464 to round towards plus infinity. 8465 8466`-mtrap-precision=TRAP-PRECISION' 8467 In the Alpha architecture, floating point traps are imprecise. 8468 This means without software assistance it is impossible to recover 8469 from a floating trap and program execution normally needs to be 8470 terminated. GCC can generate code that can assist operating 8471 system trap handlers in determining the exact location that caused 8472 a floating point trap. Depending on the requirements of an 8473 application, different levels of precisions can be selected: 8474 8475 `p' 8476 Program precision. This option is the default and means a 8477 trap handler can only identify which program caused a 8478 floating point exception. 8479 8480 `f' 8481 Function precision. The trap handler can determine the 8482 function that caused a floating point exception. 8483 8484 `i' 8485 Instruction precision. The trap handler can determine the 8486 exact instruction that caused a floating point exception. 8487 8488 Other Alpha compilers provide the equivalent options called 8489 `-scope_safe' and `-resumption_safe'. 8490 8491`-mieee-conformant' 8492 This option marks the generated code as IEEE conformant. You must 8493 not use this option unless you also specify `-mtrap-precision=i' 8494 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 8495 effect is to emit the line `.eflag 48' in the function prologue of 8496 the generated assembly file. Under DEC Unix, this has the effect 8497 that IEEE-conformant math library routines will be linked in. 8498 8499`-mbuild-constants' 8500 Normally GCC examines a 32- or 64-bit integer constant to see if 8501 it can construct it from smaller constants in two or three 8502 instructions. If it cannot, it will output the constant as a 8503 literal and generate code to load it from the data segment at 8504 runtime. 8505 8506 Use this option to require GCC to construct _all_ integer constants 8507 using code, even if it takes more instructions (the maximum is 8508 six). 8509 8510 You would typically use this option to build a shared library 8511 dynamic loader. Itself a shared library, it must relocate itself 8512 in memory before it can find the variables and constants in its 8513 own data segment. 8514 8515`-malpha-as' 8516`-mgas' 8517 Select whether to generate code to be assembled by the 8518 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 8519 `-mgas'. 8520 8521`-mbwx' 8522`-mno-bwx' 8523`-mcix' 8524`-mno-cix' 8525`-mfix' 8526`-mno-fix' 8527`-mmax' 8528`-mno-max' 8529 Indicate whether GCC should generate code to use the optional BWX, 8530 CIX, FIX and MAX instruction sets. The default is to use the 8531 instruction sets supported by the CPU type specified via `-mcpu=' 8532 option or that of the CPU on which GCC was built if none was 8533 specified. 8534 8535`-mfloat-vax' 8536`-mfloat-ieee' 8537 Generate code that uses (does not use) VAX F and G floating point 8538 arithmetic instead of IEEE single and double precision. 8539 8540`-mexplicit-relocs' 8541`-mno-explicit-relocs' 8542 Older Alpha assemblers provided no way to generate symbol 8543 relocations except via assembler macros. Use of these macros does 8544 not allow optimal instruction scheduling. GNU binutils as of 8545 version 2.12 supports a new syntax that allows the compiler to 8546 explicitly mark which relocations should apply to which 8547 instructions. This option is mostly useful for debugging, as GCC 8548 detects the capabilities of the assembler when it is built and 8549 sets the default accordingly. 8550 8551`-msmall-data' 8552`-mlarge-data' 8553 When `-mexplicit-relocs' is in effect, static data is accessed via 8554 "gp-relative" relocations. When `-msmall-data' is used, objects 8 8555 bytes long or smaller are placed in a "small data area" (the 8556 `.sdata' and `.sbss' sections) and are accessed via 16-bit 8557 relocations off of the `$gp' register. This limits the size of 8558 the small data area to 64KB, but allows the variables to be 8559 directly accessed via a single instruction. 8560 8561 The default is `-mlarge-data'. With this option the data area is 8562 limited to just below 2GB. Programs that require more than 2GB of 8563 data must use `malloc' or `mmap' to allocate the data in the heap 8564 instead of in the program's data segment. 8565 8566 When generating code for shared libraries, `-fpic' implies 8567 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 8568 8569`-msmall-text' 8570`-mlarge-text' 8571 When `-msmall-text' is used, the compiler assumes that the code of 8572 the entire program (or shared library) fits in 4MB, and is thus 8573 reachable with a branch instruction. When `-msmall-data' is used, 8574 the compiler can assume that all local symbols share the same 8575 `$gp' value, and thus reduce the number of instructions required 8576 for a function call from 4 to 1. 8577 8578 The default is `-mlarge-text'. 8579 8580`-mcpu=CPU_TYPE' 8581 Set the instruction set and instruction scheduling parameters for 8582 machine type CPU_TYPE. You can specify either the `EV' style name 8583 or the corresponding chip number. GCC supports scheduling 8584 parameters for the EV4, EV5 and EV6 family of processors and will 8585 choose the default values for the instruction set from the 8586 processor you specify. If you do not specify a processor type, 8587 GCC will default to the processor on which the compiler was built. 8588 8589 Supported values for CPU_TYPE are 8590 8591 `ev4' 8592 `ev45' 8593 `21064' 8594 Schedules as an EV4 and has no instruction set extensions. 8595 8596 `ev5' 8597 `21164' 8598 Schedules as an EV5 and has no instruction set extensions. 8599 8600 `ev56' 8601 `21164a' 8602 Schedules as an EV5 and supports the BWX extension. 8603 8604 `pca56' 8605 `21164pc' 8606 `21164PC' 8607 Schedules as an EV5 and supports the BWX and MAX extensions. 8608 8609 `ev6' 8610 `21264' 8611 Schedules as an EV6 and supports the BWX, FIX, and MAX 8612 extensions. 8613 8614 `ev67' 8615 `21264a' 8616 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 8617 extensions. 8618 8619`-mtune=CPU_TYPE' 8620 Set only the instruction scheduling parameters for machine type 8621 CPU_TYPE. The instruction set is not changed. 8622 8623`-mmemory-latency=TIME' 8624 Sets the latency the scheduler should assume for typical memory 8625 references as seen by the application. This number is highly 8626 dependent on the memory access patterns used by the application 8627 and the size of the external cache on the machine. 8628 8629 Valid options for TIME are 8630 8631 `NUMBER' 8632 A decimal number representing clock cycles. 8633 8634 `L1' 8635 `L2' 8636 `L3' 8637 `main' 8638 The compiler contains estimates of the number of clock cycles 8639 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 8640 (also called Dcache, Scache, and Bcache), as well as to main 8641 memory. Note that L3 is only valid for EV5. 8642 8643 8644 8645File: gcc.info, Node: DEC Alpha/VMS Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 8646 86473.17.9 DEC Alpha/VMS Options 8648---------------------------- 8649 8650These `-m' options are defined for the DEC Alpha/VMS implementations: 8651 8652`-mvms-return-codes' 8653 Return VMS condition codes from main. The default is to return 8654 POSIX style condition (e.g. error) codes. 8655 8656 8657File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 8658 86593.17.10 FRV Options 8660------------------- 8661 8662`-mgpr-32' 8663 Only use the first 32 general purpose registers. 8664 8665`-mgpr-64' 8666 Use all 64 general purpose registers. 8667 8668`-mfpr-32' 8669 Use only the first 32 floating point registers. 8670 8671`-mfpr-64' 8672 Use all 64 floating point registers 8673 8674`-mhard-float' 8675 Use hardware instructions for floating point operations. 8676 8677`-msoft-float' 8678 Use library routines for floating point operations. 8679 8680`-malloc-cc' 8681 Dynamically allocate condition code registers. 8682 8683`-mfixed-cc' 8684 Do not try to dynamically allocate condition code registers, only 8685 use `icc0' and `fcc0'. 8686 8687`-mdword' 8688 Change ABI to use double word insns. 8689 8690`-mno-dword' 8691 Do not use double word instructions. 8692 8693`-mdouble' 8694 Use floating point double instructions. 8695 8696`-mno-double' 8697 Do not use floating point double instructions. 8698 8699`-mmedia' 8700 Use media instructions. 8701 8702`-mno-media' 8703 Do not use media instructions. 8704 8705`-mmuladd' 8706 Use multiply and add/subtract instructions. 8707 8708`-mno-muladd' 8709 Do not use multiply and add/subtract instructions. 8710 8711`-mfdpic' 8712 Select the FDPIC ABI, that uses function descriptors to represent 8713 pointers to functions. Without any PIC/PIE-related options, it 8714 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 8715 and small data are within a 12-bit range from the GOT base 8716 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 8717 bits. 8718 8719`-minline-plt' 8720 Enable inlining of PLT entries in function calls to functions that 8721 are not known to bind locally. It has no effect without `-mfdpic'. 8722 It's enabled by default if optimizing for speed and compiling for 8723 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 8724 optimization option such as `-O3' or above is present in the 8725 command line. 8726 8727`-mTLS' 8728 Assume a large TLS segment when generating thread-local code. 8729 8730`-mtls' 8731 Do not assume a large TLS segment when generating thread-local 8732 code. 8733 8734`-mgprel-ro' 8735 Enable the use of `GPREL' relocations in the FDPIC ABI for data 8736 that is known to be in read-only sections. It's enabled by 8737 default, except for `-fpic' or `-fpie': even though it may help 8738 make the global offset table smaller, it trades 1 instruction for 8739 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 8740 of which may be shared by multiple symbols, and it avoids the need 8741 for a GOT entry for the referenced symbol, so it's more likely to 8742 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 8743 8744`-multilib-library-pic' 8745 Link with the (library, not FD) pic libraries. It's implied by 8746 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 8747 `-mfdpic'. You should never have to use it explicitly. 8748 8749`-mlinked-fp' 8750 Follow the EABI requirement of always creating a frame pointer 8751 whenever a stack frame is allocated. This option is enabled by 8752 default and can be disabled with `-mno-linked-fp'. 8753 8754`-mlong-calls' 8755 Use indirect addressing to call functions outside the current 8756 compilation unit. This allows the functions to be placed anywhere 8757 within the 32-bit address space. 8758 8759`-malign-labels' 8760 Try to align labels to an 8-byte boundary by inserting nops into 8761 the previous packet. This option only has an effect when VLIW 8762 packing is enabled. It doesn't create new packets; it merely adds 8763 nops to existing ones. 8764 8765`-mlibrary-pic' 8766 Generate position-independent EABI code. 8767 8768`-macc-4' 8769 Use only the first four media accumulator registers. 8770 8771`-macc-8' 8772 Use all eight media accumulator registers. 8773 8774`-mpack' 8775 Pack VLIW instructions. 8776 8777`-mno-pack' 8778 Do not pack VLIW instructions. 8779 8780`-mno-eflags' 8781 Do not mark ABI switches in e_flags. 8782 8783`-mcond-move' 8784 Enable the use of conditional-move instructions (default). 8785 8786 This switch is mainly for debugging the compiler and will likely 8787 be removed in a future version. 8788 8789`-mno-cond-move' 8790 Disable the use of conditional-move instructions. 8791 8792 This switch is mainly for debugging the compiler and will likely 8793 be removed in a future version. 8794 8795`-mscc' 8796 Enable the use of conditional set instructions (default). 8797 8798 This switch is mainly for debugging the compiler and will likely 8799 be removed in a future version. 8800 8801`-mno-scc' 8802 Disable the use of conditional set instructions. 8803 8804 This switch is mainly for debugging the compiler and will likely 8805 be removed in a future version. 8806 8807`-mcond-exec' 8808 Enable the use of conditional execution (default). 8809 8810 This switch is mainly for debugging the compiler and will likely 8811 be removed in a future version. 8812 8813`-mno-cond-exec' 8814 Disable the use of conditional execution. 8815 8816 This switch is mainly for debugging the compiler and will likely 8817 be removed in a future version. 8818 8819`-mvliw-branch' 8820 Run a pass to pack branches into VLIW instructions (default). 8821 8822 This switch is mainly for debugging the compiler and will likely 8823 be removed in a future version. 8824 8825`-mno-vliw-branch' 8826 Do not run a pass to pack branches into VLIW instructions. 8827 8828 This switch is mainly for debugging the compiler and will likely 8829 be removed in a future version. 8830 8831`-mmulti-cond-exec' 8832 Enable optimization of `&&' and `||' in conditional execution 8833 (default). 8834 8835 This switch is mainly for debugging the compiler and will likely 8836 be removed in a future version. 8837 8838`-mno-multi-cond-exec' 8839 Disable optimization of `&&' and `||' in conditional execution. 8840 8841 This switch is mainly for debugging the compiler and will likely 8842 be removed in a future version. 8843 8844`-mnested-cond-exec' 8845 Enable nested conditional execution optimizations (default). 8846 8847 This switch is mainly for debugging the compiler and will likely 8848 be removed in a future version. 8849 8850`-mno-nested-cond-exec' 8851 Disable nested conditional execution optimizations. 8852 8853 This switch is mainly for debugging the compiler and will likely 8854 be removed in a future version. 8855 8856`-moptimize-membar' 8857 This switch removes redundant `membar' instructions from the 8858 compiler generated code. It is enabled by default. 8859 8860`-mno-optimize-membar' 8861 This switch disables the automatic removal of redundant `membar' 8862 instructions from the generated code. 8863 8864`-mtomcat-stats' 8865 Cause gas to print out tomcat statistics. 8866 8867`-mcpu=CPU' 8868 Select the processor type for which to generate code. Possible 8869 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 8870 `fr400', `fr300' and `simple'. 8871 8872 8873 8874File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 8875 88763.17.11 GNU/Linux Options 8877------------------------- 8878 8879These `-m' options are defined for GNU/Linux targets: 8880 8881`-mglibc' 8882 Use the GNU C library instead of uClibc. This is the default 8883 except on `*-*-linux-*uclibc*' targets. 8884 8885`-muclibc' 8886 Use uClibc instead of the GNU C library. This is the default on 8887 `*-*-linux-*uclibc*' targets. 8888 8889 8890File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 8891 88923.17.12 H8/300 Options 8893---------------------- 8894 8895These `-m' options are defined for the H8/300 implementations: 8896 8897`-mrelax' 8898 Shorten some address references at link time, when possible; uses 8899 the linker option `-relax'. *Note `ld' and the H8/300: 8900 (ld)H8/300, for a fuller description. 8901 8902`-mh' 8903 Generate code for the H8/300H. 8904 8905`-ms' 8906 Generate code for the H8S. 8907 8908`-mn' 8909 Generate code for the H8S and H8/300H in the normal mode. This 8910 switch must be used either with `-mh' or `-ms'. 8911 8912`-ms2600' 8913 Generate code for the H8S/2600. This switch must be used with 8914 `-ms'. 8915 8916`-mint32' 8917 Make `int' data 32 bits by default. 8918 8919`-malign-300' 8920 On the H8/300H and H8S, use the same alignment rules as for the 8921 H8/300. The default for the H8/300H and H8S is to align longs and 8922 floats on 4 byte boundaries. `-malign-300' causes them to be 8923 aligned on 2 byte boundaries. This option has no effect on the 8924 H8/300. 8925 8926 8927File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 8928 89293.17.13 HPPA Options 8930-------------------- 8931 8932These `-m' options are defined for the HPPA family of computers: 8933 8934`-march=ARCHITECTURE-TYPE' 8935 Generate code for the specified architecture. The choices for 8936 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 8937 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 8938 an HP-UX system to determine the proper architecture option for 8939 your machine. Code compiled for lower numbered architectures will 8940 run on higher numbered architectures, but not the other way around. 8941 8942`-mpa-risc-1-0' 8943`-mpa-risc-1-1' 8944`-mpa-risc-2-0' 8945 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 8946 respectively. 8947 8948`-mbig-switch' 8949 Generate code suitable for big switch tables. Use this option 8950 only if the assembler/linker complain about out of range branches 8951 within a switch table. 8952 8953`-mjump-in-delay' 8954 Fill delay slots of function calls with unconditional jump 8955 instructions by modifying the return pointer for the function call 8956 to be the target of the conditional jump. 8957 8958`-mdisable-fpregs' 8959 Prevent floating point registers from being used in any manner. 8960 This is necessary for compiling kernels which perform lazy context 8961 switching of floating point registers. If you use this option and 8962 attempt to perform floating point operations, the compiler will 8963 abort. 8964 8965`-mdisable-indexing' 8966 Prevent the compiler from using indexing address modes. This 8967 avoids some rather obscure problems when compiling MIG generated 8968 code under MACH. 8969 8970`-mno-space-regs' 8971 Generate code that assumes the target has no space registers. 8972 This allows GCC to generate faster indirect calls and use unscaled 8973 index address modes. 8974 8975 Such code is suitable for level 0 PA systems and kernels. 8976 8977`-mfast-indirect-calls' 8978 Generate code that assumes calls never cross space boundaries. 8979 This allows GCC to emit code which performs faster indirect calls. 8980 8981 This option will not work in the presence of shared libraries or 8982 nested functions. 8983 8984`-mfixed-range=REGISTER-RANGE' 8985 Generate code treating the given register range as fixed registers. 8986 A fixed register is one that the register allocator can not use. 8987 This is useful when compiling kernel code. A register range is 8988 specified as two registers separated by a dash. Multiple register 8989 ranges can be specified separated by a comma. 8990 8991`-mlong-load-store' 8992 Generate 3-instruction load and store sequences as sometimes 8993 required by the HP-UX 10 linker. This is equivalent to the `+k' 8994 option to the HP compilers. 8995 8996`-mportable-runtime' 8997 Use the portable calling conventions proposed by HP for ELF 8998 systems. 8999 9000`-mgas' 9001 Enable the use of assembler directives only GAS understands. 9002 9003`-mschedule=CPU-TYPE' 9004 Schedule code according to the constraints for the machine type 9005 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 9006 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 9007 HP-UX system to determine the proper scheduling option for your 9008 machine. The default scheduling is `8000'. 9009 9010`-mlinker-opt' 9011 Enable the optimization pass in the HP-UX linker. Note this makes 9012 symbolic debugging impossible. It also triggers a bug in the 9013 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 9014 messages when linking some programs. 9015 9016`-msoft-float' 9017 Generate output containing library calls for floating point. 9018 *Warning:* the requisite libraries are not available for all HPPA 9019 targets. Normally the facilities of the machine's usual C 9020 compiler are used, but this cannot be done directly in 9021 cross-compilation. You must make your own arrangements to provide 9022 suitable library functions for cross-compilation. The embedded 9023 target `hppa1.1-*-pro' does provide software floating point 9024 support. 9025 9026 `-msoft-float' changes the calling convention in the output file; 9027 therefore, it is only useful if you compile _all_ of a program with 9028 this option. In particular, you need to compile `libgcc.a', the 9029 library that comes with GCC, with `-msoft-float' in order for this 9030 to work. 9031 9032`-msio' 9033 Generate the predefine, `_SIO', for server IO. The default is 9034 `-mwsio'. This generates the predefines, `__hp9000s700', 9035 `__hp9000s700__' and `_WSIO', for workstation IO. These options 9036 are available under HP-UX and HI-UX. 9037 9038`-mgnu-ld' 9039 Use GNU ld specific options. This passes `-shared' to ld when 9040 building a shared library. It is the default when GCC is 9041 configured, explicitly or implicitly, with the GNU linker. This 9042 option does not have any affect on which ld is called, it only 9043 changes what parameters are passed to that ld. The ld that is 9044 called is determined by the `--with-ld' configure option, GCC's 9045 program search path, and finally by the user's `PATH'. The linker 9046 used by GCC can be printed using `which `gcc 9047 -print-prog-name=ld`'. This option is only available on the 64 9048 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 9049 9050`-mhp-ld' 9051 Use HP ld specific options. This passes `-b' to ld when building 9052 a shared library and passes `+Accept TypeMismatch' to ld on all 9053 links. It is the default when GCC is configured, explicitly or 9054 implicitly, with the HP linker. This option does not have any 9055 affect on which ld is called, it only changes what parameters are 9056 passed to that ld. The ld that is called is determined by the 9057 `--with-ld' configure option, GCC's program search path, and 9058 finally by the user's `PATH'. The linker used by GCC can be 9059 printed using `which `gcc -print-prog-name=ld`'. This option is 9060 only available on the 64 bit HP-UX GCC, i.e. configured with 9061 `hppa*64*-*-hpux*'. 9062 9063`-mlong-calls' 9064 Generate code that uses long call sequences. This ensures that a 9065 call is always able to reach linker generated stubs. The default 9066 is to generate long calls only when the distance from the call 9067 site to the beginning of the function or translation unit, as the 9068 case may be, exceeds a predefined limit set by the branch type 9069 being used. The limits for normal calls are 7,600,000 and 240,000 9070 bytes, respectively for the PA 2.0 and PA 1.X architectures. 9071 Sibcalls are always limited at 240,000 bytes. 9072 9073 Distances are measured from the beginning of functions when using 9074 the `-ffunction-sections' option, or when using the `-mgas' and 9075 `-mno-portable-runtime' options together under HP-UX with the SOM 9076 linker. 9077 9078 It is normally not desirable to use this option as it will degrade 9079 performance. However, it may be useful in large applications, 9080 particularly when partial linking is used to build the application. 9081 9082 The types of long calls used depends on the capabilities of the 9083 assembler and linker, and the type of code being generated. The 9084 impact on systems that support long absolute calls, and long pic 9085 symbol-difference or pc-relative calls should be relatively small. 9086 However, an indirect call is used on 32-bit ELF systems in pic code 9087 and it is quite long. 9088 9089`-munix=UNIX-STD' 9090 Generate compiler predefines and select a startfile for the 9091 specified UNIX standard. The choices for UNIX-STD are `93', `95' 9092 and `98'. `93' is supported on all HP-UX versions. `95' is 9093 available on HP-UX 10.10 and later. `98' is available on HP-UX 9094 11.11 and later. The default values are `93' for HP-UX 10.00, 9095 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 9096 later. 9097 9098 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 9099 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 9100 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 9101 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 9102 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 9103 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 9104 9105 It is _important_ to note that this option changes the interfaces 9106 for various library routines. It also affects the operational 9107 behavior of the C library. Thus, _extreme_ care is needed in 9108 using this option. 9109 9110 Library code that is intended to operate with more than one UNIX 9111 standard must test, set and restore the variable 9112 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 9113 provide this capability. 9114 9115`-nolibdld' 9116 Suppress the generation of link options to search libdld.sl when 9117 the `-static' option is specified on HP-UX 10 and later. 9118 9119`-static' 9120 The HP-UX implementation of setlocale in libc has a dependency on 9121 libdld.sl. There isn't an archive version of libdld.sl. Thus, 9122 when the `-static' option is specified, special link options are 9123 needed to resolve this dependency. 9124 9125 On HP-UX 10 and later, the GCC driver adds the necessary options to 9126 link with libdld.sl when the `-static' option is specified. This 9127 causes the resulting binary to be dynamic. On the 64-bit port, 9128 the linkers generate dynamic binaries by default in any case. The 9129 `-nolibdld' option can be used to prevent the GCC driver from 9130 adding these link options. 9131 9132`-threads' 9133 Add support for multithreading with the "dce thread" library under 9134 HP-UX. This option sets flags for both the preprocessor and 9135 linker. 9136 9137 9138File: gcc.info, Node: i386 and x86-64 Options, Next: IA-64 Options, Prev: HPPA Options, Up: Submodel Options 9139 91403.17.14 Intel 386 and AMD x86-64 Options 9141---------------------------------------- 9142 9143These `-m' options are defined for the i386 and x86-64 family of 9144computers: 9145 9146`-mtune=CPU-TYPE' 9147 Tune to CPU-TYPE everything applicable about the generated code, 9148 except for the ABI and the set of available instructions. The 9149 choices for CPU-TYPE are: 9150 _generic_ 9151 Produce code optimized for the most common IA32/AMD64/EM64T 9152 processors. If you know the CPU on which your code will run, 9153 then you should use the corresponding `-mtune' option instead 9154 of `-mtune=generic'. But, if you do not know exactly what 9155 CPU users of your application will have, then you should use 9156 this option. 9157 9158 As new processors are deployed in the marketplace, the 9159 behavior of this option will change. Therefore, if you 9160 upgrade to a newer version of GCC, the code generated option 9161 will change to reflect the processors that were most common 9162 when that version of GCC was released. 9163 9164 There is no `-march=generic' option because `-march' 9165 indicates the instruction set the compiler can use, and there 9166 is no generic instruction set applicable to all processors. 9167 In contrast, `-mtune' indicates the processor (or, in this 9168 case, collection of processors) for which the code is 9169 optimized. 9170 9171 _native_ 9172 This selects the CPU to tune for at compilation time by 9173 determining the processor type of the compiling machine. 9174 Using `-mtune=native' will produce code optimized for the 9175 local machine under the constraints of the selected 9176 instruction set. Using `-march=native' will enable all 9177 instruction subsets supported by the local machine (hence the 9178 result might not run on different machines). 9179 9180 _i386_ 9181 Original Intel's i386 CPU. 9182 9183 _i486_ 9184 Intel's i486 CPU. (No scheduling is implemented for this 9185 chip.) 9186 9187 _i586, pentium_ 9188 Intel Pentium CPU with no MMX support. 9189 9190 _pentium-mmx_ 9191 Intel PentiumMMX CPU based on Pentium core with MMX 9192 instruction set support. 9193 9194 _pentiumpro_ 9195 Intel PentiumPro CPU. 9196 9197 _i686_ 9198 Same as `generic', but when used as `march' option, PentiumPro 9199 instruction set will be used, so the code will run on all 9200 i686 family chips. 9201 9202 _pentium2_ 9203 Intel Pentium2 CPU based on PentiumPro core with MMX 9204 instruction set support. 9205 9206 _pentium3, pentium3m_ 9207 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 9208 instruction set support. 9209 9210 _pentium-m_ 9211 Low power version of Intel Pentium3 CPU with MMX, SSE and 9212 SSE2 instruction set support. Used by Centrino notebooks. 9213 9214 _pentium4, pentium4m_ 9215 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 9216 support. 9217 9218 _prescott_ 9219 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 9220 and SSE3 instruction set support. 9221 9222 _nocona_ 9223 Improved version of Intel Pentium4 CPU with 64-bit 9224 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 9225 9226 _k6_ 9227 AMD K6 CPU with MMX instruction set support. 9228 9229 _k6-2, k6-3_ 9230 Improved versions of AMD K6 CPU with MMX and 3dNOW! 9231 instruction set support. 9232 9233 _athlon, athlon-tbird_ 9234 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE 9235 prefetch instructions support. 9236 9237 _athlon-4, athlon-xp, athlon-mp_ 9238 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and 9239 full SSE instruction set support. 9240 9241 _k8, opteron, athlon64, athlon-fx_ 9242 AMD K8 core based CPUs with x86-64 instruction set support. 9243 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 9244 64-bit instruction set extensions.) 9245 9246 _winchip-c6_ 9247 IDT Winchip C6 CPU, dealt in same way as i486 with additional 9248 MMX instruction set support. 9249 9250 _winchip2_ 9251 IDT Winchip2 CPU, dealt in same way as i486 with additional 9252 MMX and 3dNOW! instruction set support. 9253 9254 _c3_ 9255 Via C3 CPU with MMX and 3dNOW! instruction set support. (No 9256 scheduling is implemented for this chip.) 9257 9258 _c3-2_ 9259 Via C3-2 CPU with MMX and SSE instruction set support. (No 9260 scheduling is implemented for this chip.) 9261 9262 While picking a specific CPU-TYPE will schedule things 9263 appropriately for that particular chip, the compiler will not 9264 generate any code that does not run on the i386 without the 9265 `-march=CPU-TYPE' option being used. 9266 9267`-march=CPU-TYPE' 9268 Generate instructions for the machine type CPU-TYPE. The choices 9269 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 9270 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 9271 9272`-mcpu=CPU-TYPE' 9273 A deprecated synonym for `-mtune'. 9274 9275`-m386' 9276`-m486' 9277`-mpentium' 9278`-mpentiumpro' 9279 These options are synonyms for `-mtune=i386', `-mtune=i486', 9280 `-mtune=pentium', and `-mtune=pentiumpro' respectively. These 9281 synonyms are deprecated. 9282 9283`-mfpmath=UNIT' 9284 Generate floating point arithmetics for selected unit UNIT. The 9285 choices for UNIT are: 9286 9287 `387' 9288 Use the standard 387 floating point coprocessor present 9289 majority of chips and emulated otherwise. Code compiled with 9290 this option will run almost everywhere. The temporary 9291 results are computed in 80bit precision instead of precision 9292 specified by the type resulting in slightly different results 9293 compared to most of other chips. See `-ffloat-store' for 9294 more detailed description. 9295 9296 This is the default choice for i386 compiler. 9297 9298 `sse' 9299 Use scalar floating point instructions present in the SSE 9300 instruction set. This instruction set is supported by 9301 Pentium3 and newer chips, in the AMD line by Athlon-4, 9302 Athlon-xp and Athlon-mp chips. The earlier version of SSE 9303 instruction set supports only single precision arithmetics, 9304 thus the double and extended precision arithmetics is still 9305 done using 387. Later version, present only in Pentium4 and 9306 the future AMD x86-64 chips supports double precision 9307 arithmetics too. 9308 9309 For the i386 compiler, you need to use `-march=CPU-TYPE', 9310 `-msse' or `-msse2' switches to enable SSE extensions and 9311 make this option effective. For the x86-64 compiler, these 9312 extensions are enabled by default. 9313 9314 The resulting code should be considerably faster in the 9315 majority of cases and avoid the numerical instability 9316 problems of 387 code, but may break some existing code that 9317 expects temporaries to be 80bit. 9318 9319 This is the default choice for the x86-64 compiler. 9320 9321 `sse,387' 9322 Attempt to utilize both instruction sets at once. This 9323 effectively double the amount of available registers and on 9324 chips with separate execution units for 387 and SSE the 9325 execution resources too. Use this option with care, as it is 9326 still experimental, because the GCC register allocator does 9327 not model separate functional units well resulting in 9328 instable performance. 9329 9330`-masm=DIALECT' 9331 Output asm instructions using selected DIALECT. Supported choices 9332 are `intel' or `att' (the default one). Darwin does not support 9333 `intel'. 9334 9335`-mieee-fp' 9336`-mno-ieee-fp' 9337 Control whether or not the compiler uses IEEE floating point 9338 comparisons. These handle correctly the case where the result of a 9339 comparison is unordered. 9340 9341`-msoft-float' 9342 Generate output containing library calls for floating point. 9343 *Warning:* the requisite libraries are not part of GCC. Normally 9344 the facilities of the machine's usual C compiler are used, but 9345 this can't be done directly in cross-compilation. You must make 9346 your own arrangements to provide suitable library functions for 9347 cross-compilation. 9348 9349 On machines where a function returns floating point results in the 9350 80387 register stack, some floating point opcodes may be emitted 9351 even if `-msoft-float' is used. 9352 9353`-mno-fp-ret-in-387' 9354 Do not use the FPU registers for return values of functions. 9355 9356 The usual calling convention has functions return values of types 9357 `float' and `double' in an FPU register, even if there is no FPU. 9358 The idea is that the operating system should emulate an FPU. 9359 9360 The option `-mno-fp-ret-in-387' causes such values to be returned 9361 in ordinary CPU registers instead. 9362 9363`-mno-fancy-math-387' 9364 Some 387 emulators do not support the `sin', `cos' and `sqrt' 9365 instructions for the 387. Specify this option to avoid generating 9366 those instructions. This option is the default on FreeBSD, 9367 OpenBSD and NetBSD. This option is overridden when `-march' 9368 indicates that the target cpu will always have an FPU and so the 9369 instruction will not need emulation. As of revision 2.6.1, these 9370 instructions are not generated unless you also use the 9371 `-funsafe-math-optimizations' switch. 9372 9373`-malign-double' 9374`-mno-align-double' 9375 Control whether GCC aligns `double', `long double', and `long 9376 long' variables on a two word boundary or a one word boundary. 9377 Aligning `double' variables on a two word boundary will produce 9378 code that runs somewhat faster on a `Pentium' at the expense of 9379 more memory. 9380 9381 On x86-64, `-malign-double' is enabled by default. 9382 9383 *Warning:* if you use the `-malign-double' switch, structures 9384 containing the above types will be aligned differently than the 9385 published application binary interface specifications for the 386 9386 and will not be binary compatible with structures in code compiled 9387 without that switch. 9388 9389`-m96bit-long-double' 9390`-m128bit-long-double' 9391 These switches control the size of `long double' type. The i386 9392 application binary interface specifies the size to be 96 bits, so 9393 `-m96bit-long-double' is the default in 32 bit mode. 9394 9395 Modern architectures (Pentium and newer) would prefer `long double' 9396 to be aligned to an 8 or 16 byte boundary. In arrays or structures 9397 conforming to the ABI, this would not be possible. So specifying a 9398 `-m128bit-long-double' will align `long double' to a 16 byte 9399 boundary by padding the `long double' with an additional 32 bit 9400 zero. 9401 9402 In the x86-64 compiler, `-m128bit-long-double' is the default 9403 choice as its ABI specifies that `long double' is to be aligned on 9404 16 byte boundary. 9405 9406 Notice that neither of these options enable any extra precision 9407 over the x87 standard of 80 bits for a `long double'. 9408 9409 *Warning:* if you override the default value for your target ABI, 9410 the structures and arrays containing `long double' variables will 9411 change their size as well as function calling convention for 9412 function taking `long double' will be modified. Hence they will 9413 not be binary compatible with arrays or structures in code 9414 compiled without that switch. 9415 9416`-mmlarge-data-threshold=NUMBER' 9417 When `-mcmodel=medium' is specified, the data greater than 9418 THRESHOLD are placed in large data section. This value must be the 9419 same across all object linked into the binary and defaults to 9420 65535. 9421 9422`-msvr3-shlib' 9423`-mno-svr3-shlib' 9424 Control whether GCC places uninitialized local variables into the 9425 `bss' or `data' segments. `-msvr3-shlib' places them into `bss'. 9426 These options are meaningful only on System V Release 3. 9427 9428`-mrtd' 9429 Use a different function-calling convention, in which functions 9430 that take a fixed number of arguments return with the `ret' NUM 9431 instruction, which pops their arguments while returning. This 9432 saves one instruction in the caller since there is no need to pop 9433 the arguments there. 9434 9435 You can specify that an individual function is called with this 9436 calling sequence with the function attribute `stdcall'. You can 9437 also override the `-mrtd' option by using the function attribute 9438 `cdecl'. *Note Function Attributes::. 9439 9440 *Warning:* this calling convention is incompatible with the one 9441 normally used on Unix, so you cannot use it if you need to call 9442 libraries compiled with the Unix compiler. 9443 9444 Also, you must provide function prototypes for all functions that 9445 take variable numbers of arguments (including `printf'); otherwise 9446 incorrect code will be generated for calls to those functions. 9447 9448 In addition, seriously incorrect code will result if you call a 9449 function with too many arguments. (Normally, extra arguments are 9450 harmlessly ignored.) 9451 9452`-mregparm=NUM' 9453 Control how many registers are used to pass integer arguments. By 9454 default, no registers are used to pass arguments, and at most 3 9455 registers can be used. You can control this behavior for a 9456 specific function by using the function attribute `regparm'. 9457 *Note Function Attributes::. 9458 9459 *Warning:* if you use this switch, and NUM is nonzero, then you 9460 must build all modules with the same value, including any 9461 libraries. This includes the system libraries and startup modules. 9462 9463`-msseregparm' 9464 Use SSE register passing conventions for float and double arguments 9465 and return values. You can control this behavior for a specific 9466 function by using the function attribute `sseregparm'. *Note 9467 Function Attributes::. 9468 9469 *Warning:* if you use this switch then you must build all modules 9470 with the same value, including any libraries. This includes the 9471 system libraries and startup modules. 9472 9473`-mstackrealign' 9474 Realign the stack at entry. On the Intel x86, the 9475 `-mstackrealign' option will generate an alternate prologue and 9476 epilogue that realigns the runtime stack. This supports mixing 9477 legacy codes that keep a 4-byte aligned stack with modern codes 9478 that keep a 16-byte stack for SSE compatibility. The alternate 9479 prologue and epilogue are slower and bigger than the regular ones, 9480 and the alternate prologue requires an extra scratch register; 9481 this lowers the number of registers available if used in 9482 conjunction with the `regparm' attribute. The `-mstackrealign' 9483 option is incompatible with the nested function prologue; this is 9484 considered a hard error. See also the attribute 9485 `force_align_arg_pointer', applicable to individual functions. 9486 9487`-mpreferred-stack-boundary=NUM' 9488 Attempt to keep the stack boundary aligned to a 2 raised to NUM 9489 byte boundary. If `-mpreferred-stack-boundary' is not specified, 9490 the default is 4 (16 bytes or 128 bits). 9491 9492 On Pentium and PentiumPro, `double' and `long double' values 9493 should be aligned to an 8 byte boundary (see `-malign-double') or 9494 suffer significant run time performance penalties. On Pentium 9495 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 9496 work properly if it is not 16 byte aligned. 9497 9498 To ensure proper alignment of this values on the stack, the stack 9499 boundary must be as aligned as that required by any value stored 9500 on the stack. Further, every function must be generated such that 9501 it keeps the stack aligned. Thus calling a function compiled with 9502 a higher preferred stack boundary from a function compiled with a 9503 lower preferred stack boundary will most likely misalign the 9504 stack. It is recommended that libraries that use callbacks always 9505 use the default setting. 9506 9507 This extra alignment does consume extra stack space, and generally 9508 increases code size. Code that is sensitive to stack space usage, 9509 such as embedded systems and operating system kernels, may want to 9510 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 9511 9512`-mmmx' 9513`-mno-mmx' 9514 9515`-msse' 9516`-mno-sse' 9517 9518`-msse2' 9519`-mno-sse2' 9520 9521`-msse3' 9522`-mno-sse3' 9523 9524`-m3dnow' 9525`-mno-3dnow' 9526 These switches enable or disable the use of instructions in the 9527 MMX, SSE, SSE2 or 3DNow! extended instruction sets. These 9528 extensions are also available as built-in functions: see *Note X86 9529 Built-in Functions::, for details of the functions enabled and 9530 disabled by these switches. 9531 9532 To have SSE/SSE2 instructions generated automatically from 9533 floating-point code (as opposed to 387 instructions), see 9534 `-mfpmath=sse'. 9535 9536 These options will enable GCC to use these extended instructions in 9537 generated code, even without `-mfpmath=sse'. Applications which 9538 perform runtime CPU detection must compile separate files for each 9539 supported architecture, using the appropriate flags. In 9540 particular, the file containing the CPU detection code should be 9541 compiled without these options. 9542 9543`-mpush-args' 9544`-mno-push-args' 9545 Use PUSH operations to store outgoing parameters. This method is 9546 shorter and usually equally fast as method using SUB/MOV 9547 operations and is enabled by default. In some cases disabling it 9548 may improve performance because of improved scheduling and reduced 9549 dependencies. 9550 9551`-maccumulate-outgoing-args' 9552 If enabled, the maximum amount of space required for outgoing 9553 arguments will be computed in the function prologue. This is 9554 faster on most modern CPUs because of reduced dependencies, 9555 improved scheduling and reduced stack usage when preferred stack 9556 boundary is not equal to 2. The drawback is a notable increase in 9557 code size. This switch implies `-mno-push-args'. 9558 9559`-mthreads' 9560 Support thread-safe exception handling on `Mingw32'. Code that 9561 relies on thread-safe exception handling must compile and link all 9562 code with the `-mthreads' option. When compiling, `-mthreads' 9563 defines `-D_MT'; when linking, it links in a special thread helper 9564 library `-lmingwthrd' which cleans up per thread exception 9565 handling data. 9566 9567`-mno-align-stringops' 9568 Do not align destination of inlined string operations. This 9569 switch reduces code size and improves performance in case the 9570 destination is already aligned, but GCC doesn't know about it. 9571 9572`-minline-all-stringops' 9573 By default GCC inlines string operations only when destination is 9574 known to be aligned at least to 4 byte boundary. This enables 9575 more inlining, increase code size, but may improve performance of 9576 code that depends on fast memcpy, strlen and memset for short 9577 lengths. 9578 9579`-momit-leaf-frame-pointer' 9580 Don't keep the frame pointer in a register for leaf functions. 9581 This avoids the instructions to save, set up and restore frame 9582 pointers and makes an extra register available in leaf functions. 9583 The option `-fomit-frame-pointer' removes the frame pointer for 9584 all functions which might make debugging harder. 9585 9586`-mtls-direct-seg-refs' 9587`-mno-tls-direct-seg-refs' 9588 Controls whether TLS variables may be accessed with offsets from 9589 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 9590 whether the thread base pointer must be added. Whether or not this 9591 is legal depends on the operating system, and whether it maps the 9592 segment to cover the entire TLS area. 9593 9594 For systems that use GNU libc, the default is on. 9595 9596 These `-m' switches are supported in addition to the above on AMD 9597x86-64 processors in 64-bit environments. 9598 9599`-m32' 9600`-m64' 9601 Generate code for a 32-bit or 64-bit environment. The 32-bit 9602 environment sets int, long and pointer to 32 bits and generates 9603 code that runs on any i386 system. The 64-bit environment sets 9604 int to 32 bits and long and pointer to 64 bits and generates code 9605 for AMD's x86-64 architecture. For darwin only the -m64 option 9606 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 9607 9608`-mno-red-zone' 9609 Do not use a so called red zone for x86-64 code. The red zone is 9610 mandated by the x86-64 ABI, it is a 128-byte area beyond the 9611 location of the stack pointer that will not be modified by signal 9612 or interrupt handlers and therefore can be used for temporary data 9613 without adjusting the stack pointer. The flag `-mno-red-zone' 9614 disables this red zone. 9615 9616`-mcmodel=small' 9617 Generate code for the small code model: the program and its 9618 symbols must be linked in the lower 2 GB of the address space. 9619 Pointers are 64 bits. Programs can be statically or dynamically 9620 linked. This is the default code model. 9621 9622`-mcmodel=kernel' 9623 Generate code for the kernel code model. The kernel runs in the 9624 negative 2 GB of the address space. This model has to be used for 9625 Linux kernel code. 9626 9627`-mcmodel=medium' 9628 Generate code for the medium model: The program is linked in the 9629 lower 2 GB of the address space but symbols can be located 9630 anywhere in the address space. Programs can be statically or 9631 dynamically linked, but building of shared libraries are not 9632 supported with the medium model. 9633 9634`-mcmodel=large' 9635 Generate code for the large model: This model makes no assumptions 9636 about addresses and sizes of sections. Currently GCC does not 9637 implement this model. 9638 9639 9640File: gcc.info, Node: IA-64 Options, Next: M32C Options, Prev: i386 and x86-64 Options, Up: Submodel Options 9641 96423.17.15 IA-64 Options 9643--------------------- 9644 9645These are the `-m' options defined for the Intel IA-64 architecture. 9646 9647`-mbig-endian' 9648 Generate code for a big endian target. This is the default for 9649 HP-UX. 9650 9651`-mlittle-endian' 9652 Generate code for a little endian target. This is the default for 9653 AIX5 and GNU/Linux. 9654 9655`-mgnu-as' 9656`-mno-gnu-as' 9657 Generate (or don't) code for the GNU assembler. This is the 9658 default. 9659 9660`-mgnu-ld' 9661`-mno-gnu-ld' 9662 Generate (or don't) code for the GNU linker. This is the default. 9663 9664`-mno-pic' 9665 Generate code that does not use a global pointer register. The 9666 result is not position independent code, and violates the IA-64 9667 ABI. 9668 9669`-mvolatile-asm-stop' 9670`-mno-volatile-asm-stop' 9671 Generate (or don't) a stop bit immediately before and after 9672 volatile asm statements. 9673 9674`-mregister-names' 9675`-mno-register-names' 9676 Generate (or don't) `in', `loc', and `out' register names for the 9677 stacked registers. This may make assembler output more readable. 9678 9679`-mno-sdata' 9680`-msdata' 9681 Disable (or enable) optimizations that use the small data section. 9682 This may be useful for working around optimizer bugs. 9683 9684`-mconstant-gp' 9685 Generate code that uses a single constant global pointer value. 9686 This is useful when compiling kernel code. 9687 9688`-mauto-pic' 9689 Generate code that is self-relocatable. This implies 9690 `-mconstant-gp'. This is useful when compiling firmware code. 9691 9692`-minline-float-divide-min-latency' 9693 Generate code for inline divides of floating point values using 9694 the minimum latency algorithm. 9695 9696`-minline-float-divide-max-throughput' 9697 Generate code for inline divides of floating point values using 9698 the maximum throughput algorithm. 9699 9700`-minline-int-divide-min-latency' 9701 Generate code for inline divides of integer values using the 9702 minimum latency algorithm. 9703 9704`-minline-int-divide-max-throughput' 9705 Generate code for inline divides of integer values using the 9706 maximum throughput algorithm. 9707 9708`-minline-sqrt-min-latency' 9709 Generate code for inline square roots using the minimum latency 9710 algorithm. 9711 9712`-minline-sqrt-max-throughput' 9713 Generate code for inline square roots using the maximum throughput 9714 algorithm. 9715 9716`-mno-dwarf2-asm' 9717`-mdwarf2-asm' 9718 Don't (or do) generate assembler code for the DWARF2 line number 9719 debugging info. This may be useful when not using the GNU 9720 assembler. 9721 9722`-mearly-stop-bits' 9723`-mno-early-stop-bits' 9724 Allow stop bits to be placed earlier than immediately preceding the 9725 instruction that triggered the stop bit. This can improve 9726 instruction scheduling, but does not always do so. 9727 9728`-mfixed-range=REGISTER-RANGE' 9729 Generate code treating the given register range as fixed registers. 9730 A fixed register is one that the register allocator can not use. 9731 This is useful when compiling kernel code. A register range is 9732 specified as two registers separated by a dash. Multiple register 9733 ranges can be specified separated by a comma. 9734 9735`-mtls-size=TLS-SIZE' 9736 Specify bit size of immediate TLS offsets. Valid values are 14, 9737 22, and 64. 9738 9739`-mtune=CPU-TYPE' 9740 Tune the instruction scheduling for a particular CPU, Valid values 9741 are itanium, itanium1, merced, itanium2, and mckinley. 9742 9743`-mt' 9744`-pthread' 9745 Add support for multithreading using the POSIX threads library. 9746 This option sets flags for both the preprocessor and linker. It 9747 does not affect the thread safety of object code produced by the 9748 compiler or that of libraries supplied with it. These are HP-UX 9749 specific flags. 9750 9751`-milp32' 9752`-mlp64' 9753 Generate code for a 32-bit or 64-bit environment. The 32-bit 9754 environment sets int, long and pointer to 32 bits. The 64-bit 9755 environment sets int to 32 bits and long and pointer to 64 bits. 9756 These are HP-UX specific flags. 9757 9758`-mno-sched-br-data-spec' 9759`-msched-br-data-spec' 9760 (Dis/En)able data speculative scheduling before reload. This will 9761 result in generation of the ld.a instructions and the 9762 corresponding check instructions (ld.c / chk.a). The default is 9763 'disable'. 9764 9765`-msched-ar-data-spec' 9766`-mno-sched-ar-data-spec' 9767 (En/Dis)able data speculative scheduling after reload. This will 9768 result in generation of the ld.a instructions and the 9769 corresponding check instructions (ld.c / chk.a). The default is 9770 'enable'. 9771 9772`-mno-sched-control-spec' 9773`-msched-control-spec' 9774 (Dis/En)able control speculative scheduling. This feature is 9775 available only during region scheduling (i.e. before reload). 9776 This will result in generation of the ld.s instructions and the 9777 corresponding check instructions chk.s . The default is 'disable'. 9778 9779`-msched-br-in-data-spec' 9780`-mno-sched-br-in-data-spec' 9781 (En/Dis)able speculative scheduling of the instructions that are 9782 dependent on the data speculative loads before reload. This is 9783 effective only with `-msched-br-data-spec' enabled. The default 9784 is 'enable'. 9785 9786`-msched-ar-in-data-spec' 9787`-mno-sched-ar-in-data-spec' 9788 (En/Dis)able speculative scheduling of the instructions that are 9789 dependent on the data speculative loads after reload. This is 9790 effective only with `-msched-ar-data-spec' enabled. The default 9791 is 'enable'. 9792 9793`-msched-in-control-spec' 9794`-mno-sched-in-control-spec' 9795 (En/Dis)able speculative scheduling of the instructions that are 9796 dependent on the control speculative loads. This is effective 9797 only with `-msched-control-spec' enabled. The default is 'enable'. 9798 9799`-msched-ldc' 9800`-mno-sched-ldc' 9801 (En/Dis)able use of simple data speculation checks ld.c . If 9802 disabled, only chk.a instructions will be emitted to check data 9803 speculative loads. The default is 'enable'. 9804 9805`-mno-sched-control-ldc' 9806`-msched-control-ldc' 9807 (Dis/En)able use of ld.c instructions to check control speculative 9808 loads. If enabled, in case of control speculative load with no 9809 speculatively scheduled dependent instructions this load will be 9810 emitted as ld.sa and ld.c will be used to check it. The default 9811 is 'disable'. 9812 9813`-mno-sched-spec-verbose' 9814`-msched-spec-verbose' 9815 (Dis/En)able printing of the information about speculative motions. 9816 9817`-mno-sched-prefer-non-data-spec-insns' 9818`-msched-prefer-non-data-spec-insns' 9819 If enabled, data speculative instructions will be chosen for 9820 schedule only if there are no other choices at the moment. This 9821 will make the use of the data speculation much more conservative. 9822 The default is 'disable'. 9823 9824`-mno-sched-prefer-non-control-spec-insns' 9825`-msched-prefer-non-control-spec-insns' 9826 If enabled, control speculative instructions will be chosen for 9827 schedule only if there are no other choices at the moment. This 9828 will make the use of the control speculation much more 9829 conservative. The default is 'disable'. 9830 9831`-mno-sched-count-spec-in-critical-path' 9832`-msched-count-spec-in-critical-path' 9833 If enabled, speculative dependencies will be considered during 9834 computation of the instructions priorities. This will make the 9835 use of the speculation a bit more conservative. The default is 9836 'disable'. 9837 9838 9839 9840File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: IA-64 Options, Up: Submodel Options 9841 98423.17.16 M32C Options 9843-------------------- 9844 9845`-mcpu=NAME' 9846 Select the CPU for which code is generated. NAME may be one of 9847 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 9848 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 9849 series. 9850 9851`-msim' 9852 Specifies that the program will be run on the simulator. This 9853 causes an alternate runtime library to be linked in which 9854 supports, for example, file I/O. You must not use this option 9855 when generating programs that will run on real hardware; you must 9856 provide your own runtime library for whatever I/O functions are 9857 needed. 9858 9859`-memregs=NUMBER' 9860 Specifies the number of memory-based pseudo-registers GCC will use 9861 during code generation. These pseudo-registers will be used like 9862 real registers, so there is a tradeoff between GCC's ability to 9863 fit the code into available registers, and the performance penalty 9864 of using memory instead of registers. Note that all modules in a 9865 program must be compiled with the same value for this option. 9866 Because of that, you must not use this option with the default 9867 runtime libraries gcc builds. 9868 9869 9870 9871File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 9872 98733.17.17 M32R/D Options 9874---------------------- 9875 9876These `-m' options are defined for Renesas M32R/D architectures: 9877 9878`-m32r2' 9879 Generate code for the M32R/2. 9880 9881`-m32rx' 9882 Generate code for the M32R/X. 9883 9884`-m32r' 9885 Generate code for the M32R. This is the default. 9886 9887`-mmodel=small' 9888 Assume all objects live in the lower 16MB of memory (so that their 9889 addresses can be loaded with the `ld24' instruction), and assume 9890 all subroutines are reachable with the `bl' instruction. This is 9891 the default. 9892 9893 The addressability of a particular object can be set with the 9894 `model' attribute. 9895 9896`-mmodel=medium' 9897 Assume objects may be anywhere in the 32-bit address space (the 9898 compiler will generate `seth/add3' instructions to load their 9899 addresses), and assume all subroutines are reachable with the `bl' 9900 instruction. 9901 9902`-mmodel=large' 9903 Assume objects may be anywhere in the 32-bit address space (the 9904 compiler will generate `seth/add3' instructions to load their 9905 addresses), and assume subroutines may not be reachable with the 9906 `bl' instruction (the compiler will generate the much slower 9907 `seth/add3/jl' instruction sequence). 9908 9909`-msdata=none' 9910 Disable use of the small data area. Variables will be put into 9911 one of `.data', `bss', or `.rodata' (unless the `section' 9912 attribute has been specified). This is the default. 9913 9914 The small data area consists of sections `.sdata' and `.sbss'. 9915 Objects may be explicitly put in the small data area with the 9916 `section' attribute using one of these sections. 9917 9918`-msdata=sdata' 9919 Put small global and static data in the small data area, but do not 9920 generate special code to reference them. 9921 9922`-msdata=use' 9923 Put small global and static data in the small data area, and 9924 generate special instructions to reference them. 9925 9926`-G NUM' 9927 Put global and static objects less than or equal to NUM bytes into 9928 the small data or bss sections instead of the normal data or bss 9929 sections. The default value of NUM is 8. The `-msdata' option 9930 must be set to one of `sdata' or `use' for this option to have any 9931 effect. 9932 9933 All modules should be compiled with the same `-G NUM' value. 9934 Compiling with different values of NUM may or may not work; if it 9935 doesn't the linker will give an error message--incorrect code will 9936 not be generated. 9937 9938`-mdebug' 9939 Makes the M32R specific code in the compiler display some 9940 statistics that might help in debugging programs. 9941 9942`-malign-loops' 9943 Align all loops to a 32-byte boundary. 9944 9945`-mno-align-loops' 9946 Do not enforce a 32-byte alignment for loops. This is the default. 9947 9948`-missue-rate=NUMBER' 9949 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 9950 9951`-mbranch-cost=NUMBER' 9952 NUMBER can only be 1 or 2. If it is 1 then branches will be 9953 preferred over conditional code, if it is 2, then the opposite will 9954 apply. 9955 9956`-mflush-trap=NUMBER' 9957 Specifies the trap number to use to flush the cache. The default 9958 is 12. Valid numbers are between 0 and 15 inclusive. 9959 9960`-mno-flush-trap' 9961 Specifies that the cache cannot be flushed by using a trap. 9962 9963`-mflush-func=NAME' 9964 Specifies the name of the operating system function to call to 9965 flush the cache. The default is __flush_cache_, but a function 9966 call will only be used if a trap is not available. 9967 9968`-mno-flush-func' 9969 Indicates that there is no OS function for flushing the cache. 9970 9971 9972 9973File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 9974 99753.17.18 M680x0 Options 9976---------------------- 9977 9978These are the `-m' options defined for the 68000 series. The default 9979values for these options depends on which style of 68000 was selected 9980when the compiler was configured; the defaults for the most common 9981choices are given below. 9982 9983`-m68000' 9984`-mc68000' 9985 Generate output for a 68000. This is the default when the 9986 compiler is configured for 68000-based systems. 9987 9988 Use this option for microcontrollers with a 68000 or EC000 core, 9989 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 9990 9991`-m68020' 9992`-mc68020' 9993 Generate output for a 68020. This is the default when the 9994 compiler is configured for 68020-based systems. 9995 9996`-m68881' 9997 Generate output containing 68881 instructions for floating point. 9998 This is the default for most 68020 systems unless `--nfp' was 9999 specified when the compiler was configured. 10000 10001`-m68030' 10002 Generate output for a 68030. This is the default when the 10003 compiler is configured for 68030-based systems. 10004 10005`-m68040' 10006 Generate output for a 68040. This is the default when the 10007 compiler is configured for 68040-based systems. 10008 10009 This option inhibits the use of 68881/68882 instructions that have 10010 to be emulated by software on the 68040. Use this option if your 10011 68040 does not have code to emulate those instructions. 10012 10013`-m68060' 10014 Generate output for a 68060. This is the default when the 10015 compiler is configured for 68060-based systems. 10016 10017 This option inhibits the use of 68020 and 68881/68882 instructions 10018 that have to be emulated by software on the 68060. Use this 10019 option if your 68060 does not have code to emulate those 10020 instructions. 10021 10022`-mcpu32' 10023 Generate output for a CPU32. This is the default when the 10024 compiler is configured for CPU32-based systems. 10025 10026 Use this option for microcontrollers with a CPU32 or CPU32+ core, 10027 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 10028 68341, 68349 and 68360. 10029 10030`-m5200' 10031 Generate output for a 520X "coldfire" family cpu. This is the 10032 default when the compiler is configured for 520X-based systems. 10033 10034 Use this option for microcontroller with a 5200 core, including 10035 the MCF5202, MCF5203, MCF5204 and MCF5202. 10036 10037`-mcfv4e' 10038 Generate output for a ColdFire V4e family cpu (e.g. 547x/548x). 10039 This includes use of hardware floating point instructions. 10040 10041`-m68020-40' 10042 Generate output for a 68040, without using any of the new 10043 instructions. This results in code which can run relatively 10044 efficiently on either a 68020/68881 or a 68030 or a 68040. The 10045 generated code does use the 68881 instructions that are emulated 10046 on the 68040. 10047 10048`-m68020-60' 10049 Generate output for a 68060, without using any of the new 10050 instructions. This results in code which can run relatively 10051 efficiently on either a 68020/68881 or a 68030 or a 68040. The 10052 generated code does use the 68881 instructions that are emulated 10053 on the 68060. 10054 10055`-msoft-float' 10056 Generate output containing library calls for floating point. 10057 *Warning:* the requisite libraries are not available for all m68k 10058 targets. Normally the facilities of the machine's usual C 10059 compiler are used, but this can't be done directly in 10060 cross-compilation. You must make your own arrangements to provide 10061 suitable library functions for cross-compilation. The embedded 10062 targets `m68k-*-aout' and `m68k-*-coff' do provide software 10063 floating point support. 10064 10065`-mshort' 10066 Consider type `int' to be 16 bits wide, like `short int'. 10067 Additionally, parameters passed on the stack are also aligned to a 10068 16-bit boundary even on targets whose API mandates promotion to 10069 32-bit. 10070 10071`-mnobitfield' 10072 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 10073 and `-m5200' options imply `-mnobitfield'. 10074 10075`-mbitfield' 10076 Do use the bit-field instructions. The `-m68020' option implies 10077 `-mbitfield'. This is the default if you use a configuration 10078 designed for a 68020. 10079 10080`-mrtd' 10081 Use a different function-calling convention, in which functions 10082 that take a fixed number of arguments return with the `rtd' 10083 instruction, which pops their arguments while returning. This 10084 saves one instruction in the caller since there is no need to pop 10085 the arguments there. 10086 10087 This calling convention is incompatible with the one normally used 10088 on Unix, so you cannot use it if you need to call libraries 10089 compiled with the Unix compiler. 10090 10091 Also, you must provide function prototypes for all functions that 10092 take variable numbers of arguments (including `printf'); otherwise 10093 incorrect code will be generated for calls to those functions. 10094 10095 In addition, seriously incorrect code will result if you call a 10096 function with too many arguments. (Normally, extra arguments are 10097 harmlessly ignored.) 10098 10099 The `rtd' instruction is supported by the 68010, 68020, 68030, 10100 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 10101 10102`-malign-int' 10103`-mno-align-int' 10104 Control whether GCC aligns `int', `long', `long long', `float', 10105 `double', and `long double' variables on a 32-bit boundary 10106 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 10107 variables on 32-bit boundaries produces code that runs somewhat 10108 faster on processors with 32-bit busses at the expense of more 10109 memory. 10110 10111 *Warning:* if you use the `-malign-int' switch, GCC will align 10112 structures containing the above types differently than most 10113 published application binary interface specifications for the m68k. 10114 10115`-mpcrel' 10116 Use the pc-relative addressing mode of the 68000 directly, instead 10117 of using a global offset table. At present, this option implies 10118 `-fpic', allowing at most a 16-bit offset for pc-relative 10119 addressing. `-fPIC' is not presently supported with `-mpcrel', 10120 though this could be supported for 68020 and higher processors. 10121 10122`-mno-strict-align' 10123`-mstrict-align' 10124 Do not (do) assume that unaligned memory references will be 10125 handled by the system. 10126 10127`-msep-data' 10128 Generate code that allows the data segment to be located in a 10129 different area of memory from the text segment. This allows for 10130 execute in place in an environment without virtual memory 10131 management. This option implies `-fPIC'. 10132 10133`-mno-sep-data' 10134 Generate code that assumes that the data segment follows the text 10135 segment. This is the default. 10136 10137`-mid-shared-library' 10138 Generate code that supports shared libraries via the library ID 10139 method. This allows for execute in place and shared libraries in 10140 an environment without virtual memory management. This option 10141 implies `-fPIC'. 10142 10143`-mno-id-shared-library' 10144 Generate code that doesn't assume ID based shared libraries are 10145 being used. This is the default. 10146 10147`-mshared-library-id=n' 10148 Specified the identification number of the ID based shared library 10149 being compiled. Specifying a value of 0 will generate more 10150 compact code, specifying other values will force the allocation of 10151 that number to the current library but is no more space or time 10152 efficient than omitting this option. 10153 10154 10155 10156File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 10157 101583.17.19 M68hc1x Options 10159----------------------- 10160 10161These are the `-m' options defined for the 68hc11 and 68hc12 10162microcontrollers. The default values for these options depends on 10163which style of microcontroller was selected when the compiler was 10164configured; the defaults for the most common choices are given below. 10165 10166`-m6811' 10167`-m68hc11' 10168 Generate output for a 68HC11. This is the default when the 10169 compiler is configured for 68HC11-based systems. 10170 10171`-m6812' 10172`-m68hc12' 10173 Generate output for a 68HC12. This is the default when the 10174 compiler is configured for 68HC12-based systems. 10175 10176`-m68S12' 10177`-m68hcs12' 10178 Generate output for a 68HCS12. 10179 10180`-mauto-incdec' 10181 Enable the use of 68HC12 pre and post auto-increment and 10182 auto-decrement addressing modes. 10183 10184`-minmax' 10185`-nominmax' 10186 Enable the use of 68HC12 min and max instructions. 10187 10188`-mlong-calls' 10189`-mno-long-calls' 10190 Treat all calls as being far away (near). If calls are assumed to 10191 be far away, the compiler will use the `call' instruction to call 10192 a function and the `rtc' instruction for returning. 10193 10194`-mshort' 10195 Consider type `int' to be 16 bits wide, like `short int'. 10196 10197`-msoft-reg-count=COUNT' 10198 Specify the number of pseudo-soft registers which are used for the 10199 code generation. The maximum number is 32. Using more pseudo-soft 10200 register may or may not result in better code depending on the 10201 program. The default is 4 for 68HC11 and 2 for 68HC12. 10202 10203 10204 10205File: gcc.info, Node: MCore Options, Next: MIPS Options, Prev: M68hc1x Options, Up: Submodel Options 10206 102073.17.20 MCore Options 10208--------------------- 10209 10210These are the `-m' options defined for the Motorola M*Core processors. 10211 10212`-mhardlit' 10213`-mno-hardlit' 10214 Inline constants into the code stream if it can be done in two 10215 instructions or less. 10216 10217`-mdiv' 10218`-mno-div' 10219 Use the divide instruction. (Enabled by default). 10220 10221`-mrelax-immediate' 10222`-mno-relax-immediate' 10223 Allow arbitrary sized immediates in bit operations. 10224 10225`-mwide-bitfields' 10226`-mno-wide-bitfields' 10227 Always treat bit-fields as int-sized. 10228 10229`-m4byte-functions' 10230`-mno-4byte-functions' 10231 Force all functions to be aligned to a four byte boundary. 10232 10233`-mcallgraph-data' 10234`-mno-callgraph-data' 10235 Emit callgraph information. 10236 10237`-mslow-bytes' 10238`-mno-slow-bytes' 10239 Prefer word access when reading byte quantities. 10240 10241`-mlittle-endian' 10242`-mbig-endian' 10243 Generate code for a little endian target. 10244 10245`-m210' 10246`-m340' 10247 Generate code for the 210 processor. 10248 10249 10250File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MCore Options, Up: Submodel Options 10251 102523.17.21 MIPS Options 10253-------------------- 10254 10255`-EB' 10256 Generate big-endian code. 10257 10258`-EL' 10259 Generate little-endian code. This is the default for `mips*el-*-*' 10260 configurations. 10261 10262`-march=ARCH' 10263 Generate code that will run on ARCH, which can be the name of a 10264 generic MIPS ISA, or the name of a particular processor. The ISA 10265 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 10266 `mips32r2', and `mips64'. The processor names are: `4kc', `4km', 10267 `4kp', `5kc', `5kf', `20kc', `24k', `24kc', `24kf', `24kx', `m4k', 10268 `orion', `r2000', `r3000', `r3900', `r4000', `r4400', `r4600', 10269 `r4650', `r6000', `r8000', `rm7000', `rm9000', `sb1', `sr71000', 10270 `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', 10271 `vr5400' and `vr5500'. The special value `from-abi' selects the 10272 most compatible architecture for the selected ABI (that is, 10273 `mips1' for 32-bit ABIs and `mips3' for 64-bit ABIs). 10274 10275 In processor names, a final `000' can be abbreviated as `k' (for 10276 example, `-march=r2k'). Prefixes are optional, and `vr' may be 10277 written `r'. 10278 10279 GCC defines two macros based on the value of this option. The 10280 first is `_MIPS_ARCH', which gives the name of target 10281 architecture, as a string. The second has the form 10282 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 10283 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 10284 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 10285 10286 Note that the `_MIPS_ARCH' macro uses the processor names given 10287 above. In other words, it will have the full prefix and will not 10288 abbreviate `000' as `k'. In the case of `from-abi', the macro 10289 names the resolved architecture (either `"mips1"' or `"mips3"'). 10290 It names the default architecture when no `-march' option is given. 10291 10292`-mtune=ARCH' 10293 Optimize for ARCH. Among other things, this option controls the 10294 way instructions are scheduled, and the perceived cost of 10295 arithmetic operations. The list of ARCH values is the same as for 10296 `-march'. 10297 10298 When this option is not used, GCC will optimize for the processor 10299 specified by `-march'. By using `-march' and `-mtune' together, 10300 it is possible to generate code that will run on a family of 10301 processors, but optimize the code for one particular member of 10302 that family. 10303 10304 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 10305 which work in the same way as the `-march' ones described above. 10306 10307`-mips1' 10308 Equivalent to `-march=mips1'. 10309 10310`-mips2' 10311 Equivalent to `-march=mips2'. 10312 10313`-mips3' 10314 Equivalent to `-march=mips3'. 10315 10316`-mips4' 10317 Equivalent to `-march=mips4'. 10318 10319`-mips32' 10320 Equivalent to `-march=mips32'. 10321 10322`-mips32r2' 10323 Equivalent to `-march=mips32r2'. 10324 10325`-mips64' 10326 Equivalent to `-march=mips64'. 10327 10328`-mips16' 10329`-mno-mips16' 10330 Generate (do not generate) MIPS16 code. If GCC is targetting a 10331 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 10332 10333`-mabi=32' 10334`-mabi=o64' 10335`-mabi=n32' 10336`-mabi=64' 10337`-mabi=eabi' 10338 Generate code for the given ABI. 10339 10340 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 10341 generates 64-bit code when you select a 64-bit architecture, but 10342 you can use `-mgp32' to get 32-bit code instead. 10343 10344 For information about the O64 ABI, see 10345 `http://gcc.gnu.org/projects/mipso64-abi.html'. 10346 10347`-mabicalls' 10348`-mno-abicalls' 10349 Generate (do not generate) code that is suitable for SVR4-style 10350 dynamic objects. `-mabicalls' is the default for SVR4-based 10351 systems. 10352 10353`-mshared' 10354`-mno-shared' 10355 Generate (do not generate) code that is fully position-independent, 10356 and that can therefore be linked into shared libraries. This 10357 option only affects `-mabicalls'. 10358 10359 All `-mabicalls' code has traditionally been position-independent, 10360 regardless of options like `-fPIC' and `-fpic'. However, as an 10361 extension, the GNU toolchain allows executables to use absolute 10362 accesses for locally-binding symbols. It can also use shorter GP 10363 initialization sequences and generate direct calls to 10364 locally-defined functions. This mode is selected by `-mno-shared'. 10365 10366 `-mno-shared' depends on binutils 2.16 or higher and generates 10367 objects that can only be linked by the GNU linker. However, the 10368 option does not affect the ABI of the final executable; it only 10369 affects the ABI of relocatable objects. Using `-mno-shared' will 10370 generally make executables both smaller and quicker. 10371 10372 `-mshared' is the default. 10373 10374`-mxgot' 10375`-mno-xgot' 10376 Lift (do not lift) the usual restrictions on the size of the global 10377 offset table. 10378 10379 GCC normally uses a single instruction to load values from the GOT. 10380 While this is relatively efficient, it will only work if the GOT 10381 is smaller than about 64k. Anything larger will cause the linker 10382 to report an error such as: 10383 10384 relocation truncated to fit: R_MIPS_GOT16 foobar 10385 10386 If this happens, you should recompile your code with `-mxgot'. It 10387 should then work with very large GOTs, although it will also be 10388 less efficient, since it will take three instructions to fetch the 10389 value of a global symbol. 10390 10391 Note that some linkers can create multiple GOTs. If you have such 10392 a linker, you should only need to use `-mxgot' when a single object 10393 file accesses more than 64k's worth of GOT entries. Very few do. 10394 10395 These options have no effect unless GCC is generating position 10396 independent code. 10397 10398`-mgp32' 10399 Assume that general-purpose registers are 32 bits wide. 10400 10401`-mgp64' 10402 Assume that general-purpose registers are 64 bits wide. 10403 10404`-mfp32' 10405 Assume that floating-point registers are 32 bits wide. 10406 10407`-mfp64' 10408 Assume that floating-point registers are 64 bits wide. 10409 10410`-mhard-float' 10411 Use floating-point coprocessor instructions. 10412 10413`-msoft-float' 10414 Do not use floating-point coprocessor instructions. Implement 10415 floating-point calculations using library calls instead. 10416 10417`-msingle-float' 10418 Assume that the floating-point coprocessor only supports 10419 single-precision operations. 10420 10421`-mdouble-float' 10422 Assume that the floating-point coprocessor supports 10423 double-precision operations. This is the default. 10424 10425`-mdsp' 10426`-mno-dsp' 10427 Use (do not use) the MIPS DSP ASE. *Note MIPS DSP Built-in 10428 Functions::. 10429 10430`-mpaired-single' 10431`-mno-paired-single' 10432 Use (do not use) paired-single floating-point instructions. *Note 10433 MIPS Paired-Single Support::. This option can only be used when 10434 generating 64-bit code and requires hardware floating-point 10435 support to be enabled. 10436 10437`-mips3d' 10438`-mno-mips3d' 10439 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 10440 Functions::. The option `-mips3d' implies `-mpaired-single'. 10441 10442`-mlong64' 10443 Force `long' types to be 64 bits wide. See `-mlong32' for an 10444 explanation of the default and the way that the pointer size is 10445 determined. 10446 10447`-mlong32' 10448 Force `long', `int', and pointer types to be 32 bits wide. 10449 10450 The default size of `int's, `long's and pointers depends on the 10451 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 10452 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 10453 `long's. Pointers are the same size as `long's, or the same size 10454 as integer registers, whichever is smaller. 10455 10456`-msym32' 10457`-mno-sym32' 10458 Assume (do not assume) that all symbols have 32-bit values, 10459 regardless of the selected ABI. This option is useful in 10460 combination with `-mabi=64' and `-mno-abicalls' because it allows 10461 GCC to generate shorter and faster references to symbolic 10462 addresses. 10463 10464`-G NUM' 10465 Put global and static items less than or equal to NUM bytes into 10466 the small data or bss section instead of the normal data or bss 10467 section. This allows the data to be accessed using a single 10468 instruction. 10469 10470 All modules should be compiled with the same `-G NUM' value. 10471 10472`-membedded-data' 10473`-mno-embedded-data' 10474 Allocate variables to the read-only data section first if 10475 possible, then next in the small data section if possible, 10476 otherwise in data. This gives slightly slower code than the 10477 default, but reduces the amount of RAM required when executing, 10478 and thus may be preferred for some embedded systems. 10479 10480`-muninit-const-in-rodata' 10481`-mno-uninit-const-in-rodata' 10482 Put uninitialized `const' variables in the read-only data section. 10483 This option is only meaningful in conjunction with 10484 `-membedded-data'. 10485 10486`-msplit-addresses' 10487`-mno-split-addresses' 10488 Enable (disable) use of the `%hi()' and `%lo()' assembler 10489 relocation operators. This option has been superseded by 10490 `-mexplicit-relocs' but is retained for backwards compatibility. 10491 10492`-mexplicit-relocs' 10493`-mno-explicit-relocs' 10494 Use (do not use) assembler relocation operators when dealing with 10495 symbolic addresses. The alternative, selected by 10496 `-mno-explicit-relocs', is to use assembler macros instead. 10497 10498 `-mexplicit-relocs' is the default if GCC was configured to use an 10499 assembler that supports relocation operators. 10500 10501`-mcheck-zero-division' 10502`-mno-check-zero-division' 10503 Trap (do not trap) on integer division by zero. The default is 10504 `-mcheck-zero-division'. 10505 10506`-mdivide-traps' 10507`-mdivide-breaks' 10508 MIPS systems check for division by zero by generating either a 10509 conditional trap or a break instruction. Using traps results in 10510 smaller code, but is only supported on MIPS II and later. Also, 10511 some versions of the Linux kernel have a bug that prevents trap 10512 from generating the proper signal (`SIGFPE'). Use 10513 `-mdivide-traps' to allow conditional traps on architectures that 10514 support them and `-mdivide-breaks' to force the use of breaks. 10515 10516 The default is usually `-mdivide-traps', but this can be 10517 overridden at configure time using `--with-divide=breaks'. 10518 Divide-by-zero checks can be completely disabled using 10519 `-mno-check-zero-division'. 10520 10521`-mmemcpy' 10522`-mno-memcpy' 10523 Force (do not force) the use of `memcpy()' for non-trivial block 10524 moves. The default is `-mno-memcpy', which allows GCC to inline 10525 most constant-sized copies. 10526 10527`-mlong-calls' 10528`-mno-long-calls' 10529 Disable (do not disable) use of the `jal' instruction. Calling 10530 functions using `jal' is more efficient but requires the caller 10531 and callee to be in the same 256 megabyte segment. 10532 10533 This option has no effect on abicalls code. The default is 10534 `-mno-long-calls'. 10535 10536`-mmad' 10537`-mno-mad' 10538 Enable (disable) use of the `mad', `madu' and `mul' instructions, 10539 as provided by the R4650 ISA. 10540 10541`-mfused-madd' 10542`-mno-fused-madd' 10543 Enable (disable) use of the floating point multiply-accumulate 10544 instructions, when they are available. The default is 10545 `-mfused-madd'. 10546 10547 When multiply-accumulate instructions are used, the intermediate 10548 product is calculated to infinite precision and is not subject to 10549 the FCSR Flush to Zero bit. This may be undesirable in some 10550 circumstances. 10551 10552`-nocpp' 10553 Tell the MIPS assembler to not run its preprocessor over user 10554 assembler files (with a `.s' suffix) when assembling them. 10555 10556`-mfix-r4000' 10557`-mno-fix-r4000' 10558 Work around certain R4000 CPU errata: 10559 - A double-word or a variable shift may give an incorrect 10560 result if executed immediately after starting an integer 10561 division. 10562 10563 - A double-word or a variable shift may give an incorrect 10564 result if executed while an integer multiplication is in 10565 progress. 10566 10567 - An integer division may give an incorrect result if started 10568 in a delay slot of a taken branch or a jump. 10569 10570`-mfix-r4400' 10571`-mno-fix-r4400' 10572 Work around certain R4400 CPU errata: 10573 - A double-word or a variable shift may give an incorrect 10574 result if executed immediately after starting an integer 10575 division. 10576 10577`-mfix-vr4120' 10578`-mno-fix-vr4120' 10579 Work around certain VR4120 errata: 10580 - `dmultu' does not always produce the correct result. 10581 10582 - `div' and `ddiv' do not always produce the correct result if 10583 one of the operands is negative. 10584 The workarounds for the division errata rely on special functions 10585 in `libgcc.a'. At present, these functions are only provided by 10586 the `mips64vr*-elf' configurations. 10587 10588 Other VR4120 errata require a nop to be inserted between certain 10589 pairs of instructions. These errata are handled by the assembler, 10590 not by GCC itself. 10591 10592`-mfix-vr4130' 10593 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 10594 implemented by the assembler rather than by GCC, although GCC will 10595 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 10596 `dmacc' and `dmacchi' instructions are available instead. 10597 10598`-mfix-sb1' 10599`-mno-fix-sb1' 10600 Work around certain SB-1 CPU core errata. (This flag currently 10601 works around the SB-1 revision 2 "F1" and "F2" floating point 10602 errata.) 10603 10604`-mflush-func=FUNC' 10605`-mno-flush-func' 10606 Specifies the function to call to flush the I and D caches, or to 10607 not call any such function. If called, the function must take the 10608 same arguments as the common `_flush_func()', that is, the address 10609 of the memory range for which the cache is being flushed, the size 10610 of the memory range, and the number 3 (to flush both caches). The 10611 default depends on the target GCC was configured for, but commonly 10612 is either `_flush_func' or `__cpu_flush'. 10613 10614`-mbranch-likely' 10615`-mno-branch-likely' 10616 Enable or disable use of Branch Likely instructions, regardless of 10617 the default for the selected architecture. By default, Branch 10618 Likely instructions may be generated if they are supported by the 10619 selected architecture. An exception is for the MIPS32 and MIPS64 10620 architectures and processors which implement those architectures; 10621 for those, Branch Likely instructions will not be generated by 10622 default because the MIPS32 and MIPS64 architectures specifically 10623 deprecate their use. 10624 10625`-mfp-exceptions' 10626`-mno-fp-exceptions' 10627 Specifies whether FP exceptions are enabled. This affects how we 10628 schedule FP instructions for some processors. The default is that 10629 FP exceptions are enabled. 10630 10631 For instance, on the SB-1, if FP exceptions are disabled, and we 10632 are emitting 64-bit code, then we can use both FP pipes. 10633 Otherwise, we can only use one FP pipe. 10634 10635`-mvr4130-align' 10636`-mno-vr4130-align' 10637 The VR4130 pipeline is two-way superscalar, but can only issue two 10638 instructions together if the first one is 8-byte aligned. When 10639 this option is enabled, GCC will align pairs of instructions that 10640 it thinks should execute in parallel. 10641 10642 This option only has an effect when optimizing for the VR4130. It 10643 normally makes code faster, but at the expense of making it bigger. 10644 It is enabled by default at optimization level `-O3'. 10645 10646 10647File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 10648 106493.17.22 MMIX Options 10650-------------------- 10651 10652These options are defined for the MMIX: 10653 10654`-mlibfuncs' 10655`-mno-libfuncs' 10656 Specify that intrinsic library functions are being compiled, 10657 passing all values in registers, no matter the size. 10658 10659`-mepsilon' 10660`-mno-epsilon' 10661 Generate floating-point comparison instructions that compare with 10662 respect to the `rE' epsilon register. 10663 10664`-mabi=mmixware' 10665`-mabi=gnu' 10666 Generate code that passes function parameters and return values 10667 that (in the called function) are seen as registers `$0' and up, 10668 as opposed to the GNU ABI which uses global registers `$231' and 10669 up. 10670 10671`-mzero-extend' 10672`-mno-zero-extend' 10673 When reading data from memory in sizes shorter than 64 bits, use 10674 (do not use) zero-extending load instructions by default, rather 10675 than sign-extending ones. 10676 10677`-mknuthdiv' 10678`-mno-knuthdiv' 10679 Make the result of a division yielding a remainder have the same 10680 sign as the divisor. With the default, `-mno-knuthdiv', the sign 10681 of the remainder follows the sign of the dividend. Both methods 10682 are arithmetically valid, the latter being almost exclusively used. 10683 10684`-mtoplevel-symbols' 10685`-mno-toplevel-symbols' 10686 Prepend (do not prepend) a `:' to all global symbols, so the 10687 assembly code can be used with the `PREFIX' assembly directive. 10688 10689`-melf' 10690 Generate an executable in the ELF format, rather than the default 10691 `mmo' format used by the `mmix' simulator. 10692 10693`-mbranch-predict' 10694`-mno-branch-predict' 10695 Use (do not use) the probable-branch instructions, when static 10696 branch prediction indicates a probable branch. 10697 10698`-mbase-addresses' 10699`-mno-base-addresses' 10700 Generate (do not generate) code that uses _base addresses_. Using 10701 a base address automatically generates a request (handled by the 10702 assembler and the linker) for a constant to be set up in a global 10703 register. The register is used for one or more base address 10704 requests within the range 0 to 255 from the value held in the 10705 register. The generally leads to short and fast code, but the 10706 number of different data items that can be addressed is limited. 10707 This means that a program that uses lots of static data may 10708 require `-mno-base-addresses'. 10709 10710`-msingle-exit' 10711`-mno-single-exit' 10712 Force (do not force) generated code to have a single exit point in 10713 each function. 10714 10715 10716File: gcc.info, Node: MN10300 Options, Next: MT Options, Prev: MMIX Options, Up: Submodel Options 10717 107183.17.23 MN10300 Options 10719----------------------- 10720 10721These `-m' options are defined for Matsushita MN10300 architectures: 10722 10723`-mmult-bug' 10724 Generate code to avoid bugs in the multiply instructions for the 10725 MN10300 processors. This is the default. 10726 10727`-mno-mult-bug' 10728 Do not generate code to avoid bugs in the multiply instructions 10729 for the MN10300 processors. 10730 10731`-mam33' 10732 Generate code which uses features specific to the AM33 processor. 10733 10734`-mno-am33' 10735 Do not generate code which uses features specific to the AM33 10736 processor. This is the default. 10737 10738`-mreturn-pointer-on-d0' 10739 When generating a function which returns a pointer, return the 10740 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 10741 only in a0, and attempts to call such functions without a prototype 10742 would result in errors. Note that this option is on by default; 10743 use `-mno-return-pointer-on-d0' to disable it. 10744 10745`-mno-crt0' 10746 Do not link in the C run-time initialization object file. 10747 10748`-mrelax' 10749 Indicate to the linker that it should perform a relaxation 10750 optimization pass to shorten branches, calls and absolute memory 10751 addresses. This option only has an effect when used on the 10752 command line for the final link step. 10753 10754 This option makes symbolic debugging impossible. 10755 10756 10757File: gcc.info, Node: MT Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options 10758 107593.17.24 MT Options 10760------------------ 10761 10762These `-m' options are defined for Morpho MT architectures: 10763 10764`-march=CPU-TYPE' 10765 Generate code that will run on CPU-TYPE, which is the name of a 10766 system representing a certain processor type. Possible values for 10767 CPU-TYPE are `ms1-64-001', `ms1-16-002', `ms1-16-003' and `ms2'. 10768 10769 When this option is not used, the default is `-march=ms1-16-002'. 10770 10771`-mbacc' 10772 Use byte loads and stores when generating code. 10773 10774`-mno-bacc' 10775 Do not use byte loads and stores when generating code. 10776 10777`-msim' 10778 Use simulator runtime 10779 10780`-mno-crt0' 10781 Do not link in the C run-time initialization object file `crti.o'. 10782 Other run-time initialization and termination files such as 10783 `startup.o' and `exit.o' are still included on the linker command 10784 line. 10785 10786 10787 10788File: gcc.info, Node: PDP-11 Options, Next: PowerPC Options, Prev: MT Options, Up: Submodel Options 10789 107903.17.25 PDP-11 Options 10791---------------------- 10792 10793These options are defined for the PDP-11: 10794 10795`-mfpu' 10796 Use hardware FPP floating point. This is the default. (FIS 10797 floating point on the PDP-11/40 is not supported.) 10798 10799`-msoft-float' 10800 Do not use hardware floating point. 10801 10802`-mac0' 10803 Return floating-point results in ac0 (fr0 in Unix assembler 10804 syntax). 10805 10806`-mno-ac0' 10807 Return floating-point results in memory. This is the default. 10808 10809`-m40' 10810 Generate code for a PDP-11/40. 10811 10812`-m45' 10813 Generate code for a PDP-11/45. This is the default. 10814 10815`-m10' 10816 Generate code for a PDP-11/10. 10817 10818`-mbcopy-builtin' 10819 Use inline `movmemhi' patterns for copying memory. This is the 10820 default. 10821 10822`-mbcopy' 10823 Do not use inline `movmemhi' patterns for copying memory. 10824 10825`-mint16' 10826`-mno-int32' 10827 Use 16-bit `int'. This is the default. 10828 10829`-mint32' 10830`-mno-int16' 10831 Use 32-bit `int'. 10832 10833`-mfloat64' 10834`-mno-float32' 10835 Use 64-bit `float'. This is the default. 10836 10837`-mfloat32' 10838`-mno-float64' 10839 Use 32-bit `float'. 10840 10841`-mabshi' 10842 Use `abshi2' pattern. This is the default. 10843 10844`-mno-abshi' 10845 Do not use `abshi2' pattern. 10846 10847`-mbranch-expensive' 10848 Pretend that branches are expensive. This is for experimenting 10849 with code generation only. 10850 10851`-mbranch-cheap' 10852 Do not pretend that branches are expensive. This is the default. 10853 10854`-msplit' 10855 Generate code for a system with split I&D. 10856 10857`-mno-split' 10858 Generate code for a system without split I&D. This is the default. 10859 10860`-munix-asm' 10861 Use Unix assembler syntax. This is the default when configured for 10862 `pdp11-*-bsd'. 10863 10864`-mdec-asm' 10865 Use DEC assembler syntax. This is the default when configured for 10866 any PDP-11 target other than `pdp11-*-bsd'. 10867 10868 10869File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 10870 108713.17.26 PowerPC Options 10872----------------------- 10873 10874These are listed under *Note RS/6000 and PowerPC Options::. 10875 10876 10877File: gcc.info, Node: RS/6000 and PowerPC Options, Next: S/390 and zSeries Options, Prev: PowerPC Options, Up: Submodel Options 10878 108793.17.27 IBM RS/6000 and PowerPC Options 10880--------------------------------------- 10881 10882These `-m' options are defined for the IBM RS/6000 and PowerPC: 10883`-mpower' 10884`-mno-power' 10885`-mpower2' 10886`-mno-power2' 10887`-mpowerpc' 10888`-mno-powerpc' 10889`-mpowerpc-gpopt' 10890`-mno-powerpc-gpopt' 10891`-mpowerpc-gfxopt' 10892`-mno-powerpc-gfxopt' 10893`-mpowerpc64' 10894`-mno-powerpc64' 10895`-mmfcrf' 10896`-mno-mfcrf' 10897`-mpopcntb' 10898`-mno-popcntb' 10899`-mfprnd' 10900`-mno-fprnd' 10901 GCC supports two related instruction set architectures for the 10902 RS/6000 and PowerPC. The "POWER" instruction set are those 10903 instructions supported by the `rios' chip set used in the original 10904 RS/6000 systems and the "PowerPC" instruction set is the 10905 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 10906 microprocessors, and the IBM 4xx, 6xx, and follow-on 10907 microprocessors. 10908 10909 Neither architecture is a subset of the other. However there is a 10910 large common subset of instructions supported by both. An MQ 10911 register is included in processors supporting the POWER 10912 architecture. 10913 10914 You use these options to specify which instructions are available 10915 on the processor you are using. The default value of these 10916 options is determined when configuring GCC. Specifying the 10917 `-mcpu=CPU_TYPE' overrides the specification of these options. We 10918 recommend you use the `-mcpu=CPU_TYPE' option rather than the 10919 options listed above. 10920 10921 The `-mpower' option allows GCC to generate instructions that are 10922 found only in the POWER architecture and to use the MQ register. 10923 Specifying `-mpower2' implies `-power' and also allows GCC to 10924 generate instructions that are present in the POWER2 architecture 10925 but not the original POWER architecture. 10926 10927 The `-mpowerpc' option allows GCC to generate instructions that 10928 are found only in the 32-bit subset of the PowerPC architecture. 10929 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 10930 GCC to use the optional PowerPC architecture instructions in the 10931 General Purpose group, including floating-point square root. 10932 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 10933 GCC to use the optional PowerPC architecture instructions in the 10934 Graphics group, including floating-point select. 10935 10936 The `-mmfcrf' option allows GCC to generate the move from 10937 condition register field instruction implemented on the POWER4 10938 processor and other processors that support the PowerPC V2.01 10939 architecture. The `-mpopcntb' option allows GCC to generate the 10940 popcount and double precision FP reciprocal estimate instruction 10941 implemented on the POWER5 processor and other processors that 10942 support the PowerPC V2.02 architecture. The `-mfprnd' option 10943 allows GCC to generate the FP round to integer instructions 10944 implemented on the POWER5+ processor and other processors that 10945 support the PowerPC V2.03 architecture. 10946 10947 The `-mpowerpc64' option allows GCC to generate the additional 10948 64-bit instructions that are found in the full PowerPC64 10949 architecture and to treat GPRs as 64-bit, doubleword quantities. 10950 GCC defaults to `-mno-powerpc64'. 10951 10952 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 10953 only the instructions in the common subset of both architectures 10954 plus some special AIX common-mode calls, and will not use the MQ 10955 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 10956 to use any instruction from either architecture and to allow use 10957 of the MQ register; specify this for the Motorola MPC601. 10958 10959`-mnew-mnemonics' 10960`-mold-mnemonics' 10961 Select which mnemonics to use in the generated assembler code. 10962 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 10963 for the PowerPC architecture. With `-mold-mnemonics' it uses the 10964 assembler mnemonics defined for the POWER architecture. 10965 Instructions defined in only one architecture have only one 10966 mnemonic; GCC uses that mnemonic irrespective of which of these 10967 options is specified. 10968 10969 GCC defaults to the mnemonics appropriate for the architecture in 10970 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 10971 these option. Unless you are building a cross-compiler, you 10972 should normally not specify either `-mnew-mnemonics' or 10973 `-mold-mnemonics', but should instead accept the default. 10974 10975`-mcpu=CPU_TYPE' 10976 Set architecture type, register usage, choice of mnemonics, and 10977 instruction scheduling parameters for machine type CPU_TYPE. 10978 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 10979 `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e', 10980 `620', `630', `740', `7400', `7450', `750', `801', `821', `823', 10981 `860', `970', `8540', `ec603e', `G3', `G4', `G5', `power', 10982 `power2', `power3', `power4', `power5', `power5+', `power6', 10983 `common', `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc', 10984 and `rs64'. 10985 10986 `-mcpu=common' selects a completely generic processor. Code 10987 generated under this option will run on any POWER or PowerPC 10988 processor. GCC will use only the instructions in the common 10989 subset of both architectures, and will not use the MQ register. 10990 GCC assumes a generic processor model for scheduling purposes. 10991 10992 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 10993 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 10994 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 10995 types, with an appropriate, generic processor model assumed for 10996 scheduling purposes. 10997 10998 The other options specify a specific processor. Code generated 10999 under those options will run best on that processor, and may not 11000 run at all on others. 11001 11002 The `-mcpu' options automatically enable or disable the following 11003 options: `-maltivec', `-mfprnd', `-mhard-float', `-mmfcrf', 11004 `-mmultiple', `-mnew-mnemonics', `-mpopcntb', `-mpower', 11005 `-mpower2', `-mpowerpc64', `-mpowerpc-gpopt', `-mpowerpc-gfxopt', 11006 `-mstring', `-mmulhw', `-mdlmzb'. The particular options set for 11007 any particular CPU will vary between compiler versions, depending 11008 on what setting seems to produce optimal code for that CPU; it 11009 doesn't necessarily reflect the actual hardware's capabilities. If 11010 you wish to set an individual option to a particular value, you may 11011 specify it after the `-mcpu' option, like `-mcpu=970 -mno-altivec'. 11012 11013 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 11014 or disabled by the `-mcpu' option at present because AIX does not 11015 have full support for these options. You may still enable or 11016 disable them individually if you're sure it'll work in your 11017 environment. 11018 11019`-mtune=CPU_TYPE' 11020 Set the instruction scheduling parameters for machine type 11021 CPU_TYPE, but do not set the architecture type, register usage, or 11022 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 11023 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 11024 specified, the code generated will use the architecture, 11025 registers, and mnemonics set by `-mcpu', but the scheduling 11026 parameters set by `-mtune'. 11027 11028`-mswdiv' 11029`-mno-swdiv' 11030 Generate code to compute division as reciprocal estimate and 11031 iterative refinement, creating opportunities for increased 11032 throughput. This feature requires: optional PowerPC Graphics 11033 instruction set for single precision and FRE instruction for 11034 double precision, assuming divides cannot generate user-visible 11035 traps, and the domain values not include Infinities, denormals or 11036 zero denominator. 11037 11038`-maltivec' 11039`-mno-altivec' 11040 Generate code that uses (does not use) AltiVec instructions, and 11041 also enable the use of built-in functions that allow more direct 11042 access to the AltiVec instruction set. You may also need to set 11043 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 11044 enhancements. 11045 11046`-mvrsave' 11047 11048`-mno-vrsave' 11049 Generate VRSAVE instructions when generating AltiVec code. 11050 11051`-msecure-plt' 11052 Generate code that allows ld and ld.so to build executables and 11053 shared libraries with non-exec .plt and .got sections. This is a 11054 PowerPC 32-bit SYSV ABI option. 11055 11056`-mbss-plt' 11057 Generate code that uses a BSS .plt section that ld.so fills in, and 11058 requires .plt and .got sections that are both writable and 11059 executable. This is a PowerPC 32-bit SYSV ABI option. 11060 11061`-misel' 11062`-mno-isel' 11063 This switch enables or disables the generation of ISEL 11064 instructions. 11065 11066`-misel=YES/NO' 11067 This switch has been deprecated. Use `-misel' and `-mno-isel' 11068 instead. 11069 11070`-mspe' 11071`-mno-spe' 11072 This switch enables or disables the generation of SPE simd 11073 instructions. 11074 11075`-mspe=YES/NO' 11076 This option has been deprecated. Use `-mspe' and `-mno-spe' 11077 instead. 11078 11079`-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 11080`-mfloat-gprs' 11081 This switch enables or disables the generation of floating point 11082 operations on the general purpose registers for architectures that 11083 support it. 11084 11085 The argument YES or SINGLE enables the use of single-precision 11086 floating point operations. 11087 11088 The argument DOUBLE enables the use of single and double-precision 11089 floating point operations. 11090 11091 The argument NO disables floating point operations on the general 11092 purpose registers. 11093 11094 This option is currently only available on the MPC854x. 11095 11096`-m32' 11097`-m64' 11098 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 11099 targets (including GNU/Linux). The 32-bit environment sets int, 11100 long and pointer to 32 bits and generates code that runs on any 11101 PowerPC variant. The 64-bit environment sets int to 32 bits and 11102 long and pointer to 64 bits, and generates code for PowerPC64, as 11103 for `-mpowerpc64'. 11104 11105`-mfull-toc' 11106`-mno-fp-in-toc' 11107`-mno-sum-in-toc' 11108`-mminimal-toc' 11109 Modify generation of the TOC (Table Of Contents), which is created 11110 for every executable file. The `-mfull-toc' option is selected by 11111 default. In that case, GCC will allocate at least one TOC entry 11112 for each unique non-automatic variable reference in your program. 11113 GCC will also place floating-point constants in the TOC. However, 11114 only 16,384 entries are available in the TOC. 11115 11116 If you receive a linker error message that saying you have 11117 overflowed the available TOC space, you can reduce the amount of 11118 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 11119 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 11120 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 11121 code to calculate the sum of an address and a constant at run-time 11122 instead of putting that sum into the TOC. You may specify one or 11123 both of these options. Each causes GCC to produce very slightly 11124 slower and larger code at the expense of conserving TOC space. 11125 11126 If you still run out of space in the TOC even when you specify 11127 both of these options, specify `-mminimal-toc' instead. This 11128 option causes GCC to make only one TOC entry for every file. When 11129 you specify this option, GCC will produce code that is slower and 11130 larger but which uses extremely little TOC space. You may wish to 11131 use this option only on files that contain less frequently 11132 executed code. 11133 11134`-maix64' 11135`-maix32' 11136 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 11137 64-bit `long' type, and the infrastructure needed to support them. 11138 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 11139 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 11140 GCC defaults to `-maix32'. 11141 11142`-mxl-compat' 11143`-mno-xl-compat' 11144 Produce code that conforms more closely to IBM XL compiler 11145 semantics when using AIX-compatible ABI. Pass floating-point 11146 arguments to prototyped functions beyond the register save area 11147 (RSA) on the stack in addition to argument FPRs. Do not assume 11148 that most significant double in 128-bit long double value is 11149 properly rounded when comparing values and converting to double. 11150 Use XL symbol names for long double support routines. 11151 11152 The AIX calling convention was extended but not initially 11153 documented to handle an obscure K&R C case of calling a function 11154 that takes the address of its arguments with fewer arguments than 11155 declared. IBM XL compilers access floating point arguments which 11156 do not fit in the RSA from the stack when a subroutine is compiled 11157 without optimization. Because always storing floating-point 11158 arguments on the stack is inefficient and rarely needed, this 11159 option is not enabled by default and only is necessary when 11160 calling subroutines compiled by IBM XL compilers without 11161 optimization. 11162 11163`-mpe' 11164 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 11165 application written to use message passing with special startup 11166 code to enable the application to run. The system must have PE 11167 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 11168 `specs' file must be overridden with the `-specs=' option to 11169 specify the appropriate directory location. The Parallel 11170 Environment does not support threads, so the `-mpe' option and the 11171 `-pthread' option are incompatible. 11172 11173`-malign-natural' 11174`-malign-power' 11175 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 11176 `-malign-natural' overrides the ABI-defined alignment of larger 11177 types, such as floating-point doubles, on their natural size-based 11178 boundary. The option `-malign-power' instructs GCC to follow the 11179 ABI-specified alignment rules. GCC defaults to the standard 11180 alignment defined in the ABI. 11181 11182 On 64-bit Darwin, natural alignment is the default, and 11183 `-malign-power' is not supported. 11184 11185`-msoft-float' 11186`-mhard-float' 11187 Generate code that does not use (uses) the floating-point register 11188 set. Software floating point emulation is provided if you use the 11189 `-msoft-float' option, and pass the option to GCC when linking. 11190 11191`-mmultiple' 11192`-mno-multiple' 11193 Generate code that uses (does not use) the load multiple word 11194 instructions and the store multiple word instructions. These 11195 instructions are generated by default on POWER systems, and not 11196 generated on PowerPC systems. Do not use `-mmultiple' on little 11197 endian PowerPC systems, since those instructions do not work when 11198 the processor is in little endian mode. The exceptions are PPC740 11199 and PPC750 which permit the instructions usage in little endian 11200 mode. 11201 11202`-mstring' 11203`-mno-string' 11204 Generate code that uses (does not use) the load string instructions 11205 and the store string word instructions to save multiple registers 11206 and do small block moves. These instructions are generated by 11207 default on POWER systems, and not generated on PowerPC systems. 11208 Do not use `-mstring' on little endian PowerPC systems, since those 11209 instructions do not work when the processor is in little endian 11210 mode. The exceptions are PPC740 and PPC750 which permit the 11211 instructions usage in little endian mode. 11212 11213`-mupdate' 11214`-mno-update' 11215 Generate code that uses (does not use) the load or store 11216 instructions that update the base register to the address of the 11217 calculated memory location. These instructions are generated by 11218 default. If you use `-mno-update', there is a small window 11219 between the time that the stack pointer is updated and the address 11220 of the previous frame is stored, which means code that walks the 11221 stack frame across interrupts or signals may get corrupted data. 11222 11223`-mfused-madd' 11224`-mno-fused-madd' 11225 Generate code that uses (does not use) the floating point multiply 11226 and accumulate instructions. These instructions are generated by 11227 default if hardware floating is used. 11228 11229`-mmulhw' 11230`-mno-mulhw' 11231 Generate code that uses (does not use) the half-word multiply and 11232 multiply-accumulate instructions on the IBM 405 and 440 processors. 11233 These instructions are generated by default when targetting those 11234 processors. 11235 11236`-mdlmzb' 11237`-mno-dlmzb' 11238 Generate code that uses (does not use) the string-search `dlmzb' 11239 instruction on the IBM 405 and 440 processors. This instruction is 11240 generated by default when targetting those processors. 11241 11242`-mno-bit-align' 11243`-mbit-align' 11244 On System V.4 and embedded PowerPC systems do not (do) force 11245 structures and unions that contain bit-fields to be aligned to the 11246 base type of the bit-field. 11247 11248 For example, by default a structure containing nothing but 8 11249 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 11250 boundary and have a size of 4 bytes. By using `-mno-bit-align', 11251 the structure would be aligned to a 1 byte boundary and be one 11252 byte in size. 11253 11254`-mno-strict-align' 11255`-mstrict-align' 11256 On System V.4 and embedded PowerPC systems do not (do) assume that 11257 unaligned memory references will be handled by the system. 11258 11259`-mrelocatable' 11260`-mno-relocatable' 11261 On embedded PowerPC systems generate code that allows (does not 11262 allow) the program to be relocated to a different address at 11263 runtime. If you use `-mrelocatable' on any module, all objects 11264 linked together must be compiled with `-mrelocatable' or 11265 `-mrelocatable-lib'. 11266 11267`-mrelocatable-lib' 11268`-mno-relocatable-lib' 11269 On embedded PowerPC systems generate code that allows (does not 11270 allow) the program to be relocated to a different address at 11271 runtime. Modules compiled with `-mrelocatable-lib' can be linked 11272 with either modules compiled without `-mrelocatable' and 11273 `-mrelocatable-lib' or with modules compiled with the 11274 `-mrelocatable' options. 11275 11276`-mno-toc' 11277`-mtoc' 11278 On System V.4 and embedded PowerPC systems do not (do) assume that 11279 register 2 contains a pointer to a global area pointing to the 11280 addresses used in the program. 11281 11282`-mlittle' 11283`-mlittle-endian' 11284 On System V.4 and embedded PowerPC systems compile code for the 11285 processor in little endian mode. The `-mlittle-endian' option is 11286 the same as `-mlittle'. 11287 11288`-mbig' 11289`-mbig-endian' 11290 On System V.4 and embedded PowerPC systems compile code for the 11291 processor in big endian mode. The `-mbig-endian' option is the 11292 same as `-mbig'. 11293 11294`-mdynamic-no-pic' 11295 On Darwin and Mac OS X systems, compile code so that it is not 11296 relocatable, but that its external references are relocatable. The 11297 resulting code is suitable for applications, but not shared 11298 libraries. 11299 11300`-mprioritize-restricted-insns=PRIORITY' 11301 This option controls the priority that is assigned to 11302 dispatch-slot restricted instructions during the second scheduling 11303 pass. The argument PRIORITY takes the value 0/1/2 to assign 11304 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 11305 instructions. 11306 11307`-msched-costly-dep=DEPENDENCE_TYPE' 11308 This option controls which dependences are considered costly by 11309 the target during instruction scheduling. The argument 11310 DEPENDENCE_TYPE takes one of the following values: NO: no 11311 dependence is costly, ALL: all dependences are costly, 11312 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 11313 STORE_TO_LOAD: any dependence from store to load is costly, 11314 NUMBER: any dependence which latency >= NUMBER is costly. 11315 11316`-minsert-sched-nops=SCHEME' 11317 This option controls which nop insertion scheme will be used during 11318 the second scheduling pass. The argument SCHEME takes one of the 11319 following values: NO: Don't insert nops. PAD: Pad with nops any 11320 dispatch group which has vacant issue slots, according to the 11321 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 11322 dependent insns into separate groups. Insert exactly as many nops 11323 as needed to force an insn to a new group, according to the 11324 estimated processor grouping. NUMBER: Insert nops to force costly 11325 dependent insns into separate groups. Insert NUMBER nops to force 11326 an insn to a new group. 11327 11328`-mcall-sysv' 11329 On System V.4 and embedded PowerPC systems compile code using 11330 calling conventions that adheres to the March 1995 draft of the 11331 System V Application Binary Interface, PowerPC processor 11332 supplement. This is the default unless you configured GCC using 11333 `powerpc-*-eabiaix'. 11334 11335`-mcall-sysv-eabi' 11336 Specify both `-mcall-sysv' and `-meabi' options. 11337 11338`-mcall-sysv-noeabi' 11339 Specify both `-mcall-sysv' and `-mno-eabi' options. 11340 11341`-mcall-solaris' 11342 On System V.4 and embedded PowerPC systems compile code for the 11343 Solaris operating system. 11344 11345`-mcall-linux' 11346 On System V.4 and embedded PowerPC systems compile code for the 11347 Linux-based GNU system. 11348 11349`-mcall-gnu' 11350 On System V.4 and embedded PowerPC systems compile code for the 11351 Hurd-based GNU system. 11352 11353`-mcall-netbsd' 11354 On System V.4 and embedded PowerPC systems compile code for the 11355 NetBSD operating system. 11356 11357`-maix-struct-return' 11358 Return all structures in memory (as specified by the AIX ABI). 11359 11360`-msvr4-struct-return' 11361 Return structures smaller than 8 bytes in registers (as specified 11362 by the SVR4 ABI). 11363 11364`-mabi=ABI-TYPE' 11365 Extend the current ABI with a particular extension, or remove such 11366 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 11367 IBMLONGDOUBLE, IEEELONGDOUBLE. 11368 11369`-mabi=spe' 11370 Extend the current ABI with SPE ABI extensions. This does not 11371 change the default ABI, instead it adds the SPE ABI extensions to 11372 the current ABI. 11373 11374`-mabi=no-spe' 11375 Disable Booke SPE ABI extensions for the current ABI. 11376 11377`-mabi=ibmlongdouble' 11378 Change the current ABI to use IBM extended precision long double. 11379 This is a PowerPC 32-bit SYSV ABI option. 11380 11381`-mabi=ieeelongdouble' 11382 Change the current ABI to use IEEE extended precision long double. 11383 This is a PowerPC 32-bit Linux ABI option. 11384 11385`-mprototype' 11386`-mno-prototype' 11387 On System V.4 and embedded PowerPC systems assume that all calls to 11388 variable argument functions are properly prototyped. Otherwise, 11389 the compiler must insert an instruction before every non 11390 prototyped call to set or clear bit 6 of the condition code 11391 register (CR) to indicate whether floating point values were 11392 passed in the floating point registers in case the function takes 11393 a variable arguments. With `-mprototype', only calls to 11394 prototyped variable argument functions will set or clear the bit. 11395 11396`-msim' 11397 On embedded PowerPC systems, assume that the startup module is 11398 called `sim-crt0.o' and that the standard C libraries are 11399 `libsim.a' and `libc.a'. This is the default for 11400 `powerpc-*-eabisim'. configurations. 11401 11402`-mmvme' 11403 On embedded PowerPC systems, assume that the startup module is 11404 called `crt0.o' and the standard C libraries are `libmvme.a' and 11405 `libc.a'. 11406 11407`-mads' 11408 On embedded PowerPC systems, assume that the startup module is 11409 called `crt0.o' and the standard C libraries are `libads.a' and 11410 `libc.a'. 11411 11412`-myellowknife' 11413 On embedded PowerPC systems, assume that the startup module is 11414 called `crt0.o' and the standard C libraries are `libyk.a' and 11415 `libc.a'. 11416 11417`-mvxworks' 11418 On System V.4 and embedded PowerPC systems, specify that you are 11419 compiling for a VxWorks system. 11420 11421`-mwindiss' 11422 Specify that you are compiling for the WindISS simulation 11423 environment. 11424 11425`-memb' 11426 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 11427 header to indicate that `eabi' extended relocations are used. 11428 11429`-meabi' 11430`-mno-eabi' 11431 On System V.4 and embedded PowerPC systems do (do not) adhere to 11432 the Embedded Applications Binary Interface (eabi) which is a set of 11433 modifications to the System V.4 specifications. Selecting `-meabi' 11434 means that the stack is aligned to an 8 byte boundary, a function 11435 `__eabi' is called to from `main' to set up the eabi environment, 11436 and the `-msdata' option can use both `r2' and `r13' to point to 11437 two separate small data areas. Selecting `-mno-eabi' means that 11438 the stack is aligned to a 16 byte boundary, do not call an 11439 initialization function from `main', and the `-msdata' option will 11440 only use `r13' to point to a single small data area. The `-meabi' 11441 option is on by default if you configured GCC using one of the 11442 `powerpc*-*-eabi*' options. 11443 11444`-msdata=eabi' 11445 On System V.4 and embedded PowerPC systems, put small initialized 11446 `const' global and static data in the `.sdata2' section, which is 11447 pointed to by register `r2'. Put small initialized non-`const' 11448 global and static data in the `.sdata' section, which is pointed 11449 to by register `r13'. Put small uninitialized global and static 11450 data in the `.sbss' section, which is adjacent to the `.sdata' 11451 section. The `-msdata=eabi' option is incompatible with the 11452 `-mrelocatable' option. The `-msdata=eabi' option also sets the 11453 `-memb' option. 11454 11455`-msdata=sysv' 11456 On System V.4 and embedded PowerPC systems, put small global and 11457 static data in the `.sdata' section, which is pointed to by 11458 register `r13'. Put small uninitialized global and static data in 11459 the `.sbss' section, which is adjacent to the `.sdata' section. 11460 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 11461 option. 11462 11463`-msdata=default' 11464`-msdata' 11465 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 11466 compile code the same as `-msdata=eabi', otherwise compile code the 11467 same as `-msdata=sysv'. 11468 11469`-msdata-data' 11470 On System V.4 and embedded PowerPC systems, put small global data 11471 in the `.sdata' section. Put small uninitialized global data in 11472 the `.sbss' section. Do not use register `r13' to address small 11473 data however. This is the default behavior unless other `-msdata' 11474 options are used. 11475 11476`-msdata=none' 11477`-mno-sdata' 11478 On embedded PowerPC systems, put all initialized global and static 11479 data in the `.data' section, and all uninitialized data in the 11480 `.bss' section. 11481 11482`-G NUM' 11483 On embedded PowerPC systems, put global and static items less than 11484 or equal to NUM bytes into the small data or bss sections instead 11485 of the normal data or bss section. By default, NUM is 8. The `-G 11486 NUM' switch is also passed to the linker. All modules should be 11487 compiled with the same `-G NUM' value. 11488 11489`-mregnames' 11490`-mno-regnames' 11491 On System V.4 and embedded PowerPC systems do (do not) emit 11492 register names in the assembly language output using symbolic 11493 forms. 11494 11495`-mlongcall' 11496`-mno-longcall' 11497 By default assume that all calls are far away so that a longer more 11498 expensive calling sequence is required. This is required for calls 11499 further than 32 megabytes (33,554,432 bytes) from the current 11500 location. A short call will be generated if the compiler knows 11501 the call cannot be that far away. This setting can be overridden 11502 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 11503 11504 Some linkers are capable of detecting out-of-range calls and 11505 generating glue code on the fly. On these systems, long calls are 11506 unnecessary and generate slower code. As of this writing, the AIX 11507 linker can do this, as can the GNU linker for PowerPC/64. It is 11508 planned to add this feature to the GNU linker for 32-bit PowerPC 11509 systems as well. 11510 11511 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 11512 callee, L42", plus a "branch island" (glue code). The two target 11513 addresses represent the callee and the "branch island". The 11514 Darwin/PPC linker will prefer the first address and generate a "bl 11515 callee" if the PPC "bl" instruction will reach the callee directly; 11516 otherwise, the linker will generate "bl L42" to call the "branch 11517 island". The "branch island" is appended to the body of the 11518 calling function; it computes the full 32-bit address of the callee 11519 and jumps to it. 11520 11521 On Mach-O (Darwin) systems, this option directs the compiler emit 11522 to the glue for every direct call, and the Darwin linker decides 11523 whether to use or discard it. 11524 11525 In the future, we may cause GCC to ignore all longcall 11526 specifications when the linker is known to generate glue. 11527 11528`-pthread' 11529 Adds support for multithreading with the "pthreads" library. This 11530 option sets flags for both the preprocessor and linker. 11531 11532 11533 11534File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 11535 115363.17.28 S/390 and zSeries Options 11537--------------------------------- 11538 11539These are the `-m' options defined for the S/390 and zSeries 11540architecture. 11541 11542`-mhard-float' 11543`-msoft-float' 11544 Use (do not use) the hardware floating-point instructions and 11545 registers for floating-point operations. When `-msoft-float' is 11546 specified, functions in `libgcc.a' will be used to perform 11547 floating-point operations. When `-mhard-float' is specified, the 11548 compiler generates IEEE floating-point instructions. This is the 11549 default. 11550 11551`-mlong-double-64' 11552`-mlong-double-128' 11553 These switches control the size of `long double' type. A size of 11554 64bit makes the `long double' type equivalent to the `double' 11555 type. This is the default. 11556 11557`-mbackchain' 11558`-mno-backchain' 11559 Store (do not store) the address of the caller's frame as 11560 backchain pointer into the callee's stack frame. A backchain may 11561 be needed to allow debugging using tools that do not understand 11562 DWARF-2 call frame information. When `-mno-packed-stack' is in 11563 effect, the backchain pointer is stored at the bottom of the stack 11564 frame; when `-mpacked-stack' is in effect, the backchain is placed 11565 into the topmost word of the 96/160 byte register save area. 11566 11567 In general, code compiled with `-mbackchain' is call-compatible 11568 with code compiled with `-mmo-backchain'; however, use of the 11569 backchain for debugging purposes usually requires that the whole 11570 binary is built with `-mbackchain'. Note that the combination of 11571 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 11572 supported. In order to build a linux kernel use `-msoft-float'. 11573 11574 The default is to not maintain the backchain. 11575 11576`-mpacked-stack' 11577 11578`-mno-packed-stack' 11579 Use (do not use) the packed stack layout. When 11580 `-mno-packed-stack' is specified, the compiler uses the all fields 11581 of the 96/160 byte register save area only for their default 11582 purpose; unused fields still take up stack space. When 11583 `-mpacked-stack' is specified, register save slots are densely 11584 packed at the top of the register save area; unused space is 11585 reused for other purposes, allowing for more efficient use of the 11586 available stack space. However, when `-mbackchain' is also in 11587 effect, the topmost word of the save area is always used to store 11588 the backchain, and the return address register is always saved two 11589 words below the backchain. 11590 11591 As long as the stack frame backchain is not used, code generated 11592 with `-mpacked-stack' is call-compatible with code generated with 11593 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 11594 for S/390 or zSeries generated code that uses the stack frame 11595 backchain at run time, not just for debugging purposes. Such code 11596 is not call-compatible with code compiled with `-mpacked-stack'. 11597 Also, note that the combination of `-mbackchain', `-mpacked-stack' 11598 and `-mhard-float' is not supported. In order to build a linux 11599 kernel use `-msoft-float'. 11600 11601 The default is to not use the packed stack layout. 11602 11603`-msmall-exec' 11604`-mno-small-exec' 11605 Generate (or do not generate) code using the `bras' instruction to 11606 do subroutine calls. This only works reliably if the total 11607 executable size does not exceed 64k. The default is to use the 11608 `basr' instruction instead, which does not have this limitation. 11609 11610`-m64' 11611`-m31' 11612 When `-m31' is specified, generate code compliant to the GNU/Linux 11613 for S/390 ABI. When `-m64' is specified, generate code compliant 11614 to the GNU/Linux for zSeries ABI. This allows GCC in particular 11615 to generate 64-bit instructions. For the `s390' targets, the 11616 default is `-m31', while the `s390x' targets default to `-m64'. 11617 11618`-mzarch' 11619`-mesa' 11620 When `-mzarch' is specified, generate code using the instructions 11621 available on z/Architecture. When `-mesa' is specified, generate 11622 code using the instructions available on ESA/390. Note that 11623 `-mesa' is not possible with `-m64'. When generating code 11624 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 11625 When generating code compliant to the GNU/Linux for zSeries ABI, 11626 the default is `-mzarch'. 11627 11628`-mmvcle' 11629`-mno-mvcle' 11630 Generate (or do not generate) code using the `mvcle' instruction 11631 to perform block moves. When `-mno-mvcle' is specified, use a 11632 `mvc' loop instead. This is the default unless optimizing for 11633 size. 11634 11635`-mdebug' 11636`-mno-debug' 11637 Print (or do not print) additional debug information when 11638 compiling. The default is to not print debug information. 11639 11640`-march=CPU-TYPE' 11641 Generate code that will run on CPU-TYPE, which is the name of a 11642 system representing a certain processor type. Possible values for 11643 CPU-TYPE are `g5', `g6', `z900', and `z990'. When generating code 11644 using the instructions available on z/Architecture, the default is 11645 `-march=z900'. Otherwise, the default is `-march=g5'. 11646 11647`-mtune=CPU-TYPE' 11648 Tune to CPU-TYPE everything applicable about the generated code, 11649 except for the ABI and the set of available instructions. The 11650 list of CPU-TYPE values is the same as for `-march'. The default 11651 is the value used for `-march'. 11652 11653`-mtpf-trace' 11654`-mno-tpf-trace' 11655 Generate code that adds (does not add) in TPF OS specific branches 11656 to trace routines in the operating system. This option is off by 11657 default, even when compiling for the TPF OS. 11658 11659`-mfused-madd' 11660`-mno-fused-madd' 11661 Generate code that uses (does not use) the floating point multiply 11662 and accumulate instructions. These instructions are generated by 11663 default if hardware floating point is used. 11664 11665`-mwarn-framesize=FRAMESIZE' 11666 Emit a warning if the current function exceeds the given frame 11667 size. Because this is a compile time check it doesn't need to be 11668 a real problem when the program runs. It is intended to identify 11669 functions which most probably cause a stack overflow. It is 11670 useful to be used in an environment with limited stack size e.g. 11671 the linux kernel. 11672 11673`-mwarn-dynamicstack' 11674 Emit a warning if the function calls alloca or uses dynamically 11675 sized arrays. This is generally a bad idea with a limited stack 11676 size. 11677 11678`-mstack-guard=STACK-GUARD' 11679 11680`-mstack-size=STACK-SIZE' 11681 These arguments always have to be used in conjunction. If they 11682 are present the s390 back end emits additional instructions in the 11683 function prologue which trigger a trap if the stack size is 11684 STACK-GUARD bytes above the STACK-SIZE (remember that the stack on 11685 s390 grows downward). These options are intended to be used to 11686 help debugging stack overflow problems. The additionally emitted 11687 code causes only little overhead and hence can also be used in 11688 production like systems without greater performance degradation. 11689 The given values have to be exact powers of 2 and STACK-SIZE has 11690 to be greater than STACK-GUARD without exceeding 64k. In order to 11691 be efficient the extra code makes the assumption that the stack 11692 starts at an address aligned to the value given by STACK-SIZE. 11693 11694 11695File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 11696 116973.17.29 Score Options 11698--------------------- 11699 11700These options are defined for Score implementations: 11701 11702`-meb' 11703 Compile code for big endian mode. This is the default. 11704 11705`-mel' 11706 Compile code for little endian mode. 11707 11708`-mnhwloop' 11709 Disable generate bcnz instruction. 11710 11711`-muls' 11712 Enable generate unaligned load and store instruction. 11713 11714`-mmac' 11715 Enable the use of multiply-accumulate instructions. Disabled by 11716 default. 11717 11718`-mscore5' 11719 Specify the SCORE5 as the target architecture. 11720 11721`-mscore5u' 11722 Specify the SCORE5U of the target architecture. 11723 11724`-mscore7' 11725 Specify the SCORE7 as the target architecture. This is the default. 11726 11727`-mscore7d' 11728 Specify the SCORE7D as the target architecture. 11729 11730 11731File: gcc.info, Node: SH Options, Next: SPARC Options, Prev: Score Options, Up: Submodel Options 11732 117333.17.30 SH Options 11734------------------ 11735 11736These `-m' options are defined for the SH implementations: 11737 11738`-m1' 11739 Generate code for the SH1. 11740 11741`-m2' 11742 Generate code for the SH2. 11743 11744`-m2e' 11745 Generate code for the SH2e. 11746 11747`-m3' 11748 Generate code for the SH3. 11749 11750`-m3e' 11751 Generate code for the SH3e. 11752 11753`-m4-nofpu' 11754 Generate code for the SH4 without a floating-point unit. 11755 11756`-m4-single-only' 11757 Generate code for the SH4 with a floating-point unit that only 11758 supports single-precision arithmetic. 11759 11760`-m4-single' 11761 Generate code for the SH4 assuming the floating-point unit is in 11762 single-precision mode by default. 11763 11764`-m4' 11765 Generate code for the SH4. 11766 11767`-m4a-nofpu' 11768 Generate code for the SH4al-dsp, or for a SH4a in such a way that 11769 the floating-point unit is not used. 11770 11771`-m4a-single-only' 11772 Generate code for the SH4a, in such a way that no double-precision 11773 floating point operations are used. 11774 11775`-m4a-single' 11776 Generate code for the SH4a assuming the floating-point unit is in 11777 single-precision mode by default. 11778 11779`-m4a' 11780 Generate code for the SH4a. 11781 11782`-m4al' 11783 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 11784 the assembler. GCC doesn't generate any DSP instructions at the 11785 moment. 11786 11787`-mb' 11788 Compile code for the processor in big endian mode. 11789 11790`-ml' 11791 Compile code for the processor in little endian mode. 11792 11793`-mdalign' 11794 Align doubles at 64-bit boundaries. Note that this changes the 11795 calling conventions, and thus some functions from the standard C 11796 library will not work unless you recompile it first with 11797 `-mdalign'. 11798 11799`-mrelax' 11800 Shorten some address references at link time, when possible; uses 11801 the linker option `-relax'. 11802 11803`-mbigtable' 11804 Use 32-bit offsets in `switch' tables. The default is to use 11805 16-bit offsets. 11806 11807`-mfmovd' 11808 Enable the use of the instruction `fmovd'. 11809 11810`-mhitachi' 11811 Comply with the calling conventions defined by Renesas. 11812 11813`-mrenesas' 11814 Comply with the calling conventions defined by Renesas. 11815 11816`-mno-renesas' 11817 Comply with the calling conventions defined for GCC before the 11818 Renesas conventions were available. This option is the default 11819 for all targets of the SH toolchain except for `sh-symbianelf'. 11820 11821`-mnomacsave' 11822 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 11823 given. 11824 11825`-mieee' 11826 Increase IEEE-compliance of floating-point code. At the moment, 11827 this is equivalent to `-fno-finite-math-only'. When generating 16 11828 bit SH opcodes, getting IEEE-conforming results for comparisons of 11829 NANs / infinities incurs extra overhead in every floating point 11830 comparison, therefore the default is set to `-ffinite-math-only'. 11831 11832`-misize' 11833 Dump instruction size and location in the assembly code. 11834 11835`-mpadstruct' 11836 This option is deprecated. It pads structures to multiple of 4 11837 bytes, which is incompatible with the SH ABI. 11838 11839`-mspace' 11840 Optimize for space instead of speed. Implied by `-Os'. 11841 11842`-mprefergot' 11843 When generating position-independent code, emit function calls 11844 using the Global Offset Table instead of the Procedure Linkage 11845 Table. 11846 11847`-musermode' 11848 Generate a library function call to invalidate instruction cache 11849 entries, after fixing up a trampoline. This library function call 11850 doesn't assume it can write to the whole memory address space. 11851 This is the default when the target is `sh-*-linux*'. 11852 11853`-multcost=NUMBER' 11854 Set the cost to assume for a multiply insn. 11855 11856`-mdiv=STRATEGY' 11857 Set the division strategy to use for SHmedia code. STRATEGY must 11858 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 11859 inv:call, inv:call2, inv:fp . "fp" performs the operation in 11860 floating point. This has a very high latency, but needs only a 11861 few instructions, so it might be a good choice if your code has 11862 enough easily exploitable ILP to allow the compiler to schedule 11863 the floating point instructions together with other instructions. 11864 Division by zero causes a floating point exception. "inv" uses 11865 integer operations to calculate the inverse of the divisor, and 11866 then multiplies the dividend with the inverse. This strategy 11867 allows cse and hoisting of the inverse calculation. Division by 11868 zero calculates an unspecified result, but does not trap. 11869 "inv:minlat" is a variant of "inv" where if no cse / hoisting 11870 opportunities have been found, or if the entire operation has been 11871 hoisted to the same place, the last stages of the inverse 11872 calculation are intertwined with the final multiply to reduce the 11873 overall latency, at the expense of using a few more instructions, 11874 and thus offering fewer scheduling opportunities with other code. 11875 "call" calls a library function that usually implements the 11876 inv:minlat strategy. This gives high code density for 11877 m5-*media-nofpu compilations. "call2" uses a different entry 11878 point of the same library function, where it assumes that a 11879 pointer to a lookup table has already been set up, which exposes 11880 the pointer load to cse / code hoisting optimizations. 11881 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 11882 for initial code generation, but if the code stays unoptimized, 11883 revert to the "call", "call2", or "fp" strategies, respectively. 11884 Note that the potentially-trapping side effect of division by zero 11885 is carried by a separate instruction, so it is possible that all 11886 the integer instructions are hoisted out, but the marker for the 11887 side effect stays where it is. A recombination to fp operations 11888 or a call is not possible in that case. "inv20u" and "inv20l" are 11889 variants of the "inv:minlat" strategy. In the case that the 11890 inverse calculation was nor separated from the multiply, they speed 11891 up division where the dividend fits into 20 bits (plus sign where 11892 applicable), by inserting a test to skip a number of operations in 11893 this case; this test slows down the case of larger dividends. 11894 inv20u assumes the case of a such a small dividend to be unlikely, 11895 and inv20l assumes it to be likely. 11896 11897`-mdivsi3_libfunc=NAME' 11898 Set the name of the library function used for 32 bit signed 11899 division to NAME. This only affect the name used in the call and 11900 inv:call division strategies, and the compiler will still expect 11901 the same sets of input/output/clobbered registers as if this 11902 option was not present. 11903 11904`-madjust-unroll' 11905 Throttle unrolling to avoid thrashing target registers. This 11906 option only has an effect if the gcc code base supports the 11907 TARGET_ADJUST_UNROLL_MAX target hook. 11908 11909`-mindexed-addressing' 11910 Enable the use of the indexed addressing mode for 11911 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 11912 implement 32 bit wrap-around semantics for the indexed addressing 11913 mode. The architecture allows the implementation of processors 11914 with 64 bit MMU, which the OS could use to get 32 bit addressing, 11915 but since no current hardware implementation supports this or any 11916 other way to make the indexed addressing mode safe to use in the 11917 32 bit ABI, the default is -mno-indexed-addressing. 11918 11919`-mgettrcost=NUMBER' 11920 Set the cost assumed for the gettr instruction to NUMBER. The 11921 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 11922 11923`-mpt-fixed' 11924 Assume pt* instructions won't trap. This will generally generate 11925 better scheduled code, but is unsafe on current hardware. The 11926 current architecture definition says that ptabs and ptrel trap 11927 when the target anded with 3 is 3. This has the unintentional 11928 effect of making it unsafe to schedule ptabs / ptrel before a 11929 branch, or hoist it out of a loop. For example, 11930 __do_global_ctors, a part of libgcc that runs constructors at 11931 program startup, calls functions in a list which is delimited by 11932 -1. With the -mpt-fixed option, the ptabs will be done before 11933 testing against -1. That means that all the constructors will be 11934 run a bit quicker, but when the loop comes to the end of the list, 11935 the program crashes because ptabs loads -1 into a target register. 11936 Since this option is unsafe for any hardware implementing the 11937 current architecture specification, the default is -mno-pt-fixed. 11938 Unless the user specifies a specific cost with `-mgettrcost', 11939 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 11940 allocation using target registers for storing ordinary integers. 11941 11942`-minvalid-symbols' 11943 Assume symbols might be invalid. Ordinary function symbols 11944 generated by the compiler will always be valid to load with 11945 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 11946 linker tricks it is possible to generate symbols that will cause 11947 ptabs / ptrel to trap. This option is only meaningful when 11948 `-mno-pt-fixed' is in effect. It will then prevent 11949 cross-basic-block cse, hoisting and most scheduling of symbol 11950 loads. The default is `-mno-invalid-symbols'. 11951 11952 11953File: gcc.info, Node: SPARC Options, Next: System V Options, Prev: SH Options, Up: Submodel Options 11954 119553.17.31 SPARC Options 11956--------------------- 11957 11958These `-m' options are supported on the SPARC: 11959 11960`-mno-app-regs' 11961`-mapp-regs' 11962 Specify `-mapp-regs' to generate output using the global registers 11963 2 through 4, which the SPARC SVR4 ABI reserves for applications. 11964 This is the default. 11965 11966 To be fully SVR4 ABI compliant at the cost of some performance 11967 loss, specify `-mno-app-regs'. You should compile libraries and 11968 system software with this option. 11969 11970`-mfpu' 11971`-mhard-float' 11972 Generate output containing floating point instructions. This is 11973 the default. 11974 11975`-mno-fpu' 11976`-msoft-float' 11977 Generate output containing library calls for floating point. 11978 *Warning:* the requisite libraries are not available for all SPARC 11979 targets. Normally the facilities of the machine's usual C 11980 compiler are used, but this cannot be done directly in 11981 cross-compilation. You must make your own arrangements to provide 11982 suitable library functions for cross-compilation. The embedded 11983 targets `sparc-*-aout' and `sparclite-*-*' do provide software 11984 floating point support. 11985 11986 `-msoft-float' changes the calling convention in the output file; 11987 therefore, it is only useful if you compile _all_ of a program with 11988 this option. In particular, you need to compile `libgcc.a', the 11989 library that comes with GCC, with `-msoft-float' in order for this 11990 to work. 11991 11992`-mhard-quad-float' 11993 Generate output containing quad-word (long double) floating point 11994 instructions. 11995 11996`-msoft-quad-float' 11997 Generate output containing library calls for quad-word (long 11998 double) floating point instructions. The functions called are 11999 those specified in the SPARC ABI. This is the default. 12000 12001 As of this writing, there are no SPARC implementations that have 12002 hardware support for the quad-word floating point instructions. 12003 They all invoke a trap handler for one of these instructions, and 12004 then the trap handler emulates the effect of the instruction. 12005 Because of the trap handler overhead, this is much slower than 12006 calling the ABI library routines. Thus the `-msoft-quad-float' 12007 option is the default. 12008 12009`-mno-unaligned-doubles' 12010`-munaligned-doubles' 12011 Assume that doubles have 8 byte alignment. This is the default. 12012 12013 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 12014 alignment only if they are contained in another type, or if they 12015 have an absolute address. Otherwise, it assumes they have 4 byte 12016 alignment. Specifying this option avoids some rare compatibility 12017 problems with code generated by other compilers. It is not the 12018 default because it results in a performance loss, especially for 12019 floating point code. 12020 12021`-mno-faster-structs' 12022`-mfaster-structs' 12023 With `-mfaster-structs', the compiler assumes that structures 12024 should have 8 byte alignment. This enables the use of pairs of 12025 `ldd' and `std' instructions for copies in structure assignment, 12026 in place of twice as many `ld' and `st' pairs. However, the use 12027 of this changed alignment directly violates the SPARC ABI. Thus, 12028 it's intended only for use on targets where the developer 12029 acknowledges that their resulting code will not be directly in 12030 line with the rules of the ABI. 12031 12032`-mimpure-text' 12033 `-mimpure-text', used in addition to `-shared', tells the compiler 12034 to not pass `-z text' to the linker when linking a shared object. 12035 Using this option, you can link position-dependent code into a 12036 shared object. 12037 12038 `-mimpure-text' suppresses the "relocations remain against 12039 allocatable but non-writable sections" linker error message. 12040 However, the necessary relocations will trigger copy-on-write, and 12041 the shared object is not actually shared across processes. 12042 Instead of using `-mimpure-text', you should compile all source 12043 code with `-fpic' or `-fPIC'. 12044 12045 This option is only available on SunOS and Solaris. 12046 12047`-mcpu=CPU_TYPE' 12048 Set the instruction set, register set, and instruction scheduling 12049 parameters for machine type CPU_TYPE. Supported values for 12050 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', 12051 `f930', `f934', `hypersparc', `sparclite86x', `sparclet', 12052 `tsc701', `v9', `ultrasparc', `ultrasparc3', and `niagara'. 12053 12054 Default instruction scheduling parameters are used for values that 12055 select an architecture and not an implementation. These are `v7', 12056 `v8', `sparclite', `sparclet', `v9'. 12057 12058 Here is a list of each supported architecture and their supported 12059 implementations. 12060 12061 v7: cypress 12062 v8: supersparc, hypersparc 12063 sparclite: f930, f934, sparclite86x 12064 sparclet: tsc701 12065 v9: ultrasparc, ultrasparc3, niagara 12066 12067 By default (unless configured otherwise), GCC generates code for 12068 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 12069 the compiler additionally optimizes it for the Cypress CY7C602 12070 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 12071 also appropriate for the older SPARCStation 1, 2, IPX etc. 12072 12073 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 12074 architecture. The only difference from V7 code is that the 12075 compiler emits the integer multiply and integer divide 12076 instructions which exist in SPARC-V8 but not in SPARC-V7. With 12077 `-mcpu=supersparc', the compiler additionally optimizes it for the 12078 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 12079 series. 12080 12081 With `-mcpu=sparclite', GCC generates code for the SPARClite 12082 variant of the SPARC architecture. This adds the integer 12083 multiply, integer divide step and scan (`ffs') instructions which 12084 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 12085 compiler additionally optimizes it for the Fujitsu MB86930 chip, 12086 which is the original SPARClite, with no FPU. With `-mcpu=f934', 12087 the compiler additionally optimizes it for the Fujitsu MB86934 12088 chip, which is the more recent SPARClite with FPU. 12089 12090 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 12091 of the SPARC architecture. This adds the integer multiply, 12092 multiply/accumulate, integer divide step and scan (`ffs') 12093 instructions which exist in SPARClet but not in SPARC-V7. With 12094 `-mcpu=tsc701', the compiler additionally optimizes it for the 12095 TEMIC SPARClet chip. 12096 12097 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 12098 architecture. This adds 64-bit integer and floating-point move 12099 instructions, 3 additional floating-point condition code registers 12100 and conditional move instructions. With `-mcpu=ultrasparc', the 12101 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 12102 chips. With `-mcpu=ultrasparc3', the compiler additionally 12103 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 12104 chips. With `-mcpu=niagara', the compiler additionally optimizes 12105 it for Sun UltraSPARC T1 chips. 12106 12107`-mtune=CPU_TYPE' 12108 Set the instruction scheduling parameters for machine type 12109 CPU_TYPE, but do not set the instruction set or register set that 12110 the option `-mcpu=CPU_TYPE' would. 12111 12112 The same values for `-mcpu=CPU_TYPE' can be used for 12113 `-mtune=CPU_TYPE', but the only useful values are those that 12114 select a particular cpu implementation. Those are `cypress', 12115 `supersparc', `hypersparc', `f930', `f934', `sparclite86x', 12116 `tsc701', `ultrasparc', `ultrasparc3', and `niagara'. 12117 12118`-mv8plus' 12119`-mno-v8plus' 12120 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 12121 difference from the V8 ABI is that the global and out registers are 12122 considered 64-bit wide. This is enabled by default on Solaris in 12123 32-bit mode for all SPARC-V9 processors. 12124 12125`-mvis' 12126`-mno-vis' 12127 With `-mvis', GCC generates code that takes advantage of the 12128 UltraSPARC Visual Instruction Set extensions. The default is 12129 `-mno-vis'. 12130 12131 These `-m' options are supported in addition to the above on SPARC-V9 12132processors in 64-bit environments: 12133 12134`-mlittle-endian' 12135 Generate code for a processor running in little-endian mode. It 12136 is only available for a few configurations and most notably not on 12137 Solaris and Linux. 12138 12139`-m32' 12140`-m64' 12141 Generate code for a 32-bit or 64-bit environment. The 32-bit 12142 environment sets int, long and pointer to 32 bits. The 64-bit 12143 environment sets int to 32 bits and long and pointer to 64 bits. 12144 12145`-mcmodel=medlow' 12146 Generate code for the Medium/Low code model: 64-bit addresses, 12147 programs must be linked in the low 32 bits of memory. Programs 12148 can be statically or dynamically linked. 12149 12150`-mcmodel=medmid' 12151 Generate code for the Medium/Middle code model: 64-bit addresses, 12152 programs must be linked in the low 44 bits of memory, the text and 12153 data segments must be less than 2GB in size and the data segment 12154 must be located within 2GB of the text segment. 12155 12156`-mcmodel=medany' 12157 Generate code for the Medium/Anywhere code model: 64-bit 12158 addresses, programs may be linked anywhere in memory, the text and 12159 data segments must be less than 2GB in size and the data segment 12160 must be located within 2GB of the text segment. 12161 12162`-mcmodel=embmedany' 12163 Generate code for the Medium/Anywhere code model for embedded 12164 systems: 64-bit addresses, the text and data segments must be less 12165 than 2GB in size, both starting anywhere in memory (determined at 12166 link time). The global register %g4 points to the base of the 12167 data segment. Programs are statically linked and PIC is not 12168 supported. 12169 12170`-mstack-bias' 12171`-mno-stack-bias' 12172 With `-mstack-bias', GCC assumes that the stack pointer, and frame 12173 pointer if present, are offset by -2047 which must be added back 12174 when making stack frame references. This is the default in 64-bit 12175 mode. Otherwise, assume no such offset is present. 12176 12177 These switches are supported in addition to the above on Solaris: 12178 12179`-threads' 12180 Add support for multithreading using the Solaris threads library. 12181 This option sets flags for both the preprocessor and linker. This 12182 option does not affect the thread safety of object code produced 12183 by the compiler or that of libraries supplied with it. 12184 12185`-pthreads' 12186 Add support for multithreading using the POSIX threads library. 12187 This option sets flags for both the preprocessor and linker. This 12188 option does not affect the thread safety of object code produced 12189 by the compiler or that of libraries supplied with it. 12190 12191`-pthread' 12192 This is a synonym for `-pthreads'. 12193 12194 12195File: gcc.info, Node: System V Options, Next: TMS320C3x/C4x Options, Prev: SPARC Options, Up: Submodel Options 12196 121973.17.32 Options for System V 12198---------------------------- 12199 12200These additional options are available on System V Release 4 for 12201compatibility with other compilers on those systems: 12202 12203`-G' 12204 Create a shared object. It is recommended that `-symbolic' or 12205 `-shared' be used instead. 12206 12207`-Qy' 12208 Identify the versions of each tool used by the compiler, in a 12209 `.ident' assembler directive in the output. 12210 12211`-Qn' 12212 Refrain from adding `.ident' directives to the output file (this is 12213 the default). 12214 12215`-YP,DIRS' 12216 Search the directories DIRS, and no others, for libraries 12217 specified with `-l'. 12218 12219`-Ym,DIR' 12220 Look in the directory DIR to find the M4 preprocessor. The 12221 assembler uses this option. 12222 12223 12224File: gcc.info, Node: TMS320C3x/C4x Options, Next: V850 Options, Prev: System V Options, Up: Submodel Options 12225 122263.17.33 TMS320C3x/C4x Options 12227----------------------------- 12228 12229These `-m' options are defined for TMS320C3x/C4x implementations: 12230 12231`-mcpu=CPU_TYPE' 12232 Set the instruction set, register set, and instruction scheduling 12233 parameters for machine type CPU_TYPE. Supported values for 12234 CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'. The default 12235 is `c40' to generate code for the TMS320C40. 12236 12237`-mbig-memory' 12238`-mbig' 12239`-msmall-memory' 12240`-msmall' 12241 Generates code for the big or small memory model. The small memory 12242 model assumed that all data fits into one 64K word page. At 12243 run-time the data page (DP) register must be set to point to the 12244 64K page containing the .bss and .data program sections. The big 12245 memory model is the default and requires reloading of the DP 12246 register for every direct memory access. 12247 12248`-mbk' 12249`-mno-bk' 12250 Allow (disallow) allocation of general integer operands into the 12251 block count register BK. 12252 12253`-mdb' 12254`-mno-db' 12255 Enable (disable) generation of code using decrement and branch, 12256 DBcond(D), instructions. This is enabled by default for the C4x. 12257 To be on the safe side, this is disabled for the C3x, since the 12258 maximum iteration count on the C3x is 2^23 + 1 (but who iterates 12259 loops more than 2^23 times on the C3x?). Note that GCC will try 12260 to reverse a loop so that it can utilize the decrement and branch 12261 instruction, but will give up if there is more than one memory 12262 reference in the loop. Thus a loop where the loop counter is 12263 decremented can generate slightly more efficient code, in cases 12264 where the RPTB instruction cannot be utilized. 12265 12266`-mdp-isr-reload' 12267`-mparanoid' 12268 Force the DP register to be saved on entry to an interrupt service 12269 routine (ISR), reloaded to point to the data section, and restored 12270 on exit from the ISR. This should not be required unless someone 12271 has violated the small memory model by modifying the DP register, 12272 say within an object library. 12273 12274`-mmpyi' 12275`-mno-mpyi' 12276 For the C3x use the 24-bit MPYI instruction for integer multiplies 12277 instead of a library call to guarantee 32-bit results. Note that 12278 if one of the operands is a constant, then the multiplication will 12279 be performed using shifts and adds. If the `-mmpyi' option is not 12280 specified for the C3x, then squaring operations are performed 12281 inline instead of a library call. 12282 12283`-mfast-fix' 12284`-mno-fast-fix' 12285 The C3x/C4x FIX instruction to convert a floating point value to an 12286 integer value chooses the nearest integer less than or equal to the 12287 floating point value rather than to the nearest integer. Thus if 12288 the floating point number is negative, the result will be 12289 incorrectly truncated an additional code is necessary to detect 12290 and correct this case. This option can be used to disable 12291 generation of the additional code required to correct the result. 12292 12293`-mrptb' 12294`-mno-rptb' 12295 Enable (disable) generation of repeat block sequences using the 12296 RPTB instruction for zero overhead looping. The RPTB construct is 12297 only used for innermost loops that do not call functions or jump 12298 across the loop boundaries. There is no advantage having nested 12299 RPTB loops due to the overhead required to save and restore the 12300 RC, RS, and RE registers. This is enabled by default with `-O2'. 12301 12302`-mrpts=COUNT' 12303`-mno-rpts' 12304 Enable (disable) the use of the single instruction repeat 12305 instruction RPTS. If a repeat block contains a single 12306 instruction, and the loop count can be guaranteed to be less than 12307 the value COUNT, GCC will emit a RPTS instruction instead of a 12308 RPTB. If no value is specified, then a RPTS will be emitted even 12309 if the loop count cannot be determined at compile time. Note that 12310 the repeated instruction following RPTS does not have to be 12311 reloaded from memory each iteration, thus freeing up the CPU buses 12312 for operands. However, since interrupts are blocked by this 12313 instruction, it is disabled by default. 12314 12315`-mloop-unsigned' 12316`-mno-loop-unsigned' 12317 The maximum iteration count when using RPTS and RPTB (and DB on 12318 the C40) is 2^31 + 1 since these instructions test if the 12319 iteration count is negative to terminate the loop. If the 12320 iteration count is unsigned there is a possibility than the 2^31 + 12321 1 maximum iteration count may be exceeded. This switch allows an 12322 unsigned iteration count. 12323 12324`-mti' 12325 Try to emit an assembler syntax that the TI assembler (asm30) is 12326 happy with. This also enforces compatibility with the API 12327 employed by the TI C3x C compiler. For example, long doubles are 12328 passed as structures rather than in floating point registers. 12329 12330`-mregparm' 12331`-mmemparm' 12332 Generate code that uses registers (stack) for passing arguments to 12333 functions. By default, arguments are passed in registers where 12334 possible rather than by pushing arguments on to the stack. 12335 12336`-mparallel-insns' 12337`-mno-parallel-insns' 12338 Allow the generation of parallel instructions. This is enabled by 12339 default with `-O2'. 12340 12341`-mparallel-mpy' 12342`-mno-parallel-mpy' 12343 Allow the generation of MPY||ADD and MPY||SUB parallel 12344 instructions, provided `-mparallel-insns' is also specified. 12345 These instructions have tight register constraints which can 12346 pessimize the code generation of large functions. 12347 12348 12349 12350File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TMS320C3x/C4x Options, Up: Submodel Options 12351 123523.17.34 V850 Options 12353-------------------- 12354 12355These `-m' options are defined for V850 implementations: 12356 12357`-mlong-calls' 12358`-mno-long-calls' 12359 Treat all calls as being far away (near). If calls are assumed to 12360 be far away, the compiler will always load the functions address 12361 up into a register, and call indirect through the pointer. 12362 12363`-mno-ep' 12364`-mep' 12365 Do not optimize (do optimize) basic blocks that use the same index 12366 pointer 4 or more times to copy pointer into the `ep' register, and 12367 use the shorter `sld' and `sst' instructions. The `-mep' option 12368 is on by default if you optimize. 12369 12370`-mno-prolog-function' 12371`-mprolog-function' 12372 Do not use (do use) external functions to save and restore 12373 registers at the prologue and epilogue of a function. The 12374 external functions are slower, but use less code space if more 12375 than one function saves the same number of registers. The 12376 `-mprolog-function' option is on by default if you optimize. 12377 12378`-mspace' 12379 Try to make the code as small as possible. At present, this just 12380 turns on the `-mep' and `-mprolog-function' options. 12381 12382`-mtda=N' 12383 Put static or global variables whose size is N bytes or less into 12384 the tiny data area that register `ep' points to. The tiny data 12385 area can hold up to 256 bytes in total (128 bytes for byte 12386 references). 12387 12388`-msda=N' 12389 Put static or global variables whose size is N bytes or less into 12390 the small data area that register `gp' points to. The small data 12391 area can hold up to 64 kilobytes. 12392 12393`-mzda=N' 12394 Put static or global variables whose size is N bytes or less into 12395 the first 32 kilobytes of memory. 12396 12397`-mv850' 12398 Specify that the target processor is the V850. 12399 12400`-mbig-switch' 12401 Generate code suitable for big switch tables. Use this option 12402 only if the assembler/linker complain about out of range branches 12403 within a switch table. 12404 12405`-mapp-regs' 12406 This option will cause r2 and r5 to be used in the code generated 12407 by the compiler. This setting is the default. 12408 12409`-mno-app-regs' 12410 This option will cause r2 and r5 to be treated as fixed registers. 12411 12412`-mv850e1' 12413 Specify that the target processor is the V850E1. The preprocessor 12414 constants `__v850e1__' and `__v850e__' will be defined if this 12415 option is used. 12416 12417`-mv850e' 12418 Specify that the target processor is the V850E. The preprocessor 12419 constant `__v850e__' will be defined if this option is used. 12420 12421 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then 12422 a default target processor will be chosen and the relevant 12423 `__v850*__' preprocessor constant will be defined. 12424 12425 The preprocessor constants `__v850' and `__v851__' are always 12426 defined, regardless of which processor variant is the target. 12427 12428`-mdisable-callt' 12429 This option will suppress generation of the CALLT instruction for 12430 the v850e and v850e1 flavors of the v850 architecture. The 12431 default is `-mno-disable-callt' which allows the CALLT instruction 12432 to be used. 12433 12434 12435 12436File: gcc.info, Node: VAX Options, Next: x86-64 Options, Prev: V850 Options, Up: Submodel Options 12437 124383.17.35 VAX Options 12439------------------- 12440 12441These `-m' options are defined for the VAX: 12442 12443`-munix' 12444 Do not output certain jump instructions (`aobleq' and so on) that 12445 the Unix assembler for the VAX cannot handle across long ranges. 12446 12447`-mgnu' 12448 Do output those jump instructions, on the assumption that you will 12449 assemble with the GNU assembler. 12450 12451`-mg' 12452 Output code for g-format floating point numbers instead of 12453 d-format. 12454 12455 12456File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VAX Options, Up: Submodel Options 12457 124583.17.36 x86-64 Options 12459---------------------- 12460 12461These are listed under *Note i386 and x86-64 Options::. 12462 12463 12464File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 12465 124663.17.37 Xstormy16 Options 12467------------------------- 12468 12469These options are defined for Xstormy16: 12470 12471`-msim' 12472 Choose startup files and linker script suitable for the simulator. 12473 12474 12475File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 12476 124773.17.38 Xtensa Options 12478---------------------- 12479 12480These options are supported for Xtensa targets: 12481 12482`-mconst16' 12483`-mno-const16' 12484 Enable or disable use of `CONST16' instructions for loading 12485 constant values. The `CONST16' instruction is currently not a 12486 standard option from Tensilica. When enabled, `CONST16' 12487 instructions are always used in place of the standard `L32R' 12488 instructions. The use of `CONST16' is enabled by default only if 12489 the `L32R' instruction is not available. 12490 12491`-mfused-madd' 12492`-mno-fused-madd' 12493 Enable or disable use of fused multiply/add and multiply/subtract 12494 instructions in the floating-point option. This has no effect if 12495 the floating-point option is not also enabled. Disabling fused 12496 multiply/add and multiply/subtract instructions forces the 12497 compiler to use separate instructions for the multiply and 12498 add/subtract operations. This may be desirable in some cases 12499 where strict IEEE 754-compliant results are required: the fused 12500 multiply add/subtract instructions do not round the intermediate 12501 result, thereby producing results with _more_ bits of precision 12502 than specified by the IEEE standard. Disabling fused multiply 12503 add/subtract instructions also ensures that the program output is 12504 not sensitive to the compiler's ability to combine multiply and 12505 add/subtract operations. 12506 12507`-mtext-section-literals' 12508`-mno-text-section-literals' 12509 Control the treatment of literal pools. The default is 12510 `-mno-text-section-literals', which places literals in a separate 12511 section in the output file. This allows the literal pool to be 12512 placed in a data RAM/ROM, and it also allows the linker to combine 12513 literal pools from separate object files to remove redundant 12514 literals and improve code size. With `-mtext-section-literals', 12515 the literals are interspersed in the text section in order to keep 12516 them as close as possible to their references. This may be 12517 necessary for large assembly files. 12518 12519`-mtarget-align' 12520`-mno-target-align' 12521 When this option is enabled, GCC instructs the assembler to 12522 automatically align instructions to reduce branch penalties at the 12523 expense of some code density. The assembler attempts to widen 12524 density instructions to align branch targets and the instructions 12525 following call instructions. If there are not enough preceding 12526 safe density instructions to align a target, no widening will be 12527 performed. The default is `-mtarget-align'. These options do not 12528 affect the treatment of auto-aligned instructions like `LOOP', 12529 which the assembler will always align, either by widening density 12530 instructions or by inserting no-op instructions. 12531 12532`-mlongcalls' 12533`-mno-longcalls' 12534 When this option is enabled, GCC instructs the assembler to 12535 translate direct calls to indirect calls unless it can determine 12536 that the target of a direct call is in the range allowed by the 12537 call instruction. This translation typically occurs for calls to 12538 functions in other source files. Specifically, the assembler 12539 translates a direct `CALL' instruction into an `L32R' followed by 12540 a `CALLX' instruction. The default is `-mno-longcalls'. This 12541 option should be used in programs where the call target can 12542 potentially be out of range. This option is implemented in the 12543 assembler, not the compiler, so the assembly code generated by GCC 12544 will still show direct call instructions--look at the disassembled 12545 object code to see the actual instructions. Note that the 12546 assembler will use an indirect call for every cross-file call, not 12547 just those that really will be out of range. 12548 12549 12550File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 12551 125523.17.39 zSeries Options 12553----------------------- 12554 12555These are listed under *Note S/390 and zSeries Options::. 12556 12557 12558File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 12559 125603.18 Options for Code Generation Conventions 12561============================================ 12562 12563These machine-independent options control the interface conventions 12564used in code generation. 12565 12566 Most of them have both positive and negative forms; the negative form 12567of `-ffoo' would be `-fno-foo'. In the table below, only one of the 12568forms is listed--the one which is not the default. You can figure out 12569the other form by either removing `no-' or adding it. 12570 12571`-fbounds-check' 12572 For front-ends that support it, generate additional code to check 12573 that indices used to access arrays are within the declared range. 12574 This is currently only supported by the Java and Fortran 12575 front-ends, where this option defaults to true and false 12576 respectively. 12577 12578`-ftrapv' 12579 This option generates traps for signed overflow on addition, 12580 subtraction, multiplication operations. 12581 12582`-fwrapv' 12583 This option instructs the compiler to assume that signed arithmetic 12584 overflow of addition, subtraction and multiplication wraps around 12585 using twos-complement representation. This flag enables some 12586 optimizations and disables others. This option is enabled by 12587 default for the Java front-end, as required by the Java language 12588 specification. 12589 12590`-fexceptions' 12591 Enable exception handling. Generates extra code needed to 12592 propagate exceptions. For some targets, this implies GCC will 12593 generate frame unwind information for all functions, which can 12594 produce significant data size overhead, although it does not 12595 affect execution. If you do not specify this option, GCC will 12596 enable it by default for languages like C++ which normally require 12597 exception handling, and disable it for languages like C that do 12598 not normally require it. However, you may need to enable this 12599 option when compiling C code that needs to interoperate properly 12600 with exception handlers written in C++. You may also wish to 12601 disable this option if you are compiling older C++ programs that 12602 don't use exception handling. 12603 12604`-fnon-call-exceptions' 12605 Generate code that allows trapping instructions to throw 12606 exceptions. Note that this requires platform-specific runtime 12607 support that does not exist everywhere. Moreover, it only allows 12608 _trapping_ instructions to throw exceptions, i.e. memory 12609 references or floating point instructions. It does not allow 12610 exceptions to be thrown from arbitrary signal handlers such as 12611 `SIGALRM'. 12612 12613`-funwind-tables' 12614 Similar to `-fexceptions', except that it will just generate any 12615 needed static data, but will not affect the generated code in any 12616 other way. You will normally not enable this option; instead, a 12617 language processor that needs this handling would enable it on 12618 your behalf. 12619 12620`-fasynchronous-unwind-tables' 12621 Generate unwind table in dwarf2 format, if supported by target 12622 machine. The table is exact at each instruction boundary, so it 12623 can be used for stack unwinding from asynchronous events (such as 12624 debugger or garbage collector). 12625 12626`-fpcc-struct-return' 12627 Return "short" `struct' and `union' values in memory like longer 12628 ones, rather than in registers. This convention is less 12629 efficient, but it has the advantage of allowing intercallability 12630 between GCC-compiled files and files compiled with other 12631 compilers, particularly the Portable C Compiler (pcc). 12632 12633 The precise convention for returning structures in memory depends 12634 on the target configuration macros. 12635 12636 Short structures and unions are those whose size and alignment 12637 match that of some integer type. 12638 12639 *Warning:* code compiled with the `-fpcc-struct-return' switch is 12640 not binary compatible with code compiled with the 12641 `-freg-struct-return' switch. Use it to conform to a non-default 12642 application binary interface. 12643 12644`-freg-struct-return' 12645 Return `struct' and `union' values in registers when possible. 12646 This is more efficient for small structures than 12647 `-fpcc-struct-return'. 12648 12649 If you specify neither `-fpcc-struct-return' nor 12650 `-freg-struct-return', GCC defaults to whichever convention is 12651 standard for the target. If there is no standard convention, GCC 12652 defaults to `-fpcc-struct-return', except on targets where GCC is 12653 the principal compiler. In those cases, we can choose the 12654 standard, and we chose the more efficient register return 12655 alternative. 12656 12657 *Warning:* code compiled with the `-freg-struct-return' switch is 12658 not binary compatible with code compiled with the 12659 `-fpcc-struct-return' switch. Use it to conform to a non-default 12660 application binary interface. 12661 12662`-fshort-enums' 12663 Allocate to an `enum' type only as many bytes as it needs for the 12664 declared range of possible values. Specifically, the `enum' type 12665 will be equivalent to the smallest integer type which has enough 12666 room. 12667 12668 *Warning:* the `-fshort-enums' switch causes GCC to generate code 12669 that is not binary compatible with code generated without that 12670 switch. Use it to conform to a non-default application binary 12671 interface. 12672 12673`-fshort-double' 12674 Use the same size for `double' as for `float'. 12675 12676 *Warning:* the `-fshort-double' switch causes GCC to generate code 12677 that is not binary compatible with code generated without that 12678 switch. Use it to conform to a non-default application binary 12679 interface. 12680 12681`-fshort-wchar' 12682 Override the underlying type for `wchar_t' to be `short unsigned 12683 int' instead of the default for the target. This option is useful 12684 for building programs to run under WINE. 12685 12686 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 12687 that is not binary compatible with code generated without that 12688 switch. Use it to conform to a non-default application binary 12689 interface. 12690 12691`-fno-common' 12692 In C, allocate even uninitialized global variables in the data 12693 section of the object file, rather than generating them as common 12694 blocks. This has the effect that if the same variable is declared 12695 (without `extern') in two different compilations, you will get an 12696 error when you link them. The only reason this might be useful is 12697 if you wish to verify that the program will work on other systems 12698 which always work this way. 12699 12700`-fno-ident' 12701 Ignore the `#ident' directive. 12702 12703`-finhibit-size-directive' 12704 Don't output a `.size' assembler directive, or anything else that 12705 would cause trouble if the function is split in the middle, and the 12706 two halves are placed at locations far apart in memory. This 12707 option is used when compiling `crtstuff.c'; you should not need to 12708 use it for anything else. 12709 12710`-fverbose-asm' 12711 Put extra commentary information in the generated assembly code to 12712 make it more readable. This option is generally only of use to 12713 those who actually need to read the generated assembly code 12714 (perhaps while debugging the compiler itself). 12715 12716 `-fno-verbose-asm', the default, causes the extra information to 12717 be omitted and is useful when comparing two assembler files. 12718 12719`-fpic' 12720 Generate position-independent code (PIC) suitable for use in a 12721 shared library, if supported for the target machine. Such code 12722 accesses all constant addresses through a global offset table 12723 (GOT). The dynamic loader resolves the GOT entries when the 12724 program starts (the dynamic loader is not part of GCC; it is part 12725 of the operating system). If the GOT size for the linked 12726 executable exceeds a machine-specific maximum size, you get an 12727 error message from the linker indicating that `-fpic' does not 12728 work; in that case, recompile with `-fPIC' instead. (These 12729 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 12730 386 has no such limit.) 12731 12732 Position-independent code requires special support, and therefore 12733 works only on certain machines. For the 386, GCC supports PIC for 12734 System V but not for the Sun 386i. Code generated for the IBM 12735 RS/6000 is always position-independent. 12736 12737 When this flag is set, the macros `__pic__' and `__PIC__' are 12738 defined to 1. 12739 12740`-fPIC' 12741 If supported for the target machine, emit position-independent 12742 code, suitable for dynamic linking and avoiding any limit on the 12743 size of the global offset table. This option makes a difference 12744 on the m68k, PowerPC and SPARC. 12745 12746 Position-independent code requires special support, and therefore 12747 works only on certain machines. 12748 12749 When this flag is set, the macros `__pic__' and `__PIC__' are 12750 defined to 2. 12751 12752`-fpie' 12753`-fPIE' 12754 These options are similar to `-fpic' and `-fPIC', but generated 12755 position independent code can be only linked into executables. 12756 Usually these options are used when `-pie' GCC option will be used 12757 during linking. 12758 12759`-fno-jump-tables' 12760 Do not use jump tables for switch statements even where it would be 12761 more efficient than other code generation strategies. This option 12762 is of use in conjunction with `-fpic' or `-fPIC' for building code 12763 which forms part of a dynamic linker and cannot reference the 12764 address of a jump table. On some targets, jump tables do not 12765 require a GOT and this option is not needed. 12766 12767`-ffixed-REG' 12768 Treat the register named REG as a fixed register; generated code 12769 should never refer to it (except perhaps as a stack pointer, frame 12770 pointer or in some other fixed role). 12771 12772 REG must be the name of a register. The register names accepted 12773 are machine-specific and are defined in the `REGISTER_NAMES' macro 12774 in the machine description macro file. 12775 12776 This flag does not have a negative form, because it specifies a 12777 three-way choice. 12778 12779`-fcall-used-REG' 12780 Treat the register named REG as an allocable register that is 12781 clobbered by function calls. It may be allocated for temporaries 12782 or variables that do not live across a call. Functions compiled 12783 this way will not save and restore the register REG. 12784 12785 It is an error to used this flag with the frame pointer or stack 12786 pointer. Use of this flag for other registers that have fixed 12787 pervasive roles in the machine's execution model will produce 12788 disastrous results. 12789 12790 This flag does not have a negative form, because it specifies a 12791 three-way choice. 12792 12793`-fcall-saved-REG' 12794 Treat the register named REG as an allocable register saved by 12795 functions. It may be allocated even for temporaries or variables 12796 that live across a call. Functions compiled this way will save 12797 and restore the register REG if they use it. 12798 12799 It is an error to used this flag with the frame pointer or stack 12800 pointer. Use of this flag for other registers that have fixed 12801 pervasive roles in the machine's execution model will produce 12802 disastrous results. 12803 12804 A different sort of disaster will result from the use of this flag 12805 for a register in which function values may be returned. 12806 12807 This flag does not have a negative form, because it specifies a 12808 three-way choice. 12809 12810`-fpack-struct[=N]' 12811 Without a value specified, pack all structure members together 12812 without holes. When a value is specified (which must be a small 12813 power of two), pack structure members according to this value, 12814 representing the maximum alignment (that is, objects with default 12815 alignment requirements larger than this will be output potentially 12816 unaligned at the next fitting location. 12817 12818 *Warning:* the `-fpack-struct' switch causes GCC to generate code 12819 that is not binary compatible with code generated without that 12820 switch. Additionally, it makes the code suboptimal. Use it to 12821 conform to a non-default application binary interface. 12822 12823`-finstrument-functions' 12824 Generate instrumentation calls for entry and exit to functions. 12825 Just after function entry and just before function exit, the 12826 following profiling functions will be called with the address of 12827 the current function and its call site. (On some platforms, 12828 `__builtin_return_address' does not work beyond the current 12829 function, so the call site information may not be available to the 12830 profiling functions otherwise.) 12831 12832 void __cyg_profile_func_enter (void *this_fn, 12833 void *call_site); 12834 void __cyg_profile_func_exit (void *this_fn, 12835 void *call_site); 12836 12837 The first argument is the address of the start of the current 12838 function, which may be looked up exactly in the symbol table. 12839 12840 This instrumentation is also done for functions expanded inline in 12841 other functions. The profiling calls will indicate where, 12842 conceptually, the inline function is entered and exited. This 12843 means that addressable versions of such functions must be 12844 available. If all your uses of a function are expanded inline, 12845 this may mean an additional expansion of code size. If you use 12846 `extern inline' in your C code, an addressable version of such 12847 functions must be provided. (This is normally the case anyways, 12848 but if you get lucky and the optimizer always expands the 12849 functions inline, you might have gotten away without providing 12850 static copies.) 12851 12852 A function may be given the attribute `no_instrument_function', in 12853 which case this instrumentation will not be done. This can be 12854 used, for example, for the profiling functions listed above, 12855 high-priority interrupt routines, and any functions from which the 12856 profiling functions cannot safely be called (perhaps signal 12857 handlers, if the profiling routines generate output or allocate 12858 memory). 12859 12860`-fstack-check' 12861 Generate code to verify that you do not go beyond the boundary of 12862 the stack. You should specify this flag if you are running in an 12863 environment with multiple threads, but only rarely need to specify 12864 it in a single-threaded environment since stack overflow is 12865 automatically detected on nearly all systems if there is only one 12866 stack. 12867 12868 Note that this switch does not actually cause checking to be done; 12869 the operating system must do that. The switch causes generation 12870 of code to ensure that the operating system sees the stack being 12871 extended. 12872 12873`-fstack-limit-register=REG' 12874`-fstack-limit-symbol=SYM' 12875`-fno-stack-limit' 12876 Generate code to ensure that the stack does not grow beyond a 12877 certain value, either the value of a register or the address of a 12878 symbol. If the stack would grow beyond the value, a signal is 12879 raised. For most targets, the signal is raised before the stack 12880 overruns the boundary, so it is possible to catch the signal 12881 without taking special precautions. 12882 12883 For instance, if the stack starts at absolute address `0x80000000' 12884 and grows downwards, you can use the flags 12885 `-fstack-limit-symbol=__stack_limit' and 12886 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 12887 of 128KB. Note that this may only work with the GNU linker. 12888 12889`-fargument-alias' 12890`-fargument-noalias' 12891`-fargument-noalias-global' 12892`-fargument-noalias-anything' 12893 Specify the possible relationships among parameters and between 12894 parameters and global data. 12895 12896 `-fargument-alias' specifies that arguments (parameters) may alias 12897 each other and may alias global storage. 12898 `-fargument-noalias' specifies that arguments do not alias each 12899 other, but may alias global storage. 12900 `-fargument-noalias-global' specifies that arguments do not alias 12901 each other and do not alias global storage. 12902 `-fargument-noalias-anything' specifies that arguments do not 12903 alias any other storage. 12904 12905 Each language will automatically use whatever option is required by 12906 the language standard. You should not need to use these options 12907 yourself. 12908 12909`-fleading-underscore' 12910 This option and its counterpart, `-fno-leading-underscore', 12911 forcibly change the way C symbols are represented in the object 12912 file. One use is to help link with legacy assembly code. 12913 12914 *Warning:* the `-fleading-underscore' switch causes GCC to 12915 generate code that is not binary compatible with code generated 12916 without that switch. Use it to conform to a non-default 12917 application binary interface. Not all targets provide complete 12918 support for this switch. 12919 12920`-ftls-model=MODEL' 12921 Alter the thread-local storage model to be used (*note 12922 Thread-Local::). The MODEL argument should be one of 12923 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 12924 12925 The default without `-fpic' is `initial-exec'; with `-fpic' the 12926 default is `global-dynamic'. 12927 12928`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 12929 Set the default ELF image symbol visibility to the specified 12930 option--all symbols will be marked with this unless overridden 12931 within the code. Using this feature can very substantially 12932 improve linking and load times of shared object libraries, produce 12933 more optimized code, provide near-perfect API export and prevent 12934 symbol clashes. It is *strongly* recommended that you use this in 12935 any shared objects you distribute. 12936 12937 Despite the nomenclature, `default' always means public ie; 12938 available to be linked against from outside the shared object. 12939 `protected' and `internal' are pretty useless in real-world usage 12940 so the only other commonly used option will be `hidden'. The 12941 default if `-fvisibility' isn't specified is `default', i.e., make 12942 every symbol public--this causes the same behavior as previous 12943 versions of GCC. 12944 12945 A good explanation of the benefits offered by ensuring ELF symbols 12946 have the correct visibility is given by "How To Write Shared 12947 Libraries" by Ulrich Drepper (which can be found at 12948 `http://people.redhat.com/~drepper/')--however a superior solution 12949 made possible by this option to marking things hidden when the 12950 default is public is to make the default hidden and mark things 12951 public. This is the norm with DLL's on Windows and with 12952 `-fvisibility=hidden' and `__attribute__ 12953 ((visibility("default")))' instead of `__declspec(dllexport)' you 12954 get almost identical semantics with identical syntax. This is a 12955 great boon to those working with cross-platform projects. 12956 12957 For those adding visibility support to existing code, you may find 12958 `#pragma GCC visibility' of use. This works by you enclosing the 12959 declarations you wish to set visibility for with (for example) 12960 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 12961 pop'. Bear in mind that symbol visibility should be viewed *as 12962 part of the API interface contract* and thus all new code should 12963 always specify visibility when it is not the default ie; 12964 declarations only for use within the local DSO should *always* be 12965 marked explicitly as hidden as so to avoid PLT indirection 12966 overheads--making this abundantly clear also aids readability and 12967 self-documentation of the code. Note that due to ISO C++ 12968 specification requirements, operator new and operator delete must 12969 always be of default visibility. 12970 12971 Be aware that headers from outside your project, in particular 12972 system headers and headers from any other library you use, may not 12973 be expecting to be compiled with visibility other than the 12974 default. You may need to explicitly say `#pragma GCC visibility 12975 push(default)' before including any such headers. 12976 12977 `extern' declarations are not affected by `-fvisibility', so a lot 12978 of code can be recompiled with `-fvisibility=hidden' with no 12979 modifications. However, this means that calls to `extern' 12980 functions with no explicit visibility will use the PLT, so it is 12981 more effective to use `__attribute ((visibility))' and/or `#pragma 12982 GCC visibility' to tell the compiler which `extern' declarations 12983 should be treated as hidden. 12984 12985 Note that `-fvisibility' does affect C++ vague linkage entities. 12986 This means that, for instance, an exception class that will be 12987 thrown between DSOs must be explicitly marked with default 12988 visibility so that the `type_info' nodes will be unified between 12989 the DSOs. 12990 12991 An overview of these techniques, their benefits and how to use them 12992 is at `http://gcc.gnu.org/wiki/Visibility'. 12993 12994 12995 12996File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 12997 129983.19 Environment Variables Affecting GCC 12999======================================== 13000 13001This section describes several environment variables that affect how GCC 13002operates. Some of them work by specifying directories or prefixes to 13003use when searching for various kinds of files. Some are used to 13004specify other aspects of the compilation environment. 13005 13006 Note that you can also specify places to search using options such as 13007`-B', `-I' and `-L' (*note Directory Options::). These take precedence 13008over places specified using environment variables, which in turn take 13009precedence over those specified by the configuration of GCC. *Note 13010Controlling the Compilation Driver `gcc': (gccint)Driver. 13011 13012`LANG' 13013`LC_CTYPE' 13014`LC_MESSAGES' 13015`LC_ALL' 13016 These environment variables control the way that GCC uses 13017 localization information that allow GCC to work with different 13018 national conventions. GCC inspects the locale categories 13019 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 13020 These locale categories can be set to any value supported by your 13021 installation. A typical value is `en_GB.UTF-8' for English in the 13022 United Kingdom encoded in UTF-8. 13023 13024 The `LC_CTYPE' environment variable specifies character 13025 classification. GCC uses it to determine the character boundaries 13026 in a string; this is needed for some multibyte encodings that 13027 contain quote and escape characters that would otherwise be 13028 interpreted as a string end or escape. 13029 13030 The `LC_MESSAGES' environment variable specifies the language to 13031 use in diagnostic messages. 13032 13033 If the `LC_ALL' environment variable is set, it overrides the value 13034 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 13035 `LC_MESSAGES' default to the value of the `LANG' environment 13036 variable. If none of these variables are set, GCC defaults to 13037 traditional C English behavior. 13038 13039`TMPDIR' 13040 If `TMPDIR' is set, it specifies the directory to use for temporary 13041 files. GCC uses temporary files to hold the output of one stage of 13042 compilation which is to be used as input to the next stage: for 13043 example, the output of the preprocessor, which is the input to the 13044 compiler proper. 13045 13046`GCC_EXEC_PREFIX' 13047 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 13048 names of the subprograms executed by the compiler. No slash is 13049 added when this prefix is combined with the name of a subprogram, 13050 but you can specify a prefix that ends with a slash if you wish. 13051 13052 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 13053 appropriate prefix to use based on the pathname it was invoked 13054 with. 13055 13056 If GCC cannot find the subprogram using the specified prefix, it 13057 tries looking in the usual places for the subprogram. 13058 13059 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 13060 PREFIX is the value of `prefix' when you ran the `configure' 13061 script. 13062 13063 Other prefixes specified with `-B' take precedence over this 13064 prefix. 13065 13066 This prefix is also used for finding files such as `crt0.o' that 13067 are used for linking. 13068 13069 In addition, the prefix is used in an unusual way in finding the 13070 directories to search for header files. For each of the standard 13071 directories whose name normally begins with `/usr/local/lib/gcc' 13072 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 13073 replacing that beginning with the specified prefix to produce an 13074 alternate directory name. Thus, with `-Bfoo/', GCC will search 13075 `foo/bar' where it would normally search `/usr/local/lib/bar'. 13076 These alternate directories are searched first; the standard 13077 directories come next. 13078 13079`COMPILER_PATH' 13080 The value of `COMPILER_PATH' is a colon-separated list of 13081 directories, much like `PATH'. GCC tries the directories thus 13082 specified when searching for subprograms, if it can't find the 13083 subprograms using `GCC_EXEC_PREFIX'. 13084 13085`LIBRARY_PATH' 13086 The value of `LIBRARY_PATH' is a colon-separated list of 13087 directories, much like `PATH'. When configured as a native 13088 compiler, GCC tries the directories thus specified when searching 13089 for special linker files, if it can't find them using 13090 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 13091 when searching for ordinary libraries for the `-l' option (but 13092 directories specified with `-L' come first). 13093 13094`LANG' 13095 This variable is used to pass locale information to the compiler. 13096 One way in which this information is used is to determine the 13097 character set to be used when character literals, string literals 13098 and comments are parsed in C and C++. When the compiler is 13099 configured to allow multibyte characters, the following values for 13100 `LANG' are recognized: 13101 13102 `C-JIS' 13103 Recognize JIS characters. 13104 13105 `C-SJIS' 13106 Recognize SJIS characters. 13107 13108 `C-EUCJP' 13109 Recognize EUCJP characters. 13110 13111 If `LANG' is not defined, or if it has some other value, then the 13112 compiler will use mblen and mbtowc as defined by the default 13113 locale to recognize and translate multibyte characters. 13114 13115Some additional environments variables affect the behavior of the 13116preprocessor. 13117 13118`CPATH' 13119`C_INCLUDE_PATH' 13120`CPLUS_INCLUDE_PATH' 13121`OBJC_INCLUDE_PATH' 13122 Each variable's value is a list of directories separated by a 13123 special character, much like `PATH', in which to look for header 13124 files. The special character, `PATH_SEPARATOR', is 13125 target-dependent and determined at GCC build time. For Microsoft 13126 Windows-based targets it is a semicolon, and for almost all other 13127 targets it is a colon. 13128 13129 `CPATH' specifies a list of directories to be searched as if 13130 specified with `-I', but after any paths given with `-I' options 13131 on the command line. This environment variable is used regardless 13132 of which language is being preprocessed. 13133 13134 The remaining environment variables apply only when preprocessing 13135 the particular language indicated. Each specifies a list of 13136 directories to be searched as if specified with `-isystem', but 13137 after any paths given with `-isystem' options on the command line. 13138 13139 In all these variables, an empty element instructs the compiler to 13140 search its current working directory. Empty elements can appear 13141 at the beginning or end of a path. For instance, if the value of 13142 `CPATH' is `:/special/include', that has the same effect as 13143 `-I. -I/special/include'. 13144 13145`DEPENDENCIES_OUTPUT' 13146 If this variable is set, its value specifies how to output 13147 dependencies for Make based on the non-system header files 13148 processed by the compiler. System header files are ignored in the 13149 dependency output. 13150 13151 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 13152 which case the Make rules are written to that file, guessing the 13153 target name from the source file name. Or the value can have the 13154 form `FILE TARGET', in which case the rules are written to file 13155 FILE using TARGET as the target name. 13156 13157 In other words, this environment variable is equivalent to 13158 combining the options `-MM' and `-MF' (*note Preprocessor 13159 Options::), with an optional `-MT' switch too. 13160 13161`SUNPRO_DEPENDENCIES' 13162 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 13163 except that system header files are not ignored, so it implies 13164 `-M' rather than `-MM'. However, the dependence on the main input 13165 file is omitted. *Note Preprocessor Options::. 13166 13167 13168File: gcc.info, Node: Precompiled Headers, Next: Running Protoize, Prev: Environment Variables, Up: Invoking GCC 13169 131703.20 Using Precompiled Headers 13171============================== 13172 13173Often large projects have many header files that are included in every 13174source file. The time the compiler takes to process these header files 13175over and over again can account for nearly all of the time required to 13176build the project. To make builds faster, GCC allows users to 13177`precompile' a header file; then, if builds can use the precompiled 13178header file they will be much faster. 13179 13180 To create a precompiled header file, simply compile it as you would any 13181other file, if necessary using the `-x' option to make the driver treat 13182it as a C or C++ header file. You will probably want to use a tool 13183like `make' to keep the precompiled header up-to-date when the headers 13184it contains change. 13185 13186 A precompiled header file will be searched for when `#include' is seen 13187in the compilation. As it searches for the included file (*note Search 13188Path: (cpp)Search Path.) the compiler looks for a precompiled header in 13189each directory just before it looks for the include file in that 13190directory. The name searched for is the name specified in the 13191`#include' with `.gch' appended. If the precompiled header file can't 13192be used, it is ignored. 13193 13194 For instance, if you have `#include "all.h"', and you have `all.h.gch' 13195in the same directory as `all.h', then the precompiled header file will 13196be used if possible, and the original header will be used otherwise. 13197 13198 Alternatively, you might decide to put the precompiled header file in a 13199directory and use `-I' to ensure that directory is searched before (or 13200instead of) the directory containing the original header. Then, if you 13201want to check that the precompiled header file is always used, you can 13202put a file of the same name as the original header in this directory 13203containing an `#error' command. 13204 13205 This also works with `-include'. So yet another way to use 13206precompiled headers, good for projects not designed with precompiled 13207header files in mind, is to simply take most of the header files used by 13208a project, include them from another header file, precompile that header 13209file, and `-include' the precompiled header. If the header files have 13210guards against multiple inclusion, they will be skipped because they've 13211already been included (in the precompiled header). 13212 13213 If you need to precompile the same header file for different 13214languages, targets, or compiler options, you can instead make a 13215_directory_ named like `all.h.gch', and put each precompiled header in 13216the directory, perhaps using `-o'. It doesn't matter what you call the 13217files in the directory, every precompiled header in the directory will 13218be considered. The first precompiled header encountered in the 13219directory that is valid for this compilation will be used; they're 13220searched in no particular order. 13221 13222 There are many other possibilities, limited only by your imagination, 13223good sense, and the constraints of your build system. 13224 13225 A precompiled header file can be used only when these conditions apply: 13226 13227 * Only one precompiled header can be used in a particular 13228 compilation. 13229 13230 * A precompiled header can't be used once the first C token is seen. 13231 You can have preprocessor directives before a precompiled header; 13232 you can even include a precompiled header from inside another 13233 header, so long as there are no C tokens before the `#include'. 13234 13235 * The precompiled header file must be produced for the same language 13236 as the current compilation. You can't use a C precompiled header 13237 for a C++ compilation. 13238 13239 * The precompiled header file must have been produced by the same 13240 compiler binary as the current compilation is using. 13241 13242 * Any macros defined before the precompiled header is included must 13243 either be defined in the same way as when the precompiled header 13244 was generated, or must not affect the precompiled header, which 13245 usually means that they don't appear in the precompiled header at 13246 all. 13247 13248 The `-D' option is one way to define a macro before a precompiled 13249 header is included; using a `#define' can also do it. There are 13250 also some options that define macros implicitly, like `-O' and 13251 `-Wdeprecated'; the same rule applies to macros defined this way. 13252 13253 * If debugging information is output when using the precompiled 13254 header, using `-g' or similar, the same kind of debugging 13255 information must have been output when building the precompiled 13256 header. However, a precompiled header built using `-g' can be 13257 used in a compilation when no debugging information is being 13258 output. 13259 13260 * The same `-m' options must generally be used when building and 13261 using the precompiled header. *Note Submodel Options::, for any 13262 cases where this rule is relaxed. 13263 13264 * Each of the following options must be the same when building and 13265 using the precompiled header: 13266 13267 -fexceptions -funit-at-a-time 13268 13269 * Some other command-line options starting with `-f', `-p', or `-O' 13270 must be defined in the same way as when the precompiled header was 13271 generated. At present, it's not clear which options are safe to 13272 change and which are not; the safest choice is to use exactly the 13273 same options when generating and using the precompiled header. 13274 The following are known to be safe: 13275 13276 -fmessage-length= -fpreprocessed 13277 -fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 13278 -fsched-verbose=<number> -fschedule-insns -fvisibility= 13279 -pedantic-errors 13280 13281 13282 For all of these except the last, the compiler will automatically 13283ignore the precompiled header if the conditions aren't met. If you 13284find an option combination that doesn't work and doesn't cause the 13285precompiled header to be ignored, please consider filing a bug report, 13286see *Note Bugs::. 13287 13288 If you do use differing options when generating and using the 13289precompiled header, the actual behavior will be a mixture of the 13290behavior for the options. For instance, if you use `-g' to generate 13291the precompiled header but not when using it, you may or may not get 13292debugging information for routines in the precompiled header. 13293 13294 13295File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC 13296 132973.21 Running Protoize 13298===================== 13299 13300The program `protoize' is an optional part of GCC. You can use it to 13301add prototypes to a program, thus converting the program to ISO C in 13302one respect. The companion program `unprotoize' does the reverse: it 13303removes argument types from any prototypes that are found. 13304 13305 When you run these programs, you must specify a set of source files as 13306command line arguments. The conversion programs start out by compiling 13307these files to see what functions they define. The information gathered 13308about a file FOO is saved in a file named `FOO.X'. 13309 13310 After scanning comes actual conversion. The specified files are all 13311eligible to be converted; any files they include (whether sources or 13312just headers) are eligible as well. 13313 13314 But not all the eligible files are converted. By default, `protoize' 13315and `unprotoize' convert only source and header files in the current 13316directory. You can specify additional directories whose files should 13317be converted with the `-d DIRECTORY' option. You can also specify 13318particular files to exclude with the `-x FILE' option. A file is 13319converted if it is eligible, its directory name matches one of the 13320specified directory names, and its name within the directory has not 13321been excluded. 13322 13323 Basic conversion with `protoize' consists of rewriting most function 13324definitions and function declarations to specify the types of the 13325arguments. The only ones not rewritten are those for varargs functions. 13326 13327 `protoize' optionally inserts prototype declarations at the beginning 13328of the source file, to make them available for any calls that precede 13329the function's definition. Or it can insert prototype declarations 13330with block scope in the blocks where undeclared functions are called. 13331 13332 Basic conversion with `unprotoize' consists of rewriting most function 13333declarations to remove any argument types, and rewriting function 13334definitions to the old-style pre-ISO form. 13335 13336 Both conversion programs print a warning for any function declaration 13337or definition that they can't convert. You can suppress these warnings 13338with `-q'. 13339 13340 The output from `protoize' or `unprotoize' replaces the original 13341source file. The original file is renamed to a name ending with 13342`.save' (for DOS, the saved filename ends in `.sav' without the 13343original `.c' suffix). If the `.save' (`.sav' for DOS) file already 13344exists, then the source file is simply discarded. 13345 13346 `protoize' and `unprotoize' both depend on GCC itself to scan the 13347program and collect information about the functions it uses. So 13348neither of these programs will work until GCC is installed. 13349 13350 Here is a table of the options you can use with `protoize' and 13351`unprotoize'. Each option works with both programs unless otherwise 13352stated. 13353 13354`-B DIRECTORY' 13355 Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the 13356 usual directory (normally `/usr/local/lib'). This file contains 13357 prototype information about standard system functions. This option 13358 applies only to `protoize'. 13359 13360`-c COMPILATION-OPTIONS' 13361 Use COMPILATION-OPTIONS as the options when running `gcc' to 13362 produce the `.X' files. The special option `-aux-info' is always 13363 passed in addition, to tell `gcc' to write a `.X' file. 13364 13365 Note that the compilation options must be given as a single 13366 argument to `protoize' or `unprotoize'. If you want to specify 13367 several `gcc' options, you must quote the entire set of 13368 compilation options to make them a single word in the shell. 13369 13370 There are certain `gcc' arguments that you cannot use, because they 13371 would produce the wrong kind of output. These include `-g', `-O', 13372 `-c', `-S', and `-o' If you include these in the 13373 COMPILATION-OPTIONS, they are ignored. 13374 13375`-C' 13376 Rename files to end in `.C' (`.cc' for DOS-based file systems) 13377 instead of `.c'. This is convenient if you are converting a C 13378 program to C++. This option applies only to `protoize'. 13379 13380`-g' 13381 Add explicit global declarations. This means inserting explicit 13382 declarations at the beginning of each source file for each function 13383 that is called in the file and was not declared. These 13384 declarations precede the first function definition that contains a 13385 call to an undeclared function. This option applies only to 13386 `protoize'. 13387 13388`-i STRING' 13389 Indent old-style parameter declarations with the string STRING. 13390 This option applies only to `protoize'. 13391 13392 `unprotoize' converts prototyped function definitions to old-style 13393 function definitions, where the arguments are declared between the 13394 argument list and the initial `{'. By default, `unprotoize' uses 13395 five spaces as the indentation. If you want to indent with just 13396 one space instead, use `-i " "'. 13397 13398`-k' 13399 Keep the `.X' files. Normally, they are deleted after conversion 13400 is finished. 13401 13402`-l' 13403 Add explicit local declarations. `protoize' with `-l' inserts a 13404 prototype declaration for each function in each block which calls 13405 the function without any declaration. This option applies only to 13406 `protoize'. 13407 13408`-n' 13409 Make no real changes. This mode just prints information about the 13410 conversions that would have been done without `-n'. 13411 13412`-N' 13413 Make no `.save' files. The original files are simply deleted. 13414 Use this option with caution. 13415 13416`-p PROGRAM' 13417 Use the program PROGRAM as the compiler. Normally, the name `gcc' 13418 is used. 13419 13420`-q' 13421 Work quietly. Most warnings are suppressed. 13422 13423`-v' 13424 Print the version number, just like `-v' for `gcc'. 13425 13426 If you need special compiler options to compile one of your program's 13427source files, then you should generate that file's `.X' file specially, 13428by running `gcc' on that source file with the appropriate options and 13429the option `-aux-info'. Then run `protoize' on the entire set of 13430files. `protoize' will use the existing `.X' file because it is newer 13431than the source file. For example: 13432 13433 gcc -Dfoo=bar file1.c -aux-info file1.X 13434 protoize *.c 13435 13436You need to include the special files along with the rest in the 13437`protoize' command, even though their `.X' files already exist, because 13438otherwise they won't get converted. 13439 13440 *Note Protoize Caveats::, for more information on how to use 13441`protoize' successfully. 13442 13443 13444File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 13445 134464 C Implementation-defined behavior 13447*********************************** 13448 13449A conforming implementation of ISO C is required to document its choice 13450of behavior in each of the areas that are designated "implementation 13451defined". The following lists all such areas, along with the section 13452numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 13453Some areas are only implementation-defined in one version of the 13454standard. 13455 13456 Some choices depend on the externally determined ABI for the platform 13457(including standard character encodings) which GCC follows; these are 13458listed as "determined by ABI" below. *Note Binary Compatibility: 13459Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 13460are documented in the preprocessor manual. *Note 13461Implementation-defined behavior: (cpp)Implementation-defined behavior. 13462Some choices are made by the library and operating system (or other 13463environment when compiling for a freestanding environment); refer to 13464their documentation for details. 13465 13466* Menu: 13467 13468* Translation implementation:: 13469* Environment implementation:: 13470* Identifiers implementation:: 13471* Characters implementation:: 13472* Integers implementation:: 13473* Floating point implementation:: 13474* Arrays and pointers implementation:: 13475* Hints implementation:: 13476* Structures unions enumerations and bit-fields implementation:: 13477* Qualifiers implementation:: 13478* Declarators implementation:: 13479* Statements implementation:: 13480* Preprocessing directives implementation:: 13481* Library functions implementation:: 13482* Architecture implementation:: 13483* Locale-specific behavior implementation:: 13484 13485 13486File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 13487 134884.1 Translation 13489=============== 13490 13491 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 13492 5.1.1.3).' 13493 13494 Diagnostics consist of all the output sent to stderr by GCC. 13495 13496 * `Whether each nonempty sequence of white-space characters other 13497 than new-line is retained or replaced by one space character in 13498 translation phase 3 (C90 and C99 5.1.1.2).' 13499 13500 *Note Implementation-defined behavior: (cpp)Implementation-defined 13501 behavior. 13502 13503 13504 13505File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 13506 135074.2 Environment 13508=============== 13509 13510The behavior of most of these points are dependent on the implementation 13511of the C library, and are not defined by GCC itself. 13512 13513 * `The mapping between physical source file multibyte characters and 13514 the source character set in translation phase 1 (C90 and C99 13515 5.1.1.2).' 13516 13517 *Note Implementation-defined behavior: (cpp)Implementation-defined 13518 behavior. 13519 13520 13521 13522File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 13523 135244.3 Identifiers 13525=============== 13526 13527 * `Which additional multibyte characters may appear in identifiers 13528 and their correspondence to universal character names (C99 6.4.2).' 13529 13530 *Note Implementation-defined behavior: (cpp)Implementation-defined 13531 behavior. 13532 13533 * `The number of significant initial characters in an identifier 13534 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 13535 13536 For internal names, all characters are significant. For external 13537 names, the number of significant characters are defined by the 13538 linker; for almost all targets, all characters are significant. 13539 13540 * `Whether case distinctions are significant in an identifier with 13541 external linkage (C90 6.1.2).' 13542 13543 This is a property of the linker. C99 requires that case 13544 distinctions are always significant in identifiers with external 13545 linkage and systems without this property are not supported by GCC. 13546 13547 13548 13549File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 13550 135514.4 Characters 13552============== 13553 13554 * `The number of bits in a byte (C90 3.4, C99 3.6).' 13555 13556 Determined by ABI. 13557 13558 * `The values of the members of the execution character set (C90 and 13559 C99 5.2.1).' 13560 13561 Determined by ABI. 13562 13563 * `The unique value of the member of the execution character set 13564 produced for each of the standard alphabetic escape sequences (C90 13565 and C99 5.2.2).' 13566 13567 Determined by ABI. 13568 13569 * `The value of a `char' object into which has been stored any 13570 character other than a member of the basic execution character set 13571 (C90 6.1.2.5, C99 6.2.5).' 13572 13573 Determined by ABI. 13574 13575 * `Which of `signed char' or `unsigned char' has the same range, 13576 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 13577 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 13578 13579 Determined by ABI. The options `-funsigned-char' and 13580 `-fsigned-char' change the default. *Note Options Controlling C 13581 Dialect: C Dialect Options. 13582 13583 * `The mapping of members of the source character set (in character 13584 constants and string literals) to members of the execution 13585 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 13586 13587 Determined by ABI. 13588 13589 * `The value of an integer character constant containing more than 13590 one character or containing a character or escape sequence that 13591 does not map to a single-byte execution character (C90 6.1.3.4, 13592 C99 6.4.4.4).' 13593 13594 *Note Implementation-defined behavior: (cpp)Implementation-defined 13595 behavior. 13596 13597 * `The value of a wide character constant containing more than one 13598 multibyte character, or containing a multibyte character or escape 13599 sequence not represented in the extended execution character set 13600 (C90 6.1.3.4, C99 6.4.4.4).' 13601 13602 *Note Implementation-defined behavior: (cpp)Implementation-defined 13603 behavior. 13604 13605 * `The current locale used to convert a wide character constant 13606 consisting of a single multibyte character that maps to a member 13607 of the extended execution character set into a corresponding wide 13608 character code (C90 6.1.3.4, C99 6.4.4.4).' 13609 13610 *Note Implementation-defined behavior: (cpp)Implementation-defined 13611 behavior. 13612 13613 * `The current locale used to convert a wide string literal into 13614 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 13615 13616 *Note Implementation-defined behavior: (cpp)Implementation-defined 13617 behavior. 13618 13619 * `The value of a string literal containing a multibyte character or 13620 escape sequence not represented in the execution character set 13621 (C90 6.1.4, C99 6.4.5).' 13622 13623 *Note Implementation-defined behavior: (cpp)Implementation-defined 13624 behavior. 13625 13626 13627File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 13628 136294.5 Integers 13630============ 13631 13632 * `Any extended integer types that exist in the implementation (C99 13633 6.2.5).' 13634 13635 GCC does not support any extended integer types. 13636 13637 * `Whether signed integer types are represented using sign and 13638 magnitude, two's complement, or one's complement, and whether the 13639 extraordinary value is a trap representation or an ordinary value 13640 (C99 6.2.6.2).' 13641 13642 GCC supports only two's complement integer types, and all bit 13643 patterns are ordinary values. 13644 13645 * `The rank of any extended integer type relative to another extended 13646 integer type with the same precision (C99 6.3.1.1).' 13647 13648 GCC does not support any extended integer types. 13649 13650 * `The result of, or the signal raised by, converting an integer to a 13651 signed integer type when the value cannot be represented in an 13652 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 13653 13654 For conversion to a type of width N, the value is reduced modulo 13655 2^N to be within range of the type; no signal is raised. 13656 13657 * `The results of some bitwise operations on signed integers (C90 13658 6.3, C99 6.5).' 13659 13660 Bitwise operators act on the representation of the value including 13661 both the sign and value bits, where the sign bit is considered 13662 immediately above the highest-value value bit. Signed `>>' acts 13663 on negative numbers by sign extension. 13664 13665 GCC does not use the latitude given in C99 only to treat certain 13666 aspects of signed `<<' as undefined, but this is subject to change. 13667 13668 * `The sign of the remainder on integer division (C90 6.3.5).' 13669 13670 GCC always follows the C99 requirement that the result of division 13671 is truncated towards zero. 13672 13673 13674 13675File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 13676 136774.6 Floating point 13678================== 13679 13680 * `The accuracy of the floating-point operations and of the library 13681 functions in `<math.h>' and `<complex.h>' that return 13682 floating-point results (C90 and C99 5.2.4.2.2).' 13683 13684 The accuracy is unknown. 13685 13686 * `The rounding behaviors characterized by non-standard values of 13687 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 13688 13689 GCC does not use such values. 13690 13691 * `The evaluation methods characterized by non-standard negative 13692 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 13693 13694 GCC does not use such values. 13695 13696 * `The direction of rounding when an integer is converted to a 13697 floating-point number that cannot exactly represent the original 13698 value (C90 6.2.1.3, C99 6.3.1.4).' 13699 13700 C99 Annex F is followed. 13701 13702 * `The direction of rounding when a floating-point number is 13703 converted to a narrower floating-point number (C90 6.2.1.4, C99 13704 6.3.1.5).' 13705 13706 C99 Annex F is followed. 13707 13708 * `How the nearest representable value or the larger or smaller 13709 representable value immediately adjacent to the nearest 13710 representable value is chosen for certain floating constants (C90 13711 6.1.3.1, C99 6.4.4.2).' 13712 13713 C99 Annex F is followed. 13714 13715 * `Whether and how floating expressions are contracted when not 13716 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 13717 13718 Expressions are currently only contracted if 13719 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 13720 subject to change. 13721 13722 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 13723 13724 This pragma is not implemented, but the default is to "off" unless 13725 `-frounding-math' is used in which case it is "on". 13726 13727 * `Additional floating-point exceptions, rounding modes, 13728 environments, and classifications, and their macro names (C99 7.6, 13729 C99 7.12).' 13730 13731 This is dependent on the implementation of the C library, and is 13732 not defined by GCC itself. 13733 13734 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 13735 13736 This pragma is not implemented. Expressions are currently only 13737 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 13738 used. This is subject to change. 13739 13740 * `Whether the "inexact" floating-point exception can be raised when 13741 the rounded result actually does equal the mathematical result in 13742 an IEC 60559 conformant implementation (C99 F.9).' 13743 13744 This is dependent on the implementation of the C library, and is 13745 not defined by GCC itself. 13746 13747 * `Whether the "underflow" (and "inexact") floating-point exception 13748 can be raised when a result is tiny but not inexact in an IEC 13749 60559 conformant implementation (C99 F.9).' 13750 13751 This is dependent on the implementation of the C library, and is 13752 not defined by GCC itself. 13753 13754 13755 13756File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 13757 137584.7 Arrays and pointers 13759======================= 13760 13761 * `The result of converting a pointer to an integer or vice versa 13762 (C90 6.3.4, C99 6.3.2.3).' 13763 13764 A cast from pointer to integer discards most-significant bits if 13765 the pointer representation is larger than the integer type, 13766 sign-extends(1) if the pointer representation is smaller than the 13767 integer type, otherwise the bits are unchanged. 13768 13769 A cast from integer to pointer discards most-significant bits if 13770 the pointer representation is smaller than the integer type, 13771 extends according to the signedness of the integer type if the 13772 pointer representation is larger than the integer type, otherwise 13773 the bits are unchanged. 13774 13775 When casting from pointer to integer and back again, the resulting 13776 pointer must reference the same object as the original pointer, 13777 otherwise the behavior is undefined. That is, one may not use 13778 integer arithmetic to avoid the undefined behavior of pointer 13779 arithmetic as proscribed in C99 6.5.6/8. 13780 13781 * `The size of the result of subtracting two pointers to elements of 13782 the same array (C90 6.3.6, C99 6.5.6).' 13783 13784 The value is as specified in the standard and the type is 13785 determined by the ABI. 13786 13787 13788 ---------- Footnotes ---------- 13789 13790 (1) Future versions of GCC may zero-extend, or use a target-defined 13791`ptr_extend' pattern. Do not rely on sign extension. 13792 13793 13794File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 13795 137964.8 Hints 13797========= 13798 13799 * `The extent to which suggestions made by using the `register' 13800 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 13801 13802 The `register' specifier affects code generation only in these 13803 ways: 13804 13805 * When used as part of the register variable extension, see 13806 *Note Explicit Reg Vars::. 13807 13808 * When `-O0' is in use, the compiler allocates distinct stack 13809 memory for all variables that do not have the `register' 13810 storage-class specifier; if `register' is specified, the 13811 variable may have a shorter lifespan than the code would 13812 indicate and may never be placed in memory. 13813 13814 * On some rare x86 targets, `setjmp' doesn't save the registers 13815 in all circumstances. In those cases, GCC doesn't allocate 13816 any variables in registers unless they are marked `register'. 13817 13818 13819 * `The extent to which suggestions made by using the inline function 13820 specifier are effective (C99 6.7.4).' 13821 13822 GCC will not inline any functions if the `-fno-inline' option is 13823 used or if `-O0' is used. Otherwise, GCC may still be unable to 13824 inline a function for many reasons; the `-Winline' option may be 13825 used to determine if a function has not been inlined and why not. 13826 13827 13828 13829File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 13830 138314.9 Structures, unions, enumerations, and bit-fields 13832==================================================== 13833 13834 * `A member of a union object is accessed using a member of a 13835 different type (C90 6.3.2.3).' 13836 13837 The relevant bytes of the representation of the object are treated 13838 as an object of the type used for the access. This may be a trap 13839 representation. 13840 13841 * `Whether a "plain" `int' bit-field is treated as a `signed int' 13842 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 13843 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 13844 13845 By default it is treated as `signed int' but this may be changed 13846 by the `-funsigned-bitfields' option. 13847 13848 * `Allowable bit-field types other than `_Bool', `signed int', and 13849 `unsigned int' (C99 6.7.2.1).' 13850 13851 No other types are permitted in strictly conforming mode. 13852 13853 * `Whether a bit-field can straddle a storage-unit boundary (C90 13854 6.5.2.1, C99 6.7.2.1).' 13855 13856 Determined by ABI. 13857 13858 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 13859 C99 6.7.2.1).' 13860 13861 Determined by ABI. 13862 13863 * `The alignment of non-bit-field members of structures (C90 13864 6.5.2.1, C99 6.7.2.1).' 13865 13866 Determined by ABI. 13867 13868 * `The integer type compatible with each enumerated type (C90 13869 6.5.2.2, C99 6.7.2.2).' 13870 13871 Normally, the type is `unsigned int' if there are no negative 13872 values in the enumeration, otherwise `int'. If `-fshort-enums' is 13873 specified, then if there are negative values it is the first of 13874 `signed char', `short' and `int' that can represent all the 13875 values, otherwise it is the first of `unsigned char', `unsigned 13876 short' and `unsigned int' that can represent all the values. 13877 13878 On some targets, `-fshort-enums' is the default; this is 13879 determined by the ABI. 13880 13881 13882 13883File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 13884 138854.10 Qualifiers 13886=============== 13887 13888 * `What constitutes an access to an object that has 13889 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 13890 13891 Such an object is normally accessed by pointers and used for 13892 accessing hardware. In most expressions, it is intuitively 13893 obvious what is a read and what is a write. For example 13894 13895 volatile int *dst = SOMEVALUE; 13896 volatile int *src = SOMEOTHERVALUE; 13897 *dst = *src; 13898 13899 will cause a read of the volatile object pointed to by SRC and 13900 store the value into the volatile object pointed to by DST. There 13901 is no guarantee that these reads and writes are atomic, especially 13902 for objects larger than `int'. 13903 13904 However, if the volatile storage is not being modified, and the 13905 value of the volatile storage is not used, then the situation is 13906 less obvious. For example 13907 13908 volatile int *src = SOMEVALUE; 13909 *src; 13910 13911 According to the C standard, such an expression is an rvalue whose 13912 type is the unqualified version of its original type, i.e. `int'. 13913 Whether GCC interprets this as a read of the volatile object being 13914 pointed to or only as a request to evaluate the expression for its 13915 side-effects depends on this type. 13916 13917 If it is a scalar type, or on most targets an aggregate type whose 13918 only member object is of a scalar type, or a union type whose 13919 member objects are of scalar types, the expression is interpreted 13920 by GCC as a read of the volatile object; in the other cases, the 13921 expression is only evaluated for its side-effects. 13922 13923 13924 13925File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 13926 139274.11 Declarators 13928================ 13929 13930 * `The maximum number of declarators that may modify an arithmetic, 13931 structure or union type (C90 6.5.4).' 13932 13933 GCC is only limited by available memory. 13934 13935 13936 13937File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 13938 139394.12 Statements 13940=============== 13941 13942 * `The maximum number of `case' values in a `switch' statement (C90 13943 6.6.4.2).' 13944 13945 GCC is only limited by available memory. 13946 13947 13948 13949File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 13950 139514.13 Preprocessing directives 13952============================= 13953 13954*Note Implementation-defined behavior: (cpp)Implementation-defined 13955behavior, for details of these aspects of implementation-defined 13956behavior. 13957 13958 * `How sequences in both forms of header names are mapped to headers 13959 or external source file names (C90 6.1.7, C99 6.4.7).' 13960 13961 * `Whether the value of a character constant in a constant expression 13962 that controls conditional inclusion matches the value of the same 13963 character constant in the execution character set (C90 6.8.1, C99 13964 6.10.1).' 13965 13966 * `Whether the value of a single-character character constant in a 13967 constant expression that controls conditional inclusion may have a 13968 negative value (C90 6.8.1, C99 6.10.1).' 13969 13970 * `The places that are searched for an included `<>' delimited 13971 header, and how the places are specified or the header is 13972 identified (C90 6.8.2, C99 6.10.2).' 13973 13974 * `How the named source file is searched for in an included `""' 13975 delimited header (C90 6.8.2, C99 6.10.2).' 13976 13977 * `The method by which preprocessing tokens (possibly resulting from 13978 macro expansion) in a `#include' directive are combined into a 13979 header name (C90 6.8.2, C99 6.10.2).' 13980 13981 * `The nesting limit for `#include' processing (C90 6.8.2, C99 13982 6.10.2).' 13983 13984 * `Whether the `#' operator inserts a `\' character before the `\' 13985 character that begins a universal character name in a character 13986 constant or string literal (C99 6.10.3.2).' 13987 13988 * `The behavior on each recognized non-`STDC #pragma' directive (C90 13989 6.8.6, C99 6.10.6).' 13990 13991 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 13992 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 13993 details of target-specific pragmas. 13994 13995 * `The definitions for `__DATE__' and `__TIME__' when respectively, 13996 the date and time of translation are not available (C90 6.8.8, C99 13997 6.10.8).' 13998 13999 14000 14001File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 14002 140034.14 Library functions 14004====================== 14005 14006The behavior of most of these points are dependent on the implementation 14007of the C library, and are not defined by GCC itself. 14008 14009 * `The null pointer constant to which the macro `NULL' expands (C90 14010 7.1.6, C99 7.17).' 14011 14012 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 14013 provide the other headers which define `NULL' and some library 14014 implementations may use other definitions in those headers. 14015 14016 14017 14018File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 14019 140204.15 Architecture 14021================= 14022 14023 * `The values or expressions assigned to the macros specified in the 14024 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 14025 5.2.4.2, C99 7.18.2, C99 7.18.3).' 14026 14027 Determined by ABI. 14028 14029 * `The number, order, and encoding of bytes in any object (when not 14030 explicitly specified in this International Standard) (C99 14031 6.2.6.1).' 14032 14033 Determined by ABI. 14034 14035 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 14036 C99 6.5.3.4).' 14037 14038 Determined by ABI. 14039 14040 14041 14042File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 14043 140444.16 Locale-specific behavior 14045============================= 14046 14047The behavior of these points are dependent on the implementation of the 14048C library, and are not defined by GCC itself. 14049 14050 14051File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top 14052 140535 Extensions to the C Language Family 14054************************************* 14055 14056GNU C provides several language features not found in ISO standard C. 14057(The `-pedantic' option directs GCC to print a warning message if any 14058of these features is used.) To test for the availability of these 14059features in conditional compilation, check for a predefined macro 14060`__GNUC__', which is always defined under GCC. 14061 14062 These extensions are available in C and Objective-C. Most of them are 14063also available in C++. *Note Extensions to the C++ Language: C++ 14064Extensions, for extensions that apply _only_ to C++. 14065 14066 Some features that are in ISO C99 but not C89 or C++ are also, as 14067extensions, accepted by GCC in C89 mode and in C++. 14068 14069* Menu: 14070 14071* Statement Exprs:: Putting statements and declarations inside expressions. 14072* Local Labels:: Labels local to a block. 14073* Labels as Values:: Getting pointers to labels, and computed gotos. 14074* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 14075* Constructing Calls:: Dispatching a call to another function. 14076* Typeof:: `typeof': referring to the type of an expression. 14077* Conditionals:: Omitting the middle operand of a `?:' expression. 14078* Long Long:: Double-word integers---`long long int'. 14079* Complex:: Data types for complex numbers. 14080* Decimal Float:: Decimal Floating Types. 14081* Hex Floats:: Hexadecimal floating-point constants. 14082* Zero Length:: Zero-length arrays. 14083* Variable Length:: Arrays whose length is computed at run time. 14084* Empty Structures:: Structures with no members. 14085* Variadic Macros:: Macros with a variable number of arguments. 14086* Escaped Newlines:: Slightly looser rules for escaped newlines. 14087* Subscripting:: Any array can be subscripted, even if not an lvalue. 14088* Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 14089* Initializers:: Non-constant initializers. 14090* Compound Literals:: Compound literals give structures, unions 14091 or arrays as values. 14092* Designated Inits:: Labeling elements of initializers. 14093* Cast to Union:: Casting to union type from any member of the union. 14094* Case Ranges:: `case 1 ... 9' and such. 14095* Mixed Declarations:: Mixing declarations and code. 14096* Function Attributes:: Declaring that functions have no side effects, 14097 or that they can never return. 14098* Attribute Syntax:: Formal syntax for attributes. 14099* Function Prototypes:: Prototype declarations and old-style definitions. 14100* C++ Comments:: C++ comments are recognized. 14101* Dollar Signs:: Dollar sign is allowed in identifiers. 14102* Character Escapes:: `\e' stands for the character <ESC>. 14103* Variable Attributes:: Specifying attributes of variables. 14104* Type Attributes:: Specifying attributes of types. 14105* Alignment:: Inquiring about the alignment of a type or variable. 14106* Inline:: Defining inline functions (as fast as macros). 14107* Extended Asm:: Assembler instructions with C expressions as operands. 14108 (With them you can define ``built-in'' functions.) 14109* Constraints:: Constraints for asm operands 14110* Asm Labels:: Specifying the assembler name to use for a C symbol. 14111* Explicit Reg Vars:: Defining variables residing in specified registers. 14112* Alternate Keywords:: `__const__', `__asm__', etc., for header files. 14113* Incomplete Enums:: `enum foo;', with details to follow. 14114* Function Names:: Printable strings which are the name of the current 14115 function. 14116* Return Address:: Getting the return or frame address of a function. 14117* Vector Extensions:: Using vector instructions through built-in functions. 14118* Offsetof:: Special syntax for implementing `offsetof'. 14119* Atomic Builtins:: Built-in functions for atomic memory access. 14120* Object Size Checking:: Built-in functions for limited buffer overflow 14121 checking. 14122* Other Builtins:: Other built-in functions. 14123* Target Builtins:: Built-in functions specific to particular targets. 14124* Target Format Checks:: Format checks specific to particular targets. 14125* Pragmas:: Pragmas accepted by GCC. 14126* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 14127* Thread-Local:: Per-thread variables. 14128 14129 14130File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 14131 141325.1 Statements and Declarations in Expressions 14133============================================== 14134 14135A compound statement enclosed in parentheses may appear as an expression 14136in GNU C. This allows you to use loops, switches, and local variables 14137within an expression. 14138 14139 Recall that a compound statement is a sequence of statements surrounded 14140by braces; in this construct, parentheses go around the braces. For 14141example: 14142 14143 ({ int y = foo (); int z; 14144 if (y > 0) z = y; 14145 else z = - y; 14146 z; }) 14147 14148is a valid (though slightly more complex than necessary) expression for 14149the absolute value of `foo ()'. 14150 14151 The last thing in the compound statement should be an expression 14152followed by a semicolon; the value of this subexpression serves as the 14153value of the entire construct. (If you use some other kind of statement 14154last within the braces, the construct has type `void', and thus 14155effectively no value.) 14156 14157 This feature is especially useful in making macro definitions "safe" 14158(so that they evaluate each operand exactly once). For example, the 14159"maximum" function is commonly defined as a macro in standard C as 14160follows: 14161 14162 #define max(a,b) ((a) > (b) ? (a) : (b)) 14163 14164But this definition computes either A or B twice, with bad results if 14165the operand has side effects. In GNU C, if you know the type of the 14166operands (here taken as `int'), you can define the macro safely as 14167follows: 14168 14169 #define maxint(a,b) \ 14170 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 14171 14172 Embedded statements are not allowed in constant expressions, such as 14173the value of an enumeration constant, the width of a bit-field, or the 14174initial value of a static variable. 14175 14176 If you don't know the type of the operand, you can still do this, but 14177you must use `typeof' (*note Typeof::). 14178 14179 In G++, the result value of a statement expression undergoes array and 14180function pointer decay, and is returned by value to the enclosing 14181expression. For instance, if `A' is a class, then 14182 14183 A a; 14184 14185 ({a;}).Foo () 14186 14187will construct a temporary `A' object to hold the result of the 14188statement expression, and that will be used to invoke `Foo'. Therefore 14189the `this' pointer observed by `Foo' will not be the address of `a'. 14190 14191 Any temporaries created within a statement within a statement 14192expression will be destroyed at the statement's end. This makes 14193statement expressions inside macros slightly different from function 14194calls. In the latter case temporaries introduced during argument 14195evaluation will be destroyed at the end of the statement that includes 14196the function call. In the statement expression case they will be 14197destroyed during the statement expression. For instance, 14198 14199 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 14200 template<typename T> T function(T a) { T b = a; return b + 3; } 14201 14202 void foo () 14203 { 14204 macro (X ()); 14205 function (X ()); 14206 } 14207 14208will have different places where temporaries are destroyed. For the 14209`macro' case, the temporary `X' will be destroyed just after the 14210initialization of `b'. In the `function' case that temporary will be 14211destroyed when the function returns. 14212 14213 These considerations mean that it is probably a bad idea to use 14214statement-expressions of this form in header files that are designed to 14215work with C++. (Note that some versions of the GNU C Library contained 14216header files using statement-expression that lead to precisely this 14217bug.) 14218 14219 Jumping into a statement expression with `goto' or using a `switch' 14220statement outside the statement expression with a `case' or `default' 14221label inside the statement expression is not permitted. Jumping into a 14222statement expression with a computed `goto' (*note Labels as Values::) 14223yields undefined behavior. Jumping out of a statement expression is 14224permitted, but if the statement expression is part of a larger 14225expression then it is unspecified which other subexpressions of that 14226expression have been evaluated except where the language definition 14227requires certain subexpressions to be evaluated before or after the 14228statement expression. In any case, as with a function call the 14229evaluation of a statement expression is not interleaved with the 14230evaluation of other parts of the containing expression. For example, 14231 14232 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 14233 14234will call `foo' and `bar1' and will not call `baz' but may or may not 14235call `bar2'. If `bar2' is called, it will be called after `foo' and 14236before `bar1' 14237 14238 14239File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 14240 142415.2 Locally Declared Labels 14242=========================== 14243 14244GCC allows you to declare "local labels" in any nested block scope. A 14245local label is just like an ordinary label, but you can only reference 14246it (with a `goto' statement, or by taking its address) within the block 14247in which it was declared. 14248 14249 A local label declaration looks like this: 14250 14251 __label__ LABEL; 14252 14253or 14254 14255 __label__ LABEL1, LABEL2, /* ... */; 14256 14257 Local label declarations must come at the beginning of the block, 14258before any ordinary declarations or statements. 14259 14260 The label declaration defines the label _name_, but does not define 14261the label itself. You must do this in the usual way, with `LABEL:', 14262within the statements of the statement expression. 14263 14264 The local label feature is useful for complex macros. If a macro 14265contains nested loops, a `goto' can be useful for breaking out of them. 14266However, an ordinary label whose scope is the whole function cannot be 14267used: if the macro can be expanded several times in one function, the 14268label will be multiply defined in that function. A local label avoids 14269this problem. For example: 14270 14271 #define SEARCH(value, array, target) \ 14272 do { \ 14273 __label__ found; \ 14274 typeof (target) _SEARCH_target = (target); \ 14275 typeof (*(array)) *_SEARCH_array = (array); \ 14276 int i, j; \ 14277 int value; \ 14278 for (i = 0; i < max; i++) \ 14279 for (j = 0; j < max; j++) \ 14280 if (_SEARCH_array[i][j] == _SEARCH_target) \ 14281 { (value) = i; goto found; } \ 14282 (value) = -1; \ 14283 found:; \ 14284 } while (0) 14285 14286 This could also be written using a statement-expression: 14287 14288 #define SEARCH(array, target) \ 14289 ({ \ 14290 __label__ found; \ 14291 typeof (target) _SEARCH_target = (target); \ 14292 typeof (*(array)) *_SEARCH_array = (array); \ 14293 int i, j; \ 14294 int value; \ 14295 for (i = 0; i < max; i++) \ 14296 for (j = 0; j < max; j++) \ 14297 if (_SEARCH_array[i][j] == _SEARCH_target) \ 14298 { value = i; goto found; } \ 14299 value = -1; \ 14300 found: \ 14301 value; \ 14302 }) 14303 14304 Local label declarations also make the labels they declare visible to 14305nested functions, if there are any. *Note Nested Functions::, for 14306details. 14307 14308 14309File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 14310 143115.3 Labels as Values 14312==================== 14313 14314You can get the address of a label defined in the current function (or 14315a containing function) with the unary operator `&&'. The value has 14316type `void *'. This value is a constant and can be used wherever a 14317constant of that type is valid. For example: 14318 14319 void *ptr; 14320 /* ... */ 14321 ptr = &&foo; 14322 14323 To use these values, you need to be able to jump to one. This is done 14324with the computed goto statement(1), `goto *EXP;'. For example, 14325 14326 goto *ptr; 14327 14328Any expression of type `void *' is allowed. 14329 14330 One way of using these constants is in initializing a static array that 14331will serve as a jump table: 14332 14333 static void *array[] = { &&foo, &&bar, &&hack }; 14334 14335 Then you can select a label with indexing, like this: 14336 14337 goto *array[i]; 14338 14339Note that this does not check whether the subscript is in bounds--array 14340indexing in C never does that. 14341 14342 Such an array of label values serves a purpose much like that of the 14343`switch' statement. The `switch' statement is cleaner, so use that 14344rather than an array unless the problem does not fit a `switch' 14345statement very well. 14346 14347 Another use of label values is in an interpreter for threaded code. 14348The labels within the interpreter function can be stored in the 14349threaded code for super-fast dispatching. 14350 14351 You may not use this mechanism to jump to code in a different function. 14352If you do that, totally unpredictable things will happen. The best way 14353to avoid this is to store the label address only in automatic variables 14354and never pass it as an argument. 14355 14356 An alternate way to write the above example is 14357 14358 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 14359 &&hack - &&foo }; 14360 goto *(&&foo + array[i]); 14361 14362This is more friendly to code living in shared libraries, as it reduces 14363the number of dynamic relocations that are needed, and by consequence, 14364allows the data to be read-only. 14365 14366 ---------- Footnotes ---------- 14367 14368 (1) The analogous feature in Fortran is called an assigned goto, but 14369that name seems inappropriate in C, where one can do more than simply 14370store label addresses in label variables. 14371 14372 14373File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 14374 143755.4 Nested Functions 14376==================== 14377 14378A "nested function" is a function defined inside another function. 14379(Nested functions are not supported for GNU C++.) The nested function's 14380name is local to the block where it is defined. For example, here we 14381define a nested function named `square', and call it twice: 14382 14383 foo (double a, double b) 14384 { 14385 double square (double z) { return z * z; } 14386 14387 return square (a) + square (b); 14388 } 14389 14390 The nested function can access all the variables of the containing 14391function that are visible at the point of its definition. This is 14392called "lexical scoping". For example, here we show a nested function 14393which uses an inherited variable named `offset': 14394 14395 bar (int *array, int offset, int size) 14396 { 14397 int access (int *array, int index) 14398 { return array[index + offset]; } 14399 int i; 14400 /* ... */ 14401 for (i = 0; i < size; i++) 14402 /* ... */ access (array, i) /* ... */ 14403 } 14404 14405 Nested function definitions are permitted within functions in the 14406places where variable definitions are allowed; that is, in any block, 14407mixed with the other declarations and statements in the block. 14408 14409 It is possible to call the nested function from outside the scope of 14410its name by storing its address or passing the address to another 14411function: 14412 14413 hack (int *array, int size) 14414 { 14415 void store (int index, int value) 14416 { array[index] = value; } 14417 14418 intermediate (store, size); 14419 } 14420 14421 Here, the function `intermediate' receives the address of `store' as 14422an argument. If `intermediate' calls `store', the arguments given to 14423`store' are used to store into `array'. But this technique works only 14424so long as the containing function (`hack', in this example) does not 14425exit. 14426 14427 If you try to call the nested function through its address after the 14428containing function has exited, all hell will break loose. If you try 14429to call it after a containing scope level has exited, and if it refers 14430to some of the variables that are no longer in scope, you may be lucky, 14431but it's not wise to take the risk. If, however, the nested function 14432does not refer to anything that has gone out of scope, you should be 14433safe. 14434 14435 GCC implements taking the address of a nested function using a 14436technique called "trampolines". A paper describing them is available as 14437 14438`http://people.debian.org/~aaronl/Usenix88-lexic.pdf'. 14439 14440 A nested function can jump to a label inherited from a containing 14441function, provided the label was explicitly declared in the containing 14442function (*note Local Labels::). Such a jump returns instantly to the 14443containing function, exiting the nested function which did the `goto' 14444and any intermediate functions as well. Here is an example: 14445 14446 bar (int *array, int offset, int size) 14447 { 14448 __label__ failure; 14449 int access (int *array, int index) 14450 { 14451 if (index > size) 14452 goto failure; 14453 return array[index + offset]; 14454 } 14455 int i; 14456 /* ... */ 14457 for (i = 0; i < size; i++) 14458 /* ... */ access (array, i) /* ... */ 14459 /* ... */ 14460 return 0; 14461 14462 /* Control comes here from `access' 14463 if it detects an error. */ 14464 failure: 14465 return -1; 14466 } 14467 14468 A nested function always has no linkage. Declaring one with `extern' 14469or `static' is erroneous. If you need to declare the nested function 14470before its definition, use `auto' (which is otherwise meaningless for 14471function declarations). 14472 14473 bar (int *array, int offset, int size) 14474 { 14475 __label__ failure; 14476 auto int access (int *, int); 14477 /* ... */ 14478 int access (int *array, int index) 14479 { 14480 if (index > size) 14481 goto failure; 14482 return array[index + offset]; 14483 } 14484 /* ... */ 14485 } 14486 14487 14488File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 14489 144905.5 Constructing Function Calls 14491=============================== 14492 14493Using the built-in functions described below, you can record the 14494arguments a function received, and call another function with the same 14495arguments, without knowing the number or types of the arguments. 14496 14497 You can also record the return value of that function call, and later 14498return that value, without knowing what data type the function tried to 14499return (as long as your caller expects that data type). 14500 14501 However, these built-in functions may interact badly with some 14502sophisticated features or other extensions of the language. It is, 14503therefore, not recommended to use them outside very simple functions 14504acting as mere forwarders for their arguments. 14505 14506 -- Built-in Function: void * __builtin_apply_args () 14507 This built-in function returns a pointer to data describing how to 14508 perform a call with the same arguments as were passed to the 14509 current function. 14510 14511 The function saves the arg pointer register, structure value 14512 address, and all registers that might be used to pass arguments to 14513 a function into a block of memory allocated on the stack. Then it 14514 returns the address of that block. 14515 14516 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 14517 *ARGUMENTS, size_t SIZE) 14518 This built-in function invokes FUNCTION with a copy of the 14519 parameters described by ARGUMENTS and SIZE. 14520 14521 The value of ARGUMENTS should be the value returned by 14522 `__builtin_apply_args'. The argument SIZE specifies the size of 14523 the stack argument data, in bytes. 14524 14525 This function returns a pointer to data describing how to return 14526 whatever value was returned by FUNCTION. The data is saved in a 14527 block of memory allocated on the stack. 14528 14529 It is not always simple to compute the proper value for SIZE. The 14530 value is used by `__builtin_apply' to compute the amount of data 14531 that should be pushed on the stack and copied from the incoming 14532 argument area. 14533 14534 -- Built-in Function: void __builtin_return (void *RESULT) 14535 This built-in function returns the value described by RESULT from 14536 the containing function. You should specify, for RESULT, a value 14537 returned by `__builtin_apply'. 14538 14539 14540File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 14541 145425.6 Referring to a Type with `typeof' 14543===================================== 14544 14545Another way to refer to the type of an expression is with `typeof'. 14546The syntax of using of this keyword looks like `sizeof', but the 14547construct acts semantically like a type name defined with `typedef'. 14548 14549 There are two ways of writing the argument to `typeof': with an 14550expression or with a type. Here is an example with an expression: 14551 14552 typeof (x[0](1)) 14553 14554This assumes that `x' is an array of pointers to functions; the type 14555described is that of the values of the functions. 14556 14557 Here is an example with a typename as the argument: 14558 14559 typeof (int *) 14560 14561Here the type described is that of pointers to `int'. 14562 14563 If you are writing a header file that must work when included in ISO C 14564programs, write `__typeof__' instead of `typeof'. *Note Alternate 14565Keywords::. 14566 14567 A `typeof'-construct can be used anywhere a typedef name could be 14568used. For example, you can use it in a declaration, in a cast, or 14569inside of `sizeof' or `typeof'. 14570 14571 `typeof' is often useful in conjunction with the 14572statements-within-expressions feature. Here is how the two together can 14573be used to define a safe "maximum" macro that operates on any 14574arithmetic type and evaluates each of its arguments exactly once: 14575 14576 #define max(a,b) \ 14577 ({ typeof (a) _a = (a); \ 14578 typeof (b) _b = (b); \ 14579 _a > _b ? _a : _b; }) 14580 14581 The reason for using names that start with underscores for the local 14582variables is to avoid conflicts with variable names that occur within 14583the expressions that are substituted for `a' and `b'. Eventually we 14584hope to design a new form of declaration syntax that allows you to 14585declare variables whose scopes start only after their initializers; 14586this will be a more reliable way to prevent such conflicts. 14587 14588Some more examples of the use of `typeof': 14589 14590 * This declares `y' with the type of what `x' points to. 14591 14592 typeof (*x) y; 14593 14594 * This declares `y' as an array of such values. 14595 14596 typeof (*x) y[4]; 14597 14598 * This declares `y' as an array of pointers to characters: 14599 14600 typeof (typeof (char *)[4]) y; 14601 14602 It is equivalent to the following traditional C declaration: 14603 14604 char *y[4]; 14605 14606 To see the meaning of the declaration using `typeof', and why it 14607 might be a useful way to write, rewrite it with these macros: 14608 14609 #define pointer(T) typeof(T *) 14610 #define array(T, N) typeof(T [N]) 14611 14612 Now the declaration can be rewritten this way: 14613 14614 array (pointer (char), 4) y; 14615 14616 Thus, `array (pointer (char), 4)' is the type of arrays of 4 14617 pointers to `char'. 14618 14619 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 14620limited extension which permitted one to write 14621 14622 typedef T = EXPR; 14623 14624with the effect of declaring T to have the type of the expression EXPR. 14625This extension does not work with GCC 3 (versions between 3.0 and 3.2 14626will crash; 3.2.1 and later give an error). Code which relies on it 14627should be rewritten to use `typeof': 14628 14629 typedef typeof(EXPR) T; 14630 14631This will work with all versions of GCC. 14632 14633 14634File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 14635 146365.7 Conditionals with Omitted Operands 14637====================================== 14638 14639The middle operand in a conditional expression may be omitted. Then if 14640the first operand is nonzero, its value is the value of the conditional 14641expression. 14642 14643 Therefore, the expression 14644 14645 x ? : y 14646 14647has the value of `x' if that is nonzero; otherwise, the value of `y'. 14648 14649 This example is perfectly equivalent to 14650 14651 x ? x : y 14652 14653In this simple case, the ability to omit the middle operand is not 14654especially useful. When it becomes useful is when the first operand 14655does, or may (if it is a macro argument), contain a side effect. Then 14656repeating the operand in the middle would perform the side effect 14657twice. Omitting the middle operand uses the value already computed 14658without the undesirable effects of recomputing it. 14659 14660 14661File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions 14662 146635.8 Double-Word Integers 14664======================== 14665 14666ISO C99 supports data types for integers that are at least 64 bits wide, 14667and as an extension GCC supports them in C89 mode and in C++. Simply 14668write `long long int' for a signed integer, or `unsigned long long int' 14669for an unsigned integer. To make an integer constant of type `long 14670long int', add the suffix `LL' to the integer. To make an integer 14671constant of type `unsigned long long int', add the suffix `ULL' to the 14672integer. 14673 14674 You can use these types in arithmetic like any other integer types. 14675Addition, subtraction, and bitwise boolean operations on these types 14676are open-coded on all types of machines. Multiplication is open-coded 14677if the machine supports fullword-to-doubleword a widening multiply 14678instruction. Division and shifts are open-coded only on machines that 14679provide special support. The operations that are not open-coded use 14680special library routines that come with GCC. 14681 14682 There may be pitfalls when you use `long long' types for function 14683arguments, unless you declare function prototypes. If a function 14684expects type `int' for its argument, and you pass a value of type `long 14685long int', confusion will result because the caller and the subroutine 14686will disagree about the number of bytes for the argument. Likewise, if 14687the function expects `long long int' and you pass `int'. The best way 14688to avoid such problems is to use prototypes. 14689 14690 14691File: gcc.info, Node: Complex, Next: Decimal Float, Prev: Long Long, Up: C Extensions 14692 146935.9 Complex Numbers 14694=================== 14695 14696ISO C99 supports complex floating data types, and as an extension GCC 14697supports them in C89 mode and in C++, and supports complex integer data 14698types which are not part of ISO C99. You can declare complex types 14699using the keyword `_Complex'. As an extension, the older GNU keyword 14700`__complex__' is also supported. 14701 14702 For example, `_Complex double x;' declares `x' as a variable whose 14703real part and imaginary part are both of type `double'. `_Complex 14704short int y;' declares `y' to have real and imaginary parts of type 14705`short int'; this is not likely to be useful, but it shows that the set 14706of complex types is complete. 14707 14708 To write a constant with a complex data type, use the suffix `i' or 14709`j' (either one; they are equivalent). For example, `2.5fi' has type 14710`_Complex float' and `3i' has type `_Complex int'. Such a constant 14711always has a pure imaginary value, but you can form any complex value 14712you like by adding one to a real constant. This is a GNU extension; if 14713you have an ISO C99 conforming C library (such as GNU libc), and want 14714to construct complex constants of floating type, you should include 14715`<complex.h>' and use the macros `I' or `_Complex_I' instead. 14716 14717 To extract the real part of a complex-valued expression EXP, write 14718`__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 14719part. This is a GNU extension; for values of floating type, you should 14720use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 14721`cimag' and `cimagl', declared in `<complex.h>' and also provided as 14722built-in functions by GCC. 14723 14724 The operator `~' performs complex conjugation when used on a value 14725with a complex type. This is a GNU extension; for values of floating 14726type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 14727declared in `<complex.h>' and also provided as built-in functions by 14728GCC. 14729 14730 GCC can allocate complex automatic variables in a noncontiguous 14731fashion; it's even possible for the real part to be in a register while 14732the imaginary part is on the stack (or vice-versa). Only the DWARF2 14733debug info format can represent this, so use of DWARF2 is recommended. 14734If you are using the stabs debug info format, GCC describes a 14735noncontiguous complex variable as if it were two separate variables of 14736noncomplex type. If the variable's actual name is `foo', the two 14737fictitious variables are named `foo$real' and `foo$imag'. You can 14738examine and set these two fictitious variables with your debugger. 14739 14740 14741File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Complex, Up: C Extensions 14742 147435.10 Decimal Floating Types 14744=========================== 14745 14746As an extension, the GNU C compiler supports decimal floating types as 14747defined in the N1176 draft of ISO/IEC WDTR24732. Support for decimal 14748floating types in GCC will evolve as the draft technical report changes. 14749Calling conventions for any target might also change. Not all targets 14750support decimal floating types. 14751 14752 The decimal floating types are `_Decimal32', `_Decimal64', and 14753`_Decimal128'. They use a radix of ten, unlike the floating types 14754`float', `double', and `long double' whose radix is not specified by 14755the C standard but is usually two. 14756 14757 Support for decimal floating types includes the arithmetic operators 14758add, subtract, multiply, divide; unary arithmetic operators; relational 14759operators; equality operators; and conversions to and from integer and 14760other floating types. Use a suffix `df' or `DF' in a literal constant 14761of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 14762for `_Decimal128'. 14763 14764 GCC support of decimal float as specified by the draft technical report 14765is incomplete: 14766 14767 * Translation time data type (TTDT) is not supported. 14768 14769 * Characteristics of decimal floating types are defined in header 14770 file `decfloat.h' rather than `float.h'. 14771 14772 * When the value of a decimal floating type cannot be represented in 14773 the integer type to which it is being converted, the result is 14774 undefined rather than the result value specified by the draft 14775 technical report. 14776 14777 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 14778the DWARF2 debug information format. 14779 14780 14781File: gcc.info, Node: Hex Floats, Next: Zero Length, Prev: Decimal Float, Up: C Extensions 14782 147835.11 Hex Floats 14784=============== 14785 14786ISO C99 supports floating-point numbers written not only in the usual 14787decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 14788written in hexadecimal format. As a GNU extension, GCC supports this 14789in C89 mode (except in some cases when strictly conforming) and in C++. 14790In that format the `0x' hex introducer and the `p' or `P' exponent 14791field are mandatory. The exponent is a decimal number that indicates 14792the power of 2 by which the significant part will be multiplied. Thus 14793`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 14794is the same as `1.55e1'. 14795 14796 Unlike for floating-point numbers in the decimal notation the exponent 14797is always required in the hexadecimal notation. Otherwise the compiler 14798would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 14799could mean `1.0f' or `1.9375' since `f' is also the extension for 14800floating-point constants of type `float'. 14801 14802 14803File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Hex Floats, Up: C Extensions 14804 148055.12 Arrays of Length Zero 14806========================== 14807 14808Zero-length arrays are allowed in GNU C. They are very useful as the 14809last element of a structure which is really a header for a 14810variable-length object: 14811 14812 struct line { 14813 int length; 14814 char contents[0]; 14815 }; 14816 14817 struct line *thisline = (struct line *) 14818 malloc (sizeof (struct line) + this_length); 14819 thisline->length = this_length; 14820 14821 In ISO C90, you would have to give `contents' a length of 1, which 14822means either you waste space or complicate the argument to `malloc'. 14823 14824 In ISO C99, you would use a "flexible array member", which is slightly 14825different in syntax and semantics: 14826 14827 * Flexible array members are written as `contents[]' without the `0'. 14828 14829 * Flexible array members have incomplete type, and so the `sizeof' 14830 operator may not be applied. As a quirk of the original 14831 implementation of zero-length arrays, `sizeof' evaluates to zero. 14832 14833 * Flexible array members may only appear as the last member of a 14834 `struct' that is otherwise non-empty. 14835 14836 * A structure containing a flexible array member, or a union 14837 containing such a structure (possibly recursively), may not be a 14838 member of a structure or an element of an array. (However, these 14839 uses are permitted by GCC as extensions.) 14840 14841 GCC versions before 3.0 allowed zero-length arrays to be statically 14842initialized, as if they were flexible arrays. In addition to those 14843cases that were useful, it also allowed initializations in situations 14844that would corrupt later data. Non-empty initialization of zero-length 14845arrays is now treated like any case where there are more initializer 14846elements than the array holds, in that a suitable warning about "excess 14847elements in array" is given, and the excess elements (all of them, in 14848this case) are ignored. 14849 14850 Instead GCC allows static initialization of flexible array members. 14851This is equivalent to defining a new structure containing the original 14852structure followed by an array of sufficient size to contain the data. 14853I.e. in the following, `f1' is constructed as if it were declared like 14854`f2'. 14855 14856 struct f1 { 14857 int x; int y[]; 14858 } f1 = { 1, { 2, 3, 4 } }; 14859 14860 struct f2 { 14861 struct f1 f1; int data[3]; 14862 } f2 = { { 1 }, { 2, 3, 4 } }; 14863 14864The convenience of this extension is that `f1' has the desired type, 14865eliminating the need to consistently refer to `f2.f1'. 14866 14867 This has symmetry with normal static arrays, in that an array of 14868unknown size is also written with `[]'. 14869 14870 Of course, this extension only makes sense if the extra data comes at 14871the end of a top-level object, as otherwise we would be overwriting 14872data at subsequent offsets. To avoid undue complication and confusion 14873with initialization of deeply nested arrays, we simply disallow any 14874non-empty initialization except when the structure is the top-level 14875object. For example: 14876 14877 struct foo { int x; int y[]; }; 14878 struct bar { struct foo z; }; 14879 14880 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 14881 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 14882 struct bar c = { { 1, { } } }; // Valid. 14883 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 14884 14885 14886File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 14887 148885.13 Structures With No Members 14889=============================== 14890 14891GCC permits a C structure to have no members: 14892 14893 struct empty { 14894 }; 14895 14896 The structure will have size zero. In C++, empty structures are part 14897of the language. G++ treats empty structures as if they had a single 14898member of type `char'. 14899 14900 14901File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 14902 149035.14 Arrays of Variable Length 14904============================== 14905 14906Variable-length automatic arrays are allowed in ISO C99, and as an 14907extension GCC accepts them in C89 mode and in C++. (However, GCC's 14908implementation of variable-length arrays does not yet conform in detail 14909to the ISO C99 standard.) These arrays are declared like any other 14910automatic arrays, but with a length that is not a constant expression. 14911The storage is allocated at the point of declaration and deallocated 14912when the brace-level is exited. For example: 14913 14914 FILE * 14915 concat_fopen (char *s1, char *s2, char *mode) 14916 { 14917 char str[strlen (s1) + strlen (s2) + 1]; 14918 strcpy (str, s1); 14919 strcat (str, s2); 14920 return fopen (str, mode); 14921 } 14922 14923 Jumping or breaking out of the scope of the array name deallocates the 14924storage. Jumping into the scope is not allowed; you get an error 14925message for it. 14926 14927 You can use the function `alloca' to get an effect much like 14928variable-length arrays. The function `alloca' is available in many 14929other C implementations (but not in all). On the other hand, 14930variable-length arrays are more elegant. 14931 14932 There are other differences between these two methods. Space allocated 14933with `alloca' exists until the containing _function_ returns. The 14934space for a variable-length array is deallocated as soon as the array 14935name's scope ends. (If you use both variable-length arrays and 14936`alloca' in the same function, deallocation of a variable-length array 14937will also deallocate anything more recently allocated with `alloca'.) 14938 14939 You can also use variable-length arrays as arguments to functions: 14940 14941 struct entry 14942 tester (int len, char data[len][len]) 14943 { 14944 /* ... */ 14945 } 14946 14947 The length of an array is computed once when the storage is allocated 14948and is remembered for the scope of the array in case you access it with 14949`sizeof'. 14950 14951 If you want to pass the array first and the length afterward, you can 14952use a forward declaration in the parameter list--another GNU extension. 14953 14954 struct entry 14955 tester (int len; char data[len][len], int len) 14956 { 14957 /* ... */ 14958 } 14959 14960 The `int len' before the semicolon is a "parameter forward 14961declaration", and it serves the purpose of making the name `len' known 14962when the declaration of `data' is parsed. 14963 14964 You can write any number of such parameter forward declarations in the 14965parameter list. They can be separated by commas or semicolons, but the 14966last one must end with a semicolon, which is followed by the "real" 14967parameter declarations. Each forward declaration must match a "real" 14968declaration in parameter name and data type. ISO C99 does not support 14969parameter forward declarations. 14970 14971 14972File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 14973 149745.15 Macros with a Variable Number of Arguments. 14975================================================ 14976 14977In the ISO C standard of 1999, a macro can be declared to accept a 14978variable number of arguments much as a function can. The syntax for 14979defining the macro is similar to that of a function. Here is an 14980example: 14981 14982 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 14983 14984 Here `...' is a "variable argument". In the invocation of such a 14985macro, it represents the zero or more tokens until the closing 14986parenthesis that ends the invocation, including any commas. This set of 14987tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 14988it appears. See the CPP manual for more information. 14989 14990 GCC has long supported variadic macros, and used a different syntax 14991that allowed you to give a name to the variable arguments just like any 14992other argument. Here is an example: 14993 14994 #define debug(format, args...) fprintf (stderr, format, args) 14995 14996 This is in all ways equivalent to the ISO C example above, but arguably 14997more readable and descriptive. 14998 14999 GNU CPP has two further variadic macro extensions, and permits them to 15000be used with either of the above forms of macro definition. 15001 15002 In standard C, you are not allowed to leave the variable argument out 15003entirely; but you are allowed to pass an empty argument. For example, 15004this invocation is invalid in ISO C, because there is no comma after 15005the string: 15006 15007 debug ("A message") 15008 15009 GNU CPP permits you to completely omit the variable arguments in this 15010way. In the above examples, the compiler would complain, though since 15011the expansion of the macro still has the extra comma after the format 15012string. 15013 15014 To help solve this problem, CPP behaves specially for variable 15015arguments used with the token paste operator, `##'. If instead you 15016write 15017 15018 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 15019 15020 and if the variable arguments are omitted or empty, the `##' operator 15021causes the preprocessor to remove the comma before it. If you do 15022provide some variable arguments in your macro invocation, GNU CPP does 15023not complain about the paste operation and instead places the variable 15024arguments after the comma. Just like any other pasted macro argument, 15025these arguments are not macro expanded. 15026 15027 15028File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 15029 150305.16 Slightly Looser Rules for Escaped Newlines 15031=============================================== 15032 15033Recently, the preprocessor has relaxed its treatment of escaped 15034newlines. Previously, the newline had to immediately follow a 15035backslash. The current implementation allows whitespace in the form of 15036spaces, horizontal and vertical tabs, and form feeds between the 15037backslash and the subsequent newline. The preprocessor issues a 15038warning, but treats it as a valid escaped newline and combines the two 15039lines to form a single logical line. This works within comments and 15040tokens, as well as between tokens. Comments are _not_ treated as 15041whitespace for the purposes of this relaxation, since they have not yet 15042been replaced with spaces. 15043 15044 15045File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 15046 150475.17 Non-Lvalue Arrays May Have Subscripts 15048========================================== 15049 15050In ISO C99, arrays that are not lvalues still decay to pointers, and 15051may be subscripted, although they may not be modified or used after the 15052next sequence point and the unary `&' operator may not be applied to 15053them. As an extension, GCC allows such arrays to be subscripted in C89 15054mode, though otherwise they do not decay to pointers outside C99 mode. 15055For example, this is valid in GNU C though not valid in C89: 15056 15057 struct foo {int a[4];}; 15058 15059 struct foo f(); 15060 15061 bar (int index) 15062 { 15063 return f().a[index]; 15064 } 15065 15066 15067File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 15068 150695.18 Arithmetic on `void'- and Function-Pointers 15070================================================ 15071 15072In GNU C, addition and subtraction operations are supported on pointers 15073to `void' and on pointers to functions. This is done by treating the 15074size of a `void' or of a function as 1. 15075 15076 A consequence of this is that `sizeof' is also allowed on `void' and 15077on function types, and returns 1. 15078 15079 The option `-Wpointer-arith' requests a warning if these extensions 15080are used. 15081 15082 15083File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 15084 150855.19 Non-Constant Initializers 15086============================== 15087 15088As in standard C++ and ISO C99, the elements of an aggregate 15089initializer for an automatic variable are not required to be constant 15090expressions in GNU C. Here is an example of an initializer with 15091run-time varying elements: 15092 15093 foo (float f, float g) 15094 { 15095 float beat_freqs[2] = { f-g, f+g }; 15096 /* ... */ 15097 } 15098 15099 15100File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 15101 151025.20 Compound Literals 15103====================== 15104 15105ISO C99 supports compound literals. A compound literal looks like a 15106cast containing an initializer. Its value is an object of the type 15107specified in the cast, containing the elements specified in the 15108initializer; it is an lvalue. As an extension, GCC supports compound 15109literals in C89 mode and in C++. 15110 15111 Usually, the specified type is a structure. Assume that `struct foo' 15112and `structure' are declared as shown: 15113 15114 struct foo {int a; char b[2];} structure; 15115 15116Here is an example of constructing a `struct foo' with a compound 15117literal: 15118 15119 structure = ((struct foo) {x + y, 'a', 0}); 15120 15121This is equivalent to writing the following: 15122 15123 { 15124 struct foo temp = {x + y, 'a', 0}; 15125 structure = temp; 15126 } 15127 15128 You can also construct an array. If all the elements of the compound 15129literal are (made up of) simple constant expressions, suitable for use 15130in initializers of objects of static storage duration, then the compound 15131literal can be coerced to a pointer to its first element and used in 15132such an initializer, as shown here: 15133 15134 char **foo = (char *[]) { "x", "y", "z" }; 15135 15136 Compound literals for scalar types and union types are is also 15137allowed, but then the compound literal is equivalent to a cast. 15138 15139 As a GNU extension, GCC allows initialization of objects with static 15140storage duration by compound literals (which is not possible in ISO 15141C99, because the initializer is not a constant). It is handled as if 15142the object was initialized only with the bracket enclosed list if the 15143types of the compound literal and the object match. The initializer 15144list of the compound literal must be constant. If the object being 15145initialized has array type of unknown size, the size is determined by 15146compound literal size. 15147 15148 static struct foo x = (struct foo) {1, 'a', 'b'}; 15149 static int y[] = (int []) {1, 2, 3}; 15150 static int z[] = (int [3]) {1}; 15151 15152The above lines are equivalent to the following: 15153 static struct foo x = {1, 'a', 'b'}; 15154 static int y[] = {1, 2, 3}; 15155 static int z[] = {1, 0, 0}; 15156 15157 15158File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 15159 151605.21 Designated Initializers 15161============================ 15162 15163Standard C89 requires the elements of an initializer to appear in a 15164fixed order, the same as the order of the elements in the array or 15165structure being initialized. 15166 15167 In ISO C99 you can give the elements in any order, specifying the array 15168indices or structure field names they apply to, and GNU C allows this as 15169an extension in C89 mode as well. This extension is not implemented in 15170GNU C++. 15171 15172 To specify an array index, write `[INDEX] =' before the element value. 15173For example, 15174 15175 int a[6] = { [4] = 29, [2] = 15 }; 15176 15177is equivalent to 15178 15179 int a[6] = { 0, 0, 15, 0, 29, 0 }; 15180 15181The index values must be constant expressions, even if the array being 15182initialized is automatic. 15183 15184 An alternative syntax for this which has been obsolete since GCC 2.5 15185but GCC still accepts is to write `[INDEX]' before the element value, 15186with no `='. 15187 15188 To initialize a range of elements to the same value, write `[FIRST ... 15189LAST] = VALUE'. This is a GNU extension. For example, 15190 15191 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 15192 15193If the value in it has side-effects, the side-effects will happen only 15194once, not for each initialized field by the range initializer. 15195 15196Note that the length of the array is the highest value specified plus 15197one. 15198 15199 In a structure initializer, specify the name of a field to initialize 15200with `.FIELDNAME =' before the element value. For example, given the 15201following structure, 15202 15203 struct point { int x, y; }; 15204 15205the following initialization 15206 15207 struct point p = { .y = yvalue, .x = xvalue }; 15208 15209is equivalent to 15210 15211 struct point p = { xvalue, yvalue }; 15212 15213 Another syntax which has the same meaning, obsolete since GCC 2.5, is 15214`FIELDNAME:', as shown here: 15215 15216 struct point p = { y: yvalue, x: xvalue }; 15217 15218 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 15219also use a designator (or the obsolete colon syntax) when initializing 15220a union, to specify which element of the union should be used. For 15221example, 15222 15223 union foo { int i; double d; }; 15224 15225 union foo f = { .d = 4 }; 15226 15227will convert 4 to a `double' to store it in the union using the second 15228element. By contrast, casting 4 to type `union foo' would store it 15229into the union as the integer `i', since it is an integer. (*Note Cast 15230to Union::.) 15231 15232 You can combine this technique of naming elements with ordinary C 15233initialization of successive elements. Each initializer element that 15234does not have a designator applies to the next consecutive element of 15235the array or structure. For example, 15236 15237 int a[6] = { [1] = v1, v2, [4] = v4 }; 15238 15239is equivalent to 15240 15241 int a[6] = { 0, v1, v2, 0, v4, 0 }; 15242 15243 Labeling the elements of an array initializer is especially useful 15244when the indices are characters or belong to an `enum' type. For 15245example: 15246 15247 int whitespace[256] 15248 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 15249 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 15250 15251 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 15252before an `=' to specify a nested subobject to initialize; the list is 15253taken relative to the subobject corresponding to the closest 15254surrounding brace pair. For example, with the `struct point' 15255declaration above: 15256 15257 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 15258 15259If the same field is initialized multiple times, it will have value from 15260the last initialization. If any such overridden initialization has 15261side-effect, it is unspecified whether the side-effect happens or not. 15262Currently, GCC will discard them and issue a warning. 15263 15264 15265File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 15266 152675.22 Case Ranges 15268================ 15269 15270You can specify a range of consecutive values in a single `case' label, 15271like this: 15272 15273 case LOW ... HIGH: 15274 15275This has the same effect as the proper number of individual `case' 15276labels, one for each integer value from LOW to HIGH, inclusive. 15277 15278 This feature is especially useful for ranges of ASCII character codes: 15279 15280 case 'A' ... 'Z': 15281 15282 *Be careful:* Write spaces around the `...', for otherwise it may be 15283parsed wrong when you use it with integer values. For example, write 15284this: 15285 15286 case 1 ... 5: 15287 15288rather than this: 15289 15290 case 1...5: 15291 15292 15293File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 15294 152955.23 Cast to a Union Type 15296========================= 15297 15298A cast to union type is similar to other casts, except that the type 15299specified is a union type. You can specify the type either with `union 15300TAG' or with a typedef name. A cast to union is actually a constructor 15301though, not a cast, and hence does not yield an lvalue like normal 15302casts. (*Note Compound Literals::.) 15303 15304 The types that may be cast to the union type are those of the members 15305of the union. Thus, given the following union and variables: 15306 15307 union foo { int i; double d; }; 15308 int x; 15309 double y; 15310 15311both `x' and `y' can be cast to type `union foo'. 15312 15313 Using the cast as the right-hand side of an assignment to a variable of 15314union type is equivalent to storing in a member of the union: 15315 15316 union foo u; 15317 /* ... */ 15318 u = (union foo) x == u.i = x 15319 u = (union foo) y == u.d = y 15320 15321 You can also use the union cast as a function argument: 15322 15323 void hack (union foo); 15324 /* ... */ 15325 hack ((union foo) x); 15326 15327 15328File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 15329 153305.24 Mixed Declarations and Code 15331================================ 15332 15333ISO C99 and ISO C++ allow declarations and code to be freely mixed 15334within compound statements. As an extension, GCC also allows this in 15335C89 mode. For example, you could do: 15336 15337 int i; 15338 /* ... */ 15339 i++; 15340 int j = i + 2; 15341 15342 Each identifier is visible from where it is declared until the end of 15343the enclosing block. 15344 15345 15346File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 15347 153485.25 Declaring Attributes of Functions 15349====================================== 15350 15351In GNU C, you declare certain things about functions called in your 15352program which help the compiler optimize function calls and check your 15353code more carefully. 15354 15355 The keyword `__attribute__' allows you to specify special attributes 15356when making a declaration. This keyword is followed by an attribute 15357specification inside double parentheses. The following attributes are 15358currently defined for functions on all targets: `noreturn', 15359`returns_twice', `noinline', `always_inline', `flatten', `pure', 15360`const', `nothrow', `sentinel', `format', `format_arg', `bounded', 15361`no_instrument_function', `section', `constructor', `destructor', 15362`used', `unused', `deprecated', `weak', `malloc', `alias', 15363`warn_unused_result', `nonnull', `gnu_inline' and `externally_visible'. 15364Several other attributes are defined for functions on particular 15365target systems. Other attributes, including `section' are supported 15366for variables declarations (*note Variable Attributes::) and for types 15367(*note Type Attributes::). 15368 15369 You may also specify attributes with `__' preceding and following each 15370keyword. This allows you to use them in header files without being 15371concerned about a possible macro of the same name. For example, you 15372may use `__noreturn__' instead of `noreturn'. 15373 15374 *Note Attribute Syntax::, for details of the exact syntax for using 15375attributes. 15376 15377`alias ("TARGET")' 15378 The `alias' attribute causes the declaration to be emitted as an 15379 alias for another symbol, which must be specified. For instance, 15380 15381 void __f () { /* Do something. */; } 15382 void f () __attribute__ ((weak, alias ("__f"))); 15383 15384 defines `f' to be a weak alias for `__f'. In C++, the mangled 15385 name for the target must be used. It is an error if `__f' is not 15386 defined in the same translation unit. 15387 15388 Not all target machines support this attribute. 15389 15390`always_inline' 15391 Generally, functions are not inlined unless optimization is 15392 specified. For functions declared inline, this attribute inlines 15393 the function even if no optimization level was specified. 15394 15395`gnu_inline' 15396 This attribute should be used with a function which is also 15397 declared with the `inline' keyword. It directs GCC to treat the 15398 function as if it were defined in gnu89 mode even when compiling 15399 in C99 or gnu99 mode. 15400 15401 If the function is declared `extern', then this definition of the 15402 function is used only for inlining. In no case is the function 15403 compiled as a standalone function, not even if you take its address 15404 explicitly. Such an address becomes an external reference, as if 15405 you had only declared the function, and had not defined it. This 15406 has almost the effect of a macro. The way to use this is to put a 15407 function definition in a header file with this attribute, and put 15408 another copy of the function, without `extern', in a library file. 15409 The definition in the header file will cause most calls to the 15410 function to be inlined. If any uses of the function remain, they 15411 will refer to the single copy in the library. Note that the two 15412 definitions of the functions need not be precisely the same, 15413 although if they do not have the same effect your program may 15414 behave oddly. 15415 15416 If the function is neither `extern' nor `static', then the 15417 function is compiled as a standalone function, as well as being 15418 inlined where possible. 15419 15420 This is how GCC traditionally handled functions declared `inline'. 15421 Since ISO C99 specifies a different semantics for `inline', this 15422 function attribute is provided as a transition measure and as a 15423 useful feature in its own right. This attribute is available in 15424 GCC 4.1.3 and later. It is available if either of the 15425 preprocessor macros `__GNUC_GNU_INLINE__' or 15426 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 15427 As Fast As a Macro: Inline. 15428 15429 Note that since the first version of GCC to support C99 inline 15430 semantics is 4.3, earlier versions of GCC which accept this 15431 attribute effectively assume that it is always present, whether or 15432 not it is given explicitly. In versions prior to 4.3, the only 15433 effect of explicitly including it is to disable warnings about 15434 using inline functions in C99 mode. 15435 15436`flatten' 15437 Generally, inlining into a function is limited. For a function 15438 marked with this attribute, every call inside this function will 15439 be inlined, if possible. Whether the function itself is 15440 considered for inlining depends on its size and the current 15441 inlining parameters. The `flatten' attribute only works reliably 15442 in unit-at-a-time mode. 15443 15444`bounded' 15445 This attribute is used to type-check functions whose parameters 15446 pass fixed-length buffer and their sizes. The syntax for normal 15447 buffers is: 15448 15449 __attribute__ ((__bounded__ ( __buffer__, buffer, length ))) 15450 15451 where buffer contains the parameter number (starting from 1) of the 15452 pointer to the buffer, and length contains the parameter number of the 15453 buffer length argument. 15454 15455 gcc will emit a warning if the length argument is a constant larger than 15456 the actual size of the buffer. If the buffer is not a statically 15457 declared array of fixed length, no warnings will be generated. Refer to 15458 memcpy(3) for an example of a function with this check. 15459 15460 For checking strings, just use __string__ instead of __buffer__: 15461 15462 __attribute__ ((__bounded__ ( __string__, buffer, length ))) 15463 15464 In addition to the checks described above, this also tests if the length 15465 argument was wrongly derived from a sizeof(void *) operation. strlcpy(3) 15466 is a good example of a string function with this check. 15467 15468 If a function needs string checking like __string__ but operates on 15469 element counts rather than buffer sizes, use __wcstring__: 15470 15471 __attribute__ ((__bounded__ ( __wcstring__, buffer, count ))) 15472 15473 An example of a string function with this check is wcslcpy(3). 15474 15475 Some functions specify the length as two arguments: the number of 15476 elements and the size of each element. In this case, use the __size__ 15477 attribute: 15478 15479 __attribute__ ((__bounded__ ( __size__, buffer, nmemb, size ))) 15480 15481 where buffer contains the parameter number of the pointer to the buffer, 15482 nmemb contains the parameter number of the number of members, and size 15483 has the parameter number of the size of each element. The type checks 15484 performed by __size__ are the same as the __buffer__ attribute. See 15485 fread(3) for an example of this type of function. 15486 15487 If a function accepts a buffer parameter and specifies that it has to be 15488 of a minimum length, the __minbytes__ attribute can be used: 15489 15490 __attribute__ ((__bounded__ ( __minbytes__, buffer, minsize ))) 15491 15492 where buffer contains the parameter number of the pointer to the buffer, 15493 and minsize specifies the minimum number of bytes that the buffer should 15494 be. ctime_r(3) is an example of this type of function. 15495 15496 If -Wbounded is specified with -Wformat, additional checks are performed 15497 on sscanf(3) format strings. The `%s' fields are checked for incorrect 15498 bound lengths by checking the size of the buffer associated with the 15499 format argument. 15500 15501`cdecl' 15502 On the Intel 386, the `cdecl' attribute causes the compiler to 15503 assume that the calling function will pop off the stack space used 15504 to pass arguments. This is useful to override the effects of the 15505 `-mrtd' switch. 15506 15507`const' 15508 Many functions do not examine any values except their arguments, 15509 and have no effects except the return value. Basically this is 15510 just slightly more strict class than the `pure' attribute below, 15511 since function is not allowed to read global memory. 15512 15513 Note that a function that has pointer arguments and examines the 15514 data pointed to must _not_ be declared `const'. Likewise, a 15515 function that calls a non-`const' function usually must not be 15516 `const'. It does not make sense for a `const' function to return 15517 `void'. 15518 15519 The attribute `const' is not implemented in GCC versions earlier 15520 than 2.5. An alternative way to declare that a function has no 15521 side effects, which works in the current version and in some older 15522 versions, is as follows: 15523 15524 typedef int intfn (); 15525 15526 extern const intfn square; 15527 15528 This approach does not work in GNU C++ from 2.6.0 on, since the 15529 language specifies that the `const' must be attached to the return 15530 value. 15531 15532`constructor' 15533`destructor' 15534 The `constructor' attribute causes the function to be called 15535 automatically before execution enters `main ()'. Similarly, the 15536 `destructor' attribute causes the function to be called 15537 automatically after `main ()' has completed or `exit ()' has been 15538 called. Functions with these attributes are useful for 15539 initializing data that will be used implicitly during the 15540 execution of the program. 15541 15542 These attributes are not currently implemented for Objective-C. 15543 15544`deprecated' 15545 The `deprecated' attribute results in a warning if the function is 15546 used anywhere in the source file. This is useful when identifying 15547 functions that are expected to be removed in a future version of a 15548 program. The warning also includes the location of the declaration 15549 of the deprecated function, to enable users to easily find further 15550 information about why the function is deprecated, or what they 15551 should do instead. Note that the warnings only occurs for uses: 15552 15553 int old_fn () __attribute__ ((deprecated)); 15554 int old_fn (); 15555 int (*fn_ptr)() = old_fn; 15556 15557 results in a warning on line 3 but not line 2. 15558 15559 The `deprecated' attribute can also be used for variables and 15560 types (*note Variable Attributes::, *note Type Attributes::.) 15561 15562`dllexport' 15563 On Microsoft Windows targets and Symbian OS targets the 15564 `dllexport' attribute causes the compiler to provide a global 15565 pointer to a pointer in a DLL, so that it can be referenced with 15566 the `dllimport' attribute. On Microsoft Windows targets, the 15567 pointer name is formed by combining `_imp__' and the function or 15568 variable name. 15569 15570 You can use `__declspec(dllexport)' as a synonym for 15571 `__attribute__ ((dllexport))' for compatibility with other 15572 compilers. 15573 15574 On systems that support the `visibility' attribute, this attribute 15575 also implies "default" visibility, unless a `visibility' attribute 15576 is explicitly specified. You should avoid the use of `dllexport' 15577 with "hidden" or "internal" visibility; in the future GCC may 15578 issue an error for those cases. 15579 15580 Currently, the `dllexport' attribute is ignored for inlined 15581 functions, unless the `-fkeep-inline-functions' flag has been 15582 used. The attribute is also ignored for undefined symbols. 15583 15584 When applied to C++ classes, the attribute marks defined 15585 non-inlined member functions and static data members as exports. 15586 Static consts initialized in-class are not marked unless they are 15587 also defined out-of-class. 15588 15589 For Microsoft Windows targets there are alternative methods for 15590 including the symbol in the DLL's export table such as using a 15591 `.def' file with an `EXPORTS' section or, with GNU ld, using the 15592 `--export-all' linker flag. 15593 15594`dllimport' 15595 On Microsoft Windows and Symbian OS targets, the `dllimport' 15596 attribute causes the compiler to reference a function or variable 15597 via a global pointer to a pointer that is set up by the DLL 15598 exporting the symbol. The attribute implies `extern' storage. On 15599 Microsoft Windows targets, the pointer name is formed by combining 15600 `_imp__' and the function or variable name. 15601 15602 You can use `__declspec(dllimport)' as a synonym for 15603 `__attribute__ ((dllimport))' for compatibility with other 15604 compilers. 15605 15606 Currently, the attribute is ignored for inlined functions. If the 15607 attribute is applied to a symbol _definition_, an error is 15608 reported. If a symbol previously declared `dllimport' is later 15609 defined, the attribute is ignored in subsequent references, and a 15610 warning is emitted. The attribute is also overridden by a 15611 subsequent declaration as `dllexport'. 15612 15613 When applied to C++ classes, the attribute marks non-inlined 15614 member functions and static data members as imports. However, the 15615 attribute is ignored for virtual methods to allow creation of 15616 vtables using thunks. 15617 15618 On the SH Symbian OS target the `dllimport' attribute also has 15619 another affect--it can cause the vtable and run-time type 15620 information for a class to be exported. This happens when the 15621 class has a dllimport'ed constructor or a non-inline, non-pure 15622 virtual function and, for either of those two conditions, the 15623 class also has a inline constructor or destructor and has a key 15624 function that is defined in the current translation unit. 15625 15626 For Microsoft Windows based targets the use of the `dllimport' 15627 attribute on functions is not necessary, but provides a small 15628 performance benefit by eliminating a thunk in the DLL. The use of 15629 the `dllimport' attribute on imported variables was required on 15630 older versions of the GNU linker, but can now be avoided by 15631 passing the `--enable-auto-import' switch to the GNU linker. As 15632 with functions, using the attribute for a variable eliminates a 15633 thunk in the DLL. 15634 15635 One drawback to using this attribute is that a pointer to a 15636 function or variable marked as `dllimport' cannot be used as a 15637 constant address. On Microsoft Windows targets, the attribute can 15638 be disabled for functions by setting the `-mnop-fun-dllimport' 15639 flag. 15640 15641`eightbit_data' 15642 Use this attribute on the H8/300, H8/300H, and H8S to indicate 15643 that the specified variable should be placed into the eight bit 15644 data section. The compiler will generate more efficient code for 15645 certain operations on data in the eight bit data area. Note the 15646 eight bit data area is limited to 256 bytes of data. 15647 15648 You must use GAS and GLD from GNU binutils version 2.7 or later for 15649 this attribute to work correctly. 15650 15651`exception_handler' 15652 Use this attribute on the Blackfin to indicate that the specified 15653 function is an exception handler. The compiler will generate 15654 function entry and exit sequences suitable for use in an exception 15655 handler when this attribute is present. 15656 15657`far' 15658 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 15659 use a calling convention that takes care of switching memory banks 15660 when entering and leaving a function. This calling convention is 15661 also the default when using the `-mlong-calls' option. 15662 15663 On 68HC12 the compiler will use the `call' and `rtc' instructions 15664 to call and return from a function. 15665 15666 On 68HC11 the compiler will generate a sequence of instructions to 15667 invoke a board-specific routine to switch the memory bank and call 15668 the real function. The board-specific routine simulates a `call'. 15669 At the end of a function, it will jump to a board-specific routine 15670 instead of using `rts'. The board-specific return routine 15671 simulates the `rtc'. 15672 15673`fastcall' 15674 On the Intel 386, the `fastcall' attribute causes the compiler to 15675 pass the first argument (if of integral type) in the register ECX 15676 and the second argument (if of integral type) in the register EDX. 15677 Subsequent and other typed arguments are passed on the stack. 15678 The called function will pop the arguments off the stack. If the 15679 number of arguments is variable all arguments are pushed on the 15680 stack. 15681 15682`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 15683 The `format' attribute specifies that a function takes `printf', 15684 `scanf', `strftime' or `strfmon' style arguments which should be 15685 type-checked against a format string. For example, the 15686 declaration: 15687 15688 extern int 15689 my_printf (void *my_object, const char *my_format, ...) 15690 __attribute__ ((format (printf, 2, 3))); 15691 15692 causes the compiler to check the arguments in calls to `my_printf' 15693 for consistency with the `printf' style format string argument 15694 `my_format'. 15695 15696 The parameter ARCHETYPE determines how the format string is 15697 interpreted, and should be `printf', `scanf', `strftime' or 15698 `strfmon'. (You can also use `__printf__', `__scanf__', 15699 `__strftime__' or `__strfmon__'.) The parameter STRING-INDEX 15700 specifies which argument is the format string argument (starting 15701 from 1), while FIRST-TO-CHECK is the number of the first argument 15702 to check against the format string. For functions where the 15703 arguments are not available to be checked (such as `vprintf'), 15704 specify the third parameter as zero. In this case the compiler 15705 only checks the format string for consistency. For `strftime' 15706 formats, the third parameter is required to be zero. Since 15707 non-static C++ methods have an implicit `this' argument, the 15708 arguments of such methods should be counted from two, not one, when 15709 giving values for STRING-INDEX and FIRST-TO-CHECK. 15710 15711 In the example above, the format string (`my_format') is the second 15712 argument of the function `my_print', and the arguments to check 15713 start with the third argument, so the correct parameters for the 15714 format attribute are 2 and 3. 15715 15716 The `format' attribute allows you to identify your own functions 15717 which take format strings as arguments, so that GCC can check the 15718 calls to these functions for errors. The compiler always (unless 15719 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 15720 standard library functions `printf', `fprintf', `sprintf', 15721 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 15722 `vsprintf' whenever such warnings are requested (using 15723 `-Wformat'), so there is no need to modify the header file 15724 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 15725 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 15726 strictly conforming C standard modes, the X/Open function 15727 `strfmon' is also checked as are `printf_unlocked' and 15728 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 15729 Dialect Options. 15730 15731 The target may provide additional types of format checks. *Note 15732 Format Checks Specific to Particular Target Machines: Target 15733 Format Checks. 15734 15735`format_arg (STRING-INDEX)' 15736 The `format_arg' attribute specifies that a function takes a format 15737 string for a `printf', `scanf', `strftime' or `strfmon' style 15738 function and modifies it (for example, to translate it into 15739 another language), so the result can be passed to a `printf', 15740 `scanf', `strftime' or `strfmon' style function (with the 15741 remaining arguments to the format function the same as they would 15742 have been for the unmodified string). For example, the 15743 declaration: 15744 15745 extern char * 15746 my_dgettext (char *my_domain, const char *my_format) 15747 __attribute__ ((format_arg (2))); 15748 15749 causes the compiler to check the arguments in calls to a `printf', 15750 `scanf', `strftime' or `strfmon' type function, whose format 15751 string argument is a call to the `my_dgettext' function, for 15752 consistency with the format string argument `my_format'. If the 15753 `format_arg' attribute had not been specified, all the compiler 15754 could tell in such calls to format functions would be that the 15755 format string argument is not constant; this would generate a 15756 warning when `-Wformat-nonliteral' is used, but the calls could 15757 not be checked without the attribute. 15758 15759 The parameter STRING-INDEX specifies which argument is the format 15760 string argument (starting from one). Since non-static C++ methods 15761 have an implicit `this' argument, the arguments of such methods 15762 should be counted from two. 15763 15764 The `format-arg' attribute allows you to identify your own 15765 functions which modify format strings, so that GCC can check the 15766 calls to `printf', `scanf', `strftime' or `strfmon' type function 15767 whose operands are a call to one of your own function. The 15768 compiler always treats `gettext', `dgettext', and `dcgettext' in 15769 this manner except when strict ISO C support is requested by 15770 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 15771 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 15772 Dialect Options. 15773 15774`function_vector' 15775 Use this attribute on the H8/300, H8/300H, and H8S to indicate 15776 that the specified function should be called through the function 15777 vector. Calling a function through the function vector will 15778 reduce code size, however; the function vector has a limited size 15779 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 15780 and H8S) and shares space with the interrupt vector. 15781 15782 You must use GAS and GLD from GNU binutils version 2.7 or later for 15783 this attribute to work correctly. 15784 15785`interrupt' 15786 Use this attribute on the ARM, AVR, C4x, CRX, M32C, M32R/D, MS1, 15787 and Xstormy16 ports to indicate that the specified function is an 15788 interrupt handler. The compiler will generate function entry and 15789 exit sequences suitable for use in an interrupt handler when this 15790 attribute is present. 15791 15792 Note, interrupt handlers for the Blackfin, m68k, H8/300, H8/300H, 15793 H8S, and SH processors can be specified via the 15794 `interrupt_handler' attribute. 15795 15796 Note, on the AVR, interrupts will be enabled inside the function. 15797 15798 Note, for the ARM, you can specify the kind of interrupt to be 15799 handled by adding an optional parameter to the interrupt attribute 15800 like this: 15801 15802 void f () __attribute__ ((interrupt ("IRQ"))); 15803 15804 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 15805 and UNDEF. 15806 15807`interrupt_handler' 15808 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 15809 and SH to indicate that the specified function is an interrupt 15810 handler. The compiler will generate function entry and exit 15811 sequences suitable for use in an interrupt handler when this 15812 attribute is present. 15813 15814`kspisusp' 15815 When used together with `interrupt_handler', `exception_handler' 15816 or `nmi_handler', code will be generated to load the stack pointer 15817 from the USP register in the function prologue. 15818 15819`long_call/short_call' 15820 This attribute specifies how a particular function is called on 15821 ARM. Both attributes override the `-mlong-calls' (*note ARM 15822 Options::) command line switch and `#pragma long_calls' settings. 15823 The `long_call' attribute indicates that the function might be far 15824 away from the call site and require a different (more expensive) 15825 calling sequence. The `short_call' attribute always places the 15826 offset to the function from the call site into the `BL' 15827 instruction directly. 15828 15829`longcall/shortcall' 15830 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 15831 indicates that the function might be far away from the call site 15832 and require a different (more expensive) calling sequence. The 15833 `shortcall' attribute indicates that the function is always close 15834 enough for the shorter calling sequence to be used. These 15835 attributes override both the `-mlongcall' switch and, on the 15836 RS/6000 and PowerPC, the `#pragma longcall' setting. 15837 15838 *Note RS/6000 and PowerPC Options::, for more information on 15839 whether long calls are necessary. 15840 15841`long_call' 15842 This attribute specifies how a particular function is called on 15843 MIPS. The attribute overrides the `-mlong-calls' (*note MIPS 15844 Options::) command line switch. This attribute causes the 15845 compiler to always call the function by first loading its address 15846 into a register, and then using the contents of that register. 15847 15848`malloc' 15849 The `malloc' attribute is used to tell the compiler that a function 15850 may be treated as if any non-`NULL' pointer it returns cannot 15851 alias any other pointer valid when the function returns. This 15852 will often improve optimization. Standard functions with this 15853 property include `malloc' and `calloc'. `realloc'-like functions 15854 have this property as long as the old pointer is never referred to 15855 (including comparing it to the new pointer) after the function 15856 returns a non-`NULL' value. 15857 15858`model (MODEL-NAME)' 15859 On the M32R/D, use this attribute to set the addressability of an 15860 object, and of the code generated for a function. The identifier 15861 MODEL-NAME is one of `small', `medium', or `large', representing 15862 each of the code models. 15863 15864 Small model objects live in the lower 16MB of memory (so that their 15865 addresses can be loaded with the `ld24' instruction), and are 15866 callable with the `bl' instruction. 15867 15868 Medium model objects may live anywhere in the 32-bit address space 15869 (the compiler will generate `seth/add3' instructions to load their 15870 addresses), and are callable with the `bl' instruction. 15871 15872 Large model objects may live anywhere in the 32-bit address space 15873 (the compiler will generate `seth/add3' instructions to load their 15874 addresses), and may not be reachable with the `bl' instruction 15875 (the compiler will generate the much slower `seth/add3/jl' 15876 instruction sequence). 15877 15878 On IA-64, use this attribute to set the addressability of an 15879 object. At present, the only supported identifier for MODEL-NAME 15880 is `small', indicating addressability via "small" (22-bit) 15881 addresses (so that their addresses can be loaded with the `addl' 15882 instruction). Caveat: such addressing is by definition not 15883 position independent and hence this attribute must not be used for 15884 objects defined by shared libraries. 15885 15886`naked' 15887 Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate 15888 that the specified function does not need prologue/epilogue 15889 sequences generated by the compiler. It is up to the programmer 15890 to provide these sequences. 15891 15892`near' 15893 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 15894 use the normal calling convention based on `jsr' and `rts'. This 15895 attribute can be used to cancel the effect of the `-mlong-calls' 15896 option. 15897 15898`nesting' 15899 Use this attribute together with `interrupt_handler', 15900 `exception_handler' or `nmi_handler' to indicate that the function 15901 entry code should enable nested interrupts or exceptions. 15902 15903`nmi_handler' 15904 Use this attribute on the Blackfin to indicate that the specified 15905 function is an NMI handler. The compiler will generate function 15906 entry and exit sequences suitable for use in an NMI handler when 15907 this attribute is present. 15908 15909`no_instrument_function' 15910 If `-finstrument-functions' is given, profiling function calls will 15911 be generated at entry and exit of most user-compiled functions. 15912 Functions with this attribute will not be so instrumented. 15913 15914`noinline' 15915 This function attribute prevents a function from being considered 15916 for inlining. 15917 15918`nonnull (ARG-INDEX, ...)' 15919 The `nonnull' attribute specifies that some function parameters 15920 should be non-null pointers. For instance, the declaration: 15921 15922 extern void * 15923 my_memcpy (void *dest, const void *src, size_t len) 15924 __attribute__((nonnull (1, 2))); 15925 15926 causes the compiler to check that, in calls to `my_memcpy', 15927 arguments DEST and SRC are non-null. If the compiler determines 15928 that a null pointer is passed in an argument slot marked as 15929 non-null, and the `-Wnonnull' option is enabled, a warning is 15930 issued. The compiler may also choose to make optimizations based 15931 on the knowledge that certain function arguments will not be null. 15932 15933 If no argument index list is given to the `nonnull' attribute, all 15934 pointer arguments are marked as non-null. To illustrate, the 15935 following declaration is equivalent to the previous example: 15936 15937 extern void * 15938 my_memcpy (void *dest, const void *src, size_t len) 15939 __attribute__((nonnull)); 15940 15941`noreturn' 15942 A few standard library functions, such as `abort' and `exit', 15943 cannot return. GCC knows this automatically. Some programs define 15944 their own functions that never return. You can declare them 15945 `noreturn' to tell the compiler this fact. For example, 15946 15947 void fatal () __attribute__ ((noreturn)); 15948 15949 void 15950 fatal (/* ... */) 15951 { 15952 /* ... */ /* Print error message. */ /* ... */ 15953 exit (1); 15954 } 15955 15956 The `noreturn' keyword tells the compiler to assume that `fatal' 15957 cannot return. It can then optimize without regard to what would 15958 happen if `fatal' ever did return. This makes slightly better 15959 code. More importantly, it helps avoid spurious warnings of 15960 uninitialized variables. 15961 15962 The `noreturn' keyword does not affect the exceptional path when 15963 that applies: a `noreturn'-marked function may still return to the 15964 caller by throwing an exception or calling `longjmp'. 15965 15966 Do not assume that registers saved by the calling function are 15967 restored before calling the `noreturn' function. 15968 15969 It does not make sense for a `noreturn' function to have a return 15970 type other than `void'. 15971 15972 The attribute `noreturn' is not implemented in GCC versions 15973 earlier than 2.5. An alternative way to declare that a function 15974 does not return, which works in the current version and in some 15975 older versions, is as follows: 15976 15977 typedef void voidfn (); 15978 15979 volatile voidfn fatal; 15980 15981 This approach does not work in GNU C++. 15982 15983`nothrow' 15984 The `nothrow' attribute is used to inform the compiler that a 15985 function cannot throw an exception. For example, most functions in 15986 the standard C library can be guaranteed not to throw an exception 15987 with the notable exceptions of `qsort' and `bsearch' that take 15988 function pointer arguments. The `nothrow' attribute is not 15989 implemented in GCC versions earlier than 3.3. 15990 15991`pure' 15992 Many functions have no effects except the return value and their 15993 return value depends only on the parameters and/or global 15994 variables. Such a function can be subject to common subexpression 15995 elimination and loop optimization just as an arithmetic operator 15996 would be. These functions should be declared with the attribute 15997 `pure'. For example, 15998 15999 int square (int) __attribute__ ((pure)); 16000 16001 says that the hypothetical function `square' is safe to call fewer 16002 times than the program says. 16003 16004 Some of common examples of pure functions are `strlen' or `memcmp'. 16005 Interesting non-pure functions are functions with infinite loops 16006 or those depending on volatile memory or other system resource, 16007 that may change between two consecutive calls (such as `feof' in a 16008 multithreading environment). 16009 16010 The attribute `pure' is not implemented in GCC versions earlier 16011 than 2.96. 16012 16013`regparm (NUMBER)' 16014 On the Intel 386, the `regparm' attribute causes the compiler to 16015 pass arguments number one to NUMBER if they are of integral type 16016 in registers EAX, EDX, and ECX instead of on the stack. Functions 16017 that take a variable number of arguments will continue to be 16018 passed all of their arguments on the stack. 16019 16020 Beware that on some ELF systems this attribute is unsuitable for 16021 global functions in shared libraries with lazy binding (which is 16022 the default). Lazy binding will send the first call via resolving 16023 code in the loader, which might assume EAX, EDX and ECX can be 16024 clobbered, as per the standard calling conventions. Solaris 8 is 16025 affected by this. GNU systems with GLIBC 2.1 or higher, and 16026 FreeBSD, are believed to be safe since the loaders there save all 16027 registers. (Lazy binding can be disabled with the linker or the 16028 loader if desired, to avoid the problem.) 16029 16030`sseregparm' 16031 On the Intel 386 with SSE support, the `sseregparm' attribute 16032 causes the compiler to pass up to 3 floating point arguments in 16033 SSE registers instead of on the stack. Functions that take a 16034 variable number of arguments will continue to pass all of their 16035 floating point arguments on the stack. 16036 16037`force_align_arg_pointer' 16038 On the Intel x86, the `force_align_arg_pointer' attribute may be 16039 applied to individual function definitions, generating an alternate 16040 prologue and epilogue that realigns the runtime stack. This 16041 supports mixing legacy codes that run with a 4-byte aligned stack 16042 with modern codes that keep a 16-byte stack for SSE compatibility. 16043 The alternate prologue and epilogue are slower and bigger than 16044 the regular ones, and the alternate prologue requires a scratch 16045 register; this lowers the number of registers available if used in 16046 conjunction with the `regparm' attribute. The 16047 `force_align_arg_pointer' attribute is incompatible with nested 16048 functions; this is considered a hard error. 16049 16050`returns_twice' 16051 The `returns_twice' attribute tells the compiler that a function 16052 may return more than one time. The compiler will ensure that all 16053 registers are dead before calling such a function and will emit a 16054 warning about the variables that may be clobbered after the second 16055 return from the function. Examples of such functions are `setjmp' 16056 and `vfork'. The `longjmp'-like counterpart of such function, if 16057 any, might need to be marked with the `noreturn' attribute. 16058 16059`saveall' 16060 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 16061 indicate that all registers except the stack pointer should be 16062 saved in the prologue regardless of whether they are used or not. 16063 16064`section ("SECTION-NAME")' 16065 Normally, the compiler places the code it generates in the `text' 16066 section. Sometimes, however, you need additional sections, or you 16067 need certain particular functions to appear in special sections. 16068 The `section' attribute specifies that a function lives in a 16069 particular section. For example, the declaration: 16070 16071 extern void foobar (void) __attribute__ ((section ("bar"))); 16072 16073 puts the function `foobar' in the `bar' section. 16074 16075 Some file formats do not support arbitrary sections so the 16076 `section' attribute is not available on all platforms. If you 16077 need to map the entire contents of a module to a particular 16078 section, consider using the facilities of the linker instead. 16079 16080`sentinel' 16081 This function attribute ensures that a parameter in a function 16082 call is an explicit `NULL'. The attribute is only valid on 16083 variadic functions. By default, the sentinel is located at 16084 position zero, the last parameter of the function call. If an 16085 optional integer position argument P is supplied to the attribute, 16086 the sentinel must be located at position P counting backwards from 16087 the end of the argument list. 16088 16089 __attribute__ ((sentinel)) 16090 is equivalent to 16091 __attribute__ ((sentinel(0))) 16092 16093 The attribute is automatically set with a position of 0 for the 16094 built-in functions `execl' and `execlp'. The built-in function 16095 `execle' has the attribute set with a position of 1. 16096 16097 A valid `NULL' in this context is defined as zero with any pointer 16098 type. If your system defines the `NULL' macro with an integer type 16099 then you need to add an explicit cast. GCC replaces `stddef.h' 16100 with a copy that redefines NULL appropriately. 16101 16102 The warnings for missing or incorrect sentinels are enabled with 16103 `-Wformat'. 16104 16105`short_call' 16106 See long_call/short_call. 16107 16108`shortcall' 16109 See longcall/shortcall. 16110 16111`signal' 16112 Use this attribute on the AVR to indicate that the specified 16113 function is a signal handler. The compiler will generate function 16114 entry and exit sequences suitable for use in a signal handler when 16115 this attribute is present. Interrupts will be disabled inside the 16116 function. 16117 16118`sp_switch' 16119 Use this attribute on the SH to indicate an `interrupt_handler' 16120 function should switch to an alternate stack. It expects a string 16121 argument that names a global variable holding the address of the 16122 alternate stack. 16123 16124 void *alt_stack; 16125 void f () __attribute__ ((interrupt_handler, 16126 sp_switch ("alt_stack"))); 16127 16128`stdcall' 16129 On the Intel 386, the `stdcall' attribute causes the compiler to 16130 assume that the called function will pop off the stack space used 16131 to pass arguments, unless it takes a variable number of arguments. 16132 16133`tiny_data' 16134 Use this attribute on the H8/300H and H8S to indicate that the 16135 specified variable should be placed into the tiny data section. 16136 The compiler will generate more efficient code for loads and stores 16137 on data in the tiny data section. Note the tiny data area is 16138 limited to slightly under 32kbytes of data. 16139 16140`trap_exit' 16141 Use this attribute on the SH for an `interrupt_handler' to return 16142 using `trapa' instead of `rte'. This attribute expects an integer 16143 argument specifying the trap number to be used. 16144 16145`unused' 16146 This attribute, attached to a function, means that the function is 16147 meant to be possibly unused. GCC will not produce a warning for 16148 this function. 16149 16150`used' 16151 This attribute, attached to a function, means that code must be 16152 emitted for the function even if it appears that the function is 16153 not referenced. This is useful, for example, when the function is 16154 referenced only in inline assembly. 16155 16156`visibility ("VISIBILITY_TYPE")' 16157 This attribute affects the linkage of the declaration to which it 16158 is attached. There are four supported VISIBILITY_TYPE values: 16159 default, hidden, protected or internal visibility. 16160 16161 void __attribute__ ((visibility ("protected"))) 16162 f () { /* Do something. */; } 16163 int i __attribute__ ((visibility ("hidden"))); 16164 16165 The possible values of VISIBILITY_TYPE correspond to the 16166 visibility settings in the ELF gABI. 16167 16168 "default" 16169 Default visibility is the normal case for the object file 16170 format. This value is available for the visibility attribute 16171 to override other options that may change the assumed 16172 visibility of entities. 16173 16174 On ELF, default visibility means that the declaration is 16175 visible to other modules and, in shared libraries, means that 16176 the declared entity may be overridden. 16177 16178 On Darwin, default visibility means that the declaration is 16179 visible to other modules. 16180 16181 Default visibility corresponds to "external linkage" in the 16182 language. 16183 16184 "hidden" 16185 Hidden visibility indicates that the entity declared will 16186 have a new form of linkage, which we'll call "hidden 16187 linkage". Two declarations of an object with hidden linkage 16188 refer to the same object if they are in the same shared 16189 object. 16190 16191 "internal" 16192 Internal visibility is like hidden visibility, but with 16193 additional processor specific semantics. Unless otherwise 16194 specified by the psABI, GCC defines internal visibility to 16195 mean that a function is _never_ called from another module. 16196 Compare this with hidden functions which, while they cannot 16197 be referenced directly by other modules, can be referenced 16198 indirectly via function pointers. By indicating that a 16199 function cannot be called from outside the module, GCC may 16200 for instance omit the load of a PIC register since it is known 16201 that the calling function loaded the correct value. 16202 16203 "protected" 16204 Protected visibility is like default visibility except that it 16205 indicates that references within the defining module will 16206 bind to the definition in that module. That is, the declared 16207 entity cannot be overridden by another module. 16208 16209 16210 All visibilities are supported on many, but not all, ELF targets 16211 (supported when the assembler supports the `.visibility' 16212 pseudo-op). Default visibility is supported everywhere. Hidden 16213 visibility is supported on Darwin targets. 16214 16215 The visibility attribute should be applied only to declarations 16216 which would otherwise have external linkage. The attribute should 16217 be applied consistently, so that the same entity should not be 16218 declared with different settings of the attribute. 16219 16220 In C++, the visibility attribute applies to types as well as 16221 functions and objects, because in C++ types have linkage. A class 16222 must not have greater visibility than its non-static data member 16223 types and bases, and class members default to the visibility of 16224 their class. Also, a declaration without explicit visibility is 16225 limited to the visibility of its type. 16226 16227 In C++, you can mark member functions and static member variables 16228 of a class with the visibility attribute. This is useful if if 16229 you know a particular method or static member variable should only 16230 be used from one shared object; then you can mark it hidden while 16231 the rest of the class has default visibility. Care must be taken 16232 to avoid breaking the One Definition Rule; for example, it is 16233 usually not useful to mark an inline method as hidden without 16234 marking the whole class as hidden. 16235 16236 A C++ namespace declaration can also have the visibility attribute. 16237 This attribute applies only to the particular namespace body, not 16238 to other definitions of the same namespace; it is equivalent to 16239 using `#pragma GCC visibility' before and after the namespace 16240 definition (*note Visibility Pragmas::). 16241 16242 In C++, if a template argument has limited visibility, this 16243 restriction is implicitly propagated to the template instantiation. 16244 Otherwise, template instantiations and specializations default to 16245 the visibility of their template. 16246 16247 If both the template and enclosing class have explicit visibility, 16248 the visibility from the template is used. 16249 16250`warn_unused_result' 16251 The `warn_unused_result' attribute causes a warning to be emitted 16252 if a caller of the function with this attribute does not use its 16253 return value. This is useful for functions where not checking the 16254 result is either a security problem or always a bug, such as 16255 `realloc'. 16256 16257 int fn () __attribute__ ((warn_unused_result)); 16258 int foo () 16259 { 16260 if (fn () < 0) return -1; 16261 fn (); 16262 return 0; 16263 } 16264 16265 results in warning on line 5. 16266 16267`weak' 16268 The `weak' attribute causes the declaration to be emitted as a weak 16269 symbol rather than a global. This is primarily useful in defining 16270 library functions which can be overridden in user code, though it 16271 can also be used with non-function declarations. Weak symbols are 16272 supported for ELF targets, and also for a.out targets when using 16273 the GNU assembler and linker. 16274 16275`weakref' 16276`weakref ("TARGET")' 16277 The `weakref' attribute marks a declaration as a weak reference. 16278 Without arguments, it should be accompanied by an `alias' attribute 16279 naming the target symbol. Optionally, the TARGET may be given as 16280 an argument to `weakref' itself. In either case, `weakref' 16281 implicitly marks the declaration as `weak'. Without a TARGET, 16282 given as an argument to `weakref' or to `alias', `weakref' is 16283 equivalent to `weak'. 16284 16285 static int x() __attribute__ ((weakref ("y"))); 16286 /* is equivalent to... */ 16287 static int x() __attribute__ ((weak, weakref, alias ("y"))); 16288 /* and to... */ 16289 static int x() __attribute__ ((weakref)); 16290 static int x() __attribute__ ((alias ("y"))); 16291 16292 A weak reference is an alias that does not by itself require a 16293 definition to be given for the target symbol. If the target 16294 symbol is only referenced through weak references, then the 16295 becomes a `weak' undefined symbol. If it is directly referenced, 16296 however, then such strong references prevail, and a definition 16297 will be required for the symbol, not necessarily in the same 16298 translation unit. 16299 16300 The effect is equivalent to moving all references to the alias to a 16301 separate translation unit, renaming the alias to the aliased 16302 symbol, declaring it as weak, compiling the two separate 16303 translation units and performing a reloadable link on them. 16304 16305 At present, a declaration to which `weakref' is attached can only 16306 be `static'. 16307 16308`externally_visible' 16309 This attribute, attached to a global variable or function nullify 16310 effect of `-fwhole-program' command line option, so the object 16311 remain visible outside the current compilation unit 16312 16313 16314 You can specify multiple attributes in a declaration by separating them 16315by commas within the double parentheses or by immediately following an 16316attribute declaration with another attribute declaration. 16317 16318 Some people object to the `__attribute__' feature, suggesting that ISO 16319C's `#pragma' should be used instead. At the time `__attribute__' was 16320designed, there were two reasons for not doing this. 16321 16322 1. It is impossible to generate `#pragma' commands from a macro. 16323 16324 2. There is no telling what the same `#pragma' might mean in another 16325 compiler. 16326 16327 These two reasons applied to almost any application that might have 16328been proposed for `#pragma'. It was basically a mistake to use 16329`#pragma' for _anything_. 16330 16331 The ISO C99 standard includes `_Pragma', which now allows pragmas to 16332be generated from macros. In addition, a `#pragma GCC' namespace is 16333now in use for GCC-specific pragmas. However, it has been found 16334convenient to use `__attribute__' to achieve a natural attachment of 16335attributes to their corresponding declarations, whereas `#pragma GCC' 16336is of use for constructs that do not naturally form part of the 16337grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 16338Directives. 16339 16340 16341File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 16342 163435.26 Attribute Syntax 16344===================== 16345 16346This section describes the syntax with which `__attribute__' may be 16347used, and the constructs to which attribute specifiers bind, for the C 16348language. Some details may vary for C++ and Objective-C. Because of 16349infelicities in the grammar for attributes, some forms described here 16350may not be successfully parsed in all cases. 16351 16352 There are some problems with the semantics of attributes in C++. For 16353example, there are no manglings for attributes, although they may affect 16354code generation, so problems may arise when attributed types are used in 16355conjunction with templates or overloading. Similarly, `typeid' does 16356not distinguish between types with different attributes. Support for 16357attributes in C++ may be restricted in future to attributes on 16358declarations only, but not on nested declarators. 16359 16360 *Note Function Attributes::, for details of the semantics of attributes 16361applying to functions. *Note Variable Attributes::, for details of the 16362semantics of attributes applying to variables. *Note Type Attributes::, 16363for details of the semantics of attributes applying to structure, union 16364and enumerated types. 16365 16366 An "attribute specifier" is of the form `__attribute__ 16367((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 16368comma-separated sequence of "attributes", where each attribute is one 16369of the following: 16370 16371 * Empty. Empty attributes are ignored. 16372 16373 * A word (which may be an identifier such as `unused', or a reserved 16374 word such as `const'). 16375 16376 * A word, followed by, in parentheses, parameters for the attribute. 16377 These parameters take one of the following forms: 16378 16379 * An identifier. For example, `mode' attributes use this form. 16380 16381 * An identifier followed by a comma and a non-empty 16382 comma-separated list of expressions. For example, `format' 16383 attributes use this form. 16384 16385 * A possibly empty comma-separated list of expressions. For 16386 example, `format_arg' attributes use this form with the list 16387 being a single integer constant expression, and `alias' 16388 attributes use this form with the list being a single string 16389 constant. 16390 16391 An "attribute specifier list" is a sequence of one or more attribute 16392specifiers, not separated by any other tokens. 16393 16394 In GNU C, an attribute specifier list may appear after the colon 16395following a label, other than a `case' or `default' label. The only 16396attribute it makes sense to use after a label is `unused'. This 16397feature is intended for code generated by programs which contains labels 16398that may be unused but which is compiled with `-Wall'. It would not 16399normally be appropriate to use in it human-written code, though it 16400could be useful in cases where the code that jumps to the label is 16401contained within an `#ifdef' conditional. GNU C++ does not permit such 16402placement of attribute lists, as it is permissible for a declaration, 16403which could begin with an attribute list, to be labelled in C++. 16404Declarations cannot be labelled in C90 or C99, so the ambiguity does 16405not arise there. 16406 16407 An attribute specifier list may appear as part of a `struct', `union' 16408or `enum' specifier. It may go either immediately after the `struct', 16409`union' or `enum' keyword, or after the closing brace. The former 16410syntax is preferred. Where attribute specifiers follow the closing 16411brace, they are considered to relate to the structure, union or 16412enumerated type defined, not to any enclosing declaration the type 16413specifier appears in, and the type defined is not complete until after 16414the attribute specifiers. 16415 16416 Otherwise, an attribute specifier appears as part of a declaration, 16417counting declarations of unnamed parameters and type names, and relates 16418to that declaration (which may be nested in another declaration, for 16419example in the case of a parameter declaration), or to a particular 16420declarator within a declaration. Where an attribute specifier is 16421applied to a parameter declared as a function or an array, it should 16422apply to the function or array rather than the pointer to which the 16423parameter is implicitly converted, but this is not yet correctly 16424implemented. 16425 16426 Any list of specifiers and qualifiers at the start of a declaration may 16427contain attribute specifiers, whether or not such a list may in that 16428context contain storage class specifiers. (Some attributes, however, 16429are essentially in the nature of storage class specifiers, and only make 16430sense where storage class specifiers may be used; for example, 16431`section'.) There is one necessary limitation to this syntax: the 16432first old-style parameter declaration in a function definition cannot 16433begin with an attribute specifier, because such an attribute applies to 16434the function instead by syntax described below (which, however, is not 16435yet implemented in this case). In some other cases, attribute 16436specifiers are permitted by this grammar but not yet supported by the 16437compiler. All attribute specifiers in this place relate to the 16438declaration as a whole. In the obsolescent usage where a type of `int' 16439is implied by the absence of type specifiers, such a list of specifiers 16440and qualifiers may be an attribute specifier list with no other 16441specifiers or qualifiers. 16442 16443 At present, the first parameter in a function prototype must have some 16444type specifier which is not an attribute specifier; this resolves an 16445ambiguity in the interpretation of `void f(int (__attribute__((foo)) 16446x))', but is subject to change. At present, if the parentheses of a 16447function declarator contain only attributes then those attributes are 16448ignored, rather than yielding an error or warning or implying a single 16449parameter of type int, but this is subject to change. 16450 16451 An attribute specifier list may appear immediately before a declarator 16452(other than the first) in a comma-separated list of declarators in a 16453declaration of more than one identifier using a single list of 16454specifiers and qualifiers. Such attribute specifiers apply only to the 16455identifier before whose declarator they appear. For example, in 16456 16457 __attribute__((noreturn)) void d0 (void), 16458 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 16459 d2 (void) 16460 16461the `noreturn' attribute applies to all the functions declared; the 16462`format' attribute only applies to `d1'. 16463 16464 An attribute specifier list may appear immediately before the comma, 16465`=' or semicolon terminating the declaration of an identifier other 16466than a function definition. At present, such attribute specifiers apply 16467to the declared object or function, but in future they may attach to the 16468outermost adjacent declarator. In simple cases there is no difference, 16469but, for example, in 16470 16471 void (****f)(void) __attribute__((noreturn)); 16472 16473at present the `noreturn' attribute applies to `f', which causes a 16474warning since `f' is not a function, but in future it may apply to the 16475function `****f'. The precise semantics of what attributes in such 16476cases will apply to are not yet specified. Where an assembler name for 16477an object or function is specified (*note Asm Labels::), at present the 16478attribute must follow the `asm' specification; in future, attributes 16479before the `asm' specification may apply to the adjacent declarator, 16480and those after it to the declared object or function. 16481 16482 An attribute specifier list may, in future, be permitted to appear 16483after the declarator in a function definition (before any old-style 16484parameter declarations or the function body). 16485 16486 Attribute specifiers may be mixed with type qualifiers appearing inside 16487the `[]' of a parameter array declarator, in the C99 construct by which 16488such qualifiers are applied to the pointer to which the array is 16489implicitly converted. Such attribute specifiers apply to the pointer, 16490not to the array, but at present this is not implemented and they are 16491ignored. 16492 16493 An attribute specifier list may appear at the start of a nested 16494declarator. At present, there are some limitations in this usage: the 16495attributes correctly apply to the declarator, but for most individual 16496attributes the semantics this implies are not implemented. When 16497attribute specifiers follow the `*' of a pointer declarator, they may 16498be mixed with any type qualifiers present. The following describes the 16499formal semantics of this syntax. It will make the most sense if you 16500are familiar with the formal specification of declarators in the ISO C 16501standard. 16502 16503 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 16504where `T' contains declaration specifiers that specify a type TYPE 16505(such as `int') and `D1' is a declarator that contains an identifier 16506IDENT. The type specified for IDENT for derived declarators whose type 16507does not include an attribute specifier is as in the ISO C standard. 16508 16509 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 16510declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 16511TYPE" for IDENT, then `T D1' specifies the type 16512"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 16513 16514 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 16515D', and the declaration `T D' specifies the type 16516"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 16517the type "DERIVED-DECLARATOR-TYPE-LIST 16518TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 16519 16520 For example, 16521 16522 void (__attribute__((noreturn)) ****f) (void); 16523 16524specifies the type "pointer to pointer to pointer to pointer to 16525non-returning function returning `void'". As another example, 16526 16527 char *__attribute__((aligned(8))) *f; 16528 16529specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 16530again that this does not work with most attributes; for example, the 16531usage of `aligned' and `noreturn' attributes given above is not yet 16532supported. 16533 16534 For compatibility with existing code written for compiler versions that 16535did not implement attributes on nested declarators, some laxity is 16536allowed in the placing of attributes. If an attribute that only applies 16537to types is applied to a declaration, it will be treated as applying to 16538the type of that declaration. If an attribute that only applies to 16539declarations is applied to the type of a declaration, it will be treated 16540as applying to that declaration; and, for compatibility with code 16541placing the attributes immediately before the identifier declared, such 16542an attribute applied to a function return type will be treated as 16543applying to the function type, and such an attribute applied to an array 16544element type will be treated as applying to the array type. If an 16545attribute that only applies to function types is applied to a 16546pointer-to-function type, it will be treated as applying to the pointer 16547target type; if such an attribute is applied to a function return type 16548that is not a pointer-to-function type, it will be treated as applying 16549to the function type. 16550 16551 16552File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 16553 165545.27 Prototypes and Old-Style Function Definitions 16555================================================== 16556 16557GNU C extends ISO C to allow a function prototype to override a later 16558old-style non-prototype definition. Consider the following example: 16559 16560 /* Use prototypes unless the compiler is old-fashioned. */ 16561 #ifdef __STDC__ 16562 #define P(x) x 16563 #else 16564 #define P(x) () 16565 #endif 16566 16567 /* Prototype function declaration. */ 16568 int isroot P((uid_t)); 16569 16570 /* Old-style function definition. */ 16571 int 16572 isroot (x) /* ??? lossage here ??? */ 16573 uid_t x; 16574 { 16575 return x == 0; 16576 } 16577 16578 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 16579this example, because subword arguments in old-style non-prototype 16580definitions are promoted. Therefore in this example the function 16581definition's argument is really an `int', which does not match the 16582prototype argument type of `short'. 16583 16584 This restriction of ISO C makes it hard to write code that is portable 16585to traditional C compilers, because the programmer does not know 16586whether the `uid_t' type is `short', `int', or `long'. Therefore, in 16587cases like these GNU C allows a prototype to override a later old-style 16588definition. More precisely, in GNU C, a function prototype argument 16589type overrides the argument type specified by a later old-style 16590definition if the former type is the same as the latter type before 16591promotion. Thus in GNU C the above example is equivalent to the 16592following: 16593 16594 int isroot (uid_t); 16595 16596 int 16597 isroot (uid_t x) 16598 { 16599 return x == 0; 16600 } 16601 16602GNU C++ does not support old-style function definitions, so this 16603extension is irrelevant. 16604 16605 16606File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 16607 166085.28 C++ Style Comments 16609======================= 16610 16611In GNU C, you may use C++ style comments, which start with `//' and 16612continue until the end of the line. Many other C implementations allow 16613such comments, and they are included in the 1999 C standard. However, 16614C++ style comments are not recognized if you specify an `-std' option 16615specifying a version of ISO C before C99, or `-ansi' (equivalent to 16616`-std=c89'). 16617 16618 16619File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 16620 166215.29 Dollar Signs in Identifier Names 16622===================================== 16623 16624In GNU C, you may normally use dollar signs in identifier names. This 16625is because many traditional C implementations allow such identifiers. 16626However, dollar signs in identifiers are not supported on a few target 16627machines, typically because the target assembler does not allow them. 16628 16629 16630File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 16631 166325.30 The Character <ESC> in Constants 16633===================================== 16634 16635You can use the sequence `\e' in a string or character constant to 16636stand for the ASCII character <ESC>. 16637 16638 16639File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 16640 166415.31 Inquiring on Alignment of Types or Variables 16642================================================= 16643 16644The keyword `__alignof__' allows you to inquire about how an object is 16645aligned, or the minimum alignment usually required by a type. Its 16646syntax is just like `sizeof'. 16647 16648 For example, if the target machine requires a `double' value to be 16649aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 16650is true on many RISC machines. On more traditional machine designs, 16651`__alignof__ (double)' is 4 or even 2. 16652 16653 Some machines never actually require alignment; they allow reference 16654to any data type even at an odd address. For these machines, 16655`__alignof__' reports the _recommended_ alignment of a type. 16656 16657 If the operand of `__alignof__' is an lvalue rather than a type, its 16658value is the required alignment for its type, taking into account any 16659minimum alignment specified with GCC's `__attribute__' extension (*note 16660Variable Attributes::). For example, after this declaration: 16661 16662 struct foo { int x; char y; } foo1; 16663 16664the value of `__alignof__ (foo1.y)' is 1, even though its actual 16665alignment is probably 2 or 4, the same as `__alignof__ (int)'. 16666 16667 It is an error to ask for the alignment of an incomplete type. 16668 16669 16670File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 16671 166725.32 Specifying Attributes of Variables 16673======================================= 16674 16675The keyword `__attribute__' allows you to specify special attributes of 16676variables or structure fields. This keyword is followed by an 16677attribute specification inside double parentheses. Some attributes are 16678currently defined generically for variables. Other attributes are 16679defined for variables on particular target systems. Other attributes 16680are available for functions (*note Function Attributes::) and for types 16681(*note Type Attributes::). Other front ends might define more 16682attributes (*note Extensions to the C++ Language: C++ Extensions.). 16683 16684 You may also specify attributes with `__' preceding and following each 16685keyword. This allows you to use them in header files without being 16686concerned about a possible macro of the same name. For example, you 16687may use `__aligned__' instead of `aligned'. 16688 16689 *Note Attribute Syntax::, for details of the exact syntax for using 16690attributes. 16691 16692`aligned (ALIGNMENT)' 16693 This attribute specifies a minimum alignment for the variable or 16694 structure field, measured in bytes. For example, the declaration: 16695 16696 int x __attribute__ ((aligned (16))) = 0; 16697 16698 causes the compiler to allocate the global variable `x' on a 16699 16-byte boundary. On a 68040, this could be used in conjunction 16700 with an `asm' expression to access the `move16' instruction which 16701 requires 16-byte aligned operands. 16702 16703 You can also specify the alignment of structure fields. For 16704 example, to create a double-word aligned `int' pair, you could 16705 write: 16706 16707 struct foo { int x[2] __attribute__ ((aligned (8))); }; 16708 16709 This is an alternative to creating a union with a `double' member 16710 that forces the union to be double-word aligned. 16711 16712 As in the preceding examples, you can explicitly specify the 16713 alignment (in bytes) that you wish the compiler to use for a given 16714 variable or structure field. Alternatively, you can leave out the 16715 alignment factor and just ask the compiler to align a variable or 16716 field to the maximum useful alignment for the target machine you 16717 are compiling for. For example, you could write: 16718 16719 short array[3] __attribute__ ((aligned)); 16720 16721 Whenever you leave out the alignment factor in an `aligned' 16722 attribute specification, the compiler automatically sets the 16723 alignment for the declared variable or field to the largest 16724 alignment which is ever used for any data type on the target 16725 machine you are compiling for. Doing this can often make copy 16726 operations more efficient, because the compiler can use whatever 16727 instructions copy the biggest chunks of memory when performing 16728 copies to or from the variables or fields that you have aligned 16729 this way. 16730 16731 The `aligned' attribute can only increase the alignment; but you 16732 can decrease it by specifying `packed' as well. See below. 16733 16734 Note that the effectiveness of `aligned' attributes may be limited 16735 by inherent limitations in your linker. On many systems, the 16736 linker is only able to arrange for variables to be aligned up to a 16737 certain maximum alignment. (For some linkers, the maximum 16738 supported alignment may be very very small.) If your linker is 16739 only able to align variables up to a maximum of 8 byte alignment, 16740 then specifying `aligned(16)' in an `__attribute__' will still 16741 only provide you with 8 byte alignment. See your linker 16742 documentation for further information. 16743 16744`cleanup (CLEANUP_FUNCTION)' 16745 The `cleanup' attribute runs a function when the variable goes out 16746 of scope. This attribute can only be applied to auto function 16747 scope variables; it may not be applied to parameters or variables 16748 with static storage duration. The function must take one 16749 parameter, a pointer to a type compatible with the variable. The 16750 return value of the function (if any) is ignored. 16751 16752 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 16753 during the stack unwinding that happens during the processing of 16754 the exception. Note that the `cleanup' attribute does not allow 16755 the exception to be caught, only to perform an action. It is 16756 undefined what happens if CLEANUP_FUNCTION does not return 16757 normally. 16758 16759`common' 16760`nocommon' 16761 The `common' attribute requests GCC to place a variable in 16762 "common" storage. The `nocommon' attribute requests the 16763 opposite--to allocate space for it directly. 16764 16765 These attributes override the default chosen by the `-fno-common' 16766 and `-fcommon' flags respectively. 16767 16768`deprecated' 16769 The `deprecated' attribute results in a warning if the variable is 16770 used anywhere in the source file. This is useful when identifying 16771 variables that are expected to be removed in a future version of a 16772 program. The warning also includes the location of the declaration 16773 of the deprecated variable, to enable users to easily find further 16774 information about why the variable is deprecated, or what they 16775 should do instead. Note that the warning only occurs for uses: 16776 16777 extern int old_var __attribute__ ((deprecated)); 16778 extern int old_var; 16779 int new_fn () { return old_var; } 16780 16781 results in a warning on line 3 but not line 2. 16782 16783 The `deprecated' attribute can also be used for functions and 16784 types (*note Function Attributes::, *note Type Attributes::.) 16785 16786`mode (MODE)' 16787 This attribute specifies the data type for the 16788 declaration--whichever type corresponds to the mode MODE. This in 16789 effect lets you request an integer or floating point type 16790 according to its width. 16791 16792 You may also specify a mode of `byte' or `__byte__' to indicate 16793 the mode corresponding to a one-byte integer, `word' or `__word__' 16794 for the mode of a one-word integer, and `pointer' or `__pointer__' 16795 for the mode used to represent pointers. 16796 16797`packed' 16798 The `packed' attribute specifies that a variable or structure field 16799 should have the smallest possible alignment--one byte for a 16800 variable, and one bit for a field, unless you specify a larger 16801 value with the `aligned' attribute. 16802 16803 Here is a structure in which the field `x' is packed, so that it 16804 immediately follows `a': 16805 16806 struct foo 16807 { 16808 char a; 16809 int x[2] __attribute__ ((packed)); 16810 }; 16811 16812`section ("SECTION-NAME")' 16813 Normally, the compiler places the objects it generates in sections 16814 like `data' and `bss'. Sometimes, however, you need additional 16815 sections, or you need certain particular variables to appear in 16816 special sections, for example to map to special hardware. The 16817 `section' attribute specifies that a variable (or function) lives 16818 in a particular section. For example, this small program uses 16819 several specific section names: 16820 16821 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 16822 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 16823 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 16824 int init_data __attribute__ ((section ("INITDATA"))) = 0; 16825 16826 main() 16827 { 16828 /* Initialize stack pointer */ 16829 init_sp (stack + sizeof (stack)); 16830 16831 /* Initialize initialized data */ 16832 memcpy (&init_data, &data, &edata - &data); 16833 16834 /* Turn on the serial ports */ 16835 init_duart (&a); 16836 init_duart (&b); 16837 } 16838 16839 Use the `section' attribute with an _initialized_ definition of a 16840 _global_ variable, as shown in the example. GCC issues a warning 16841 and otherwise ignores the `section' attribute in uninitialized 16842 variable declarations. 16843 16844 You may only use the `section' attribute with a fully initialized 16845 global definition because of the way linkers work. The linker 16846 requires each object be defined once, with the exception that 16847 uninitialized variables tentatively go in the `common' (or `bss') 16848 section and can be multiply "defined". You can force a variable 16849 to be initialized with the `-fno-common' flag or the `nocommon' 16850 attribute. 16851 16852 Some file formats do not support arbitrary sections so the 16853 `section' attribute is not available on all platforms. If you 16854 need to map the entire contents of a module to a particular 16855 section, consider using the facilities of the linker instead. 16856 16857`shared' 16858 On Microsoft Windows, in addition to putting variable definitions 16859 in a named section, the section can also be shared among all 16860 running copies of an executable or DLL. For example, this small 16861 program defines shared data by putting it in a named section 16862 `shared' and marking the section shareable: 16863 16864 int foo __attribute__((section ("shared"), shared)) = 0; 16865 16866 int 16867 main() 16868 { 16869 /* Read and write foo. All running 16870 copies see the same value. */ 16871 return 0; 16872 } 16873 16874 You may only use the `shared' attribute along with `section' 16875 attribute with a fully initialized global definition because of 16876 the way linkers work. See `section' attribute for more 16877 information. 16878 16879 The `shared' attribute is only available on Microsoft Windows. 16880 16881`tls_model ("TLS_MODEL")' 16882 The `tls_model' attribute sets thread-local storage model (*note 16883 Thread-Local::) of a particular `__thread' variable, overriding 16884 `-ftls-model=' command line switch on a per-variable basis. The 16885 TLS_MODEL argument should be one of `global-dynamic', 16886 `local-dynamic', `initial-exec' or `local-exec'. 16887 16888 Not all targets support this attribute. 16889 16890`unused' 16891 This attribute, attached to a variable, means that the variable is 16892 meant to be possibly unused. GCC will not produce a warning for 16893 this variable. 16894 16895`used' 16896 This attribute, attached to a variable, means that the variable 16897 must be emitted even if it appears that the variable is not 16898 referenced. 16899 16900`vector_size (BYTES)' 16901 This attribute specifies the vector size for the variable, 16902 measured in bytes. For example, the declaration: 16903 16904 int foo __attribute__ ((vector_size (16))); 16905 16906 causes the compiler to set the mode for `foo', to be 16 bytes, 16907 divided into `int' sized units. Assuming a 32-bit int (a vector of 16908 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 16909 16910 This attribute is only applicable to integral and float scalars, 16911 although arrays, pointers, and function return values are allowed 16912 in conjunction with this construct. 16913 16914 Aggregates with this attribute are invalid, even if they are of 16915 the same size as a corresponding scalar. For example, the 16916 declaration: 16917 16918 struct S { int a; }; 16919 struct S __attribute__ ((vector_size (16))) foo; 16920 16921 is invalid even if the size of the structure is the same as the 16922 size of the `int'. 16923 16924`selectany' 16925 The `selectany' attribute causes an initialized global variable to 16926 have link-once semantics. When multiple definitions of the 16927 variable are encountered by the linker, the first is selected and 16928 the remainder are discarded. Following usage by the Microsoft 16929 compiler, the linker is told _not_ to warn about size or content 16930 differences of the multiple definitions. 16931 16932 Although the primary usage of this attribute is for POD types, the 16933 attribute can also be applied to global C++ objects that are 16934 initialized by a constructor. In this case, the static 16935 initialization and destruction code for the object is emitted in 16936 each translation defining the object, but the calls to the 16937 constructor and destructor are protected by a link-once guard 16938 variable. 16939 16940 The `selectany' attribute is only available on Microsoft Windows 16941 targets. You can use `__declspec (selectany)' as a synonym for 16942 `__attribute__ ((selectany))' for compatibility with other 16943 compilers. 16944 16945`weak' 16946 The `weak' attribute is described in *Note Function Attributes::. 16947 16948`dllimport' 16949 The `dllimport' attribute is described in *Note Function 16950 Attributes::. 16951 16952`dllexport' 16953 The `dllexport' attribute is described in *Note Function 16954 Attributes::. 16955 16956 169575.32.1 M32R/D Variable Attributes 16958--------------------------------- 16959 16960One attribute is currently defined for the M32R/D. 16961 16962`model (MODEL-NAME)' 16963 Use this attribute on the M32R/D to set the addressability of an 16964 object. The identifier MODEL-NAME is one of `small', `medium', or 16965 `large', representing each of the code models. 16966 16967 Small model objects live in the lower 16MB of memory (so that their 16968 addresses can be loaded with the `ld24' instruction). 16969 16970 Medium and large model objects may live anywhere in the 32-bit 16971 address space (the compiler will generate `seth/add3' instructions 16972 to load their addresses). 16973 169745.32.2 i386 Variable Attributes 16975------------------------------- 16976 16977Two attributes are currently defined for i386 configurations: 16978`ms_struct' and `gcc_struct' 16979 16980`ms_struct' 16981`gcc_struct' 16982 If `packed' is used on a structure, or if bit-fields are used it 16983 may be that the Microsoft ABI packs them differently than GCC 16984 would normally pack them. Particularly when moving packed data 16985 between functions compiled with GCC and the native Microsoft 16986 compiler (either via function call or as data in a file), it may 16987 be necessary to access either format. 16988 16989 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 16990 Windows X86 compilers to match the native Microsoft compiler. 16991 16992 The Microsoft structure layout algorithm is fairly simple with the 16993 exception of the bitfield packing: 16994 16995 The padding and alignment of members of structures and whether a 16996 bit field can straddle a storage-unit boundary 16997 16998 1. Structure members are stored sequentially in the order in 16999 which they are declared: the first member has the lowest 17000 memory address and the last member the highest. 17001 17002 2. Every data object has an alignment-requirement. The 17003 alignment-requirement for all data except structures, unions, 17004 and arrays is either the size of the object or the current 17005 packing size (specified with either the aligned attribute or 17006 the pack pragma), whichever is less. For structures, unions, 17007 and arrays, the alignment-requirement is the largest 17008 alignment-requirement of its members. Every object is 17009 allocated an offset so that: 17010 17011 offset % alignment-requirement == 0 17012 17013 3. Adjacent bit fields are packed into the same 1-, 2-, or 17014 4-byte allocation unit if the integral types are the same 17015 size and if the next bit field fits into the current 17016 allocation unit without crossing the boundary imposed by the 17017 common alignment requirements of the bit fields. 17018 17019 Handling of zero-length bitfields: 17020 17021 MSVC interprets zero-length bitfields in the following ways: 17022 17023 1. If a zero-length bitfield is inserted between two bitfields 17024 that would normally be coalesced, the bitfields will not be 17025 coalesced. 17026 17027 For example: 17028 17029 struct 17030 { 17031 unsigned long bf_1 : 12; 17032 unsigned long : 0; 17033 unsigned long bf_2 : 12; 17034 } t1; 17035 17036 The size of `t1' would be 8 bytes with the zero-length 17037 bitfield. If the zero-length bitfield were removed, `t1''s 17038 size would be 4 bytes. 17039 17040 2. If a zero-length bitfield is inserted after a bitfield, 17041 `foo', and the alignment of the zero-length bitfield is 17042 greater than the member that follows it, `bar', `bar' will be 17043 aligned as the type of the zero-length bitfield. 17044 17045 For example: 17046 17047 struct 17048 { 17049 char foo : 4; 17050 short : 0; 17051 char bar; 17052 } t2; 17053 17054 struct 17055 { 17056 char foo : 4; 17057 short : 0; 17058 double bar; 17059 } t3; 17060 17061 For `t2', `bar' will be placed at offset 2, rather than 17062 offset 1. Accordingly, the size of `t2' will be 4. For 17063 `t3', the zero-length bitfield will not affect the alignment 17064 of `bar' or, as a result, the size of the structure. 17065 17066 Taking this into account, it is important to note the 17067 following: 17068 17069 1. If a zero-length bitfield follows a normal bitfield, the 17070 type of the zero-length bitfield may affect the 17071 alignment of the structure as whole. For example, `t2' 17072 has a size of 4 bytes, since the zero-length bitfield 17073 follows a normal bitfield, and is of type short. 17074 17075 2. Even if a zero-length bitfield is not followed by a 17076 normal bitfield, it may still affect the alignment of 17077 the structure: 17078 17079 struct 17080 { 17081 char foo : 6; 17082 long : 0; 17083 } t4; 17084 17085 Here, `t4' will take up 4 bytes. 17086 17087 3. Zero-length bitfields following non-bitfield members are 17088 ignored: 17089 17090 struct 17091 { 17092 char foo; 17093 long : 0; 17094 char bar; 17095 } t5; 17096 17097 Here, `t5' will take up 2 bytes. 17098 170995.32.3 PowerPC Variable Attributes 17100---------------------------------- 17101 17102Three attributes currently are defined for PowerPC configurations: 17103`altivec', `ms_struct' and `gcc_struct'. 17104 17105 For full documentation of the struct attributes please see the 17106documentation in the *Note i386 Variable Attributes::, section. 17107 17108 For documentation of `altivec' attribute please see the documentation 17109in the *Note PowerPC Type Attributes::, section. 17110 171115.32.4 Xstormy16 Variable Attributes 17112------------------------------------ 17113 17114One attribute is currently defined for xstormy16 configurations: 17115`below100' 17116 17117`below100' 17118 If a variable has the `below100' attribute (`BELOW100' is allowed 17119 also), GCC will place the variable in the first 0x100 bytes of 17120 memory and use special opcodes to access it. Such variables will 17121 be placed in either the `.bss_below100' section or the 17122 `.data_below100' section. 17123 17124 17125 17126File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 17127 171285.33 Specifying Attributes of Types 17129=================================== 17130 17131The keyword `__attribute__' allows you to specify special attributes of 17132`struct' and `union' types when you define such types. This keyword is 17133followed by an attribute specification inside double parentheses. 17134Seven attributes are currently defined for types: `aligned', `packed', 17135`transparent_union', `unused', `deprecated', `visibility', and 17136`may_alias'. Other attributes are defined for functions (*note 17137Function Attributes::) and for variables (*note Variable Attributes::). 17138 17139 You may also specify any one of these attributes with `__' preceding 17140and following its keyword. This allows you to use these attributes in 17141header files without being concerned about a possible macro of the same 17142name. For example, you may use `__aligned__' instead of `aligned'. 17143 17144 You may specify type attributes either in a `typedef' declaration or 17145in an enum, struct or union type declaration or definition. 17146 17147 For an enum, struct or union type, you may specify attributes either 17148between the enum, struct or union tag and the name of the type, or just 17149past the closing curly brace of the _definition_. The former syntax is 17150preferred. 17151 17152 *Note Attribute Syntax::, for details of the exact syntax for using 17153attributes. 17154 17155`aligned (ALIGNMENT)' 17156 This attribute specifies a minimum alignment (in bytes) for 17157 variables of the specified type. For example, the declarations: 17158 17159 struct S { short f[3]; } __attribute__ ((aligned (8))); 17160 typedef int more_aligned_int __attribute__ ((aligned (8))); 17161 17162 force the compiler to insure (as far as it can) that each variable 17163 whose type is `struct S' or `more_aligned_int' will be allocated 17164 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 17165 all variables of type `struct S' aligned to 8-byte boundaries 17166 allows the compiler to use the `ldd' and `std' (doubleword load and 17167 store) instructions when copying one variable of type `struct S' to 17168 another, thus improving run-time efficiency. 17169 17170 Note that the alignment of any given `struct' or `union' type is 17171 required by the ISO C standard to be at least a perfect multiple of 17172 the lowest common multiple of the alignments of all of the members 17173 of the `struct' or `union' in question. This means that you _can_ 17174 effectively adjust the alignment of a `struct' or `union' type by 17175 attaching an `aligned' attribute to any one of the members of such 17176 a type, but the notation illustrated in the example above is a 17177 more obvious, intuitive, and readable way to request the compiler 17178 to adjust the alignment of an entire `struct' or `union' type. 17179 17180 As in the preceding example, you can explicitly specify the 17181 alignment (in bytes) that you wish the compiler to use for a given 17182 `struct' or `union' type. Alternatively, you can leave out the 17183 alignment factor and just ask the compiler to align a type to the 17184 maximum useful alignment for the target machine you are compiling 17185 for. For example, you could write: 17186 17187 struct S { short f[3]; } __attribute__ ((aligned)); 17188 17189 Whenever you leave out the alignment factor in an `aligned' 17190 attribute specification, the compiler automatically sets the 17191 alignment for the type to the largest alignment which is ever used 17192 for any data type on the target machine you are compiling for. 17193 Doing this can often make copy operations more efficient, because 17194 the compiler can use whatever instructions copy the biggest chunks 17195 of memory when performing copies to or from the variables which 17196 have types that you have aligned this way. 17197 17198 In the example above, if the size of each `short' is 2 bytes, then 17199 the size of the entire `struct S' type is 6 bytes. The smallest 17200 power of two which is greater than or equal to that is 8, so the 17201 compiler sets the alignment for the entire `struct S' type to 8 17202 bytes. 17203 17204 Note that although you can ask the compiler to select a 17205 time-efficient alignment for a given type and then declare only 17206 individual stand-alone objects of that type, the compiler's 17207 ability to select a time-efficient alignment is primarily useful 17208 only when you plan to create arrays of variables having the 17209 relevant (efficiently aligned) type. If you declare or use arrays 17210 of variables of an efficiently-aligned type, then it is likely 17211 that your program will also be doing pointer arithmetic (or 17212 subscripting, which amounts to the same thing) on pointers to the 17213 relevant type, and the code that the compiler generates for these 17214 pointer arithmetic operations will often be more efficient for 17215 efficiently-aligned types than for other types. 17216 17217 The `aligned' attribute can only increase the alignment; but you 17218 can decrease it by specifying `packed' as well. See below. 17219 17220 Note that the effectiveness of `aligned' attributes may be limited 17221 by inherent limitations in your linker. On many systems, the 17222 linker is only able to arrange for variables to be aligned up to a 17223 certain maximum alignment. (For some linkers, the maximum 17224 supported alignment may be very very small.) If your linker is 17225 only able to align variables up to a maximum of 8 byte alignment, 17226 then specifying `aligned(16)' in an `__attribute__' will still 17227 only provide you with 8 byte alignment. See your linker 17228 documentation for further information. 17229 17230`packed' 17231 This attribute, attached to `struct' or `union' type definition, 17232 specifies that each member (other than zero-width bitfields) of 17233 the structure or union is placed to minimize the memory required. 17234 When attached to an `enum' definition, it indicates that the 17235 smallest integral type should be used. 17236 17237 Specifying this attribute for `struct' and `union' types is 17238 equivalent to specifying the `packed' attribute on each of the 17239 structure or union members. Specifying the `-fshort-enums' flag 17240 on the line is equivalent to specifying the `packed' attribute on 17241 all `enum' definitions. 17242 17243 In the following example `struct my_packed_struct''s members are 17244 packed closely together, but the internal layout of its `s' member 17245 is not packed--to do that, `struct my_unpacked_struct' would need 17246 to be packed too. 17247 17248 struct my_unpacked_struct 17249 { 17250 char c; 17251 int i; 17252 }; 17253 17254 struct __attribute__ ((__packed__)) my_packed_struct 17255 { 17256 char c; 17257 int i; 17258 struct my_unpacked_struct s; 17259 }; 17260 17261 You may only specify this attribute on the definition of a `enum', 17262 `struct' or `union', not on a `typedef' which does not also define 17263 the enumerated type, structure or union. 17264 17265`transparent_union' 17266 This attribute, attached to a `union' type definition, indicates 17267 that any function parameter having that union type causes calls to 17268 that function to be treated in a special way. 17269 17270 First, the argument corresponding to a transparent union type can 17271 be of any type in the union; no cast is required. Also, if the 17272 union contains a pointer type, the corresponding argument can be a 17273 null pointer constant or a void pointer expression; and if the 17274 union contains a void pointer type, the corresponding argument can 17275 be any pointer expression. If the union member type is a pointer, 17276 qualifiers like `const' on the referenced type must be respected, 17277 just as with normal pointer conversions. 17278 17279 Second, the argument is passed to the function using the calling 17280 conventions of the first member of the transparent union, not the 17281 calling conventions of the union itself. All members of the union 17282 must have the same machine representation; this is necessary for 17283 this argument passing to work properly. 17284 17285 Transparent unions are designed for library functions that have 17286 multiple interfaces for compatibility reasons. For example, 17287 suppose the `wait' function must accept either a value of type 17288 `int *' to comply with Posix, or a value of type `union wait *' to 17289 comply with the 4.1BSD interface. If `wait''s parameter were 17290 `void *', `wait' would accept both kinds of arguments, but it 17291 would also accept any other pointer type and this would make 17292 argument type checking less useful. Instead, `<sys/wait.h>' might 17293 define the interface as follows: 17294 17295 typedef union 17296 { 17297 int *__ip; 17298 union wait *__up; 17299 } wait_status_ptr_t __attribute__ ((__transparent_union__)); 17300 17301 pid_t wait (wait_status_ptr_t); 17302 17303 This interface allows either `int *' or `union wait *' arguments 17304 to be passed, using the `int *' calling convention. The program 17305 can call `wait' with arguments of either type: 17306 17307 int w1 () { int w; return wait (&w); } 17308 int w2 () { union wait w; return wait (&w); } 17309 17310 With this interface, `wait''s implementation might look like this: 17311 17312 pid_t wait (wait_status_ptr_t p) 17313 { 17314 return waitpid (-1, p.__ip, 0); 17315 } 17316 17317`unused' 17318 When attached to a type (including a `union' or a `struct'), this 17319 attribute means that variables of that type are meant to appear 17320 possibly unused. GCC will not produce a warning for any variables 17321 of that type, even if the variable appears to do nothing. This is 17322 often the case with lock or thread classes, which are usually 17323 defined and then not referenced, but contain constructors and 17324 destructors that have nontrivial bookkeeping functions. 17325 17326`deprecated' 17327 The `deprecated' attribute results in a warning if the type is 17328 used anywhere in the source file. This is useful when identifying 17329 types that are expected to be removed in a future version of a 17330 program. If possible, the warning also includes the location of 17331 the declaration of the deprecated type, to enable users to easily 17332 find further information about why the type is deprecated, or what 17333 they should do instead. Note that the warnings only occur for 17334 uses and then only if the type is being applied to an identifier 17335 that itself is not being declared as deprecated. 17336 17337 typedef int T1 __attribute__ ((deprecated)); 17338 T1 x; 17339 typedef T1 T2; 17340 T2 y; 17341 typedef T1 T3 __attribute__ ((deprecated)); 17342 T3 z __attribute__ ((deprecated)); 17343 17344 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 17345 warning is issued for line 4 because T2 is not explicitly 17346 deprecated. Line 5 has no warning because T3 is explicitly 17347 deprecated. Similarly for line 6. 17348 17349 The `deprecated' attribute can also be used for functions and 17350 variables (*note Function Attributes::, *note Variable 17351 Attributes::.) 17352 17353`may_alias' 17354 Accesses to objects with types with this attribute are not 17355 subjected to type-based alias analysis, but are instead assumed to 17356 be able to alias any other type of objects, just like the `char' 17357 type. See `-fstrict-aliasing' for more information on aliasing 17358 issues. 17359 17360 Example of use: 17361 17362 typedef short __attribute__((__may_alias__)) short_a; 17363 17364 int 17365 main (void) 17366 { 17367 int a = 0x12345678; 17368 short_a *b = (short_a *) &a; 17369 17370 b[1] = 0; 17371 17372 if (a == 0x12345678) 17373 abort(); 17374 17375 exit(0); 17376 } 17377 17378 If you replaced `short_a' with `short' in the variable 17379 declaration, the above program would abort when compiled with 17380 `-fstrict-aliasing', which is on by default at `-O2' or above in 17381 recent GCC versions. 17382 17383`visibility' 17384 In C++, attribute visibility (*note Function Attributes::) can 17385 also be applied to class, struct, union and enum types. Unlike 17386 other type attributes, the attribute must appear between the 17387 initial keyword and the name of the type; it cannot appear after 17388 the body of the type. 17389 17390 Note that the type visibility is applied to vague linkage entities 17391 associated with the class (vtable, typeinfo node, etc.). In 17392 particular, if a class is thrown as an exception in one shared 17393 object and caught in another, the class must have default 17394 visibility. Otherwise the two shared objects will be unable to 17395 use the same typeinfo node and exception handling will break. 17396 173975.33.1 ARM Type Attributes 17398-------------------------- 17399 17400 On those ARM targets that support `dllimport' (such as Symbian 17401OS), you can use the `notshared' attribute to indicate that the virtual 17402table and other similar data for a class should not be exported from a 17403DLL. For example: 17404 17405 class __declspec(notshared) C { 17406 public: 17407 __declspec(dllimport) C(); 17408 virtual void f(); 17409 } 17410 17411 __declspec(dllexport) 17412 C::C() {} 17413 17414 In this code, `C::C' is exported from the current DLL, but the 17415virtual table for `C' is not exported. (You can use `__attribute__' 17416instead of `__declspec' if you prefer, but most Symbian OS code uses 17417`__declspec'.) 17418 174195.33.2 i386 Type Attributes 17420--------------------------- 17421 17422 Two attributes are currently defined for i386 configurations: 17423`ms_struct' and `gcc_struct' 17424 17425`ms_struct' 17426`gcc_struct' 17427 If `packed' is used on a structure, or if bit-fields are used it 17428 may be that the Microsoft ABI packs them differently than GCC 17429 would normally pack them. Particularly when moving packed data 17430 between functions compiled with GCC and the native Microsoft 17431 compiler (either via function call or as data in a file), it may 17432 be necessary to access either format. 17433 17434 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 17435 Windows X86 compilers to match the native Microsoft compiler. 17436 17437 To specify multiple attributes, separate them by commas within the 17438double parentheses: for example, `__attribute__ ((aligned (16), 17439packed))'. 17440 174415.33.3 PowerPC Type Attributes 17442------------------------------ 17443 17444Three attributes currently are defined for PowerPC configurations: 17445`altivec', `ms_struct' and `gcc_struct'. 17446 17447 For full documentation of the struct attributes please see the 17448documentation in the *Note i386 Type Attributes::, section. 17449 17450 The `altivec' attribute allows one to declare AltiVec vector data 17451types supported by the AltiVec Programming Interface Manual. The 17452attribute requires an argument to specify one of three vector types: 17453`vector__', `pixel__' (always followed by unsigned short), and `bool__' 17454(always followed by unsigned). 17455 17456 __attribute__((altivec(vector__))) 17457 __attribute__((altivec(pixel__))) unsigned short 17458 __attribute__((altivec(bool__))) unsigned 17459 17460 These attributes mainly are intended to support the `__vector', 17461`__pixel', and `__bool' AltiVec keywords. 17462 17463 17464File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions 17465 174665.34 An Inline Function is As Fast As a Macro 17467============================================= 17468 17469By declaring a function `inline', you can direct GCC to integrate that 17470function's code into the code for its callers. This makes execution 17471faster by eliminating the function-call overhead; in addition, if any 17472of the actual argument values are constant, their known values may 17473permit simplifications at compile time so that not all of the inline 17474function's code needs to be included. The effect on code size is less 17475predictable; object code may be larger or smaller with function 17476inlining, depending on the particular case. Inlining of functions is an 17477optimization and it really "works" only in optimizing compilation. If 17478you don't use `-O', no function is really inline. 17479 17480 Inline functions are included in the ISO C99 standard, but there are 17481currently substantial differences between what GCC implements and what 17482the ISO C99 standard requires. GCC will fully support C99 inline 17483functions in version 4.3. The traditional GCC handling of inline 17484functions will still be available with `-std=gnu89', `-fgnu89-inline' 17485or when `gnu_inline' attribute is present on all inline declarations. 17486The preprocessor macros `__GNUC_GNU_INLINE__' and 17487`__GNUC_STDC_INLINE__' may be used to determine the handling of 17488`inline' during a particular compilation (*note Common Predefined 17489Macros: (cpp)Common Predefined Macros.). 17490 17491 To declare a function inline, use the `inline' keyword in its 17492declaration, like this: 17493 17494 inline int 17495 inc (int *a) 17496 { 17497 (*a)++; 17498 } 17499 17500 (If you are writing a header file to be included in ISO C programs, 17501write `__inline__' instead of `inline'. *Note Alternate Keywords::.) 17502You can also make all "simple enough" functions inline with the option 17503`-finline-functions'. 17504 17505 Note that certain usages in a function definition can make it 17506unsuitable for inline substitution. Among these usages are: use of 17507varargs, use of alloca, use of variable sized data types (*note 17508Variable Length::), use of computed goto (*note Labels as Values::), 17509use of nonlocal goto, and nested functions (*note Nested Functions::). 17510Using `-Winline' will warn when a function marked `inline' could not be 17511substituted, and will give the reason for the failure. 17512 17513 Note that in C and Objective-C, unlike C++, the `inline' keyword does 17514not affect the linkage of the function. 17515 17516 GCC automatically inlines member functions defined within the class 17517body of C++ programs even if they are not explicitly declared `inline'. 17518(You can override this with `-fno-default-inline'; *note Options 17519Controlling C++ Dialect: C++ Dialect Options.) 17520 17521 When a function is both inline and `static', if all calls to the 17522function are integrated into the caller, and the function's address is 17523never used, then the function's own assembler code is never referenced. 17524In this case, GCC does not actually output assembler code for the 17525function, unless you specify the option `-fkeep-inline-functions'. 17526Some calls cannot be integrated for various reasons (in particular, 17527calls that precede the function's definition cannot be integrated, and 17528neither can recursive calls within the definition). If there is a 17529nonintegrated call, then the function is compiled to assembler code as 17530usual. The function must also be compiled as usual if the program 17531refers to its address, because that can't be inlined. 17532 17533 When an inline function is not `static', then the compiler must assume 17534that there may be calls from other source files; since a global symbol 17535can be defined only once in any program, the function must not be 17536defined in the other source files, so the calls therein cannot be 17537integrated. Therefore, a non-`static' inline function is always 17538compiled on its own in the usual fashion. 17539 17540 If you specify both `inline' and `extern' in the function definition, 17541then the definition is used only for inlining. In no case is the 17542function compiled on its own, not even if you refer to its address 17543explicitly. Such an address becomes an external reference, as if you 17544had only declared the function, and had not defined it. 17545 17546 This combination of `inline' and `extern' has almost the effect of a 17547macro. The way to use it is to put a function definition in a header 17548file with these keywords, and put another copy of the definition 17549(lacking `inline' and `extern') in a library file. The definition in 17550the header file will cause most calls to the function to be inlined. 17551If any uses of the function remain, they will refer to the single copy 17552in the library. 17553 17554 Since GCC 4.3 will implement ISO C99 semantics for inline functions, 17555it is simplest to use `static inline' only to guarantee compatibility. 17556(The existing semantics will remain available when `-std=gnu89' is 17557specified, but eventually the default will be `-std=gnu99'; that will 17558implement the C99 semantics, though it does not do so in versions of 17559GCC before 4.3. After the default changes, the existing semantics will 17560still be available via the `-fgnu89-inline' option or the `gnu_inline' 17561function attribute.) 17562 17563 GCC does not inline any functions when not optimizing unless you 17564specify the `always_inline' attribute for the function, like this: 17565 17566 /* Prototype. */ 17567 inline void foo (const char) __attribute__((always_inline)); 17568 17569 17570File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions 17571 175725.35 Assembler Instructions with C Expression Operands 17573====================================================== 17574 17575In an assembler instruction using `asm', you can specify the operands 17576of the instruction using C expressions. This means you need not guess 17577which registers or memory locations will contain the data you want to 17578use. 17579 17580 You must specify an assembler instruction template much like what 17581appears in a machine description, plus an operand constraint string for 17582each operand. 17583 17584 For example, here is how to use the 68881's `fsinx' instruction: 17585 17586 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 17587 17588Here `angle' is the C expression for the input operand while `result' 17589is that of the output operand. Each has `"f"' as its operand 17590constraint, saying that a floating point register is required. The `=' 17591in `=f' indicates that the operand is an output; all output operands' 17592constraints must use `='. The constraints use the same language used 17593in the machine description (*note Constraints::). 17594 17595 Each operand is described by an operand-constraint string followed by 17596the C expression in parentheses. A colon separates the assembler 17597template from the first output operand and another separates the last 17598output operand from the first input, if any. Commas separate the 17599operands within each group. The total number of operands is currently 17600limited to 30; this limitation may be lifted in some future version of 17601GCC. 17602 17603 If there are no output operands but there are input operands, you must 17604place two consecutive colons surrounding the place where the output 17605operands would go. 17606 17607 As of GCC version 3.1, it is also possible to specify input and output 17608operands using symbolic names which can be referenced within the 17609assembler code. These names are specified inside square brackets 17610preceding the constraint string, and can be referenced inside the 17611assembler code using `%[NAME]' instead of a percentage sign followed by 17612the operand number. Using named operands the above example could look 17613like: 17614 17615 asm ("fsinx %[angle],%[output]" 17616 : [output] "=f" (result) 17617 : [angle] "f" (angle)); 17618 17619Note that the symbolic operand names have no relation whatsoever to 17620other C identifiers. You may use any name you like, even those of 17621existing C symbols, but you must ensure that no two operands within the 17622same assembler construct use the same symbolic name. 17623 17624 Output operand expressions must be lvalues; the compiler can check 17625this. The input operands need not be lvalues. The compiler cannot 17626check whether the operands have data types that are reasonable for the 17627instruction being executed. It does not parse the assembler instruction 17628template and does not know what it means or even whether it is valid 17629assembler input. The extended `asm' feature is most often used for 17630machine instructions the compiler itself does not know exist. If the 17631output expression cannot be directly addressed (for example, it is a 17632bit-field), your constraint must allow a register. In that case, GCC 17633will use the register as the output of the `asm', and then store that 17634register into the output. 17635 17636 The ordinary output operands must be write-only; GCC will assume that 17637the values in these operands before the instruction are dead and need 17638not be generated. Extended asm supports input-output or read-write 17639operands. Use the constraint character `+' to indicate such an operand 17640and list it with the output operands. You should only use read-write 17641operands when the constraints for the operand (or the operand in which 17642only some of the bits are to be changed) allow a register. 17643 17644 You may, as an alternative, logically split its function into two 17645separate operands, one input operand and one write-only output operand. 17646The connection between them is expressed by constraints which say they 17647need to be in the same location when the instruction executes. You can 17648use the same C expression for both operands, or different expressions. 17649For example, here we write the (fictitious) `combine' instruction with 17650`bar' as its read-only source operand and `foo' as its read-write 17651destination: 17652 17653 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 17654 17655The constraint `"0"' for operand 1 says that it must occupy the same 17656location as operand 0. A number in constraint is allowed only in an 17657input operand and it must refer to an output operand. 17658 17659 Only a number in the constraint can guarantee that one operand will be 17660in the same place as another. The mere fact that `foo' is the value of 17661both operands is not enough to guarantee that they will be in the same 17662place in the generated assembler code. The following would not work 17663reliably: 17664 17665 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 17666 17667 Various optimizations or reloading could cause operands 0 and 1 to be 17668in different registers; GCC knows no reason not to do so. For example, 17669the compiler might find a copy of the value of `foo' in one register and 17670use it for operand 1, but generate the output operand 0 in a different 17671register (copying it afterward to `foo''s own address). Of course, 17672since the register for operand 1 is not even mentioned in the assembler 17673code, the result will not work, but GCC can't tell that. 17674 17675 As of GCC version 3.1, one may write `[NAME]' instead of the operand 17676number for a matching constraint. For example: 17677 17678 asm ("cmoveq %1,%2,%[result]" 17679 : [result] "=r"(result) 17680 : "r" (test), "r"(new), "[result]"(old)); 17681 17682 Sometimes you need to make an `asm' operand be a specific register, 17683but there's no matching constraint letter for that register _by 17684itself_. To force the operand into that register, use a local variable 17685for the operand and specify the register in the variable declaration. 17686*Note Explicit Reg Vars::. Then for the `asm' operand, use any 17687register constraint letter that matches the register: 17688 17689 register int *p1 asm ("r0") = ...; 17690 register int *p2 asm ("r1") = ...; 17691 register int *result asm ("r0"); 17692 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 17693 17694 In the above example, beware that a register that is call-clobbered by 17695the target ABI will be overwritten by any function call in the 17696assignment, including library calls for arithmetic operators. Assuming 17697it is a call-clobbered register, this may happen to `r0' above by the 17698assignment to `p2'. If you have to use such a register, use temporary 17699variables for expressions between the register assignment and use: 17700 17701 int t1 = ...; 17702 register int *p1 asm ("r0") = ...; 17703 register int *p2 asm ("r1") = t1; 17704 register int *result asm ("r0"); 17705 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 17706 17707 Some instructions clobber specific hard registers. To describe this, 17708write a third colon after the input operands, followed by the names of 17709the clobbered hard registers (given as strings). Here is a realistic 17710example for the VAX: 17711 17712 asm volatile ("movc3 %0,%1,%2" 17713 : /* no outputs */ 17714 : "g" (from), "g" (to), "g" (count) 17715 : "r0", "r1", "r2", "r3", "r4", "r5"); 17716 17717 You may not write a clobber description in a way that overlaps with an 17718input or output operand. For example, you may not have an operand 17719describing a register class with one member if you mention that register 17720in the clobber list. Variables declared to live in specific registers 17721(*note Explicit Reg Vars::), and used as asm input or output operands 17722must have no part mentioned in the clobber description. There is no 17723way for you to specify that an input operand is modified without also 17724specifying it as an output operand. Note that if all the output 17725operands you specify are for this purpose (and hence unused), you will 17726then also need to specify `volatile' for the `asm' construct, as 17727described below, to prevent GCC from deleting the `asm' statement as 17728unused. 17729 17730 If you refer to a particular hardware register from the assembler code, 17731you will probably have to list the register after the third colon to 17732tell the compiler the register's value is modified. In some assemblers, 17733the register names begin with `%'; to produce one `%' in the assembler 17734code, you must write `%%' in the input. 17735 17736 If your assembler instruction can alter the condition code register, 17737add `cc' to the list of clobbered registers. GCC on some machines 17738represents the condition codes as a specific hardware register; `cc' 17739serves to name this register. On other machines, the condition code is 17740handled differently, and specifying `cc' has no effect. But it is 17741valid no matter what the machine. 17742 17743 If your assembler instructions access memory in an unpredictable 17744fashion, add `memory' to the list of clobbered registers. This will 17745cause GCC to not keep memory values cached in registers across the 17746assembler instruction and not optimize stores or loads to that memory. 17747You will also want to add the `volatile' keyword if the memory affected 17748is not listed in the inputs or outputs of the `asm', as the `memory' 17749clobber does not count as a side-effect of the `asm'. If you know how 17750large the accessed memory is, you can add it as input or output but if 17751this is not known, you should add `memory'. As an example, if you 17752access ten bytes of a string, you can use a memory input like: 17753 17754 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 17755 17756 Note that in the following example the memory input is necessary, 17757otherwise GCC might optimize the store to `x' away: 17758 int foo () 17759 { 17760 int x = 42; 17761 int *y = &x; 17762 int result; 17763 asm ("magic stuff accessing an 'int' pointed to by '%1'" 17764 "=&d" (r) : "a" (y), "m" (*y)); 17765 return result; 17766 } 17767 17768 You can put multiple assembler instructions together in a single `asm' 17769template, separated by the characters normally used in assembly code 17770for the system. A combination that works in most places is a newline 17771to break the line, plus a tab character to move to the instruction field 17772(written as `\n\t'). Sometimes semicolons can be used, if the 17773assembler allows semicolons as a line-breaking character. Note that 17774some assembler dialects use semicolons to start a comment. The input 17775operands are guaranteed not to use any of the clobbered registers, and 17776neither will the output operands' addresses, so you can read and write 17777the clobbered registers as many times as you like. Here is an example 17778of multiple instructions in a template; it assumes the subroutine 17779`_foo' accepts arguments in registers 9 and 10: 17780 17781 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 17782 : /* no outputs */ 17783 : "g" (from), "g" (to) 17784 : "r9", "r10"); 17785 17786 Unless an output operand has the `&' constraint modifier, GCC may 17787allocate it in the same register as an unrelated input operand, on the 17788assumption the inputs are consumed before the outputs are produced. 17789This assumption may be false if the assembler code actually consists of 17790more than one instruction. In such a case, use `&' for each output 17791operand that may not overlap an input. *Note Modifiers::. 17792 17793 If you want to test the condition code produced by an assembler 17794instruction, you must include a branch and a label in the `asm' 17795construct, as follows: 17796 17797 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 17798 : "g" (result) 17799 : "g" (input)); 17800 17801This assumes your assembler supports local labels, as the GNU assembler 17802and most Unix assemblers do. 17803 17804 Speaking of labels, jumps from one `asm' to another are not supported. 17805The compiler's optimizers do not know about these jumps, and therefore 17806they cannot take account of them when deciding how to optimize. 17807 17808 Usually the most convenient way to use these `asm' instructions is to 17809encapsulate them in macros that look like functions. For example, 17810 17811 #define sin(x) \ 17812 ({ double __value, __arg = (x); \ 17813 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 17814 __value; }) 17815 17816Here the variable `__arg' is used to make sure that the instruction 17817operates on a proper `double' value, and to accept only those arguments 17818`x' which can convert automatically to a `double'. 17819 17820 Another way to make sure the instruction operates on the correct data 17821type is to use a cast in the `asm'. This is different from using a 17822variable `__arg' in that it converts more different types. For 17823example, if the desired type were `int', casting the argument to `int' 17824would accept a pointer with no complaint, while assigning the argument 17825to an `int' variable named `__arg' would warn about using a pointer 17826unless the caller explicitly casts it. 17827 17828 If an `asm' has output operands, GCC assumes for optimization purposes 17829the instruction has no side effects except to change the output 17830operands. This does not mean instructions with a side effect cannot be 17831used, but you must be careful, because the compiler may eliminate them 17832if the output operands aren't used, or move them out of loops, or 17833replace two with one if they constitute a common subexpression. Also, 17834if your instruction does have a side effect on a variable that otherwise 17835appears not to change, the old value of the variable may be reused later 17836if it happens to be found in a register. 17837 17838 You can prevent an `asm' instruction from being deleted by writing the 17839keyword `volatile' after the `asm'. For example: 17840 17841 #define get_and_set_priority(new) \ 17842 ({ int __old; \ 17843 asm volatile ("get_and_set_priority %0, %1" \ 17844 : "=g" (__old) : "g" (new)); \ 17845 __old; }) 17846 17847The `volatile' keyword indicates that the instruction has important 17848side-effects. GCC will not delete a volatile `asm' if it is reachable. 17849(The instruction can still be deleted if GCC can prove that 17850control-flow will never reach the location of the instruction.) Note 17851that even a volatile `asm' instruction can be moved relative to other 17852code, including across jump instructions. For example, on many targets 17853there is a system register which can be set to control the rounding 17854mode of floating point operations. You might try setting it with a 17855volatile `asm', like this PowerPC example: 17856 17857 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 17858 sum = x + y; 17859 17860This will not work reliably, as the compiler may move the addition back 17861before the volatile `asm'. To make it work you need to add an 17862artificial dependency to the `asm' referencing a variable in the code 17863you don't want moved, for example: 17864 17865 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 17866 sum = x + y; 17867 17868 Similarly, you can't expect a sequence of volatile `asm' instructions 17869to remain perfectly consecutive. If you want consecutive output, use a 17870single `asm'. Also, GCC will perform some optimizations across a 17871volatile `asm' instruction; GCC does not "forget everything" when it 17872encounters a volatile `asm' instruction the way some other compilers do. 17873 17874 An `asm' instruction without any output operands will be treated 17875identically to a volatile `asm' instruction. 17876 17877 It is a natural idea to look for a way to give access to the condition 17878code left by the assembler instruction. However, when we attempted to 17879implement this, we found no way to make it work reliably. The problem 17880is that output operands might need reloading, which would result in 17881additional following "store" instructions. On most machines, these 17882instructions would alter the condition code before there was time to 17883test it. This problem doesn't arise for ordinary "test" and "compare" 17884instructions because they don't have any output operands. 17885 17886 For reasons similar to those described above, it is not possible to 17887give an assembler instruction access to the condition code left by 17888previous instructions. 17889 17890 If you are writing a header file that should be includable in ISO C 17891programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 17892 178935.35.1 Size of an `asm' 17894----------------------- 17895 17896Some targets require that GCC track the size of each instruction used in 17897order to generate correct code. Because the final length of an `asm' 17898is only known by the assembler, GCC must make an estimate as to how big 17899it will be. The estimate is formed by counting the number of 17900statements in the pattern of the `asm' and multiplying that by the 17901length of the longest instruction on that processor. Statements in the 17902`asm' are identified by newline characters and whatever statement 17903separator characters are supported by the assembler; on most processors 17904this is the ``;'' character. 17905 17906 Normally, GCC's estimate is perfectly adequate to ensure that correct 17907code is generated, but it is possible to confuse the compiler if you use 17908pseudo instructions or assembler macros that expand into multiple real 17909instructions or if you use assembler directives that expand to more 17910space in the object file than would be needed for a single instruction. 17911If this happens then the assembler will produce a diagnostic saying that 17912a label is unreachable. 17913 179145.35.2 i386 floating point asm operands 17915--------------------------------------- 17916 17917There are several rules on the usage of stack-like regs in asm_operands 17918insns. These rules apply only to the operands that are stack-like regs: 17919 17920 1. Given a set of input regs that die in an asm_operands, it is 17921 necessary to know which are implicitly popped by the asm, and 17922 which must be explicitly popped by gcc. 17923 17924 An input reg that is implicitly popped by the asm must be 17925 explicitly clobbered, unless it is constrained to match an output 17926 operand. 17927 17928 2. For any input reg that is implicitly popped by an asm, it is 17929 necessary to know how to adjust the stack to compensate for the 17930 pop. If any non-popped input is closer to the top of the 17931 reg-stack than the implicitly popped reg, it would not be possible 17932 to know what the stack looked like--it's not clear how the rest of 17933 the stack "slides up". 17934 17935 All implicitly popped input regs must be closer to the top of the 17936 reg-stack than any input that is not implicitly popped. 17937 17938 It is possible that if an input dies in an insn, reload might use 17939 the input reg for an output reload. Consider this example: 17940 17941 asm ("foo" : "=t" (a) : "f" (b)); 17942 17943 This asm says that input B is not popped by the asm, and that the 17944 asm pushes a result onto the reg-stack, i.e., the stack is one 17945 deeper after the asm than it was before. But, it is possible that 17946 reload will think that it can use the same reg for both the input 17947 and the output, if input B dies in this insn. 17948 17949 If any input operand uses the `f' constraint, all output reg 17950 constraints must use the `&' earlyclobber. 17951 17952 The asm above would be written as 17953 17954 asm ("foo" : "=&t" (a) : "f" (b)); 17955 17956 3. Some operands need to be in particular places on the stack. All 17957 output operands fall in this category--there is no other way to 17958 know which regs the outputs appear in unless the user indicates 17959 this in the constraints. 17960 17961 Output operands must specifically indicate which reg an output 17962 appears in after an asm. `=f' is not allowed: the operand 17963 constraints must select a class with a single reg. 17964 17965 4. Output operands may not be "inserted" between existing stack regs. 17966 Since no 387 opcode uses a read/write operand, all output operands 17967 are dead before the asm_operands, and are pushed by the 17968 asm_operands. It makes no sense to push anywhere but the top of 17969 the reg-stack. 17970 17971 Output operands must start at the top of the reg-stack: output 17972 operands may not "skip" a reg. 17973 17974 5. Some asm statements may need extra stack space for internal 17975 calculations. This can be guaranteed by clobbering stack registers 17976 unrelated to the inputs and outputs. 17977 17978 17979 Here are a couple of reasonable asms to want to write. This asm takes 17980one input, which is internally popped, and produces two outputs. 17981 17982 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 17983 17984 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 17985and replaces them with one output. The user must code the `st(1)' 17986clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 17987 17988 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 17989 17990 17991File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 17992 179935.36 Constraints for `asm' Operands 17994=================================== 17995 17996Here are specific details on what constraint letters you can use with 17997`asm' operands. Constraints can say whether an operand may be in a 17998register, and which kinds of register; whether the operand can be a 17999memory reference, and which kinds of address; whether the operand may 18000be an immediate constant, and which possible values it may have. 18001Constraints can also require two operands to match. 18002 18003* Menu: 18004 18005* Simple Constraints:: Basic use of constraints. 18006* Multi-Alternative:: When an insn has two alternative constraint-patterns. 18007* Modifiers:: More precise control over effects of constraints. 18008* Machine Constraints:: Special constraints for some particular machines. 18009 18010 18011File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 18012 180135.36.1 Simple Constraints 18014------------------------- 18015 18016The simplest kind of constraint is a string full of letters, each of 18017which describes one kind of operand that is permitted. Here are the 18018letters that are allowed: 18019 18020whitespace 18021 Whitespace characters are ignored and can be inserted at any 18022 position except the first. This enables each alternative for 18023 different operands to be visually aligned in the machine 18024 description even if they have different number of constraints and 18025 modifiers. 18026 18027`m' 18028 A memory operand is allowed, with any kind of address that the 18029 machine supports in general. 18030 18031`o' 18032 A memory operand is allowed, but only if the address is 18033 "offsettable". This means that adding a small integer (actually, 18034 the width in bytes of the operand, as determined by its machine 18035 mode) may be added to the address and the result is also a valid 18036 memory address. 18037 18038 For example, an address which is constant is offsettable; so is an 18039 address that is the sum of a register and a constant (as long as a 18040 slightly larger constant is also within the range of 18041 address-offsets supported by the machine); but an autoincrement or 18042 autodecrement address is not offsettable. More complicated 18043 indirect/indexed addresses may or may not be offsettable depending 18044 on the other addressing modes that the machine supports. 18045 18046 Note that in an output operand which can be matched by another 18047 operand, the constraint letter `o' is valid only when accompanied 18048 by both `<' (if the target machine has predecrement addressing) 18049 and `>' (if the target machine has preincrement addressing). 18050 18051`V' 18052 A memory operand that is not offsettable. In other words, 18053 anything that would fit the `m' constraint but not the `o' 18054 constraint. 18055 18056`<' 18057 A memory operand with autodecrement addressing (either 18058 predecrement or postdecrement) is allowed. 18059 18060`>' 18061 A memory operand with autoincrement addressing (either 18062 preincrement or postincrement) is allowed. 18063 18064`r' 18065 A register operand is allowed provided that it is in a general 18066 register. 18067 18068`i' 18069 An immediate integer operand (one with constant value) is allowed. 18070 This includes symbolic constants whose values will be known only at 18071 assembly time or later. 18072 18073`n' 18074 An immediate integer operand with a known numeric value is allowed. 18075 Many systems cannot support assembly-time constants for operands 18076 less than a word wide. Constraints for these operands should use 18077 `n' rather than `i'. 18078 18079`I', `J', `K', ... `P' 18080 Other letters in the range `I' through `P' may be defined in a 18081 machine-dependent fashion to permit immediate integer operands with 18082 explicit integer values in specified ranges. For example, on the 18083 68000, `I' is defined to stand for the range of values 1 to 8. 18084 This is the range permitted as a shift count in the shift 18085 instructions. 18086 18087`E' 18088 An immediate floating operand (expression code `const_double') is 18089 allowed, but only if the target floating point format is the same 18090 as that of the host machine (on which the compiler is running). 18091 18092`F' 18093 An immediate floating operand (expression code `const_double' or 18094 `const_vector') is allowed. 18095 18096`G', `H' 18097 `G' and `H' may be defined in a machine-dependent fashion to 18098 permit immediate floating operands in particular ranges of values. 18099 18100`s' 18101 An immediate integer operand whose value is not an explicit 18102 integer is allowed. 18103 18104 This might appear strange; if an insn allows a constant operand 18105 with a value not known at compile time, it certainly must allow 18106 any known value. So why use `s' instead of `i'? Sometimes it 18107 allows better code to be generated. 18108 18109 For example, on the 68000 in a fullword instruction it is possible 18110 to use an immediate operand; but if the immediate value is between 18111 -128 and 127, better code results from loading the value into a 18112 register and using the register. This is because the load into 18113 the register can be done with a `moveq' instruction. We arrange 18114 for this to happen by defining the letter `K' to mean "any integer 18115 outside the range -128 to 127", and then specifying `Ks' in the 18116 operand constraints. 18117 18118`g' 18119 Any register, memory or immediate integer operand is allowed, 18120 except for registers that are not general registers. 18121 18122`X' 18123 Any operand whatsoever is allowed. 18124 18125`0', `1', `2', ... `9' 18126 An operand that matches the specified operand number is allowed. 18127 If a digit is used together with letters within the same 18128 alternative, the digit should come last. 18129 18130 This number is allowed to be more than a single digit. If multiple 18131 digits are encountered consecutively, they are interpreted as a 18132 single decimal integer. There is scant chance for ambiguity, 18133 since to-date it has never been desirable that `10' be interpreted 18134 as matching either operand 1 _or_ operand 0. Should this be 18135 desired, one can use multiple alternatives instead. 18136 18137 This is called a "matching constraint" and what it really means is 18138 that the assembler has only a single operand that fills two roles 18139 which `asm' distinguishes. For example, an add instruction uses 18140 two input operands and an output operand, but on most CISC 18141 machines an add instruction really has only two operands, one of 18142 them an input-output operand: 18143 18144 addl #35,r12 18145 18146 Matching constraints are used in these circumstances. More 18147 precisely, the two operands that match must include one input-only 18148 operand and one output-only operand. Moreover, the digit must be a 18149 smaller number than the number of the operand that uses it in the 18150 constraint. 18151 18152`p' 18153 An operand that is a valid memory address is allowed. This is for 18154 "load address" and "push address" instructions. 18155 18156 `p' in the constraint must be accompanied by `address_operand' as 18157 the predicate in the `match_operand'. This predicate interprets 18158 the mode specified in the `match_operand' as the mode of the memory 18159 reference for which the address would be valid. 18160 18161OTHER-LETTERS 18162 Other letters can be defined in machine-dependent fashion to stand 18163 for particular classes of registers or other arbitrary operand 18164 types. `d', `a' and `f' are defined on the 68000/68020 to stand 18165 for data, address and floating point registers. 18166 18167 18168File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 18169 181705.36.2 Multiple Alternative Constraints 18171--------------------------------------- 18172 18173Sometimes a single instruction has multiple alternative sets of possible 18174operands. For example, on the 68000, a logical-or instruction can 18175combine register or an immediate value into memory, or it can combine 18176any kind of operand into a register; but it cannot combine one memory 18177location into another. 18178 18179 These constraints are represented as multiple alternatives. An 18180alternative can be described by a series of letters for each operand. 18181The overall constraint for an operand is made from the letters for this 18182operand from the first alternative, a comma, the letters for this 18183operand from the second alternative, a comma, and so on until the last 18184alternative. 18185 18186 If all the operands fit any one alternative, the instruction is valid. 18187Otherwise, for each alternative, the compiler counts how many 18188instructions must be added to copy the operands so that that 18189alternative applies. The alternative requiring the least copying is 18190chosen. If two alternatives need the same amount of copying, the one 18191that comes first is chosen. These choices can be altered with the `?' 18192and `!' characters: 18193 18194`?' 18195 Disparage slightly the alternative that the `?' appears in, as a 18196 choice when no alternative applies exactly. The compiler regards 18197 this alternative as one unit more costly for each `?' that appears 18198 in it. 18199 18200`!' 18201 Disparage severely the alternative that the `!' appears in. This 18202 alternative can still be used if it fits without reloading, but if 18203 reloading is needed, some other alternative will be used. 18204 18205 18206File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 18207 182085.36.3 Constraint Modifier Characters 18209------------------------------------- 18210 18211Here are constraint modifier characters. 18212 18213`=' 18214 Means that this operand is write-only for this instruction: the 18215 previous value is discarded and replaced by output data. 18216 18217`+' 18218 Means that this operand is both read and written by the 18219 instruction. 18220 18221 When the compiler fixes up the operands to satisfy the constraints, 18222 it needs to know which operands are inputs to the instruction and 18223 which are outputs from it. `=' identifies an output; `+' 18224 identifies an operand that is both input and output; all other 18225 operands are assumed to be input only. 18226 18227 If you specify `=' or `+' in a constraint, you put it in the first 18228 character of the constraint string. 18229 18230`&' 18231 Means (in a particular alternative) that this operand is an 18232 "earlyclobber" operand, which is modified before the instruction is 18233 finished using the input operands. Therefore, this operand may 18234 not lie in a register that is used as an input operand or as part 18235 of any memory address. 18236 18237 `&' applies only to the alternative in which it is written. In 18238 constraints with multiple alternatives, sometimes one alternative 18239 requires `&' while others do not. See, for example, the `movdf' 18240 insn of the 68000. 18241 18242 An input operand can be tied to an earlyclobber operand if its only 18243 use as an input occurs before the early result is written. Adding 18244 alternatives of this form often allows GCC to produce better code 18245 when only some of the inputs can be affected by the earlyclobber. 18246 See, for example, the `mulsi3' insn of the ARM. 18247 18248 `&' does not obviate the need to write `='. 18249 18250`%' 18251 Declares the instruction to be commutative for this operand and the 18252 following operand. This means that the compiler may interchange 18253 the two operands if that is the cheapest way to make all operands 18254 fit the constraints. GCC can only handle one commutative pair in 18255 an asm; if you use more, the compiler may fail. Note that you 18256 need not use the modifier if the two alternatives are strictly 18257 identical; this would only waste time in the reload pass. The 18258 modifier is not operational after register allocation, so the 18259 result of `define_peephole2' and `define_split's performed after 18260 reload cannot rely on `%' to make the intended insn match. 18261 18262`#' 18263 Says that all following characters, up to the next comma, are to be 18264 ignored as a constraint. They are significant only for choosing 18265 register preferences. 18266 18267`*' 18268 Says that the following character should be ignored when choosing 18269 register preferences. `*' has no effect on the meaning of the 18270 constraint as a constraint, and no effect on reloading. 18271 18272 18273 18274File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 18275 182765.36.4 Constraints for Particular Machines 18277------------------------------------------ 18278 18279Whenever possible, you should use the general-purpose constraint letters 18280in `asm' arguments, since they will convey meaning more readily to 18281people reading your code. Failing that, use the constraint letters 18282that usually have very similar meanings across architectures. The most 18283commonly used constraints are `m' and `r' (for memory and 18284general-purpose registers respectively; *note Simple Constraints::), and 18285`I', usually the letter indicating the most common immediate-constant 18286format. 18287 18288 Each architecture defines additional constraints. These constraints 18289are used by the compiler itself for instruction generation, as well as 18290for `asm' statements; therefore, some of the constraints are not 18291particularly useful for `asm'. Here is a summary of some of the 18292machine-dependent constraints available on some particular machines; it 18293includes both constraints that are useful for `asm' and constraints 18294that aren't. The compiler source file mentioned in the table heading 18295for each architecture is the definitive reference for the meanings of 18296that architecture's constraints. 18297 18298_ARM family--`config/arm/arm.h'_ 18299 18300 `f' 18301 Floating-point register 18302 18303 `w' 18304 VFP floating-point register 18305 18306 `F' 18307 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 18308 4.0, 5.0 or 10.0 18309 18310 `G' 18311 Floating-point constant that would satisfy the constraint `F' 18312 if it were negated 18313 18314 `I' 18315 Integer that is valid as an immediate operand in a data 18316 processing instruction. That is, an integer in the range 0 18317 to 255 rotated by a multiple of 2 18318 18319 `J' 18320 Integer in the range -4095 to 4095 18321 18322 `K' 18323 Integer that satisfies constraint `I' when inverted (ones 18324 complement) 18325 18326 `L' 18327 Integer that satisfies constraint `I' when negated (twos 18328 complement) 18329 18330 `M' 18331 Integer in the range 0 to 32 18332 18333 `Q' 18334 A memory reference where the exact address is in a single 18335 register (``m'' is preferable for `asm' statements) 18336 18337 `R' 18338 An item in the constant pool 18339 18340 `S' 18341 A symbol in the text segment of the current file 18342 18343 `Uv' 18344 A memory reference suitable for VFP load/store insns 18345 (reg+constant offset) 18346 18347 `Uy' 18348 A memory reference suitable for iWMMXt load/store 18349 instructions. 18350 18351 `Uq' 18352 A memory reference suitable for the ARMv4 ldrsb instruction. 18353 18354_AVR family--`config/avr/constraints.md'_ 18355 18356 `l' 18357 Registers from r0 to r15 18358 18359 `a' 18360 Registers from r16 to r23 18361 18362 `d' 18363 Registers from r16 to r31 18364 18365 `w' 18366 Registers from r24 to r31. These registers can be used in 18367 `adiw' command 18368 18369 `e' 18370 Pointer register (r26-r31) 18371 18372 `b' 18373 Base pointer register (r28-r31) 18374 18375 `q' 18376 Stack pointer register (SPH:SPL) 18377 18378 `t' 18379 Temporary register r0 18380 18381 `x' 18382 Register pair X (r27:r26) 18383 18384 `y' 18385 Register pair Y (r29:r28) 18386 18387 `z' 18388 Register pair Z (r31:r30) 18389 18390 `I' 18391 Constant greater than -1, less than 64 18392 18393 `J' 18394 Constant greater than -64, less than 1 18395 18396 `K' 18397 Constant integer 2 18398 18399 `L' 18400 Constant integer 0 18401 18402 `M' 18403 Constant that fits in 8 bits 18404 18405 `N' 18406 Constant integer -1 18407 18408 `O' 18409 Constant integer 8, 16, or 24 18410 18411 `P' 18412 Constant integer 1 18413 18414 `G' 18415 A floating point constant 0.0 18416 18417_CRX Architecture--`config/crx/crx.h'_ 18418 18419 `b' 18420 Registers from r0 to r14 (registers without stack pointer) 18421 18422 `l' 18423 Register r16 (64-bit accumulator lo register) 18424 18425 `h' 18426 Register r17 (64-bit accumulator hi register) 18427 18428 `k' 18429 Register pair r16-r17. (64-bit accumulator lo-hi pair) 18430 18431 `I' 18432 Constant that fits in 3 bits 18433 18434 `J' 18435 Constant that fits in 4 bits 18436 18437 `K' 18438 Constant that fits in 5 bits 18439 18440 `L' 18441 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 18442 18443 `G' 18444 Floating point constant that is legal for store immediate 18445 18446_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 18447 18448 `b' 18449 Address base register 18450 18451 `f' 18452 Floating point register 18453 18454 `v' 18455 Vector register 18456 18457 `h' 18458 `MQ', `CTR', or `LINK' register 18459 18460 `q' 18461 `MQ' register 18462 18463 `c' 18464 `CTR' register 18465 18466 `l' 18467 `LINK' register 18468 18469 `x' 18470 `CR' register (condition register) number 0 18471 18472 `y' 18473 `CR' register (condition register) 18474 18475 `z' 18476 `FPMEM' stack memory for FPR-GPR transfers 18477 18478 `I' 18479 Signed 16-bit constant 18480 18481 `J' 18482 Unsigned 16-bit constant shifted left 16 bits (use `L' 18483 instead for `SImode' constants) 18484 18485 `K' 18486 Unsigned 16-bit constant 18487 18488 `L' 18489 Signed 16-bit constant shifted left 16 bits 18490 18491 `M' 18492 Constant larger than 31 18493 18494 `N' 18495 Exact power of 2 18496 18497 `O' 18498 Zero 18499 18500 `P' 18501 Constant whose negation is a signed 16-bit constant 18502 18503 `G' 18504 Floating point constant that can be loaded into a register 18505 with one instruction per word 18506 18507 `Q' 18508 Memory operand that is an offset from a register (`m' is 18509 preferable for `asm' statements) 18510 18511 `R' 18512 AIX TOC entry 18513 18514 `S' 18515 Constant suitable as a 64-bit mask operand 18516 18517 `T' 18518 Constant suitable as a 32-bit mask operand 18519 18520 `U' 18521 System V Release 4 small data area reference 18522 18523_MorphoTech family--`config/mt/mt.h'_ 18524 18525 `I' 18526 Constant for an arithmetic insn (16-bit signed integer). 18527 18528 `J' 18529 The constant 0. 18530 18531 `K' 18532 Constant for a logical insn (16-bit zero-extended integer). 18533 18534 `L' 18535 A constant that can be loaded with `lui' (i.e. the bottom 16 18536 bits are zero). 18537 18538 `M' 18539 A constant that takes two words to load (i.e. not matched by 18540 `I', `K', or `L'). 18541 18542 `N' 18543 Negative 16-bit constants other than -65536. 18544 18545 `O' 18546 A 15-bit signed integer constant. 18547 18548 `P' 18549 A positive 16-bit constant. 18550 18551_Intel 386--`config/i386/constraints.md'_ 18552 18553 `R' 18554 Legacy register--the eight integer registers available on all 18555 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 18556 18557 `q' 18558 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 18559 `c', and `d'; in 64-bit mode, any integer register. 18560 18561 `Q' 18562 Any register accessible as `Rh': `a', `b', `c', and `d'. 18563 18564 `a' 18565 The `a' register. 18566 18567 `b' 18568 The `b' register. 18569 18570 `c' 18571 The `c' register. 18572 18573 `d' 18574 The `d' register. 18575 18576 `S' 18577 The `si' register. 18578 18579 `D' 18580 The `di' register. 18581 18582 `A' 18583 The `a' and `d' registers, as a pair (for instructions that 18584 return half the result in one and half in the other). 18585 18586 `f' 18587 Any 80387 floating-point (stack) register. 18588 18589 `t' 18590 Top of 80387 floating-point stack (`%st(0)'). 18591 18592 `u' 18593 Second from top of 80387 floating-point stack (`%st(1)'). 18594 18595 `y' 18596 Any MMX register. 18597 18598 `x' 18599 Any SSE register. 18600 18601 `I' 18602 Integer constant in the range 0 ... 31, for 32-bit shifts. 18603 18604 `J' 18605 Integer constant in the range 0 ... 63, for 64-bit shifts. 18606 18607 `K' 18608 Signed 8-bit integer constant. 18609 18610 `L' 18611 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 18612 18613 `M' 18614 0, 1, 2, or 3 (shifts for the `lea' instruction). 18615 18616 `N' 18617 Unsigned 8-bit integer constant (for `in' and `out' 18618 instructions). 18619 18620 `G' 18621 Standard 80387 floating point constant. 18622 18623 `C' 18624 Standard SSE floating point constant. 18625 18626 `e' 18627 32-bit signed integer constant, or a symbolic reference known 18628 to fit that range (for immediate operands in sign-extending 18629 x86-64 instructions). 18630 18631 `Z' 18632 32-bit unsigned integer constant, or a symbolic reference 18633 known to fit that range (for immediate operands in 18634 zero-extending x86-64 instructions). 18635 18636 18637_Intel IA-64--`config/ia64/ia64.h'_ 18638 18639 `a' 18640 General register `r0' to `r3' for `addl' instruction 18641 18642 `b' 18643 Branch register 18644 18645 `c' 18646 Predicate register (`c' as in "conditional") 18647 18648 `d' 18649 Application register residing in M-unit 18650 18651 `e' 18652 Application register residing in I-unit 18653 18654 `f' 18655 Floating-point register 18656 18657 `m' 18658 Memory operand. Remember that `m' allows postincrement and 18659 postdecrement which require printing with `%Pn' on IA-64. 18660 Use `S' to disallow postincrement and postdecrement. 18661 18662 `G' 18663 Floating-point constant 0.0 or 1.0 18664 18665 `I' 18666 14-bit signed integer constant 18667 18668 `J' 18669 22-bit signed integer constant 18670 18671 `K' 18672 8-bit signed integer constant for logical instructions 18673 18674 `L' 18675 8-bit adjusted signed integer constant for compare pseudo-ops 18676 18677 `M' 18678 6-bit unsigned integer constant for shift counts 18679 18680 `N' 18681 9-bit signed integer constant for load and store 18682 postincrements 18683 18684 `O' 18685 The constant zero 18686 18687 `P' 18688 0 or -1 for `dep' instruction 18689 18690 `Q' 18691 Non-volatile memory for floating-point loads and stores 18692 18693 `R' 18694 Integer constant in the range 1 to 4 for `shladd' instruction 18695 18696 `S' 18697 Memory operand except postincrement and postdecrement 18698 18699_FRV--`config/frv/frv.h'_ 18700 18701 `a' 18702 Register in the class `ACC_REGS' (`acc0' to `acc7'). 18703 18704 `b' 18705 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 18706 18707 `c' 18708 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 18709 to `icc3'). 18710 18711 `d' 18712 Register in the class `GPR_REGS' (`gr0' to `gr63'). 18713 18714 `e' 18715 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 18716 registers are excluded not in the class but through the use 18717 of a machine mode larger than 4 bytes. 18718 18719 `f' 18720 Register in the class `FPR_REGS' (`fr0' to `fr63'). 18721 18722 `h' 18723 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 18724 registers are excluded not in the class but through the use 18725 of a machine mode larger than 4 bytes. 18726 18727 `l' 18728 Register in the class `LR_REG' (the `lr' register). 18729 18730 `q' 18731 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 18732 Register numbers not divisible by 4 are excluded not in the 18733 class but through the use of a machine mode larger than 8 18734 bytes. 18735 18736 `t' 18737 Register in the class `ICC_REGS' (`icc0' to `icc3'). 18738 18739 `u' 18740 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 18741 18742 `v' 18743 Register in the class `ICR_REGS' (`cc4' to `cc7'). 18744 18745 `w' 18746 Register in the class `FCR_REGS' (`cc0' to `cc3'). 18747 18748 `x' 18749 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 18750 Register numbers not divisible by 4 are excluded not in the 18751 class but through the use of a machine mode larger than 8 18752 bytes. 18753 18754 `z' 18755 Register in the class `SPR_REGS' (`lcr' and `lr'). 18756 18757 `A' 18758 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 18759 18760 `B' 18761 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 18762 18763 `C' 18764 Register in the class `CR_REGS' (`cc0' to `cc7'). 18765 18766 `G' 18767 Floating point constant zero 18768 18769 `I' 18770 6-bit signed integer constant 18771 18772 `J' 18773 10-bit signed integer constant 18774 18775 `L' 18776 16-bit signed integer constant 18777 18778 `M' 18779 16-bit unsigned integer constant 18780 18781 `N' 18782 12-bit signed integer constant that is negative--i.e. in the 18783 range of -2048 to -1 18784 18785 `O' 18786 Constant zero 18787 18788 `P' 18789 12-bit signed integer constant that is greater than 18790 zero--i.e. in the range of 1 to 2047. 18791 18792 18793_Blackfin family--`config/bfin/bfin.h'_ 18794 18795 `a' 18796 P register 18797 18798 `d' 18799 D register 18800 18801 `z' 18802 A call clobbered P register. 18803 18804 `D' 18805 Even-numbered D register 18806 18807 `W' 18808 Odd-numbered D register 18809 18810 `e' 18811 Accumulator register. 18812 18813 `A' 18814 Even-numbered accumulator register. 18815 18816 `B' 18817 Odd-numbered accumulator register. 18818 18819 `b' 18820 I register 18821 18822 `v' 18823 B register 18824 18825 `f' 18826 M register 18827 18828 `c' 18829 Registers used for circular buffering, i.e. I, B, or L 18830 registers. 18831 18832 `C' 18833 The CC register. 18834 18835 `t' 18836 LT0 or LT1. 18837 18838 `k' 18839 LC0 or LC1. 18840 18841 `u' 18842 LB0 or LB1. 18843 18844 `x' 18845 Any D, P, B, M, I or L register. 18846 18847 `y' 18848 Additional registers typically used only in prologues and 18849 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 18850 USP. 18851 18852 `w' 18853 Any register except accumulators or CC. 18854 18855 `Ksh' 18856 Signed 16 bit integer (in the range -32768 to 32767) 18857 18858 `Kuh' 18859 Unsigned 16 bit integer (in the range 0 to 65535) 18860 18861 `Ks7' 18862 Signed 7 bit integer (in the range -64 to 63) 18863 18864 `Ku7' 18865 Unsigned 7 bit integer (in the range 0 to 127) 18866 18867 `Ku5' 18868 Unsigned 5 bit integer (in the range 0 to 31) 18869 18870 `Ks4' 18871 Signed 4 bit integer (in the range -8 to 7) 18872 18873 `Ks3' 18874 Signed 3 bit integer (in the range -3 to 4) 18875 18876 `Ku3' 18877 Unsigned 3 bit integer (in the range 0 to 7) 18878 18879 `PN' 18880 Constant N, where N is a single-digit constant in the range 0 18881 to 4. 18882 18883 `M1' 18884 Constant 255. 18885 18886 `M2' 18887 Constant 65535. 18888 18889 `J' 18890 An integer constant with exactly a single bit set. 18891 18892 `L' 18893 An integer constant with all bits set except exactly one. 18894 18895 `H' 18896 18897 `Q' 18898 Any SYMBOL_REF. 18899 18900_M32C--`config/m32c/m32c.c'_ 18901 18902 `Rsp' 18903 `Rfb' 18904 `Rsb' 18905 `$sp', `$fb', `$sb'. 18906 18907 `Rcr' 18908 Any control register, when they're 16 bits wide (nothing if 18909 control registers are 24 bits wide) 18910 18911 `Rcl' 18912 Any control register, when they're 24 bits wide. 18913 18914 `R0w' 18915 `R1w' 18916 `R2w' 18917 `R3w' 18918 $r0, $r1, $r2, $r3. 18919 18920 `R02' 18921 $r0 or $r2, or $r2r0 for 32 bit values. 18922 18923 `R13' 18924 $r1 or $r3, or $r3r1 for 32 bit values. 18925 18926 `Rdi' 18927 A register that can hold a 64 bit value. 18928 18929 `Rhl' 18930 $r0 or $r1 (registers with addressable high/low bytes) 18931 18932 `R23' 18933 $r2 or $r3 18934 18935 `Raa' 18936 Address registers 18937 18938 `Raw' 18939 Address registers when they're 16 bits wide. 18940 18941 `Ral' 18942 Address registers when they're 24 bits wide. 18943 18944 `Rqi' 18945 Registers that can hold QI values. 18946 18947 `Rad' 18948 Registers that can be used with displacements ($a0, $a1, $sb). 18949 18950 `Rsi' 18951 Registers that can hold 32 bit values. 18952 18953 `Rhi' 18954 Registers that can hold 16 bit values. 18955 18956 `Rhc' 18957 Registers chat can hold 16 bit values, including all control 18958 registers. 18959 18960 `Rra' 18961 $r0 through R1, plus $a0 and $a1. 18962 18963 `Rfl' 18964 The flags register. 18965 18966 `Rmm' 18967 The memory-based pseudo-registers $mem0 through $mem15. 18968 18969 `Rpi' 18970 Registers that can hold pointers (16 bit registers for r8c, 18971 m16c; 24 bit registers for m32cm, m32c). 18972 18973 `Rpa' 18974 Matches multiple registers in a PARALLEL to form a larger 18975 register. Used to match function return values. 18976 18977 `Is3' 18978 -8 ... 7 18979 18980 `IS1' 18981 -128 ... 127 18982 18983 `IS2' 18984 -32768 ... 32767 18985 18986 `IU2' 18987 0 ... 65535 18988 18989 `In4' 18990 -8 ... -1 or 1 ... 8 18991 18992 `In5' 18993 -16 ... -1 or 1 ... 16 18994 18995 `In6' 18996 -32 ... -1 or 1 ... 32 18997 18998 `IM2' 18999 -65536 ... -1 19000 19001 `Ilb' 19002 An 8 bit value with exactly one bit set. 19003 19004 `Ilw' 19005 A 16 bit value with exactly one bit set. 19006 19007 `Sd' 19008 The common src/dest memory addressing modes. 19009 19010 `Sa' 19011 Memory addressed using $a0 or $a1. 19012 19013 `Si' 19014 Memory addressed with immediate addresses. 19015 19016 `Ss' 19017 Memory addressed using the stack pointer ($sp). 19018 19019 `Sf' 19020 Memory addressed using the frame base register ($fb). 19021 19022 `Ss' 19023 Memory addressed using the small base register ($sb). 19024 19025 `S1' 19026 $r1h 19027 19028_MIPS--`config/mips/constraints.md'_ 19029 19030 `d' 19031 An address register. This is equivalent to `r' unless 19032 generating MIPS16 code. 19033 19034 `f' 19035 A floating-point register (if available). 19036 19037 `h' 19038 The `hi' register. 19039 19040 `l' 19041 The `lo' register. 19042 19043 `x' 19044 The `hi' and `lo' registers. 19045 19046 `c' 19047 A register suitable for use in an indirect jump. This will 19048 always be `$25' for `-mabicalls'. 19049 19050 `y' 19051 Equivalent to `r'; retained for backwards compatibility. 19052 19053 `z' 19054 A floating-point condition code register. 19055 19056 `I' 19057 A signed 16-bit constant (for arithmetic instructions). 19058 19059 `J' 19060 Integer zero. 19061 19062 `K' 19063 An unsigned 16-bit constant (for logic instructions). 19064 19065 `L' 19066 A signed 32-bit constant in which the lower 16 bits are zero. 19067 Such constants can be loaded using `lui'. 19068 19069 `M' 19070 A constant that cannot be loaded using `lui', `addiu' or 19071 `ori'. 19072 19073 `N' 19074 A constant in the range -65535 to -1 (inclusive). 19075 19076 `O' 19077 A signed 15-bit constant. 19078 19079 `P' 19080 A constant in the range 1 to 65535 (inclusive). 19081 19082 `G' 19083 Floating-point zero. 19084 19085 `R' 19086 An address that can be used in a non-macro load or store. 19087 19088_Motorola 680x0--`config/m68k/m68k.h'_ 19089 19090 `a' 19091 Address register 19092 19093 `d' 19094 Data register 19095 19096 `f' 19097 68881 floating-point register, if available 19098 19099 `I' 19100 Integer in the range 1 to 8 19101 19102 `J' 19103 16-bit signed number 19104 19105 `K' 19106 Signed number whose magnitude is greater than 0x80 19107 19108 `L' 19109 Integer in the range -8 to -1 19110 19111 `M' 19112 Signed number whose magnitude is greater than 0x100 19113 19114 `G' 19115 Floating point constant that is not a 68881 constant 19116 19117_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 19118 19119 `a' 19120 Register `a' 19121 19122 `b' 19123 Register `b' 19124 19125 `d' 19126 Register `d' 19127 19128 `q' 19129 An 8-bit register 19130 19131 `t' 19132 Temporary soft register _.tmp 19133 19134 `u' 19135 A soft register _.d1 to _.d31 19136 19137 `w' 19138 Stack pointer register 19139 19140 `x' 19141 Register `x' 19142 19143 `y' 19144 Register `y' 19145 19146 `z' 19147 Pseudo register `z' (replaced by `x' or `y' at the end) 19148 19149 `A' 19150 An address register: x, y or z 19151 19152 `B' 19153 An address register: x or y 19154 19155 `D' 19156 Register pair (x:d) to form a 32-bit value 19157 19158 `L' 19159 Constants in the range -65536 to 65535 19160 19161 `M' 19162 Constants whose 16-bit low part is zero 19163 19164 `N' 19165 Constant integer 1 or -1 19166 19167 `O' 19168 Constant integer 16 19169 19170 `P' 19171 Constants in the range -8 to 2 19172 19173 19174_SPARC--`config/sparc/sparc.h'_ 19175 19176 `f' 19177 Floating-point register on the SPARC-V8 architecture and 19178 lower floating-point register on the SPARC-V9 architecture. 19179 19180 `e' 19181 Floating-point register. It is equivalent to `f' on the 19182 SPARC-V8 architecture and contains both lower and upper 19183 floating-point registers on the SPARC-V9 architecture. 19184 19185 `c' 19186 Floating-point condition code register. 19187 19188 `d' 19189 Lower floating-point register. It is only valid on the 19190 SPARC-V9 architecture when the Visual Instruction Set is 19191 available. 19192 19193 `b' 19194 Floating-point register. It is only valid on the SPARC-V9 19195 architecture when the Visual Instruction Set is available. 19196 19197 `h' 19198 64-bit global or out register for the SPARC-V8+ architecture. 19199 19200 `I' 19201 Signed 13-bit constant 19202 19203 `J' 19204 Zero 19205 19206 `K' 19207 32-bit constant with the low 12 bits clear (a constant that 19208 can be loaded with the `sethi' instruction) 19209 19210 `L' 19211 A constant in the range supported by `movcc' instructions 19212 19213 `M' 19214 A constant in the range supported by `movrcc' instructions 19215 19216 `N' 19217 Same as `K', except that it verifies that bits that are not 19218 in the lower 32-bit range are all zero. Must be used instead 19219 of `K' for modes wider than `SImode' 19220 19221 `O' 19222 The constant 4096 19223 19224 `G' 19225 Floating-point zero 19226 19227 `H' 19228 Signed 13-bit constant, sign-extended to 32 or 64 bits 19229 19230 `Q' 19231 Floating-point constant whose integral representation can be 19232 moved into an integer register using a single sethi 19233 instruction 19234 19235 `R' 19236 Floating-point constant whose integral representation can be 19237 moved into an integer register using a single mov instruction 19238 19239 `S' 19240 Floating-point constant whose integral representation can be 19241 moved into an integer register using a high/lo_sum 19242 instruction sequence 19243 19244 `T' 19245 Memory address aligned to an 8-byte boundary 19246 19247 `U' 19248 Even register 19249 19250 `W' 19251 Memory address for `e' constraint registers 19252 19253 `Y' 19254 Vector zero 19255 19256 19257_TMS320C3x/C4x--`config/c4x/c4x.h'_ 19258 19259 `a' 19260 Auxiliary (address) register (ar0-ar7) 19261 19262 `b' 19263 Stack pointer register (sp) 19264 19265 `c' 19266 Standard (32-bit) precision integer register 19267 19268 `f' 19269 Extended (40-bit) precision register (r0-r11) 19270 19271 `k' 19272 Block count register (bk) 19273 19274 `q' 19275 Extended (40-bit) precision low register (r0-r7) 19276 19277 `t' 19278 Extended (40-bit) precision register (r0-r1) 19279 19280 `u' 19281 Extended (40-bit) precision register (r2-r3) 19282 19283 `v' 19284 Repeat count register (rc) 19285 19286 `x' 19287 Index register (ir0-ir1) 19288 19289 `y' 19290 Status (condition code) register (st) 19291 19292 `z' 19293 Data page register (dp) 19294 19295 `G' 19296 Floating-point zero 19297 19298 `H' 19299 Immediate 16-bit floating-point constant 19300 19301 `I' 19302 Signed 16-bit constant 19303 19304 `J' 19305 Signed 8-bit constant 19306 19307 `K' 19308 Signed 5-bit constant 19309 19310 `L' 19311 Unsigned 16-bit constant 19312 19313 `M' 19314 Unsigned 8-bit constant 19315 19316 `N' 19317 Ones complement of unsigned 16-bit constant 19318 19319 `O' 19320 High 16-bit constant (32-bit constant with 16 LSBs zero) 19321 19322 `Q' 19323 Indirect memory reference with signed 8-bit or index register 19324 displacement 19325 19326 `R' 19327 Indirect memory reference with unsigned 5-bit displacement 19328 19329 `S' 19330 Indirect memory reference with 1 bit or index register 19331 displacement 19332 19333 `T' 19334 Direct memory reference 19335 19336 `U' 19337 Symbolic address 19338 19339 19340_S/390 and zSeries--`config/s390/s390.h'_ 19341 19342 `a' 19343 Address register (general purpose register except r0) 19344 19345 `c' 19346 Condition code register 19347 19348 `d' 19349 Data register (arbitrary general purpose register) 19350 19351 `f' 19352 Floating-point register 19353 19354 `I' 19355 Unsigned 8-bit constant (0-255) 19356 19357 `J' 19358 Unsigned 12-bit constant (0-4095) 19359 19360 `K' 19361 Signed 16-bit constant (-32768-32767) 19362 19363 `L' 19364 Value appropriate as displacement. 19365 `(0..4095)' 19366 for short displacement 19367 19368 `(-524288..524287)' 19369 for long displacement 19370 19371 `M' 19372 Constant integer with a value of 0x7fffffff. 19373 19374 `N' 19375 Multiple letter constraint followed by 4 parameter letters. 19376 `0..9:' 19377 number of the part counting from most to least 19378 significant 19379 19380 `H,Q:' 19381 mode of the part 19382 19383 `D,S,H:' 19384 mode of the containing operand 19385 19386 `0,F:' 19387 value of the other parts (F--all bits set) 19388 The constraint matches if the specified part of a constant 19389 has a value different from it's other parts. 19390 19391 `Q' 19392 Memory reference without index register and with short 19393 displacement. 19394 19395 `R' 19396 Memory reference with index register and short displacement. 19397 19398 `S' 19399 Memory reference without index register but with long 19400 displacement. 19401 19402 `T' 19403 Memory reference with index register and long displacement. 19404 19405 `U' 19406 Pointer with short displacement. 19407 19408 `W' 19409 Pointer with long displacement. 19410 19411 `Y' 19412 Shift count operand. 19413 19414 19415_Score family--`config/score/score.h'_ 19416 19417 `d' 19418 Registers from r0 to r32. 19419 19420 `e' 19421 Registers from r0 to r16. 19422 19423 `t' 19424 r8--r11 or r22--r27 registers. 19425 19426 `h' 19427 hi register. 19428 19429 `l' 19430 lo register. 19431 19432 `x' 19433 hi + lo register. 19434 19435 `q' 19436 cnt register. 19437 19438 `y' 19439 lcb register. 19440 19441 `z' 19442 scb register. 19443 19444 `a' 19445 cnt + lcb + scb register. 19446 19447 `c' 19448 cr0--cr15 register. 19449 19450 `b' 19451 cp1 registers. 19452 19453 `f' 19454 cp2 registers. 19455 19456 `i' 19457 cp3 registers. 19458 19459 `j' 19460 cp1 + cp2 + cp3 registers. 19461 19462 `I' 19463 High 16-bit constant (32-bit constant with 16 LSBs zero). 19464 19465 `J' 19466 Unsigned 5 bit integer (in the range 0 to 31). 19467 19468 `K' 19469 Unsigned 16 bit integer (in the range 0 to 65535). 19470 19471 `L' 19472 Signed 16 bit integer (in the range -32768 to 32767). 19473 19474 `M' 19475 Unsigned 14 bit integer (in the range 0 to 16383). 19476 19477 `N' 19478 Signed 14 bit integer (in the range -8192 to 8191). 19479 19480 `Z' 19481 Any SYMBOL_REF. 19482 19483_Xstormy16--`config/stormy16/stormy16.h'_ 19484 19485 `a' 19486 Register r0. 19487 19488 `b' 19489 Register r1. 19490 19491 `c' 19492 Register r2. 19493 19494 `d' 19495 Register r8. 19496 19497 `e' 19498 Registers r0 through r7. 19499 19500 `t' 19501 Registers r0 and r1. 19502 19503 `y' 19504 The carry register. 19505 19506 `z' 19507 Registers r8 and r9. 19508 19509 `I' 19510 A constant between 0 and 3 inclusive. 19511 19512 `J' 19513 A constant that has exactly one bit set. 19514 19515 `K' 19516 A constant that has exactly one bit clear. 19517 19518 `L' 19519 A constant between 0 and 255 inclusive. 19520 19521 `M' 19522 A constant between -255 and 0 inclusive. 19523 19524 `N' 19525 A constant between -3 and 0 inclusive. 19526 19527 `O' 19528 A constant between 1 and 4 inclusive. 19529 19530 `P' 19531 A constant between -4 and -1 inclusive. 19532 19533 `Q' 19534 A memory reference that is a stack push. 19535 19536 `R' 19537 A memory reference that is a stack pop. 19538 19539 `S' 19540 A memory reference that refers to a constant address of known 19541 value. 19542 19543 `T' 19544 The register indicated by Rx (not implemented yet). 19545 19546 `U' 19547 A constant that is not between 2 and 15 inclusive. 19548 19549 `Z' 19550 The constant 0. 19551 19552 19553_Xtensa--`config/xtensa/xtensa.h'_ 19554 19555 `a' 19556 General-purpose 32-bit register 19557 19558 `b' 19559 One-bit boolean register 19560 19561 `A' 19562 MAC16 40-bit accumulator register 19563 19564 `I' 19565 Signed 12-bit integer constant, for use in MOVI instructions 19566 19567 `J' 19568 Signed 8-bit integer constant, for use in ADDI instructions 19569 19570 `K' 19571 Integer constant valid for BccI instructions 19572 19573 `L' 19574 Unsigned constant valid for BccUI instructions 19575 19576 19577 19578 19579File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 19580 195815.37 Controlling Names Used in Assembler Code 19582============================================= 19583 19584You can specify the name to be used in the assembler code for a C 19585function or variable by writing the `asm' (or `__asm__') keyword after 19586the declarator as follows: 19587 19588 int foo asm ("myfoo") = 2; 19589 19590This specifies that the name to be used for the variable `foo' in the 19591assembler code should be `myfoo' rather than the usual `_foo'. 19592 19593 On systems where an underscore is normally prepended to the name of a C 19594function or variable, this feature allows you to define names for the 19595linker that do not start with an underscore. 19596 19597 It does not make sense to use this feature with a non-static local 19598variable since such variables do not have assembler names. If you are 19599trying to put the variable in a particular register, see *Note Explicit 19600Reg Vars::. GCC presently accepts such code with a warning, but will 19601probably be changed to issue an error, rather than a warning, in the 19602future. 19603 19604 You cannot use `asm' in this way in a function _definition_; but you 19605can get the same effect by writing a declaration for the function 19606before its definition and putting `asm' there, like this: 19607 19608 extern func () asm ("FUNC"); 19609 19610 func (x, y) 19611 int x, y; 19612 /* ... */ 19613 19614 It is up to you to make sure that the assembler names you choose do not 19615conflict with any other assembler symbols. Also, you must not use a 19616register name; that would produce completely invalid assembler code. 19617GCC does not as yet have the ability to store static variables in 19618registers. Perhaps that will be added. 19619 19620 19621File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 19622 196235.38 Variables in Specified Registers 19624===================================== 19625 19626GNU C allows you to put a few global variables into specified hardware 19627registers. You can also specify the register in which an ordinary 19628register variable should be allocated. 19629 19630 * Global register variables reserve registers throughout the program. 19631 This may be useful in programs such as programming language 19632 interpreters which have a couple of global variables that are 19633 accessed very often. 19634 19635 * Local register variables in specific registers do not reserve the 19636 registers, except at the point where they are used as input or 19637 output operands in an `asm' statement and the `asm' statement 19638 itself is not deleted. The compiler's data flow analysis is 19639 capable of determining where the specified registers contain live 19640 values, and where they are available for other uses. Stores into 19641 local register variables may be deleted when they appear to be 19642 dead according to dataflow analysis. References to local register 19643 variables may be deleted or moved or simplified. 19644 19645 These local variables are sometimes convenient for use with the 19646 extended `asm' feature (*note Extended Asm::), if you want to 19647 write one output of the assembler instruction directly into a 19648 particular register. (This will work provided the register you 19649 specify fits the constraints specified for that operand in the 19650 `asm'.) 19651 19652* Menu: 19653 19654* Global Reg Vars:: 19655* Local Reg Vars:: 19656 19657 19658File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 19659 196605.38.1 Defining Global Register Variables 19661----------------------------------------- 19662 19663You can define a global register variable in GNU C like this: 19664 19665 register int *foo asm ("a5"); 19666 19667Here `a5' is the name of the register which should be used. Choose a 19668register which is normally saved and restored by function calls on your 19669machine, so that library routines will not clobber it. 19670 19671 Naturally the register name is cpu-dependent, so you would need to 19672conditionalize your program according to cpu type. The register `a5' 19673would be a good choice on a 68000 for a variable of pointer type. On 19674machines with register windows, be sure to choose a "global" register 19675that is not affected magically by the function call mechanism. 19676 19677 In addition, operating systems on one type of cpu may differ in how 19678they name the registers; then you would need additional conditionals. 19679For example, some 68000 operating systems call this register `%a5'. 19680 19681 Eventually there may be a way of asking the compiler to choose a 19682register automatically, but first we need to figure out how it should 19683choose and how to enable you to guide the choice. No solution is 19684evident. 19685 19686 Defining a global register variable in a certain register reserves that 19687register entirely for this use, at least within the current compilation. 19688The register will not be allocated for any other purpose in the 19689functions in the current compilation. The register will not be saved 19690and restored by these functions. Stores into this register are never 19691deleted even if they would appear to be dead, but references may be 19692deleted or moved or simplified. 19693 19694 It is not safe to access the global register variables from signal 19695handlers, or from more than one thread of control, because the system 19696library routines may temporarily use the register for other things 19697(unless you recompile them specially for the task at hand). 19698 19699 It is not safe for one function that uses a global register variable to 19700call another such function `foo' by way of a third function `lose' that 19701was compiled without knowledge of this variable (i.e. in a different 19702source file in which the variable wasn't declared). This is because 19703`lose' might save the register and put some other value there. For 19704example, you can't expect a global register variable to be available in 19705the comparison-function that you pass to `qsort', since `qsort' might 19706have put something else in that register. (If you are prepared to 19707recompile `qsort' with the same global register variable, you can solve 19708this problem.) 19709 19710 If you want to recompile `qsort' or other source files which do not 19711actually use your global register variable, so that they will not use 19712that register for any other purpose, then it suffices to specify the 19713compiler option `-ffixed-REG'. You need not actually add a global 19714register declaration to their source code. 19715 19716 A function which can alter the value of a global register variable 19717cannot safely be called from a function compiled without this variable, 19718because it could clobber the value the caller expects to find there on 19719return. Therefore, the function which is the entry point into the part 19720of the program that uses the global register variable must explicitly 19721save and restore the value which belongs to its caller. 19722 19723 On most machines, `longjmp' will restore to each global register 19724variable the value it had at the time of the `setjmp'. On some 19725machines, however, `longjmp' will not change the value of global 19726register variables. To be portable, the function that called `setjmp' 19727should make other arrangements to save the values of the global register 19728variables, and to restore them in a `longjmp'. This way, the same 19729thing will happen regardless of what `longjmp' does. 19730 19731 All global register variable declarations must precede all function 19732definitions. If such a declaration could appear after function 19733definitions, the declaration would be too late to prevent the register 19734from being used for other purposes in the preceding functions. 19735 19736 Global register variables may not have initial values, because an 19737executable file has no means to supply initial contents for a register. 19738 19739 On the SPARC, there are reports that g3 ... g7 are suitable registers, 19740but certain library functions, such as `getwd', as well as the 19741subroutines for division and remainder, modify g3 and g4. g1 and g2 19742are local temporaries. 19743 19744 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 19745course, it will not do to use more than a few of those. 19746 19747 19748File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 19749 197505.38.2 Specifying Registers for Local Variables 19751----------------------------------------------- 19752 19753You can define a local register variable with a specified register like 19754this: 19755 19756 register int *foo asm ("a5"); 19757 19758Here `a5' is the name of the register which should be used. Note that 19759this is the same syntax used for defining global register variables, 19760but for a local variable it would appear within a function. 19761 19762 Naturally the register name is cpu-dependent, but this is not a 19763problem, since specific registers are most often useful with explicit 19764assembler instructions (*note Extended Asm::). Both of these things 19765generally require that you conditionalize your program according to cpu 19766type. 19767 19768 In addition, operating systems on one type of cpu may differ in how 19769they name the registers; then you would need additional conditionals. 19770For example, some 68000 operating systems call this register `%a5'. 19771 19772 Defining such a register variable does not reserve the register; it 19773remains available for other uses in places where flow control determines 19774the variable's value is not live. 19775 19776 This option does not guarantee that GCC will generate code that has 19777this variable in the register you specify at all times. You may not 19778code an explicit reference to this register in the _assembler 19779instruction template_ part of an `asm' statement and assume it will 19780always refer to this variable. However, using the variable as an `asm' 19781_operand_ guarantees that the specified register is used for the 19782operand. 19783 19784 Stores into local register variables may be deleted when they appear 19785to be dead according to dataflow analysis. References to local 19786register variables may be deleted or moved or simplified. 19787 19788 As for global register variables, it's recommended that you choose a 19789register which is normally saved and restored by function calls on your 19790machine, so that library routines will not clobber it. A common 19791pitfall is to initialize multiple call-clobbered registers with 19792arbitrary expressions, where a function call or library call for an 19793arithmetic operator will overwrite a register value from a previous 19794assignment, for example `r0' below: 19795 register int *p1 asm ("r0") = ...; 19796 register int *p2 asm ("r1") = ...; 19797 In those cases, a solution is to use a temporary variable for each 19798arbitrary expression. *Note Example of asm with clobbered asm reg::. 19799 19800 19801File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 19802 198035.39 Alternate Keywords 19804======================= 19805 19806`-ansi' and the various `-std' options disable certain keywords. This 19807causes trouble when you want to use GNU C extensions, or a 19808general-purpose header file that should be usable by all programs, 19809including ISO C programs. The keywords `asm', `typeof' and `inline' 19810are not available in programs compiled with `-ansi' or `-std' (although 19811`inline' can be used in a program compiled with `-std=c99'). The ISO 19812C99 keyword `restrict' is only available when `-std=gnu99' (which will 19813eventually be the default) or `-std=c99' (or the equivalent 19814`-std=iso9899:1999') is used. 19815 19816 The way to solve these problems is to put `__' at the beginning and 19817end of each problematical keyword. For example, use `__asm__' instead 19818of `asm', and `__inline__' instead of `inline'. 19819 19820 Other C compilers won't accept these alternative keywords; if you want 19821to compile with another compiler, you can define the alternate keywords 19822as macros to replace them with the customary keywords. It looks like 19823this: 19824 19825 #ifndef __GNUC__ 19826 #define __asm__ asm 19827 #endif 19828 19829 `-pedantic' and other options cause warnings for many GNU C extensions. 19830You can prevent such warnings within one expression by writing 19831`__extension__' before the expression. `__extension__' has no effect 19832aside from this. 19833 19834 19835File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 19836 198375.40 Incomplete `enum' Types 19838============================ 19839 19840You can define an `enum' tag without specifying its possible values. 19841This results in an incomplete type, much like what you get if you write 19842`struct foo' without describing the elements. A later declaration 19843which does specify the possible values completes the type. 19844 19845 You can't allocate variables or storage using the type while it is 19846incomplete. However, you can work with pointers to that type. 19847 19848 This extension may not be very useful, but it makes the handling of 19849`enum' more consistent with the way `struct' and `union' are handled. 19850 19851 This extension is not supported by GNU C++. 19852 19853 19854File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 19855 198565.41 Function Names as Strings 19857============================== 19858 19859GCC provides three magic variables which hold the name of the current 19860function, as a string. The first of these is `__func__', which is part 19861of the C99 standard: 19862 19863 The identifier `__func__' is implicitly declared by the translator 19864 as if, immediately following the opening brace of each function 19865 definition, the declaration 19866 static const char __func__[] = "function-name"; 19867 19868 appeared, where function-name is the name of the lexically-enclosing 19869 function. This name is the unadorned name of the function. 19870 19871 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 19872recognize only this name. However, it is not standardized. For 19873maximum portability, we recommend you use `__func__', but provide a 19874fallback definition with the preprocessor: 19875 19876 #if __STDC_VERSION__ < 199901L 19877 # if __GNUC__ >= 2 19878 # define __func__ __FUNCTION__ 19879 # else 19880 # define __func__ "<unknown>" 19881 # endif 19882 #endif 19883 19884 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 19885However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 19886the function as well as its bare name. For example, this program: 19887 19888 extern "C" { 19889 extern int printf (char *, ...); 19890 } 19891 19892 class a { 19893 public: 19894 void sub (int i) 19895 { 19896 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 19897 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 19898 } 19899 }; 19900 19901 int 19902 main (void) 19903 { 19904 a ax; 19905 ax.sub (0); 19906 return 0; 19907 } 19908 19909gives this output: 19910 19911 __FUNCTION__ = sub 19912 __PRETTY_FUNCTION__ = void a::sub(int) 19913 19914 These identifiers are not preprocessor macros. In GCC 3.3 and 19915earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 19916treated as string literals; they could be used to initialize `char' 19917arrays, and they could be concatenated with other string literals. GCC 199183.4 and later treat them as variables, like `__func__'. In C++, 19919`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 19920 19921 19922File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 19923 199245.42 Getting the Return or Frame Address of a Function 19925====================================================== 19926 19927These functions may be used to get information about the callers of a 19928function. 19929 19930 -- Built-in Function: void * __builtin_return_address (unsigned int 19931 LEVEL) 19932 This function returns the return address of the current function, 19933 or of one of its callers. The LEVEL argument is number of frames 19934 to scan up the call stack. A value of `0' yields the return 19935 address of the current function, a value of `1' yields the return 19936 address of the caller of the current function, and so forth. When 19937 inlining the expected behavior is that the function will return 19938 the address of the function that will be returned to. To work 19939 around this behavior use the `noinline' function attribute. 19940 19941 The LEVEL argument must be a constant integer. 19942 19943 On some machines it may be impossible to determine the return 19944 address of any function other than the current one; in such cases, 19945 or when the top of the stack has been reached, this function will 19946 return `0' or a random value. In addition, 19947 `__builtin_frame_address' may be used to determine if the top of 19948 the stack has been reached. 19949 19950 This function should only be used with a nonzero argument for 19951 debugging purposes. 19952 19953 -- Built-in Function: void * __builtin_frame_address (unsigned int 19954 LEVEL) 19955 This function is similar to `__builtin_return_address', but it 19956 returns the address of the function frame rather than the return 19957 address of the function. Calling `__builtin_frame_address' with a 19958 value of `0' yields the frame address of the current function, a 19959 value of `1' yields the frame address of the caller of the current 19960 function, and so forth. 19961 19962 The frame is the area on the stack which holds local variables and 19963 saved registers. The frame address is normally the address of the 19964 first word pushed on to the stack by the function. However, the 19965 exact definition depends upon the processor and the calling 19966 convention. If the processor has a dedicated frame pointer 19967 register, and the function has a frame, then 19968 `__builtin_frame_address' will return the value of the frame 19969 pointer register. 19970 19971 On some machines it may be impossible to determine the frame 19972 address of any function other than the current one; in such cases, 19973 or when the top of the stack has been reached, this function will 19974 return `0' if the first frame pointer is properly initialized by 19975 the startup code. 19976 19977 This function should only be used with a nonzero argument for 19978 debugging purposes. 19979 19980 19981File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 19982 199835.43 Using vector instructions through built-in functions 19984========================================================= 19985 19986On some targets, the instruction set contains SIMD vector instructions 19987that operate on multiple values contained in one large register at the 19988same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions 19989can be used this way. 19990 19991 The first step in using these extensions is to provide the necessary 19992data types. This should be done using an appropriate `typedef': 19993 19994 typedef int v4si __attribute__ ((vector_size (16))); 19995 19996 The `int' type specifies the base type, while the attribute specifies 19997the vector size for the variable, measured in bytes. For example, the 19998declaration above causes the compiler to set the mode for the `v4si' 19999type to be 16 bytes wide and divided into `int' sized units. For a 2000032-bit `int' this means a vector of 4 units of 4 bytes, and the 20001corresponding mode of `foo' will be V4SI. 20002 20003 The `vector_size' attribute is only applicable to integral and float 20004scalars, although arrays, pointers, and function return values are 20005allowed in conjunction with this construct. 20006 20007 All the basic integer types can be used as base types, both as signed 20008and as unsigned: `char', `short', `int', `long', `long long'. In 20009addition, `float' and `double' can be used to build floating-point 20010vector types. 20011 20012 Specifying a combination that is not valid for the current architecture 20013will cause GCC to synthesize the instructions using a narrower mode. 20014For example, if you specify a variable of type `V4SI' and your 20015architecture does not allow for this specific SIMD type, GCC will 20016produce code that uses 4 `SIs'. 20017 20018 The types defined in this manner can be used with a subset of normal C 20019operations. Currently, GCC will allow using the following operators on 20020these types: `+, -, *, /, unary minus, ^, |, &, ~'. 20021 20022 The operations behave like C++ `valarrays'. Addition is defined as 20023the addition of the corresponding elements of the operands. For 20024example, in the code below, each of the 4 elements in A will be added 20025to the corresponding 4 elements in B and the resulting vector will be 20026stored in C. 20027 20028 typedef int v4si __attribute__ ((vector_size (16))); 20029 20030 v4si a, b, c; 20031 20032 c = a + b; 20033 20034 Subtraction, multiplication, division, and the logical operations 20035operate in a similar manner. Likewise, the result of using the unary 20036minus or complement operators on a vector type is a vector whose 20037elements are the negative or complemented values of the corresponding 20038elements in the operand. 20039 20040 You can declare variables and use them in function calls and returns, 20041as well as in assignments and some casts. You can specify a vector 20042type as a return type for a function. Vector types can also be used as 20043function arguments. It is possible to cast from one vector type to 20044another, provided they are of the same size (in fact, you can also cast 20045vectors to and from other datatypes of the same size). 20046 20047 You cannot operate between vectors of different lengths or different 20048signedness without a cast. 20049 20050 A port that supports hardware vector operations, usually provides a set 20051of built-in functions that can be used to operate on vectors. For 20052example, a function to add two vectors and multiply the result by a 20053third could look like this: 20054 20055 v4si f (v4si a, v4si b, v4si c) 20056 { 20057 v4si tmp = __builtin_addv4si (a, b); 20058 return __builtin_mulv4si (tmp, c); 20059 } 20060 20061 20062File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 20063 200645.44 Offsetof 20065============= 20066 20067GCC implements for both C and C++ a syntactic extension to implement 20068the `offsetof' macro. 20069 20070 primary: 20071 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 20072 20073 offsetof_member_designator: 20074 `identifier' 20075 | offsetof_member_designator "." `identifier' 20076 | offsetof_member_designator "[" `expr' "]" 20077 20078 This extension is sufficient such that 20079 20080 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 20081 20082 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 20083dependent. In either case, MEMBER may consist of a single identifier, 20084or a sequence of member accesses and array references. 20085 20086 20087File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 20088 200895.45 Built-in functions for atomic memory access 20090================================================ 20091 20092The following builtins are intended to be compatible with those 20093described in the `Intel Itanium Processor-specific Application Binary 20094Interface', section 7.4. As such, they depart from the normal GCC 20095practice of using the "__builtin_" prefix, and further that they are 20096overloaded such that they work on multiple types. 20097 20098 The definition given in the Intel documentation allows only for the 20099use of the types `int', `long', `long long' as well as their unsigned 20100counterparts. GCC will allow any integral scalar or pointer type that 20101is 1, 2, 4 or 8 bytes in length. 20102 20103 Not all operations are supported by all target processors. If a 20104particular operation cannot be implemented on the target processor, a 20105warning will be generated and a call an external function will be 20106generated. The external function will carry the same name as the 20107builtin, with an additional suffix `_N' where N is the size of the data 20108type. 20109 20110 In most cases, these builtins are considered a "full barrier". That 20111is, no memory operand will be moved across the operation, either 20112forward or backward. Further, instructions will be issued as necessary 20113to prevent the processor from speculating loads across the operation 20114and from queuing stores after the operation. 20115 20116 All of the routines are are described in the Intel documentation to 20117take "an optional list of variables protected by the memory barrier". 20118It's not clear what is meant by that; it could mean that _only_ the 20119following variables are protected, or it could mean that these variables 20120should in addition be protected. At present GCC ignores this list and 20121protects all variables which are globally accessible. If in the future 20122we make some use of this list, an empty list will continue to mean all 20123globally accessible variables. 20124 20125`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 20126`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 20127`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 20128`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 20129`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 20130`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 20131 These builtins perform the operation suggested by the name, and 20132 returns the value that had previously been in memory. That is, 20133 20134 { tmp = *ptr; *ptr OP= value; return tmp; } 20135 { tmp = *ptr; *ptr = ~tmp & value; return tmp; } // nand 20136 20137`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 20138`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 20139`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 20140`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 20141`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 20142`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 20143 These builtins perform the operation suggested by the name, and 20144 return the new value. That is, 20145 20146 { *ptr OP= value; return *ptr; } 20147 { *ptr = ~*ptr & value; return *ptr; } // nand 20148 20149`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 20150`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 20151 These builtins perform an atomic compare and swap. That is, if 20152 the current value of `*PTR' is OLDVAL, then write NEWVAL into 20153 `*PTR'. 20154 20155 The "bool" version returns true if the comparison is successful and 20156 NEWVAL was written. The "val" version returns the contents of 20157 `*PTR' before the operation. 20158 20159`__sync_synchronize (...)' 20160 This builtin issues a full memory barrier. 20161 20162`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 20163 This builtin, as described by Intel, is not a traditional 20164 test-and-set operation, but rather an atomic exchange operation. 20165 It writes VALUE into `*PTR', and returns the previous contents of 20166 `*PTR'. 20167 20168 Many targets have only minimal support for such locks, and do not 20169 support a full exchange operation. In this case, a target may 20170 support reduced functionality here by which the _only_ valid value 20171 to store is the immediate constant 1. The exact value actually 20172 stored in `*PTR' is implementation defined. 20173 20174 This builtin is not a full barrier, but rather an "acquire 20175 barrier". This means that references after the builtin cannot 20176 move to (or be speculated to) before the builtin, but previous 20177 memory stores may not be globally visible yet, and previous memory 20178 loads may not yet be satisfied. 20179 20180`void __sync_lock_release (TYPE *ptr, ...)' 20181 This builtin releases the lock acquired by 20182 `__sync_lock_test_and_set'. Normally this means writing the 20183 constant 0 to `*PTR'. 20184 20185 This builtin is not a full barrier, but rather a "release barrier". 20186 This means that all previous memory stores are globally visible, 20187 and all previous memory loads have been satisfied, but following 20188 memory reads are not prevented from being speculated to before the 20189 barrier. 20190 20191 20192File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 20193 201945.46 Object Size Checking Builtins 20195================================== 20196 20197GCC implements a limited buffer overflow protection mechanism that can 20198prevent some buffer overflow attacks. 20199 20200 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 20201 TYPE) 20202 is a built-in construct that returns a constant number of bytes 20203 from PTR to the end of the object PTR pointer points to (if known 20204 at compile time). `__builtin_object_size' never evaluates its 20205 arguments for side-effects. If there are any side-effects in 20206 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 20207 for TYPE 2 or 3. If there are multiple objects PTR can point to 20208 and all of them are known at compile time, the returned number is 20209 the maximum of remaining byte counts in those objects if TYPE & 2 20210 is 0 and minimum if nonzero. If it is not possible to determine 20211 which objects PTR points to at compile time, 20212 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 20213 1 and `(size_t) 0' for TYPE 2 or 3. 20214 20215 TYPE is an integer constant from 0 to 3. If the least significant 20216 bit is clear, objects are whole variables, if it is set, a closest 20217 surrounding subobject is considered the object a pointer points to. 20218 The second bit determines if maximum or minimum of remaining bytes 20219 is computed. 20220 20221 struct V { char buf1[10]; int b; char buf2[10]; } var; 20222 char *p = &var.buf1[1], *q = &var.b; 20223 20224 /* Here the object p points to is var. */ 20225 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 20226 /* The subobject p points to is var.buf1. */ 20227 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 20228 /* The object q points to is var. */ 20229 assert (__builtin_object_size (q, 0) 20230 == (char *) (&var + 1) - (char *) &var.b); 20231 /* The subobject q points to is var.b. */ 20232 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 20233 20234 There are built-in functions added for many common string operation 20235functions, e.g. for `memcpy' `__builtin___memcpy_chk' built-in is 20236provided. This built-in has an additional last argument, which is the 20237number of bytes remaining in object the DEST argument points to or 20238`(size_t) -1' if the size is not known. 20239 20240 The built-in functions are optimized into the normal string functions 20241like `memcpy' if the last argument is `(size_t) -1' or if it is known 20242at compile time that the destination object will not be overflown. If 20243the compiler can determine at compile time the object will be always 20244overflown, it issues a warning. 20245 20246 The intended use can be e.g. 20247 20248 #undef memcpy 20249 #define bos0(dest) __builtin_object_size (dest, 0) 20250 #define memcpy(dest, src, n) \ 20251 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 20252 20253 char *volatile p; 20254 char buf[10]; 20255 /* It is unknown what object p points to, so this is optimized 20256 into plain memcpy - no checking is possible. */ 20257 memcpy (p, "abcde", n); 20258 /* Destination is known and length too. It is known at compile 20259 time there will be no overflow. */ 20260 memcpy (&buf[5], "abcde", 5); 20261 /* Destination is known, but the length is not known at compile time. 20262 This will result in __memcpy_chk call that can check for overflow 20263 at runtime. */ 20264 memcpy (&buf[5], "abcde", n); 20265 /* Destination is known and it is known at compile time there will 20266 be overflow. There will be a warning and __memcpy_chk call that 20267 will abort the program at runtime. */ 20268 memcpy (&buf[6], "abcde", 5); 20269 20270 Such built-in functions are provided for `memcpy', `mempcpy', 20271`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 20272`strncat'. 20273 20274 There are also checking built-in functions for formatted output 20275functions. 20276 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 20277 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 20278 const char *fmt, ...); 20279 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 20280 va_list ap); 20281 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 20282 const char *fmt, va_list ap); 20283 20284 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 20285functions and can contain implementation specific flags on what 20286additional security measures the checking function might take, such as 20287handling `%n' differently. 20288 20289 The OS argument is the object size S points to, like in the other 20290built-in functions. There is a small difference in the behavior 20291though, if OS is `(size_t) -1', the built-in functions are optimized 20292into the non-checking functions only if FLAG is 0, otherwise the 20293checking function is called with OS argument set to `(size_t) -1'. 20294 20295 In addition to this, there are checking built-in functions 20296`__builtin___printf_chk', `__builtin___vprintf_chk', 20297`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 20298just one additional argument, FLAG, right before format string FMT. If 20299the compiler is able to optimize them to `fputc' etc. functions, it 20300will, otherwise the checking function should be called and the FLAG 20301argument passed to it. 20302 20303 20304File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 20305 203065.47 Other built-in functions provided by GCC 20307============================================= 20308 20309GCC provides a large number of built-in functions other than the ones 20310mentioned above. Some of these are for internal use in the processing 20311of exceptions or variable-length argument lists and will not be 20312documented here because they may change from time to time; we do not 20313recommend general use of these functions. 20314 20315 The remaining functions are provided for optimization purposes. 20316 20317 GCC includes built-in versions of many of the functions in the standard 20318C library. The versions prefixed with `__builtin_' will always be 20319treated as having the same meaning as the C library function even if you 20320specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 20321these functions are only optimized in certain cases; if they are not 20322optimized in a particular case, a call to the library function will be 20323emitted. 20324 20325 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the 20326functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext', 20327`dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl', 20328`ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal', 20329`gamma', `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', 20330`j1l', `j1', `jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10', 20331`printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', `signbit', 20332`signbitf', `signbitl', `significandf', `significandl', `significand', 20333`sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', 20334`strdup', `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', 20335`y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as 20336built-in functions. All these functions have corresponding versions 20337prefixed with `__builtin_', which may be used even in strict C89 mode. 20338 20339 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 20340`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 20341`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 20342`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 20343`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 20344`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 20345`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 20346`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 20347`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 20348`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 20349`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 20350`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 20351`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 20352`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 20353`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 20354`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 20355`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 20356`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 20357`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 20358`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 20359`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 20360`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 20361`remainderf', `remainderl', `remainder', `remquof', `remquol', 20362`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 20363`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 20364`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 20365`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 20366functions except in strict ISO C90 mode (`-ansi' or `-std=c89'). 20367 20368 There are also built-in versions of the ISO C99 functions `acosf', 20369`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 20370`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 20371`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 20372`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 20373`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 20374`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 20375recognized in any mode since ISO C90 reserves these names for the 20376purpose to which ISO C99 puts them. All these functions have 20377corresponding versions prefixed with `__builtin_'. 20378 20379 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 20380`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 20381`iswxdigit', `towlower' and `towupper' are handled as built-in functions 20382except in strict ISO C90 mode (`-ansi' or `-std=c89'). 20383 20384 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 20385`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 20386`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 20387`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 20388`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 20389`log', `malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf', 20390`putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf', 20391`sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn', 20392`strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr', 20393`strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf' 20394are all recognized as built-in functions unless `-fno-builtin' is 20395specified (or `-fno-builtin-FUNCTION' is specified for an individual 20396function). All of these functions have corresponding versions prefixed 20397with `__builtin_'. 20398 20399 GCC provides built-in versions of the ISO C99 floating point comparison 20400macros that avoid raising exceptions for unordered operands. They have 20401the same names as the standard macros ( `isgreater', `isgreaterequal', 20402`isless', `islessequal', `islessgreater', and `isunordered') , with 20403`__builtin_' prefixed. We intend for a library implementor to be able 20404to simply `#define' each standard macro to its built-in equivalent. 20405 20406 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 20407 You can use the built-in function `__builtin_types_compatible_p' to 20408 determine whether two types are the same. 20409 20410 This built-in function returns 1 if the unqualified versions of the 20411 types TYPE1 and TYPE2 (which are types, not expressions) are 20412 compatible, 0 otherwise. The result of this built-in function can 20413 be used in integer constant expressions. 20414 20415 This built-in function ignores top level qualifiers (e.g., `const', 20416 `volatile'). For example, `int' is equivalent to `const int'. 20417 20418 The type `int[]' and `int[5]' are compatible. On the other hand, 20419 `int' and `char *' are not compatible, even if the size of their 20420 types, on the particular architecture are the same. Also, the 20421 amount of pointer indirection is taken into account when 20422 determining similarity. Consequently, `short *' is not similar to 20423 `short **'. Furthermore, two types that are typedefed are 20424 considered compatible if their underlying types are compatible. 20425 20426 An `enum' type is not considered to be compatible with another 20427 `enum' type even if both are compatible with the same integer 20428 type; this is what the C standard specifies. For example, `enum 20429 {foo, bar}' is not similar to `enum {hot, dog}'. 20430 20431 You would typically use this function in code whose execution 20432 varies depending on the arguments' types. For example: 20433 20434 #define foo(x) \ 20435 ({ \ 20436 typeof (x) tmp = (x); \ 20437 if (__builtin_types_compatible_p (typeof (x), long double)) \ 20438 tmp = foo_long_double (tmp); \ 20439 else if (__builtin_types_compatible_p (typeof (x), double)) \ 20440 tmp = foo_double (tmp); \ 20441 else if (__builtin_types_compatible_p (typeof (x), float)) \ 20442 tmp = foo_float (tmp); \ 20443 else \ 20444 abort (); \ 20445 tmp; \ 20446 }) 20447 20448 _Note:_ This construct is only available for C. 20449 20450 20451 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 20452 EXP2) 20453 You can use the built-in function `__builtin_choose_expr' to 20454 evaluate code depending on the value of a constant expression. 20455 This built-in function returns EXP1 if CONST_EXP, which is a 20456 constant expression that must be able to be determined at compile 20457 time, is nonzero. Otherwise it returns 0. 20458 20459 This built-in function is analogous to the `? :' operator in C, 20460 except that the expression returned has its type unaltered by 20461 promotion rules. Also, the built-in function does not evaluate 20462 the expression that was not chosen. For example, if CONST_EXP 20463 evaluates to true, EXP2 is not evaluated even if it has 20464 side-effects. 20465 20466 This built-in function can return an lvalue if the chosen argument 20467 is an lvalue. 20468 20469 If EXP1 is returned, the return type is the same as EXP1's type. 20470 Similarly, if EXP2 is returned, its return type is the same as 20471 EXP2. 20472 20473 Example: 20474 20475 #define foo(x) \ 20476 __builtin_choose_expr ( \ 20477 __builtin_types_compatible_p (typeof (x), double), \ 20478 foo_double (x), \ 20479 __builtin_choose_expr ( \ 20480 __builtin_types_compatible_p (typeof (x), float), \ 20481 foo_float (x), \ 20482 /* The void expression results in a compile-time error \ 20483 when assigning the result to something. */ \ 20484 (void)0)) 20485 20486 _Note:_ This construct is only available for C. Furthermore, the 20487 unused expression (EXP1 or EXP2 depending on the value of 20488 CONST_EXP) may still generate syntax errors. This may change in 20489 future revisions. 20490 20491 20492 -- Built-in Function: int __builtin_constant_p (EXP) 20493 You can use the built-in function `__builtin_constant_p' to 20494 determine if a value is known to be constant at compile-time and 20495 hence that GCC can perform constant-folding on expressions 20496 involving that value. The argument of the function is the value 20497 to test. The function returns the integer 1 if the argument is 20498 known to be a compile-time constant and 0 if it is not known to be 20499 a compile-time constant. A return of 0 does not indicate that the 20500 value is _not_ a constant, but merely that GCC cannot prove it is 20501 a constant with the specified value of the `-O' option. 20502 20503 You would typically use this function in an embedded application 20504 where memory was a critical resource. If you have some complex 20505 calculation, you may want it to be folded if it involves 20506 constants, but need to call a function if it does not. For 20507 example: 20508 20509 #define Scale_Value(X) \ 20510 (__builtin_constant_p (X) \ 20511 ? ((X) * SCALE + OFFSET) : Scale (X)) 20512 20513 You may use this built-in function in either a macro or an inline 20514 function. However, if you use it in an inlined function and pass 20515 an argument of the function as the argument to the built-in, GCC 20516 will never return 1 when you call the inline function with a 20517 string constant or compound literal (*note Compound Literals::) 20518 and will not return 1 when you pass a constant numeric value to 20519 the inline function unless you specify the `-O' option. 20520 20521 You may also use `__builtin_constant_p' in initializers for static 20522 data. For instance, you can write 20523 20524 static const int table[] = { 20525 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 20526 /* ... */ 20527 }; 20528 20529 This is an acceptable initializer even if EXPRESSION is not a 20530 constant expression. GCC must be more conservative about 20531 evaluating the built-in in this case, because it has no 20532 opportunity to perform optimization. 20533 20534 Previous versions of GCC did not accept this built-in in data 20535 initializers. The earliest version where it is completely safe is 20536 3.0.1. 20537 20538 -- Built-in Function: long __builtin_expect (long EXP, long C) 20539 You may use `__builtin_expect' to provide the compiler with branch 20540 prediction information. In general, you should prefer to use 20541 actual profile feedback for this (`-fprofile-arcs'), as 20542 programmers are notoriously bad at predicting how their programs 20543 actually perform. However, there are applications in which this 20544 data is hard to collect. 20545 20546 The return value is the value of EXP, which should be an integral 20547 expression. The value of C must be a compile-time constant. The 20548 semantics of the built-in are that it is expected that EXP == C. 20549 For example: 20550 20551 if (__builtin_expect (x, 0)) 20552 foo (); 20553 20554 would indicate that we do not expect to call `foo', since we 20555 expect `x' to be zero. Since you are limited to integral 20556 expressions for EXP, you should use constructions such as 20557 20558 if (__builtin_expect (ptr != NULL, 1)) 20559 error (); 20560 20561 when testing pointer or floating-point values. 20562 20563 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 20564 This function is used to minimize cache-miss latency by moving 20565 data into a cache before it is accessed. You can insert calls to 20566 `__builtin_prefetch' into code for which you know addresses of 20567 data in memory that is likely to be accessed soon. If the target 20568 supports them, data prefetch instructions will be generated. If 20569 the prefetch is done early enough before the access then the data 20570 will be in the cache by the time it is accessed. 20571 20572 The value of ADDR is the address of the memory to prefetch. There 20573 are two optional arguments, RW and LOCALITY. The value of RW is a 20574 compile-time constant one or zero; one means that the prefetch is 20575 preparing for a write to the memory address and zero, the default, 20576 means that the prefetch is preparing for a read. The value 20577 LOCALITY must be a compile-time constant integer between zero and 20578 three. A value of zero means that the data has no temporal 20579 locality, so it need not be left in the cache after the access. A 20580 value of three means that the data has a high degree of temporal 20581 locality and should be left in all levels of cache possible. 20582 Values of one and two mean, respectively, a low or moderate degree 20583 of temporal locality. The default is three. 20584 20585 for (i = 0; i < n; i++) 20586 { 20587 a[i] = a[i] + b[i]; 20588 __builtin_prefetch (&a[i+j], 1, 1); 20589 __builtin_prefetch (&b[i+j], 0, 1); 20590 /* ... */ 20591 } 20592 20593 Data prefetch does not generate faults if ADDR is invalid, but the 20594 address expression itself must be valid. For example, a prefetch 20595 of `p->next' will not fault if `p->next' is not a valid address, 20596 but evaluation will fault if `p' is not a valid address. 20597 20598 If the target does not support data prefetch, the address 20599 expression is evaluated if it includes side effects but no other 20600 code is generated and GCC does not issue a warning. 20601 20602 -- Built-in Function: double __builtin_huge_val (void) 20603 Returns a positive infinity, if supported by the floating-point 20604 format, else `DBL_MAX'. This function is suitable for 20605 implementing the ISO C macro `HUGE_VAL'. 20606 20607 -- Built-in Function: float __builtin_huge_valf (void) 20608 Similar to `__builtin_huge_val', except the return type is `float'. 20609 20610 -- Built-in Function: long double __builtin_huge_vall (void) 20611 Similar to `__builtin_huge_val', except the return type is `long 20612 double'. 20613 20614 -- Built-in Function: double __builtin_inf (void) 20615 Similar to `__builtin_huge_val', except a warning is generated if 20616 the target floating-point format does not support infinities. 20617 20618 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 20619 Similar to `__builtin_inf', except the return type is `_Decimal32'. 20620 20621 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 20622 Similar to `__builtin_inf', except the return type is `_Decimal64'. 20623 20624 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 20625 Similar to `__builtin_inf', except the return type is 20626 `_Decimal128'. 20627 20628 -- Built-in Function: float __builtin_inff (void) 20629 Similar to `__builtin_inf', except the return type is `float'. 20630 This function is suitable for implementing the ISO C99 macro 20631 `INFINITY'. 20632 20633 -- Built-in Function: long double __builtin_infl (void) 20634 Similar to `__builtin_inf', except the return type is `long 20635 double'. 20636 20637 -- Built-in Function: double __builtin_nan (const char *str) 20638 This is an implementation of the ISO C99 function `nan'. 20639 20640 Since ISO C99 defines this function in terms of `strtod', which we 20641 do not implement, a description of the parsing is in order. The 20642 string is parsed as by `strtol'; that is, the base is recognized by 20643 leading `0' or `0x' prefixes. The number parsed is placed in the 20644 significand such that the least significant bit of the number is 20645 at the least significant bit of the significand. The number is 20646 truncated to fit the significand field provided. The significand 20647 is forced to be a quiet NaN. 20648 20649 This function, if given a string literal all of which would have 20650 been consumed by strtol, is evaluated early enough that it is 20651 considered a compile-time constant. 20652 20653 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 20654 Similar to `__builtin_nan', except the return type is `_Decimal32'. 20655 20656 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 20657 Similar to `__builtin_nan', except the return type is `_Decimal64'. 20658 20659 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 20660 Similar to `__builtin_nan', except the return type is 20661 `_Decimal128'. 20662 20663 -- Built-in Function: float __builtin_nanf (const char *str) 20664 Similar to `__builtin_nan', except the return type is `float'. 20665 20666 -- Built-in Function: long double __builtin_nanl (const char *str) 20667 Similar to `__builtin_nan', except the return type is `long 20668 double'. 20669 20670 -- Built-in Function: double __builtin_nans (const char *str) 20671 Similar to `__builtin_nan', except the significand is forced to be 20672 a signaling NaN. The `nans' function is proposed by WG14 N965. 20673 20674 -- Built-in Function: float __builtin_nansf (const char *str) 20675 Similar to `__builtin_nans', except the return type is `float'. 20676 20677 -- Built-in Function: long double __builtin_nansl (const char *str) 20678 Similar to `__builtin_nans', except the return type is `long 20679 double'. 20680 20681 -- Built-in Function: int __builtin_ffs (unsigned int x) 20682 Returns one plus the index of the least significant 1-bit of X, or 20683 if X is zero, returns zero. 20684 20685 -- Built-in Function: int __builtin_clz (unsigned int x) 20686 Returns the number of leading 0-bits in X, starting at the most 20687 significant bit position. If X is 0, the result is undefined. 20688 20689 -- Built-in Function: int __builtin_ctz (unsigned int x) 20690 Returns the number of trailing 0-bits in X, starting at the least 20691 significant bit position. If X is 0, the result is undefined. 20692 20693 -- Built-in Function: int __builtin_popcount (unsigned int x) 20694 Returns the number of 1-bits in X. 20695 20696 -- Built-in Function: int __builtin_parity (unsigned int x) 20697 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 20698 20699 -- Built-in Function: int __builtin_ffsl (unsigned long) 20700 Similar to `__builtin_ffs', except the argument type is `unsigned 20701 long'. 20702 20703 -- Built-in Function: int __builtin_clzl (unsigned long) 20704 Similar to `__builtin_clz', except the argument type is `unsigned 20705 long'. 20706 20707 -- Built-in Function: int __builtin_ctzl (unsigned long) 20708 Similar to `__builtin_ctz', except the argument type is `unsigned 20709 long'. 20710 20711 -- Built-in Function: int __builtin_popcountl (unsigned long) 20712 Similar to `__builtin_popcount', except the argument type is 20713 `unsigned long'. 20714 20715 -- Built-in Function: int __builtin_parityl (unsigned long) 20716 Similar to `__builtin_parity', except the argument type is 20717 `unsigned long'. 20718 20719 -- Built-in Function: int __builtin_ffsll (unsigned long long) 20720 Similar to `__builtin_ffs', except the argument type is `unsigned 20721 long long'. 20722 20723 -- Built-in Function: int __builtin_clzll (unsigned long long) 20724 Similar to `__builtin_clz', except the argument type is `unsigned 20725 long long'. 20726 20727 -- Built-in Function: int __builtin_ctzll (unsigned long long) 20728 Similar to `__builtin_ctz', except the argument type is `unsigned 20729 long long'. 20730 20731 -- Built-in Function: int __builtin_popcountll (unsigned long long) 20732 Similar to `__builtin_popcount', except the argument type is 20733 `unsigned long long'. 20734 20735 -- Built-in Function: int __builtin_parityll (unsigned long long) 20736 Similar to `__builtin_parity', except the argument type is 20737 `unsigned long long'. 20738 20739 -- Built-in Function: double __builtin_powi (double, int) 20740 Returns the first argument raised to the power of the second. 20741 Unlike the `pow' function no guarantees about precision and 20742 rounding are made. 20743 20744 -- Built-in Function: float __builtin_powif (float, int) 20745 Similar to `__builtin_powi', except the argument and return types 20746 are `float'. 20747 20748 -- Built-in Function: long double __builtin_powil (long double, int) 20749 Similar to `__builtin_powi', except the argument and return types 20750 are `long double'. 20751 20752 20753File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 20754 207555.48 Built-in Functions Specific to Particular Target Machines 20756============================================================== 20757 20758On some target machines, GCC supports many built-in functions specific 20759to those machines. Generally these generate calls to specific machine 20760instructions, but allow the compiler to schedule those calls. 20761 20762* Menu: 20763 20764* Alpha Built-in Functions:: 20765* ARM Built-in Functions:: 20766* Blackfin Built-in Functions:: 20767* FR-V Built-in Functions:: 20768* X86 Built-in Functions:: 20769* MIPS DSP Built-in Functions:: 20770* MIPS Paired-Single Support:: 20771* PowerPC AltiVec Built-in Functions:: 20772* SPARC VIS Built-in Functions:: 20773 20774 20775File: gcc.info, Node: Alpha Built-in Functions, Next: ARM Built-in Functions, Up: Target Builtins 20776 207775.48.1 Alpha Built-in Functions 20778------------------------------- 20779 20780These built-in functions are available for the Alpha family of 20781processors, depending on the command-line switches used. 20782 20783 The following built-in functions are always available. They all 20784generate the machine instruction that is part of the name. 20785 20786 long __builtin_alpha_implver (void) 20787 long __builtin_alpha_rpcc (void) 20788 long __builtin_alpha_amask (long) 20789 long __builtin_alpha_cmpbge (long, long) 20790 long __builtin_alpha_extbl (long, long) 20791 long __builtin_alpha_extwl (long, long) 20792 long __builtin_alpha_extll (long, long) 20793 long __builtin_alpha_extql (long, long) 20794 long __builtin_alpha_extwh (long, long) 20795 long __builtin_alpha_extlh (long, long) 20796 long __builtin_alpha_extqh (long, long) 20797 long __builtin_alpha_insbl (long, long) 20798 long __builtin_alpha_inswl (long, long) 20799 long __builtin_alpha_insll (long, long) 20800 long __builtin_alpha_insql (long, long) 20801 long __builtin_alpha_inswh (long, long) 20802 long __builtin_alpha_inslh (long, long) 20803 long __builtin_alpha_insqh (long, long) 20804 long __builtin_alpha_mskbl (long, long) 20805 long __builtin_alpha_mskwl (long, long) 20806 long __builtin_alpha_mskll (long, long) 20807 long __builtin_alpha_mskql (long, long) 20808 long __builtin_alpha_mskwh (long, long) 20809 long __builtin_alpha_msklh (long, long) 20810 long __builtin_alpha_mskqh (long, long) 20811 long __builtin_alpha_umulh (long, long) 20812 long __builtin_alpha_zap (long, long) 20813 long __builtin_alpha_zapnot (long, long) 20814 20815 The following built-in functions are always with `-mmax' or 20816`-mcpu=CPU' where CPU is `pca56' or later. They all generate the 20817machine instruction that is part of the name. 20818 20819 long __builtin_alpha_pklb (long) 20820 long __builtin_alpha_pkwb (long) 20821 long __builtin_alpha_unpkbl (long) 20822 long __builtin_alpha_unpkbw (long) 20823 long __builtin_alpha_minub8 (long, long) 20824 long __builtin_alpha_minsb8 (long, long) 20825 long __builtin_alpha_minuw4 (long, long) 20826 long __builtin_alpha_minsw4 (long, long) 20827 long __builtin_alpha_maxub8 (long, long) 20828 long __builtin_alpha_maxsb8 (long, long) 20829 long __builtin_alpha_maxuw4 (long, long) 20830 long __builtin_alpha_maxsw4 (long, long) 20831 long __builtin_alpha_perr (long, long) 20832 20833 The following built-in functions are always with `-mcix' or 20834`-mcpu=CPU' where CPU is `ev67' or later. They all generate the 20835machine instruction that is part of the name. 20836 20837 long __builtin_alpha_cttz (long) 20838 long __builtin_alpha_ctlz (long) 20839 long __builtin_alpha_ctpop (long) 20840 20841 The following builtins are available on systems that use the OSF/1 20842PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 20843when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 20844 20845 void *__builtin_thread_pointer (void) 20846 void __builtin_set_thread_pointer (void *) 20847 20848 20849File: gcc.info, Node: ARM Built-in Functions, Next: Blackfin Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins 20850 208515.48.2 ARM Built-in Functions 20852----------------------------- 20853 20854These built-in functions are available for the ARM family of 20855processors, when the `-mcpu=iwmmxt' switch is used: 20856 20857 typedef int v2si __attribute__ ((vector_size (8))); 20858 typedef short v4hi __attribute__ ((vector_size (8))); 20859 typedef char v8qi __attribute__ ((vector_size (8))); 20860 20861 int __builtin_arm_getwcx (int) 20862 void __builtin_arm_setwcx (int, int) 20863 int __builtin_arm_textrmsb (v8qi, int) 20864 int __builtin_arm_textrmsh (v4hi, int) 20865 int __builtin_arm_textrmsw (v2si, int) 20866 int __builtin_arm_textrmub (v8qi, int) 20867 int __builtin_arm_textrmuh (v4hi, int) 20868 int __builtin_arm_textrmuw (v2si, int) 20869 v8qi __builtin_arm_tinsrb (v8qi, int) 20870 v4hi __builtin_arm_tinsrh (v4hi, int) 20871 v2si __builtin_arm_tinsrw (v2si, int) 20872 long long __builtin_arm_tmia (long long, int, int) 20873 long long __builtin_arm_tmiabb (long long, int, int) 20874 long long __builtin_arm_tmiabt (long long, int, int) 20875 long long __builtin_arm_tmiaph (long long, int, int) 20876 long long __builtin_arm_tmiatb (long long, int, int) 20877 long long __builtin_arm_tmiatt (long long, int, int) 20878 int __builtin_arm_tmovmskb (v8qi) 20879 int __builtin_arm_tmovmskh (v4hi) 20880 int __builtin_arm_tmovmskw (v2si) 20881 long long __builtin_arm_waccb (v8qi) 20882 long long __builtin_arm_wacch (v4hi) 20883 long long __builtin_arm_waccw (v2si) 20884 v8qi __builtin_arm_waddb (v8qi, v8qi) 20885 v8qi __builtin_arm_waddbss (v8qi, v8qi) 20886 v8qi __builtin_arm_waddbus (v8qi, v8qi) 20887 v4hi __builtin_arm_waddh (v4hi, v4hi) 20888 v4hi __builtin_arm_waddhss (v4hi, v4hi) 20889 v4hi __builtin_arm_waddhus (v4hi, v4hi) 20890 v2si __builtin_arm_waddw (v2si, v2si) 20891 v2si __builtin_arm_waddwss (v2si, v2si) 20892 v2si __builtin_arm_waddwus (v2si, v2si) 20893 v8qi __builtin_arm_walign (v8qi, v8qi, int) 20894 long long __builtin_arm_wand(long long, long long) 20895 long long __builtin_arm_wandn (long long, long long) 20896 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 20897 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 20898 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 20899 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 20900 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 20901 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 20902 v2si __builtin_arm_wcmpeqw (v2si, v2si) 20903 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 20904 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 20905 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 20906 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 20907 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 20908 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 20909 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 20910 long long __builtin_arm_wmacsz (v4hi, v4hi) 20911 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 20912 long long __builtin_arm_wmacuz (v4hi, v4hi) 20913 v4hi __builtin_arm_wmadds (v4hi, v4hi) 20914 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 20915 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 20916 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 20917 v2si __builtin_arm_wmaxsw (v2si, v2si) 20918 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 20919 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 20920 v2si __builtin_arm_wmaxuw (v2si, v2si) 20921 v8qi __builtin_arm_wminsb (v8qi, v8qi) 20922 v4hi __builtin_arm_wminsh (v4hi, v4hi) 20923 v2si __builtin_arm_wminsw (v2si, v2si) 20924 v8qi __builtin_arm_wminub (v8qi, v8qi) 20925 v4hi __builtin_arm_wminuh (v4hi, v4hi) 20926 v2si __builtin_arm_wminuw (v2si, v2si) 20927 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 20928 v4hi __builtin_arm_wmulul (v4hi, v4hi) 20929 v4hi __builtin_arm_wmulum (v4hi, v4hi) 20930 long long __builtin_arm_wor (long long, long long) 20931 v2si __builtin_arm_wpackdss (long long, long long) 20932 v2si __builtin_arm_wpackdus (long long, long long) 20933 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 20934 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 20935 v4hi __builtin_arm_wpackwss (v2si, v2si) 20936 v4hi __builtin_arm_wpackwus (v2si, v2si) 20937 long long __builtin_arm_wrord (long long, long long) 20938 long long __builtin_arm_wrordi (long long, int) 20939 v4hi __builtin_arm_wrorh (v4hi, long long) 20940 v4hi __builtin_arm_wrorhi (v4hi, int) 20941 v2si __builtin_arm_wrorw (v2si, long long) 20942 v2si __builtin_arm_wrorwi (v2si, int) 20943 v2si __builtin_arm_wsadb (v8qi, v8qi) 20944 v2si __builtin_arm_wsadbz (v8qi, v8qi) 20945 v2si __builtin_arm_wsadh (v4hi, v4hi) 20946 v2si __builtin_arm_wsadhz (v4hi, v4hi) 20947 v4hi __builtin_arm_wshufh (v4hi, int) 20948 long long __builtin_arm_wslld (long long, long long) 20949 long long __builtin_arm_wslldi (long long, int) 20950 v4hi __builtin_arm_wsllh (v4hi, long long) 20951 v4hi __builtin_arm_wsllhi (v4hi, int) 20952 v2si __builtin_arm_wsllw (v2si, long long) 20953 v2si __builtin_arm_wsllwi (v2si, int) 20954 long long __builtin_arm_wsrad (long long, long long) 20955 long long __builtin_arm_wsradi (long long, int) 20956 v4hi __builtin_arm_wsrah (v4hi, long long) 20957 v4hi __builtin_arm_wsrahi (v4hi, int) 20958 v2si __builtin_arm_wsraw (v2si, long long) 20959 v2si __builtin_arm_wsrawi (v2si, int) 20960 long long __builtin_arm_wsrld (long long, long long) 20961 long long __builtin_arm_wsrldi (long long, int) 20962 v4hi __builtin_arm_wsrlh (v4hi, long long) 20963 v4hi __builtin_arm_wsrlhi (v4hi, int) 20964 v2si __builtin_arm_wsrlw (v2si, long long) 20965 v2si __builtin_arm_wsrlwi (v2si, int) 20966 v8qi __builtin_arm_wsubb (v8qi, v8qi) 20967 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 20968 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 20969 v4hi __builtin_arm_wsubh (v4hi, v4hi) 20970 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 20971 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 20972 v2si __builtin_arm_wsubw (v2si, v2si) 20973 v2si __builtin_arm_wsubwss (v2si, v2si) 20974 v2si __builtin_arm_wsubwus (v2si, v2si) 20975 v4hi __builtin_arm_wunpckehsb (v8qi) 20976 v2si __builtin_arm_wunpckehsh (v4hi) 20977 long long __builtin_arm_wunpckehsw (v2si) 20978 v4hi __builtin_arm_wunpckehub (v8qi) 20979 v2si __builtin_arm_wunpckehuh (v4hi) 20980 long long __builtin_arm_wunpckehuw (v2si) 20981 v4hi __builtin_arm_wunpckelsb (v8qi) 20982 v2si __builtin_arm_wunpckelsh (v4hi) 20983 long long __builtin_arm_wunpckelsw (v2si) 20984 v4hi __builtin_arm_wunpckelub (v8qi) 20985 v2si __builtin_arm_wunpckeluh (v4hi) 20986 long long __builtin_arm_wunpckeluw (v2si) 20987 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 20988 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 20989 v2si __builtin_arm_wunpckihw (v2si, v2si) 20990 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 20991 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 20992 v2si __builtin_arm_wunpckilw (v2si, v2si) 20993 long long __builtin_arm_wxor (long long, long long) 20994 long long __builtin_arm_wzero () 20995 20996 20997File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM Built-in Functions, Up: Target Builtins 20998 209995.48.3 Blackfin Built-in Functions 21000---------------------------------- 21001 21002Currently, there are two Blackfin-specific built-in functions. These 21003are used for generating `CSYNC' and `SSYNC' machine insns without using 21004inline assembly; by using these built-in functions the compiler can 21005automatically add workarounds for hardware errata involving these 21006instructions. These functions are named as follows: 21007 21008 void __builtin_bfin_csync (void) 21009 void __builtin_bfin_ssync (void) 21010 21011 21012File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 21013 210145.48.4 FR-V Built-in Functions 21015------------------------------ 21016 21017GCC provides many FR-V-specific built-in functions. In general, these 21018functions are intended to be compatible with those described by `FR-V 21019Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 21020The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 21021which pass 128-bit values by pointer rather than by value. 21022 21023 Most of the functions are named after specific FR-V instructions. 21024Such functions are said to be "directly mapped" and are summarized here 21025in tabular form. 21026 21027* Menu: 21028 21029* Argument Types:: 21030* Directly-mapped Integer Functions:: 21031* Directly-mapped Media Functions:: 21032* Raw read/write Functions:: 21033* Other Built-in Functions:: 21034 21035 21036File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 21037 210385.48.4.1 Argument Types 21039....................... 21040 21041The arguments to the built-in functions can be divided into three 21042groups: register numbers, compile-time constants and run-time values. 21043In order to make this classification clear at a glance, the arguments 21044and return values are given the following pseudo types: 21045 21046Pseudo type Real C type Constant? Description 21047`uh' `unsigned short' No an unsigned halfword 21048`uw1' `unsigned int' No an unsigned word 21049`sw1' `int' No a signed word 21050`uw2' `unsigned long long' No an unsigned doubleword 21051`sw2' `long long' No a signed doubleword 21052`const' `int' Yes an integer constant 21053`acc' `int' Yes an ACC register number 21054`iacc' `int' Yes an IACC register number 21055 21056 These pseudo types are not defined by GCC, they are simply a notational 21057convenience used in this manual. 21058 21059 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 21060run time. They correspond to register operands in the underlying FR-V 21061instructions. 21062 21063 `const' arguments represent immediate operands in the underlying FR-V 21064instructions. They must be compile-time constants. 21065 21066 `acc' arguments are evaluated at compile time and specify the number 21067of an accumulator register. For example, an `acc' argument of 2 will 21068select the ACC2 register. 21069 21070 `iacc' arguments are similar to `acc' arguments but specify the number 21071of an IACC register. See *note Other Built-in Functions:: for more 21072details. 21073 21074 21075File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 21076 210775.48.4.2 Directly-mapped Integer Functions 21078.......................................... 21079 21080The functions listed below map directly to FR-V I-type instructions. 21081 21082Function prototype Example usage Assembly output 21083`sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 21084`sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 21085`sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 21086`sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 21087`void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 21088`void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 21089`void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 21090`sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 21091`sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 21092`uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 21093 21094 21095File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 21096 210975.48.4.3 Directly-mapped Media Functions 21098........................................ 21099 21100The functions listed below map directly to FR-V M-type instructions. 21101 21102Function prototype Example usage Assembly output 21103`uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 21104`void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 21105`sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 21106`uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 21107`uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 21108`void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 21109`uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 21110`uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 21111`void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 21112`void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 21113`void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 21114`uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 21115`uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 21116`uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 21117`uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 21118`void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 21119`void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 21120`void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 21121`void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 21122`uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 21123`uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 21124`void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 21125`void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 21126`uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 21127`uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 21128`uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 21129`void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 21130`void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 21131`uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 21132`uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 21133`uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 21134`sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 21135`uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 21136`sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 21137`uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 21138`sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 21139`uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 21140`void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 21141`void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 21142`void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 21143`void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 21144`void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 21145`void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 21146`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 21147`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 21148`uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 21149`uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 21150`uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 21151`sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 21152`uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 21153`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 21154`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 21155`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 21156`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 21157`sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 21158`sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 21159`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 21160`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 21161`void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 21162sw2)' 21163`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 21164`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 21165`void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 21166sw2)' 21167`void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 21168uw2)' 21169`sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 21170`uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 21171`sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 21172`sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 21173`uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 21174`void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 21175sw2)' 21176`void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 21177sw2)' 21178`uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 21179`uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 21180`uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 21181`uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 21182`sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 21183`uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 21184`uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 21185`sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 21186`uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 21187`void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 21188`sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 21189`uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 21190`void __MTRAP (void)' `__MTRAP ()' `MTRAP' 21191`uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 21192`uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 21193`void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 21194`void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 21195`uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 21196 21197 21198File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 21199 212005.48.4.4 Raw read/write Functions 21201................................. 21202 21203This sections describes built-in functions related to read and write 21204instructions to access memory. These functions generate `membar' 21205instructions to flush the I/O load and stores where appropriate, as 21206described in Fujitsu's manual described above. 21207 21208`unsigned char __builtin_read8 (void *DATA)' 21209 21210`unsigned short __builtin_read16 (void *DATA)' 21211 21212`unsigned long __builtin_read32 (void *DATA)' 21213 21214`unsigned long long __builtin_read64 (void *DATA)' 21215 21216`void __builtin_write8 (void *DATA, unsigned char DATUM)' 21217 21218`void __builtin_write16 (void *DATA, unsigned short DATUM)' 21219 21220`void __builtin_write32 (void *DATA, unsigned long DATUM)' 21221 21222`void __builtin_write64 (void *DATA, unsigned long long DATUM)' 21223 21224 21225File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 21226 212275.48.4.5 Other Built-in Functions 21228................................. 21229 21230This section describes built-in functions that are not named after a 21231specific FR-V instruction. 21232 21233`sw2 __IACCreadll (iacc REG)' 21234 Return the full 64-bit value of IACC0. The REG argument is 21235 reserved for future expansion and must be 0. 21236 21237`sw1 __IACCreadl (iacc REG)' 21238 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 21239 Other values of REG are rejected as invalid. 21240 21241`void __IACCsetll (iacc REG, sw2 X)' 21242 Set the full 64-bit value of IACC0 to X. The REG argument is 21243 reserved for future expansion and must be 0. 21244 21245`void __IACCsetl (iacc REG, sw1 X)' 21246 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 21247 values of REG are rejected as invalid. 21248 21249`void __data_prefetch0 (const void *X)' 21250 Use the `dcpl' instruction to load the contents of address X into 21251 the data cache. 21252 21253`void __data_prefetch (const void *X)' 21254 Use the `nldub' instruction to load the contents of address X into 21255 the data cache. The instruction will be issued in slot I1. 21256 21257 21258File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 21259 212605.48.5 X86 Built-in Functions 21261----------------------------- 21262 21263These built-in functions are available for the i386 and x86-64 family 21264of computers, depending on the command-line switches used. 21265 21266 Note that, if you specify command-line switches such as `-msse', the 21267compiler could use the extended instruction sets even if the built-ins 21268are not used explicitly in the program. For this reason, applications 21269which perform runtime CPU detection must compile separate files for each 21270supported architecture, using the appropriate flags. In particular, 21271the file containing the CPU detection code should be compiled without 21272these options. 21273 21274 The following machine modes are available for use with MMX built-in 21275functions (*note Vector Extensions::): `V2SI' for a vector of two 2127632-bit integers, `V4HI' for a vector of four 16-bit integers, and 21277`V8QI' for a vector of eight 8-bit integers. Some of the built-in 21278functions operate on MMX registers as a whole 64-bit entity, these use 21279`DI' as their mode. 21280 21281 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector 21282of two 32-bit floating point values. 21283 21284 If SSE extensions are enabled, `V4SF' is used for a vector of four 2128532-bit floating point values. Some instructions use a vector of four 2128632-bit integers, these use `V4SI'. Finally, some instructions operate 21287on an entire vector register, interpreting it as a 128-bit integer, 21288these use mode `TI'. 21289 21290 The following built-in functions are made available by `-mmmx'. All 21291of them generate the machine instruction that is part of the name. 21292 21293 v8qi __builtin_ia32_paddb (v8qi, v8qi) 21294 v4hi __builtin_ia32_paddw (v4hi, v4hi) 21295 v2si __builtin_ia32_paddd (v2si, v2si) 21296 v8qi __builtin_ia32_psubb (v8qi, v8qi) 21297 v4hi __builtin_ia32_psubw (v4hi, v4hi) 21298 v2si __builtin_ia32_psubd (v2si, v2si) 21299 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 21300 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 21301 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 21302 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 21303 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 21304 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 21305 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 21306 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 21307 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 21308 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 21309 di __builtin_ia32_pand (di, di) 21310 di __builtin_ia32_pandn (di,di) 21311 di __builtin_ia32_por (di, di) 21312 di __builtin_ia32_pxor (di, di) 21313 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 21314 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 21315 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 21316 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 21317 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 21318 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 21319 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 21320 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 21321 v2si __builtin_ia32_punpckhdq (v2si, v2si) 21322 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 21323 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 21324 v2si __builtin_ia32_punpckldq (v2si, v2si) 21325 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 21326 v4hi __builtin_ia32_packssdw (v2si, v2si) 21327 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 21328 21329 The following built-in functions are made available either with 21330`-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 21331of them generate the machine instruction that is part of the name. 21332 21333 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 21334 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 21335 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 21336 v4hi __builtin_ia32_psadbw (v8qi, v8qi) 21337 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 21338 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 21339 v8qi __builtin_ia32_pminub (v8qi, v8qi) 21340 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 21341 int __builtin_ia32_pextrw (v4hi, int) 21342 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 21343 int __builtin_ia32_pmovmskb (v8qi) 21344 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 21345 void __builtin_ia32_movntq (di *, di) 21346 void __builtin_ia32_sfence (void) 21347 21348 The following built-in functions are available when `-msse' is used. 21349All of them generate the machine instruction that is part of the name. 21350 21351 int __builtin_ia32_comieq (v4sf, v4sf) 21352 int __builtin_ia32_comineq (v4sf, v4sf) 21353 int __builtin_ia32_comilt (v4sf, v4sf) 21354 int __builtin_ia32_comile (v4sf, v4sf) 21355 int __builtin_ia32_comigt (v4sf, v4sf) 21356 int __builtin_ia32_comige (v4sf, v4sf) 21357 int __builtin_ia32_ucomieq (v4sf, v4sf) 21358 int __builtin_ia32_ucomineq (v4sf, v4sf) 21359 int __builtin_ia32_ucomilt (v4sf, v4sf) 21360 int __builtin_ia32_ucomile (v4sf, v4sf) 21361 int __builtin_ia32_ucomigt (v4sf, v4sf) 21362 int __builtin_ia32_ucomige (v4sf, v4sf) 21363 v4sf __builtin_ia32_addps (v4sf, v4sf) 21364 v4sf __builtin_ia32_subps (v4sf, v4sf) 21365 v4sf __builtin_ia32_mulps (v4sf, v4sf) 21366 v4sf __builtin_ia32_divps (v4sf, v4sf) 21367 v4sf __builtin_ia32_addss (v4sf, v4sf) 21368 v4sf __builtin_ia32_subss (v4sf, v4sf) 21369 v4sf __builtin_ia32_mulss (v4sf, v4sf) 21370 v4sf __builtin_ia32_divss (v4sf, v4sf) 21371 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 21372 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 21373 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 21374 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 21375 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 21376 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 21377 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 21378 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 21379 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 21380 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 21381 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 21382 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 21383 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 21384 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 21385 v4si __builtin_ia32_cmpless (v4sf, v4sf) 21386 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 21387 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 21388 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 21389 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 21390 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 21391 v4sf __builtin_ia32_maxps (v4sf, v4sf) 21392 v4sf __builtin_ia32_maxss (v4sf, v4sf) 21393 v4sf __builtin_ia32_minps (v4sf, v4sf) 21394 v4sf __builtin_ia32_minss (v4sf, v4sf) 21395 v4sf __builtin_ia32_andps (v4sf, v4sf) 21396 v4sf __builtin_ia32_andnps (v4sf, v4sf) 21397 v4sf __builtin_ia32_orps (v4sf, v4sf) 21398 v4sf __builtin_ia32_xorps (v4sf, v4sf) 21399 v4sf __builtin_ia32_movss (v4sf, v4sf) 21400 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 21401 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 21402 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 21403 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 21404 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 21405 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 21406 v2si __builtin_ia32_cvtps2pi (v4sf) 21407 int __builtin_ia32_cvtss2si (v4sf) 21408 v2si __builtin_ia32_cvttps2pi (v4sf) 21409 int __builtin_ia32_cvttss2si (v4sf) 21410 v4sf __builtin_ia32_rcpps (v4sf) 21411 v4sf __builtin_ia32_rsqrtps (v4sf) 21412 v4sf __builtin_ia32_sqrtps (v4sf) 21413 v4sf __builtin_ia32_rcpss (v4sf) 21414 v4sf __builtin_ia32_rsqrtss (v4sf) 21415 v4sf __builtin_ia32_sqrtss (v4sf) 21416 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 21417 void __builtin_ia32_movntps (float *, v4sf) 21418 int __builtin_ia32_movmskps (v4sf) 21419 21420 The following built-in functions are available when `-msse' is used. 21421 21422`v4sf __builtin_ia32_loadaps (float *)' 21423 Generates the `movaps' machine instruction as a load from memory. 21424 21425`void __builtin_ia32_storeaps (float *, v4sf)' 21426 Generates the `movaps' machine instruction as a store to memory. 21427 21428`v4sf __builtin_ia32_loadups (float *)' 21429 Generates the `movups' machine instruction as a load from memory. 21430 21431`void __builtin_ia32_storeups (float *, v4sf)' 21432 Generates the `movups' machine instruction as a store to memory. 21433 21434`v4sf __builtin_ia32_loadsss (float *)' 21435 Generates the `movss' machine instruction as a load from memory. 21436 21437`void __builtin_ia32_storess (float *, v4sf)' 21438 Generates the `movss' machine instruction as a store to memory. 21439 21440`v4sf __builtin_ia32_loadhps (v4sf, v2si *)' 21441 Generates the `movhps' machine instruction as a load from memory. 21442 21443`v4sf __builtin_ia32_loadlps (v4sf, v2si *)' 21444 Generates the `movlps' machine instruction as a load from memory 21445 21446`void __builtin_ia32_storehps (v4sf, v2si *)' 21447 Generates the `movhps' machine instruction as a store to memory. 21448 21449`void __builtin_ia32_storelps (v4sf, v2si *)' 21450 Generates the `movlps' machine instruction as a store to memory. 21451 21452 The following built-in functions are available when `-msse2' is used. 21453All of them generate the machine instruction that is part of the name. 21454 21455 int __builtin_ia32_comisdeq (v2df, v2df) 21456 int __builtin_ia32_comisdlt (v2df, v2df) 21457 int __builtin_ia32_comisdle (v2df, v2df) 21458 int __builtin_ia32_comisdgt (v2df, v2df) 21459 int __builtin_ia32_comisdge (v2df, v2df) 21460 int __builtin_ia32_comisdneq (v2df, v2df) 21461 int __builtin_ia32_ucomisdeq (v2df, v2df) 21462 int __builtin_ia32_ucomisdlt (v2df, v2df) 21463 int __builtin_ia32_ucomisdle (v2df, v2df) 21464 int __builtin_ia32_ucomisdgt (v2df, v2df) 21465 int __builtin_ia32_ucomisdge (v2df, v2df) 21466 int __builtin_ia32_ucomisdneq (v2df, v2df) 21467 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 21468 v2df __builtin_ia32_cmpltpd (v2df, v2df) 21469 v2df __builtin_ia32_cmplepd (v2df, v2df) 21470 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 21471 v2df __builtin_ia32_cmpgepd (v2df, v2df) 21472 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 21473 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 21474 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 21475 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 21476 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 21477 v2df __builtin_ia32_cmpngepd (v2df, v2df) 21478 v2df __builtin_ia32_cmpordpd (v2df, v2df) 21479 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 21480 v2df __builtin_ia32_cmpltsd (v2df, v2df) 21481 v2df __builtin_ia32_cmplesd (v2df, v2df) 21482 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 21483 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 21484 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 21485 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 21486 v2df __builtin_ia32_cmpordsd (v2df, v2df) 21487 v2di __builtin_ia32_paddq (v2di, v2di) 21488 v2di __builtin_ia32_psubq (v2di, v2di) 21489 v2df __builtin_ia32_addpd (v2df, v2df) 21490 v2df __builtin_ia32_subpd (v2df, v2df) 21491 v2df __builtin_ia32_mulpd (v2df, v2df) 21492 v2df __builtin_ia32_divpd (v2df, v2df) 21493 v2df __builtin_ia32_addsd (v2df, v2df) 21494 v2df __builtin_ia32_subsd (v2df, v2df) 21495 v2df __builtin_ia32_mulsd (v2df, v2df) 21496 v2df __builtin_ia32_divsd (v2df, v2df) 21497 v2df __builtin_ia32_minpd (v2df, v2df) 21498 v2df __builtin_ia32_maxpd (v2df, v2df) 21499 v2df __builtin_ia32_minsd (v2df, v2df) 21500 v2df __builtin_ia32_maxsd (v2df, v2df) 21501 v2df __builtin_ia32_andpd (v2df, v2df) 21502 v2df __builtin_ia32_andnpd (v2df, v2df) 21503 v2df __builtin_ia32_orpd (v2df, v2df) 21504 v2df __builtin_ia32_xorpd (v2df, v2df) 21505 v2df __builtin_ia32_movsd (v2df, v2df) 21506 v2df __builtin_ia32_unpckhpd (v2df, v2df) 21507 v2df __builtin_ia32_unpcklpd (v2df, v2df) 21508 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 21509 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 21510 v4si __builtin_ia32_paddd128 (v4si, v4si) 21511 v2di __builtin_ia32_paddq128 (v2di, v2di) 21512 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 21513 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 21514 v4si __builtin_ia32_psubd128 (v4si, v4si) 21515 v2di __builtin_ia32_psubq128 (v2di, v2di) 21516 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 21517 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 21518 v2di __builtin_ia32_pand128 (v2di, v2di) 21519 v2di __builtin_ia32_pandn128 (v2di, v2di) 21520 v2di __builtin_ia32_por128 (v2di, v2di) 21521 v2di __builtin_ia32_pxor128 (v2di, v2di) 21522 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 21523 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 21524 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 21525 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 21526 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 21527 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 21528 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 21529 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 21530 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 21531 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 21532 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 21533 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 21534 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 21535 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 21536 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 21537 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 21538 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 21539 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 21540 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 21541 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 21542 v16qi __builtin_ia32_packsswb128 (v16qi, v16qi) 21543 v8hi __builtin_ia32_packssdw128 (v8hi, v8hi) 21544 v16qi __builtin_ia32_packuswb128 (v16qi, v16qi) 21545 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 21546 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 21547 v2df __builtin_ia32_loadupd (double *) 21548 void __builtin_ia32_storeupd (double *, v2df) 21549 v2df __builtin_ia32_loadhpd (v2df, double *) 21550 v2df __builtin_ia32_loadlpd (v2df, double *) 21551 int __builtin_ia32_movmskpd (v2df) 21552 int __builtin_ia32_pmovmskb128 (v16qi) 21553 void __builtin_ia32_movnti (int *, int) 21554 void __builtin_ia32_movntpd (double *, v2df) 21555 void __builtin_ia32_movntdq (v2df *, v2df) 21556 v4si __builtin_ia32_pshufd (v4si, int) 21557 v8hi __builtin_ia32_pshuflw (v8hi, int) 21558 v8hi __builtin_ia32_pshufhw (v8hi, int) 21559 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 21560 v2df __builtin_ia32_sqrtpd (v2df) 21561 v2df __builtin_ia32_sqrtsd (v2df) 21562 v2df __builtin_ia32_shufpd (v2df, v2df, int) 21563 v2df __builtin_ia32_cvtdq2pd (v4si) 21564 v4sf __builtin_ia32_cvtdq2ps (v4si) 21565 v4si __builtin_ia32_cvtpd2dq (v2df) 21566 v2si __builtin_ia32_cvtpd2pi (v2df) 21567 v4sf __builtin_ia32_cvtpd2ps (v2df) 21568 v4si __builtin_ia32_cvttpd2dq (v2df) 21569 v2si __builtin_ia32_cvttpd2pi (v2df) 21570 v2df __builtin_ia32_cvtpi2pd (v2si) 21571 int __builtin_ia32_cvtsd2si (v2df) 21572 int __builtin_ia32_cvttsd2si (v2df) 21573 long long __builtin_ia32_cvtsd2si64 (v2df) 21574 long long __builtin_ia32_cvttsd2si64 (v2df) 21575 v4si __builtin_ia32_cvtps2dq (v4sf) 21576 v2df __builtin_ia32_cvtps2pd (v4sf) 21577 v4si __builtin_ia32_cvttps2dq (v4sf) 21578 v2df __builtin_ia32_cvtsi2sd (v2df, int) 21579 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 21580 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 21581 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 21582 void __builtin_ia32_clflush (const void *) 21583 void __builtin_ia32_lfence (void) 21584 void __builtin_ia32_mfence (void) 21585 v16qi __builtin_ia32_loaddqu (const char *) 21586 void __builtin_ia32_storedqu (char *, v16qi) 21587 unsigned long long __builtin_ia32_pmuludq (v2si, v2si) 21588 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 21589 v8hi __builtin_ia32_psllw128 (v8hi, v2di) 21590 v4si __builtin_ia32_pslld128 (v4si, v2di) 21591 v2di __builtin_ia32_psllq128 (v4si, v2di) 21592 v8hi __builtin_ia32_psrlw128 (v8hi, v2di) 21593 v4si __builtin_ia32_psrld128 (v4si, v2di) 21594 v2di __builtin_ia32_psrlq128 (v2di, v2di) 21595 v8hi __builtin_ia32_psraw128 (v8hi, v2di) 21596 v4si __builtin_ia32_psrad128 (v4si, v2di) 21597 v2di __builtin_ia32_pslldqi128 (v2di, int) 21598 v8hi __builtin_ia32_psllwi128 (v8hi, int) 21599 v4si __builtin_ia32_pslldi128 (v4si, int) 21600 v2di __builtin_ia32_psllqi128 (v2di, int) 21601 v2di __builtin_ia32_psrldqi128 (v2di, int) 21602 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 21603 v4si __builtin_ia32_psrldi128 (v4si, int) 21604 v2di __builtin_ia32_psrlqi128 (v2di, int) 21605 v8hi __builtin_ia32_psrawi128 (v8hi, int) 21606 v4si __builtin_ia32_psradi128 (v4si, int) 21607 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 21608 21609 The following built-in functions are available when `-msse3' is used. 21610All of them generate the machine instruction that is part of the name. 21611 21612 v2df __builtin_ia32_addsubpd (v2df, v2df) 21613 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 21614 v2df __builtin_ia32_haddpd (v2df, v2df) 21615 v4sf __builtin_ia32_haddps (v4sf, v4sf) 21616 v2df __builtin_ia32_hsubpd (v2df, v2df) 21617 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 21618 v16qi __builtin_ia32_lddqu (char const *) 21619 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 21620 v2df __builtin_ia32_movddup (v2df) 21621 v4sf __builtin_ia32_movshdup (v4sf) 21622 v4sf __builtin_ia32_movsldup (v4sf) 21623 void __builtin_ia32_mwait (unsigned int, unsigned int) 21624 21625 The following built-in functions are available when `-msse3' is used. 21626 21627`v2df __builtin_ia32_loadddup (double const *)' 21628 Generates the `movddup' machine instruction as a load from memory. 21629 21630 The following built-in functions are available when `-m3dnow' is used. 21631All of them generate the machine instruction that is part of the name. 21632 21633 void __builtin_ia32_femms (void) 21634 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 21635 v2si __builtin_ia32_pf2id (v2sf) 21636 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 21637 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 21638 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 21639 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 21640 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 21641 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 21642 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 21643 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 21644 v2sf __builtin_ia32_pfrcp (v2sf) 21645 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 21646 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 21647 v2sf __builtin_ia32_pfrsqrt (v2sf) 21648 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 21649 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 21650 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 21651 v2sf __builtin_ia32_pi2fd (v2si) 21652 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 21653 21654 The following built-in functions are available when both `-m3dnow' and 21655`-march=athlon' are used. All of them generate the machine instruction 21656that is part of the name. 21657 21658 v2si __builtin_ia32_pf2iw (v2sf) 21659 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 21660 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 21661 v2sf __builtin_ia32_pi2fw (v2si) 21662 v2sf __builtin_ia32_pswapdsf (v2sf) 21663 v2si __builtin_ia32_pswapdsi (v2si) 21664 21665 21666File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 21667 216685.48.6 MIPS DSP Built-in Functions 21669---------------------------------- 21670 21671The MIPS DSP Application-Specific Extension (ASE) includes new 21672instructions that are designed to improve the performance of DSP and 21673media applications. It provides instructions that operate on packed 216748-bit integer data, Q15 fractional data and Q31 fractional data. 21675 21676 GCC supports MIPS DSP operations using both the generic vector 21677extensions (*note Vector Extensions::) and a collection of 21678MIPS-specific built-in functions. Both kinds of support are enabled by 21679the `-mdsp' command-line option. 21680 21681 At present, GCC only provides support for operations on 32-bit 21682vectors. The vector type associated with 8-bit integer data is usually 21683called `v4i8' and the vector type associated with Q15 is usually called 21684`v2q15'. They can be defined in C as follows: 21685 21686 typedef char v4i8 __attribute__ ((vector_size(4))); 21687 typedef short v2q15 __attribute__ ((vector_size(4))); 21688 21689 `v4i8' and `v2q15' values are initialized in the same way as 21690aggregates. For example: 21691 21692 v4i8 a = {1, 2, 3, 4}; 21693 v4i8 b; 21694 b = (v4i8) {5, 6, 7, 8}; 21695 21696 v2q15 c = {0x0fcb, 0x3a75}; 21697 v2q15 d; 21698 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 21699 21700 _Note:_ The CPU's endianness determines the order in which values are 21701packed. On little-endian targets, the first value is the least 21702significant and the last value is the most significant. The opposite 21703order applies to big-endian targets. For example, the code above will 21704set the lowest byte of `a' to `1' on little-endian targets and `4' on 21705big-endian targets. 21706 21707 _Note:_ Q15 and Q31 values must be initialized with their integer 21708representation. As shown in this example, the integer representation 21709of a Q15 value can be obtained by multiplying the fractional value by 21710`0x1.0p15'. The equivalent for Q31 values is to multiply by `0x1.0p31'. 21711 21712 The table below lists the `v4i8' and `v2q15' operations for which 21713hardware support exists. `a' and `b' are `v4i8' values, and `c' and 21714`d' are `v2q15' values. 21715 21716C code MIPS instruction 21717`a + b' `addu.qb' 21718`c + d' `addq.ph' 21719`a - b' `subu.qb' 21720`c - d' `subq.ph' 21721 21722 It is easier to describe the DSP built-in functions if we first define 21723the following types: 21724 21725 typedef int q31; 21726 typedef int i32; 21727 typedef long long a64; 21728 21729 `q31' and `i32' are actually the same as `int', but we use `q31' to 21730indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 21731value. Similarly, `a64' is the same as `long long', but we use `a64' 21732to indicate values that will be placed in one of the four DSP 21733accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 21734 21735 Also, some built-in functions prefer or require immediate numbers as 21736parameters, because the corresponding DSP instructions accept both 21737immediate numbers and register operands, or accept immediate numbers 21738only. The immediate parameters are listed as follows. 21739 21740 imm0_7: 0 to 7. 21741 imm0_15: 0 to 15. 21742 imm0_31: 0 to 31. 21743 imm0_63: 0 to 63. 21744 imm0_255: 0 to 255. 21745 imm_n32_31: -32 to 31. 21746 imm_n512_511: -512 to 511. 21747 21748 The following built-in functions map directly to a particular MIPS DSP 21749instruction. Please refer to the architecture specification for 21750details on what each instruction does. 21751 21752 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 21753 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 21754 q31 __builtin_mips_addq_s_w (q31, q31) 21755 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 21756 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 21757 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 21758 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 21759 q31 __builtin_mips_subq_s_w (q31, q31) 21760 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 21761 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 21762 i32 __builtin_mips_addsc (i32, i32) 21763 i32 __builtin_mips_addwc (i32, i32) 21764 i32 __builtin_mips_modsub (i32, i32) 21765 i32 __builtin_mips_raddu_w_qb (v4i8) 21766 v2q15 __builtin_mips_absq_s_ph (v2q15) 21767 q31 __builtin_mips_absq_s_w (q31) 21768 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 21769 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 21770 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 21771 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 21772 q31 __builtin_mips_preceq_w_phl (v2q15) 21773 q31 __builtin_mips_preceq_w_phr (v2q15) 21774 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 21775 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 21776 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 21777 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 21778 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 21779 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 21780 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 21781 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 21782 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 21783 v4i8 __builtin_mips_shll_qb (v4i8, i32) 21784 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 21785 v2q15 __builtin_mips_shll_ph (v2q15, i32) 21786 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 21787 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 21788 q31 __builtin_mips_shll_s_w (q31, imm0_31) 21789 q31 __builtin_mips_shll_s_w (q31, i32) 21790 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 21791 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 21792 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 21793 v2q15 __builtin_mips_shra_ph (v2q15, i32) 21794 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 21795 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 21796 q31 __builtin_mips_shra_r_w (q31, imm0_31) 21797 q31 __builtin_mips_shra_r_w (q31, i32) 21798 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 21799 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 21800 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 21801 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 21802 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 21803 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 21804 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 21805 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 21806 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 21807 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 21808 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 21809 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 21810 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 21811 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 21812 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 21813 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 21814 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 21815 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 21816 i32 __builtin_mips_bitrev (i32) 21817 i32 __builtin_mips_insv (i32, i32) 21818 v4i8 __builtin_mips_repl_qb (imm0_255) 21819 v4i8 __builtin_mips_repl_qb (i32) 21820 v2q15 __builtin_mips_repl_ph (imm_n512_511) 21821 v2q15 __builtin_mips_repl_ph (i32) 21822 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 21823 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 21824 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 21825 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 21826 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 21827 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 21828 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 21829 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 21830 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 21831 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 21832 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 21833 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 21834 i32 __builtin_mips_extr_w (a64, imm0_31) 21835 i32 __builtin_mips_extr_w (a64, i32) 21836 i32 __builtin_mips_extr_r_w (a64, imm0_31) 21837 i32 __builtin_mips_extr_s_h (a64, i32) 21838 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 21839 i32 __builtin_mips_extr_rs_w (a64, i32) 21840 i32 __builtin_mips_extr_s_h (a64, imm0_31) 21841 i32 __builtin_mips_extr_r_w (a64, i32) 21842 i32 __builtin_mips_extp (a64, imm0_31) 21843 i32 __builtin_mips_extp (a64, i32) 21844 i32 __builtin_mips_extpdp (a64, imm0_31) 21845 i32 __builtin_mips_extpdp (a64, i32) 21846 a64 __builtin_mips_shilo (a64, imm_n32_31) 21847 a64 __builtin_mips_shilo (a64, i32) 21848 a64 __builtin_mips_mthlip (a64, i32) 21849 void __builtin_mips_wrdsp (i32, imm0_63) 21850 i32 __builtin_mips_rddsp (imm0_63) 21851 i32 __builtin_mips_lbux (void *, i32) 21852 i32 __builtin_mips_lhx (void *, i32) 21853 i32 __builtin_mips_lwx (void *, i32) 21854 i32 __builtin_mips_bposge32 (void) 21855 21856 21857File: gcc.info, Node: MIPS Paired-Single Support, Next: PowerPC AltiVec Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 21858 218595.48.7 MIPS Paired-Single Support 21860--------------------------------- 21861 21862The MIPS64 architecture includes a number of instructions that operate 21863on pairs of single-precision floating-point values. Each pair is 21864packed into a 64-bit floating-point register, with one element being 21865designated the "upper half" and the other being designated the "lower 21866half". 21867 21868 GCC supports paired-single operations using both the generic vector 21869extensions (*note Vector Extensions::) and a collection of 21870MIPS-specific built-in functions. Both kinds of support are enabled by 21871the `-mpaired-single' command-line option. 21872 21873 The vector type associated with paired-single values is usually called 21874`v2sf'. It can be defined in C as follows: 21875 21876 typedef float v2sf __attribute__ ((vector_size (8))); 21877 21878 `v2sf' values are initialized in the same way as aggregates. For 21879example: 21880 21881 v2sf a = {1.5, 9.1}; 21882 v2sf b; 21883 float e, f; 21884 b = (v2sf) {e, f}; 21885 21886 _Note:_ The CPU's endianness determines which value is stored in the 21887upper half of a register and which value is stored in the lower half. 21888On little-endian targets, the first value is the lower one and the 21889second value is the upper one. The opposite order applies to 21890big-endian targets. For example, the code above will set the lower 21891half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 21892targets. 21893 21894* Menu: 21895 21896* Paired-Single Arithmetic:: 21897* Paired-Single Built-in Functions:: 21898* MIPS-3D Built-in Functions:: 21899 21900 21901File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support 21902 219035.48.7.1 Paired-Single Arithmetic 21904................................. 21905 21906The table below lists the `v2sf' operations for which hardware support 21907exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 21908value. 21909 21910C code MIPS instruction 21911`a + b' `add.ps' 21912`a - b' `sub.ps' 21913`-a' `neg.ps' 21914`a * b' `mul.ps' 21915`a * b + c' `madd.ps' 21916`a * b - c' `msub.ps' 21917`-(a * b + c)' `nmadd.ps' 21918`-(a * b - c)' `nmsub.ps' 21919`x ? a : b' `movn.ps'/`movz.ps' 21920 21921 Note that the multiply-accumulate instructions can be disabled using 21922the command-line option `-mno-fused-madd'. 21923 21924 21925File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Paired-Single Support 21926 219275.48.7.2 Paired-Single Built-in Functions 21928......................................... 21929 21930The following paired-single functions map directly to a particular MIPS 21931instruction. Please refer to the architecture specification for 21932details on what each instruction does. 21933 21934`v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 21935 Pair lower lower (`pll.ps'). 21936 21937`v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 21938 Pair upper lower (`pul.ps'). 21939 21940`v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 21941 Pair lower upper (`plu.ps'). 21942 21943`v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 21944 Pair upper upper (`puu.ps'). 21945 21946`v2sf __builtin_mips_cvt_ps_s (float, float)' 21947 Convert pair to paired single (`cvt.ps.s'). 21948 21949`float __builtin_mips_cvt_s_pl (v2sf)' 21950 Convert pair lower to single (`cvt.s.pl'). 21951 21952`float __builtin_mips_cvt_s_pu (v2sf)' 21953 Convert pair upper to single (`cvt.s.pu'). 21954 21955`v2sf __builtin_mips_abs_ps (v2sf)' 21956 Absolute value (`abs.ps'). 21957 21958`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 21959 Align variable (`alnv.ps'). 21960 21961 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 21962 otherwise the result will be unpredictable. Please read the 21963 instruction description for details. 21964 21965 The following multi-instruction functions are also available. In each 21966case, COND can be any of the 16 floating-point conditions: `f', `un', 21967`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 21968`lt', `nge', `le' or `ngt'. 21969 21970`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 21971`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 21972 Conditional move based on floating point comparison (`c.COND.ps', 21973 `movt.ps'/`movf.ps'). 21974 21975 The `movt' functions return the value X computed by: 21976 21977 c.COND.ps CC,A,B 21978 mov.ps X,C 21979 movt.ps X,D,CC 21980 21981 The `movf' functions are similar but use `movf.ps' instead of 21982 `movt.ps'. 21983 21984`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 21985`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 21986 Comparison of two paired-single values (`c.COND.ps', 21987 `bc1t'/`bc1f'). 21988 21989 These functions compare A and B using `c.COND.ps' and return 21990 either the upper or lower half of the result. For example: 21991 21992 v2sf a, b; 21993 if (__builtin_mips_upper_c_eq_ps (a, b)) 21994 upper_halves_are_equal (); 21995 else 21996 upper_halves_are_unequal (); 21997 21998 if (__builtin_mips_lower_c_eq_ps (a, b)) 21999 lower_halves_are_equal (); 22000 else 22001 lower_halves_are_unequal (); 22002 22003 22004File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support 22005 220065.48.7.3 MIPS-3D Built-in Functions 22007................................... 22008 22009The MIPS-3D Application-Specific Extension (ASE) includes additional 22010paired-single instructions that are designed to improve the performance 22011of 3D graphics operations. Support for these instructions is controlled 22012by the `-mips3d' command-line option. 22013 22014 The functions listed below map directly to a particular MIPS-3D 22015instruction. Please refer to the architecture specification for more 22016details on what each instruction does. 22017 22018`v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 22019 Reduction add (`addr.ps'). 22020 22021`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 22022 Reduction multiply (`mulr.ps'). 22023 22024`v2sf __builtin_mips_cvt_pw_ps (v2sf)' 22025 Convert paired single to paired word (`cvt.pw.ps'). 22026 22027`v2sf __builtin_mips_cvt_ps_pw (v2sf)' 22028 Convert paired word to paired single (`cvt.ps.pw'). 22029 22030`float __builtin_mips_recip1_s (float)' 22031`double __builtin_mips_recip1_d (double)' 22032`v2sf __builtin_mips_recip1_ps (v2sf)' 22033 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 22034 22035`float __builtin_mips_recip2_s (float, float)' 22036`double __builtin_mips_recip2_d (double, double)' 22037`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 22038 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 22039 22040`float __builtin_mips_rsqrt1_s (float)' 22041`double __builtin_mips_rsqrt1_d (double)' 22042`v2sf __builtin_mips_rsqrt1_ps (v2sf)' 22043 Reduced precision reciprocal square root (sequence step 1) 22044 (`rsqrt1.FMT'). 22045 22046`float __builtin_mips_rsqrt2_s (float, float)' 22047`double __builtin_mips_rsqrt2_d (double, double)' 22048`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 22049 Reduced precision reciprocal square root (sequence step 2) 22050 (`rsqrt2.FMT'). 22051 22052 The following multi-instruction functions are also available. In each 22053case, COND can be any of the 16 floating-point conditions: `f', `un', 22054`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 22055`lt', `nge', `le' or `ngt'. 22056 22057`int __builtin_mips_cabs_COND_s (float A, float B)' 22058`int __builtin_mips_cabs_COND_d (double A, double B)' 22059 Absolute comparison of two scalar values (`cabs.COND.FMT', 22060 `bc1t'/`bc1f'). 22061 22062 These functions compare A and B using `cabs.COND.s' or 22063 `cabs.COND.d' and return the result as a boolean value. For 22064 example: 22065 22066 float a, b; 22067 if (__builtin_mips_cabs_eq_s (a, b)) 22068 true (); 22069 else 22070 false (); 22071 22072`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 22073`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 22074 Absolute comparison of two paired-single values (`cabs.COND.ps', 22075 `bc1t'/`bc1f'). 22076 22077 These functions compare A and B using `cabs.COND.ps' and return 22078 either the upper or lower half of the result. For example: 22079 22080 v2sf a, b; 22081 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 22082 upper_halves_are_equal (); 22083 else 22084 upper_halves_are_unequal (); 22085 22086 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 22087 lower_halves_are_equal (); 22088 else 22089 lower_halves_are_unequal (); 22090 22091`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 22092`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 22093 Conditional move based on absolute comparison (`cabs.COND.ps', 22094 `movt.ps'/`movf.ps'). 22095 22096 The `movt' functions return the value X computed by: 22097 22098 cabs.COND.ps CC,A,B 22099 mov.ps X,C 22100 movt.ps X,D,CC 22101 22102 The `movf' functions are similar but use `movf.ps' instead of 22103 `movt.ps'. 22104 22105`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 22106`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 22107`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 22108`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 22109 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 22110 `bc1any2t'/`bc1any2f'). 22111 22112 These functions compare A and B using `c.COND.ps' or 22113 `cabs.COND.ps'. The `any' forms return true if either result is 22114 true and the `all' forms return true if both results are true. 22115 For example: 22116 22117 v2sf a, b; 22118 if (__builtin_mips_any_c_eq_ps (a, b)) 22119 one_is_true (); 22120 else 22121 both_are_false (); 22122 22123 if (__builtin_mips_all_c_eq_ps (a, b)) 22124 both_are_true (); 22125 else 22126 one_is_false (); 22127 22128`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22129`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22130`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22131`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 22132 Comparison of four paired-single values 22133 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 22134 22135 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 22136 with B and to compare C with D. The `any' forms return true if 22137 any of the four results are true and the `all' forms return true 22138 if all four results are true. For example: 22139 22140 v2sf a, b, c, d; 22141 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 22142 some_are_true (); 22143 else 22144 all_are_false (); 22145 22146 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 22147 all_are_true (); 22148 else 22149 some_are_false (); 22150 22151 22152File: gcc.info, Node: PowerPC AltiVec Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 22153 221545.48.8 PowerPC AltiVec Built-in Functions 22155----------------------------------------- 22156 22157GCC provides an interface for the PowerPC family of processors to access 22158the AltiVec operations described in Motorola's AltiVec Programming 22159Interface Manual. The interface is made available by including 22160`<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 22161supports the following vector types. 22162 22163 vector unsigned char 22164 vector signed char 22165 vector bool char 22166 22167 vector unsigned short 22168 vector signed short 22169 vector bool short 22170 vector pixel 22171 22172 vector unsigned int 22173 vector signed int 22174 vector bool int 22175 vector float 22176 22177 GCC's implementation of the high-level language interface available 22178from C and C++ code differs from Motorola's documentation in several 22179ways. 22180 22181 * A vector constant is a list of constant expressions within curly 22182 braces. 22183 22184 * A vector initializer requires no cast if the vector constant is of 22185 the same type as the variable it is initializing. 22186 22187 * If `signed' or `unsigned' is omitted, the signedness of the vector 22188 type is the default signedness of the base type. The default 22189 varies depending on the operating system, so a portable program 22190 should always specify the signedness. 22191 22192 * Compiling with `-maltivec' adds keywords `__vector', `__pixel', 22193 and `__bool'. Macros `vector', `pixel', and `bool' are defined in 22194 `<altivec.h>' and can be undefined. 22195 22196 * GCC allows using a `typedef' name as the type specifier for a 22197 vector type. 22198 22199 * For C, overloaded functions are implemented with macros so the 22200 following does not work: 22201 22202 vec_add ((vector signed int){1, 2, 3, 4}, foo); 22203 22204 Since `vec_add' is a macro, the vector constant in the example is 22205 treated as four separate arguments. Wrap the entire argument in 22206 parentheses for this to work. 22207 22208 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 22209GCC uses built-in functions to achieve the functionality in the 22210aforementioned header file, but they are not supported and are subject 22211to change without notice. 22212 22213 The following interfaces are supported for the generic and specific 22214AltiVec operations and the AltiVec predicates. In cases where there is 22215a direct mapping between generic and specific operations, only the 22216generic names are shown here, although the specific operations can also 22217be used. 22218 22219 Arguments that are documented as `const int' require literal integral 22220values within the range required for that operation. 22221 22222 vector signed char vec_abs (vector signed char); 22223 vector signed short vec_abs (vector signed short); 22224 vector signed int vec_abs (vector signed int); 22225 vector float vec_abs (vector float); 22226 22227 vector signed char vec_abss (vector signed char); 22228 vector signed short vec_abss (vector signed short); 22229 vector signed int vec_abss (vector signed int); 22230 22231 vector signed char vec_add (vector bool char, vector signed char); 22232 vector signed char vec_add (vector signed char, vector bool char); 22233 vector signed char vec_add (vector signed char, vector signed char); 22234 vector unsigned char vec_add (vector bool char, vector unsigned char); 22235 vector unsigned char vec_add (vector unsigned char, vector bool char); 22236 vector unsigned char vec_add (vector unsigned char, 22237 vector unsigned char); 22238 vector signed short vec_add (vector bool short, vector signed short); 22239 vector signed short vec_add (vector signed short, vector bool short); 22240 vector signed short vec_add (vector signed short, vector signed short); 22241 vector unsigned short vec_add (vector bool short, 22242 vector unsigned short); 22243 vector unsigned short vec_add (vector unsigned short, 22244 vector bool short); 22245 vector unsigned short vec_add (vector unsigned short, 22246 vector unsigned short); 22247 vector signed int vec_add (vector bool int, vector signed int); 22248 vector signed int vec_add (vector signed int, vector bool int); 22249 vector signed int vec_add (vector signed int, vector signed int); 22250 vector unsigned int vec_add (vector bool int, vector unsigned int); 22251 vector unsigned int vec_add (vector unsigned int, vector bool int); 22252 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 22253 vector float vec_add (vector float, vector float); 22254 22255 vector float vec_vaddfp (vector float, vector float); 22256 22257 vector signed int vec_vadduwm (vector bool int, vector signed int); 22258 vector signed int vec_vadduwm (vector signed int, vector bool int); 22259 vector signed int vec_vadduwm (vector signed int, vector signed int); 22260 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 22261 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 22262 vector unsigned int vec_vadduwm (vector unsigned int, 22263 vector unsigned int); 22264 22265 vector signed short vec_vadduhm (vector bool short, 22266 vector signed short); 22267 vector signed short vec_vadduhm (vector signed short, 22268 vector bool short); 22269 vector signed short vec_vadduhm (vector signed short, 22270 vector signed short); 22271 vector unsigned short vec_vadduhm (vector bool short, 22272 vector unsigned short); 22273 vector unsigned short vec_vadduhm (vector unsigned short, 22274 vector bool short); 22275 vector unsigned short vec_vadduhm (vector unsigned short, 22276 vector unsigned short); 22277 22278 vector signed char vec_vaddubm (vector bool char, vector signed char); 22279 vector signed char vec_vaddubm (vector signed char, vector bool char); 22280 vector signed char vec_vaddubm (vector signed char, vector signed char); 22281 vector unsigned char vec_vaddubm (vector bool char, 22282 vector unsigned char); 22283 vector unsigned char vec_vaddubm (vector unsigned char, 22284 vector bool char); 22285 vector unsigned char vec_vaddubm (vector unsigned char, 22286 vector unsigned char); 22287 22288 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 22289 22290 vector unsigned char vec_adds (vector bool char, vector unsigned char); 22291 vector unsigned char vec_adds (vector unsigned char, vector bool char); 22292 vector unsigned char vec_adds (vector unsigned char, 22293 vector unsigned char); 22294 vector signed char vec_adds (vector bool char, vector signed char); 22295 vector signed char vec_adds (vector signed char, vector bool char); 22296 vector signed char vec_adds (vector signed char, vector signed char); 22297 vector unsigned short vec_adds (vector bool short, 22298 vector unsigned short); 22299 vector unsigned short vec_adds (vector unsigned short, 22300 vector bool short); 22301 vector unsigned short vec_adds (vector unsigned short, 22302 vector unsigned short); 22303 vector signed short vec_adds (vector bool short, vector signed short); 22304 vector signed short vec_adds (vector signed short, vector bool short); 22305 vector signed short vec_adds (vector signed short, vector signed short); 22306 vector unsigned int vec_adds (vector bool int, vector unsigned int); 22307 vector unsigned int vec_adds (vector unsigned int, vector bool int); 22308 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 22309 vector signed int vec_adds (vector bool int, vector signed int); 22310 vector signed int vec_adds (vector signed int, vector bool int); 22311 vector signed int vec_adds (vector signed int, vector signed int); 22312 22313 vector signed int vec_vaddsws (vector bool int, vector signed int); 22314 vector signed int vec_vaddsws (vector signed int, vector bool int); 22315 vector signed int vec_vaddsws (vector signed int, vector signed int); 22316 22317 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 22318 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 22319 vector unsigned int vec_vadduws (vector unsigned int, 22320 vector unsigned int); 22321 22322 vector signed short vec_vaddshs (vector bool short, 22323 vector signed short); 22324 vector signed short vec_vaddshs (vector signed short, 22325 vector bool short); 22326 vector signed short vec_vaddshs (vector signed short, 22327 vector signed short); 22328 22329 vector unsigned short vec_vadduhs (vector bool short, 22330 vector unsigned short); 22331 vector unsigned short vec_vadduhs (vector unsigned short, 22332 vector bool short); 22333 vector unsigned short vec_vadduhs (vector unsigned short, 22334 vector unsigned short); 22335 22336 vector signed char vec_vaddsbs (vector bool char, vector signed char); 22337 vector signed char vec_vaddsbs (vector signed char, vector bool char); 22338 vector signed char vec_vaddsbs (vector signed char, vector signed char); 22339 22340 vector unsigned char vec_vaddubs (vector bool char, 22341 vector unsigned char); 22342 vector unsigned char vec_vaddubs (vector unsigned char, 22343 vector bool char); 22344 vector unsigned char vec_vaddubs (vector unsigned char, 22345 vector unsigned char); 22346 22347 vector float vec_and (vector float, vector float); 22348 vector float vec_and (vector float, vector bool int); 22349 vector float vec_and (vector bool int, vector float); 22350 vector bool int vec_and (vector bool int, vector bool int); 22351 vector signed int vec_and (vector bool int, vector signed int); 22352 vector signed int vec_and (vector signed int, vector bool int); 22353 vector signed int vec_and (vector signed int, vector signed int); 22354 vector unsigned int vec_and (vector bool int, vector unsigned int); 22355 vector unsigned int vec_and (vector unsigned int, vector bool int); 22356 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 22357 vector bool short vec_and (vector bool short, vector bool short); 22358 vector signed short vec_and (vector bool short, vector signed short); 22359 vector signed short vec_and (vector signed short, vector bool short); 22360 vector signed short vec_and (vector signed short, vector signed short); 22361 vector unsigned short vec_and (vector bool short, 22362 vector unsigned short); 22363 vector unsigned short vec_and (vector unsigned short, 22364 vector bool short); 22365 vector unsigned short vec_and (vector unsigned short, 22366 vector unsigned short); 22367 vector signed char vec_and (vector bool char, vector signed char); 22368 vector bool char vec_and (vector bool char, vector bool char); 22369 vector signed char vec_and (vector signed char, vector bool char); 22370 vector signed char vec_and (vector signed char, vector signed char); 22371 vector unsigned char vec_and (vector bool char, vector unsigned char); 22372 vector unsigned char vec_and (vector unsigned char, vector bool char); 22373 vector unsigned char vec_and (vector unsigned char, 22374 vector unsigned char); 22375 22376 vector float vec_andc (vector float, vector float); 22377 vector float vec_andc (vector float, vector bool int); 22378 vector float vec_andc (vector bool int, vector float); 22379 vector bool int vec_andc (vector bool int, vector bool int); 22380 vector signed int vec_andc (vector bool int, vector signed int); 22381 vector signed int vec_andc (vector signed int, vector bool int); 22382 vector signed int vec_andc (vector signed int, vector signed int); 22383 vector unsigned int vec_andc (vector bool int, vector unsigned int); 22384 vector unsigned int vec_andc (vector unsigned int, vector bool int); 22385 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 22386 vector bool short vec_andc (vector bool short, vector bool short); 22387 vector signed short vec_andc (vector bool short, vector signed short); 22388 vector signed short vec_andc (vector signed short, vector bool short); 22389 vector signed short vec_andc (vector signed short, vector signed short); 22390 vector unsigned short vec_andc (vector bool short, 22391 vector unsigned short); 22392 vector unsigned short vec_andc (vector unsigned short, 22393 vector bool short); 22394 vector unsigned short vec_andc (vector unsigned short, 22395 vector unsigned short); 22396 vector signed char vec_andc (vector bool char, vector signed char); 22397 vector bool char vec_andc (vector bool char, vector bool char); 22398 vector signed char vec_andc (vector signed char, vector bool char); 22399 vector signed char vec_andc (vector signed char, vector signed char); 22400 vector unsigned char vec_andc (vector bool char, vector unsigned char); 22401 vector unsigned char vec_andc (vector unsigned char, vector bool char); 22402 vector unsigned char vec_andc (vector unsigned char, 22403 vector unsigned char); 22404 22405 vector unsigned char vec_avg (vector unsigned char, 22406 vector unsigned char); 22407 vector signed char vec_avg (vector signed char, vector signed char); 22408 vector unsigned short vec_avg (vector unsigned short, 22409 vector unsigned short); 22410 vector signed short vec_avg (vector signed short, vector signed short); 22411 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 22412 vector signed int vec_avg (vector signed int, vector signed int); 22413 22414 vector signed int vec_vavgsw (vector signed int, vector signed int); 22415 22416 vector unsigned int vec_vavguw (vector unsigned int, 22417 vector unsigned int); 22418 22419 vector signed short vec_vavgsh (vector signed short, 22420 vector signed short); 22421 22422 vector unsigned short vec_vavguh (vector unsigned short, 22423 vector unsigned short); 22424 22425 vector signed char vec_vavgsb (vector signed char, vector signed char); 22426 22427 vector unsigned char vec_vavgub (vector unsigned char, 22428 vector unsigned char); 22429 22430 vector float vec_ceil (vector float); 22431 22432 vector signed int vec_cmpb (vector float, vector float); 22433 22434 vector bool char vec_cmpeq (vector signed char, vector signed char); 22435 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 22436 vector bool short vec_cmpeq (vector signed short, vector signed short); 22437 vector bool short vec_cmpeq (vector unsigned short, 22438 vector unsigned short); 22439 vector bool int vec_cmpeq (vector signed int, vector signed int); 22440 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 22441 vector bool int vec_cmpeq (vector float, vector float); 22442 22443 vector bool int vec_vcmpeqfp (vector float, vector float); 22444 22445 vector bool int vec_vcmpequw (vector signed int, vector signed int); 22446 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 22447 22448 vector bool short vec_vcmpequh (vector signed short, 22449 vector signed short); 22450 vector bool short vec_vcmpequh (vector unsigned short, 22451 vector unsigned short); 22452 22453 vector bool char vec_vcmpequb (vector signed char, vector signed char); 22454 vector bool char vec_vcmpequb (vector unsigned char, 22455 vector unsigned char); 22456 22457 vector bool int vec_cmpge (vector float, vector float); 22458 22459 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 22460 vector bool char vec_cmpgt (vector signed char, vector signed char); 22461 vector bool short vec_cmpgt (vector unsigned short, 22462 vector unsigned short); 22463 vector bool short vec_cmpgt (vector signed short, vector signed short); 22464 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 22465 vector bool int vec_cmpgt (vector signed int, vector signed int); 22466 vector bool int vec_cmpgt (vector float, vector float); 22467 22468 vector bool int vec_vcmpgtfp (vector float, vector float); 22469 22470 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 22471 22472 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 22473 22474 vector bool short vec_vcmpgtsh (vector signed short, 22475 vector signed short); 22476 22477 vector bool short vec_vcmpgtuh (vector unsigned short, 22478 vector unsigned short); 22479 22480 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 22481 22482 vector bool char vec_vcmpgtub (vector unsigned char, 22483 vector unsigned char); 22484 22485 vector bool int vec_cmple (vector float, vector float); 22486 22487 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 22488 vector bool char vec_cmplt (vector signed char, vector signed char); 22489 vector bool short vec_cmplt (vector unsigned short, 22490 vector unsigned short); 22491 vector bool short vec_cmplt (vector signed short, vector signed short); 22492 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 22493 vector bool int vec_cmplt (vector signed int, vector signed int); 22494 vector bool int vec_cmplt (vector float, vector float); 22495 22496 vector float vec_ctf (vector unsigned int, const int); 22497 vector float vec_ctf (vector signed int, const int); 22498 22499 vector float vec_vcfsx (vector signed int, const int); 22500 22501 vector float vec_vcfux (vector unsigned int, const int); 22502 22503 vector signed int vec_cts (vector float, const int); 22504 22505 vector unsigned int vec_ctu (vector float, const int); 22506 22507 void vec_dss (const int); 22508 22509 void vec_dssall (void); 22510 22511 void vec_dst (const vector unsigned char *, int, const int); 22512 void vec_dst (const vector signed char *, int, const int); 22513 void vec_dst (const vector bool char *, int, const int); 22514 void vec_dst (const vector unsigned short *, int, const int); 22515 void vec_dst (const vector signed short *, int, const int); 22516 void vec_dst (const vector bool short *, int, const int); 22517 void vec_dst (const vector pixel *, int, const int); 22518 void vec_dst (const vector unsigned int *, int, const int); 22519 void vec_dst (const vector signed int *, int, const int); 22520 void vec_dst (const vector bool int *, int, const int); 22521 void vec_dst (const vector float *, int, const int); 22522 void vec_dst (const unsigned char *, int, const int); 22523 void vec_dst (const signed char *, int, const int); 22524 void vec_dst (const unsigned short *, int, const int); 22525 void vec_dst (const short *, int, const int); 22526 void vec_dst (const unsigned int *, int, const int); 22527 void vec_dst (const int *, int, const int); 22528 void vec_dst (const unsigned long *, int, const int); 22529 void vec_dst (const long *, int, const int); 22530 void vec_dst (const float *, int, const int); 22531 22532 void vec_dstst (const vector unsigned char *, int, const int); 22533 void vec_dstst (const vector signed char *, int, const int); 22534 void vec_dstst (const vector bool char *, int, const int); 22535 void vec_dstst (const vector unsigned short *, int, const int); 22536 void vec_dstst (const vector signed short *, int, const int); 22537 void vec_dstst (const vector bool short *, int, const int); 22538 void vec_dstst (const vector pixel *, int, const int); 22539 void vec_dstst (const vector unsigned int *, int, const int); 22540 void vec_dstst (const vector signed int *, int, const int); 22541 void vec_dstst (const vector bool int *, int, const int); 22542 void vec_dstst (const vector float *, int, const int); 22543 void vec_dstst (const unsigned char *, int, const int); 22544 void vec_dstst (const signed char *, int, const int); 22545 void vec_dstst (const unsigned short *, int, const int); 22546 void vec_dstst (const short *, int, const int); 22547 void vec_dstst (const unsigned int *, int, const int); 22548 void vec_dstst (const int *, int, const int); 22549 void vec_dstst (const unsigned long *, int, const int); 22550 void vec_dstst (const long *, int, const int); 22551 void vec_dstst (const float *, int, const int); 22552 22553 void vec_dststt (const vector unsigned char *, int, const int); 22554 void vec_dststt (const vector signed char *, int, const int); 22555 void vec_dststt (const vector bool char *, int, const int); 22556 void vec_dststt (const vector unsigned short *, int, const int); 22557 void vec_dststt (const vector signed short *, int, const int); 22558 void vec_dststt (const vector bool short *, int, const int); 22559 void vec_dststt (const vector pixel *, int, const int); 22560 void vec_dststt (const vector unsigned int *, int, const int); 22561 void vec_dststt (const vector signed int *, int, const int); 22562 void vec_dststt (const vector bool int *, int, const int); 22563 void vec_dststt (const vector float *, int, const int); 22564 void vec_dststt (const unsigned char *, int, const int); 22565 void vec_dststt (const signed char *, int, const int); 22566 void vec_dststt (const unsigned short *, int, const int); 22567 void vec_dststt (const short *, int, const int); 22568 void vec_dststt (const unsigned int *, int, const int); 22569 void vec_dststt (const int *, int, const int); 22570 void vec_dststt (const unsigned long *, int, const int); 22571 void vec_dststt (const long *, int, const int); 22572 void vec_dststt (const float *, int, const int); 22573 22574 void vec_dstt (const vector unsigned char *, int, const int); 22575 void vec_dstt (const vector signed char *, int, const int); 22576 void vec_dstt (const vector bool char *, int, const int); 22577 void vec_dstt (const vector unsigned short *, int, const int); 22578 void vec_dstt (const vector signed short *, int, const int); 22579 void vec_dstt (const vector bool short *, int, const int); 22580 void vec_dstt (const vector pixel *, int, const int); 22581 void vec_dstt (const vector unsigned int *, int, const int); 22582 void vec_dstt (const vector signed int *, int, const int); 22583 void vec_dstt (const vector bool int *, int, const int); 22584 void vec_dstt (const vector float *, int, const int); 22585 void vec_dstt (const unsigned char *, int, const int); 22586 void vec_dstt (const signed char *, int, const int); 22587 void vec_dstt (const unsigned short *, int, const int); 22588 void vec_dstt (const short *, int, const int); 22589 void vec_dstt (const unsigned int *, int, const int); 22590 void vec_dstt (const int *, int, const int); 22591 void vec_dstt (const unsigned long *, int, const int); 22592 void vec_dstt (const long *, int, const int); 22593 void vec_dstt (const float *, int, const int); 22594 22595 vector float vec_expte (vector float); 22596 22597 vector float vec_floor (vector float); 22598 22599 vector float vec_ld (int, const vector float *); 22600 vector float vec_ld (int, const float *); 22601 vector bool int vec_ld (int, const vector bool int *); 22602 vector signed int vec_ld (int, const vector signed int *); 22603 vector signed int vec_ld (int, const int *); 22604 vector signed int vec_ld (int, const long *); 22605 vector unsigned int vec_ld (int, const vector unsigned int *); 22606 vector unsigned int vec_ld (int, const unsigned int *); 22607 vector unsigned int vec_ld (int, const unsigned long *); 22608 vector bool short vec_ld (int, const vector bool short *); 22609 vector pixel vec_ld (int, const vector pixel *); 22610 vector signed short vec_ld (int, const vector signed short *); 22611 vector signed short vec_ld (int, const short *); 22612 vector unsigned short vec_ld (int, const vector unsigned short *); 22613 vector unsigned short vec_ld (int, const unsigned short *); 22614 vector bool char vec_ld (int, const vector bool char *); 22615 vector signed char vec_ld (int, const vector signed char *); 22616 vector signed char vec_ld (int, const signed char *); 22617 vector unsigned char vec_ld (int, const vector unsigned char *); 22618 vector unsigned char vec_ld (int, const unsigned char *); 22619 22620 vector signed char vec_lde (int, const signed char *); 22621 vector unsigned char vec_lde (int, const unsigned char *); 22622 vector signed short vec_lde (int, const short *); 22623 vector unsigned short vec_lde (int, const unsigned short *); 22624 vector float vec_lde (int, const float *); 22625 vector signed int vec_lde (int, const int *); 22626 vector unsigned int vec_lde (int, const unsigned int *); 22627 vector signed int vec_lde (int, const long *); 22628 vector unsigned int vec_lde (int, const unsigned long *); 22629 22630 vector float vec_lvewx (int, float *); 22631 vector signed int vec_lvewx (int, int *); 22632 vector unsigned int vec_lvewx (int, unsigned int *); 22633 vector signed int vec_lvewx (int, long *); 22634 vector unsigned int vec_lvewx (int, unsigned long *); 22635 22636 vector signed short vec_lvehx (int, short *); 22637 vector unsigned short vec_lvehx (int, unsigned short *); 22638 22639 vector signed char vec_lvebx (int, char *); 22640 vector unsigned char vec_lvebx (int, unsigned char *); 22641 22642 vector float vec_ldl (int, const vector float *); 22643 vector float vec_ldl (int, const float *); 22644 vector bool int vec_ldl (int, const vector bool int *); 22645 vector signed int vec_ldl (int, const vector signed int *); 22646 vector signed int vec_ldl (int, const int *); 22647 vector signed int vec_ldl (int, const long *); 22648 vector unsigned int vec_ldl (int, const vector unsigned int *); 22649 vector unsigned int vec_ldl (int, const unsigned int *); 22650 vector unsigned int vec_ldl (int, const unsigned long *); 22651 vector bool short vec_ldl (int, const vector bool short *); 22652 vector pixel vec_ldl (int, const vector pixel *); 22653 vector signed short vec_ldl (int, const vector signed short *); 22654 vector signed short vec_ldl (int, const short *); 22655 vector unsigned short vec_ldl (int, const vector unsigned short *); 22656 vector unsigned short vec_ldl (int, const unsigned short *); 22657 vector bool char vec_ldl (int, const vector bool char *); 22658 vector signed char vec_ldl (int, const vector signed char *); 22659 vector signed char vec_ldl (int, const signed char *); 22660 vector unsigned char vec_ldl (int, const vector unsigned char *); 22661 vector unsigned char vec_ldl (int, const unsigned char *); 22662 22663 vector float vec_loge (vector float); 22664 22665 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 22666 vector unsigned char vec_lvsl (int, const volatile signed char *); 22667 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 22668 vector unsigned char vec_lvsl (int, const volatile short *); 22669 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 22670 vector unsigned char vec_lvsl (int, const volatile int *); 22671 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 22672 vector unsigned char vec_lvsl (int, const volatile long *); 22673 vector unsigned char vec_lvsl (int, const volatile float *); 22674 22675 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 22676 vector unsigned char vec_lvsr (int, const volatile signed char *); 22677 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 22678 vector unsigned char vec_lvsr (int, const volatile short *); 22679 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 22680 vector unsigned char vec_lvsr (int, const volatile int *); 22681 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 22682 vector unsigned char vec_lvsr (int, const volatile long *); 22683 vector unsigned char vec_lvsr (int, const volatile float *); 22684 22685 vector float vec_madd (vector float, vector float, vector float); 22686 22687 vector signed short vec_madds (vector signed short, 22688 vector signed short, 22689 vector signed short); 22690 22691 vector unsigned char vec_max (vector bool char, vector unsigned char); 22692 vector unsigned char vec_max (vector unsigned char, vector bool char); 22693 vector unsigned char vec_max (vector unsigned char, 22694 vector unsigned char); 22695 vector signed char vec_max (vector bool char, vector signed char); 22696 vector signed char vec_max (vector signed char, vector bool char); 22697 vector signed char vec_max (vector signed char, vector signed char); 22698 vector unsigned short vec_max (vector bool short, 22699 vector unsigned short); 22700 vector unsigned short vec_max (vector unsigned short, 22701 vector bool short); 22702 vector unsigned short vec_max (vector unsigned short, 22703 vector unsigned short); 22704 vector signed short vec_max (vector bool short, vector signed short); 22705 vector signed short vec_max (vector signed short, vector bool short); 22706 vector signed short vec_max (vector signed short, vector signed short); 22707 vector unsigned int vec_max (vector bool int, vector unsigned int); 22708 vector unsigned int vec_max (vector unsigned int, vector bool int); 22709 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 22710 vector signed int vec_max (vector bool int, vector signed int); 22711 vector signed int vec_max (vector signed int, vector bool int); 22712 vector signed int vec_max (vector signed int, vector signed int); 22713 vector float vec_max (vector float, vector float); 22714 22715 vector float vec_vmaxfp (vector float, vector float); 22716 22717 vector signed int vec_vmaxsw (vector bool int, vector signed int); 22718 vector signed int vec_vmaxsw (vector signed int, vector bool int); 22719 vector signed int vec_vmaxsw (vector signed int, vector signed int); 22720 22721 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 22722 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 22723 vector unsigned int vec_vmaxuw (vector unsigned int, 22724 vector unsigned int); 22725 22726 vector signed short vec_vmaxsh (vector bool short, vector signed short); 22727 vector signed short vec_vmaxsh (vector signed short, vector bool short); 22728 vector signed short vec_vmaxsh (vector signed short, 22729 vector signed short); 22730 22731 vector unsigned short vec_vmaxuh (vector bool short, 22732 vector unsigned short); 22733 vector unsigned short vec_vmaxuh (vector unsigned short, 22734 vector bool short); 22735 vector unsigned short vec_vmaxuh (vector unsigned short, 22736 vector unsigned short); 22737 22738 vector signed char vec_vmaxsb (vector bool char, vector signed char); 22739 vector signed char vec_vmaxsb (vector signed char, vector bool char); 22740 vector signed char vec_vmaxsb (vector signed char, vector signed char); 22741 22742 vector unsigned char vec_vmaxub (vector bool char, 22743 vector unsigned char); 22744 vector unsigned char vec_vmaxub (vector unsigned char, 22745 vector bool char); 22746 vector unsigned char vec_vmaxub (vector unsigned char, 22747 vector unsigned char); 22748 22749 vector bool char vec_mergeh (vector bool char, vector bool char); 22750 vector signed char vec_mergeh (vector signed char, vector signed char); 22751 vector unsigned char vec_mergeh (vector unsigned char, 22752 vector unsigned char); 22753 vector bool short vec_mergeh (vector bool short, vector bool short); 22754 vector pixel vec_mergeh (vector pixel, vector pixel); 22755 vector signed short vec_mergeh (vector signed short, 22756 vector signed short); 22757 vector unsigned short vec_mergeh (vector unsigned short, 22758 vector unsigned short); 22759 vector float vec_mergeh (vector float, vector float); 22760 vector bool int vec_mergeh (vector bool int, vector bool int); 22761 vector signed int vec_mergeh (vector signed int, vector signed int); 22762 vector unsigned int vec_mergeh (vector unsigned int, 22763 vector unsigned int); 22764 22765 vector float vec_vmrghw (vector float, vector float); 22766 vector bool int vec_vmrghw (vector bool int, vector bool int); 22767 vector signed int vec_vmrghw (vector signed int, vector signed int); 22768 vector unsigned int vec_vmrghw (vector unsigned int, 22769 vector unsigned int); 22770 22771 vector bool short vec_vmrghh (vector bool short, vector bool short); 22772 vector signed short vec_vmrghh (vector signed short, 22773 vector signed short); 22774 vector unsigned short vec_vmrghh (vector unsigned short, 22775 vector unsigned short); 22776 vector pixel vec_vmrghh (vector pixel, vector pixel); 22777 22778 vector bool char vec_vmrghb (vector bool char, vector bool char); 22779 vector signed char vec_vmrghb (vector signed char, vector signed char); 22780 vector unsigned char vec_vmrghb (vector unsigned char, 22781 vector unsigned char); 22782 22783 vector bool char vec_mergel (vector bool char, vector bool char); 22784 vector signed char vec_mergel (vector signed char, vector signed char); 22785 vector unsigned char vec_mergel (vector unsigned char, 22786 vector unsigned char); 22787 vector bool short vec_mergel (vector bool short, vector bool short); 22788 vector pixel vec_mergel (vector pixel, vector pixel); 22789 vector signed short vec_mergel (vector signed short, 22790 vector signed short); 22791 vector unsigned short vec_mergel (vector unsigned short, 22792 vector unsigned short); 22793 vector float vec_mergel (vector float, vector float); 22794 vector bool int vec_mergel (vector bool int, vector bool int); 22795 vector signed int vec_mergel (vector signed int, vector signed int); 22796 vector unsigned int vec_mergel (vector unsigned int, 22797 vector unsigned int); 22798 22799 vector float vec_vmrglw (vector float, vector float); 22800 vector signed int vec_vmrglw (vector signed int, vector signed int); 22801 vector unsigned int vec_vmrglw (vector unsigned int, 22802 vector unsigned int); 22803 vector bool int vec_vmrglw (vector bool int, vector bool int); 22804 22805 vector bool short vec_vmrglh (vector bool short, vector bool short); 22806 vector signed short vec_vmrglh (vector signed short, 22807 vector signed short); 22808 vector unsigned short vec_vmrglh (vector unsigned short, 22809 vector unsigned short); 22810 vector pixel vec_vmrglh (vector pixel, vector pixel); 22811 22812 vector bool char vec_vmrglb (vector bool char, vector bool char); 22813 vector signed char vec_vmrglb (vector signed char, vector signed char); 22814 vector unsigned char vec_vmrglb (vector unsigned char, 22815 vector unsigned char); 22816 22817 vector unsigned short vec_mfvscr (void); 22818 22819 vector unsigned char vec_min (vector bool char, vector unsigned char); 22820 vector unsigned char vec_min (vector unsigned char, vector bool char); 22821 vector unsigned char vec_min (vector unsigned char, 22822 vector unsigned char); 22823 vector signed char vec_min (vector bool char, vector signed char); 22824 vector signed char vec_min (vector signed char, vector bool char); 22825 vector signed char vec_min (vector signed char, vector signed char); 22826 vector unsigned short vec_min (vector bool short, 22827 vector unsigned short); 22828 vector unsigned short vec_min (vector unsigned short, 22829 vector bool short); 22830 vector unsigned short vec_min (vector unsigned short, 22831 vector unsigned short); 22832 vector signed short vec_min (vector bool short, vector signed short); 22833 vector signed short vec_min (vector signed short, vector bool short); 22834 vector signed short vec_min (vector signed short, vector signed short); 22835 vector unsigned int vec_min (vector bool int, vector unsigned int); 22836 vector unsigned int vec_min (vector unsigned int, vector bool int); 22837 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 22838 vector signed int vec_min (vector bool int, vector signed int); 22839 vector signed int vec_min (vector signed int, vector bool int); 22840 vector signed int vec_min (vector signed int, vector signed int); 22841 vector float vec_min (vector float, vector float); 22842 22843 vector float vec_vminfp (vector float, vector float); 22844 22845 vector signed int vec_vminsw (vector bool int, vector signed int); 22846 vector signed int vec_vminsw (vector signed int, vector bool int); 22847 vector signed int vec_vminsw (vector signed int, vector signed int); 22848 22849 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 22850 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 22851 vector unsigned int vec_vminuw (vector unsigned int, 22852 vector unsigned int); 22853 22854 vector signed short vec_vminsh (vector bool short, vector signed short); 22855 vector signed short vec_vminsh (vector signed short, vector bool short); 22856 vector signed short vec_vminsh (vector signed short, 22857 vector signed short); 22858 22859 vector unsigned short vec_vminuh (vector bool short, 22860 vector unsigned short); 22861 vector unsigned short vec_vminuh (vector unsigned short, 22862 vector bool short); 22863 vector unsigned short vec_vminuh (vector unsigned short, 22864 vector unsigned short); 22865 22866 vector signed char vec_vminsb (vector bool char, vector signed char); 22867 vector signed char vec_vminsb (vector signed char, vector bool char); 22868 vector signed char vec_vminsb (vector signed char, vector signed char); 22869 22870 vector unsigned char vec_vminub (vector bool char, 22871 vector unsigned char); 22872 vector unsigned char vec_vminub (vector unsigned char, 22873 vector bool char); 22874 vector unsigned char vec_vminub (vector unsigned char, 22875 vector unsigned char); 22876 22877 vector signed short vec_mladd (vector signed short, 22878 vector signed short, 22879 vector signed short); 22880 vector signed short vec_mladd (vector signed short, 22881 vector unsigned short, 22882 vector unsigned short); 22883 vector signed short vec_mladd (vector unsigned short, 22884 vector signed short, 22885 vector signed short); 22886 vector unsigned short vec_mladd (vector unsigned short, 22887 vector unsigned short, 22888 vector unsigned short); 22889 22890 vector signed short vec_mradds (vector signed short, 22891 vector signed short, 22892 vector signed short); 22893 22894 vector unsigned int vec_msum (vector unsigned char, 22895 vector unsigned char, 22896 vector unsigned int); 22897 vector signed int vec_msum (vector signed char, 22898 vector unsigned char, 22899 vector signed int); 22900 vector unsigned int vec_msum (vector unsigned short, 22901 vector unsigned short, 22902 vector unsigned int); 22903 vector signed int vec_msum (vector signed short, 22904 vector signed short, 22905 vector signed int); 22906 22907 vector signed int vec_vmsumshm (vector signed short, 22908 vector signed short, 22909 vector signed int); 22910 22911 vector unsigned int vec_vmsumuhm (vector unsigned short, 22912 vector unsigned short, 22913 vector unsigned int); 22914 22915 vector signed int vec_vmsummbm (vector signed char, 22916 vector unsigned char, 22917 vector signed int); 22918 22919 vector unsigned int vec_vmsumubm (vector unsigned char, 22920 vector unsigned char, 22921 vector unsigned int); 22922 22923 vector unsigned int vec_msums (vector unsigned short, 22924 vector unsigned short, 22925 vector unsigned int); 22926 vector signed int vec_msums (vector signed short, 22927 vector signed short, 22928 vector signed int); 22929 22930 vector signed int vec_vmsumshs (vector signed short, 22931 vector signed short, 22932 vector signed int); 22933 22934 vector unsigned int vec_vmsumuhs (vector unsigned short, 22935 vector unsigned short, 22936 vector unsigned int); 22937 22938 void vec_mtvscr (vector signed int); 22939 void vec_mtvscr (vector unsigned int); 22940 void vec_mtvscr (vector bool int); 22941 void vec_mtvscr (vector signed short); 22942 void vec_mtvscr (vector unsigned short); 22943 void vec_mtvscr (vector bool short); 22944 void vec_mtvscr (vector pixel); 22945 void vec_mtvscr (vector signed char); 22946 void vec_mtvscr (vector unsigned char); 22947 void vec_mtvscr (vector bool char); 22948 22949 vector unsigned short vec_mule (vector unsigned char, 22950 vector unsigned char); 22951 vector signed short vec_mule (vector signed char, 22952 vector signed char); 22953 vector unsigned int vec_mule (vector unsigned short, 22954 vector unsigned short); 22955 vector signed int vec_mule (vector signed short, vector signed short); 22956 22957 vector signed int vec_vmulesh (vector signed short, 22958 vector signed short); 22959 22960 vector unsigned int vec_vmuleuh (vector unsigned short, 22961 vector unsigned short); 22962 22963 vector signed short vec_vmulesb (vector signed char, 22964 vector signed char); 22965 22966 vector unsigned short vec_vmuleub (vector unsigned char, 22967 vector unsigned char); 22968 22969 vector unsigned short vec_mulo (vector unsigned char, 22970 vector unsigned char); 22971 vector signed short vec_mulo (vector signed char, vector signed char); 22972 vector unsigned int vec_mulo (vector unsigned short, 22973 vector unsigned short); 22974 vector signed int vec_mulo (vector signed short, vector signed short); 22975 22976 vector signed int vec_vmulosh (vector signed short, 22977 vector signed short); 22978 22979 vector unsigned int vec_vmulouh (vector unsigned short, 22980 vector unsigned short); 22981 22982 vector signed short vec_vmulosb (vector signed char, 22983 vector signed char); 22984 22985 vector unsigned short vec_vmuloub (vector unsigned char, 22986 vector unsigned char); 22987 22988 vector float vec_nmsub (vector float, vector float, vector float); 22989 22990 vector float vec_nor (vector float, vector float); 22991 vector signed int vec_nor (vector signed int, vector signed int); 22992 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 22993 vector bool int vec_nor (vector bool int, vector bool int); 22994 vector signed short vec_nor (vector signed short, vector signed short); 22995 vector unsigned short vec_nor (vector unsigned short, 22996 vector unsigned short); 22997 vector bool short vec_nor (vector bool short, vector bool short); 22998 vector signed char vec_nor (vector signed char, vector signed char); 22999 vector unsigned char vec_nor (vector unsigned char, 23000 vector unsigned char); 23001 vector bool char vec_nor (vector bool char, vector bool char); 23002 23003 vector float vec_or (vector float, vector float); 23004 vector float vec_or (vector float, vector bool int); 23005 vector float vec_or (vector bool int, vector float); 23006 vector bool int vec_or (vector bool int, vector bool int); 23007 vector signed int vec_or (vector bool int, vector signed int); 23008 vector signed int vec_or (vector signed int, vector bool int); 23009 vector signed int vec_or (vector signed int, vector signed int); 23010 vector unsigned int vec_or (vector bool int, vector unsigned int); 23011 vector unsigned int vec_or (vector unsigned int, vector bool int); 23012 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 23013 vector bool short vec_or (vector bool short, vector bool short); 23014 vector signed short vec_or (vector bool short, vector signed short); 23015 vector signed short vec_or (vector signed short, vector bool short); 23016 vector signed short vec_or (vector signed short, vector signed short); 23017 vector unsigned short vec_or (vector bool short, vector unsigned short); 23018 vector unsigned short vec_or (vector unsigned short, vector bool short); 23019 vector unsigned short vec_or (vector unsigned short, 23020 vector unsigned short); 23021 vector signed char vec_or (vector bool char, vector signed char); 23022 vector bool char vec_or (vector bool char, vector bool char); 23023 vector signed char vec_or (vector signed char, vector bool char); 23024 vector signed char vec_or (vector signed char, vector signed char); 23025 vector unsigned char vec_or (vector bool char, vector unsigned char); 23026 vector unsigned char vec_or (vector unsigned char, vector bool char); 23027 vector unsigned char vec_or (vector unsigned char, 23028 vector unsigned char); 23029 23030 vector signed char vec_pack (vector signed short, vector signed short); 23031 vector unsigned char vec_pack (vector unsigned short, 23032 vector unsigned short); 23033 vector bool char vec_pack (vector bool short, vector bool short); 23034 vector signed short vec_pack (vector signed int, vector signed int); 23035 vector unsigned short vec_pack (vector unsigned int, 23036 vector unsigned int); 23037 vector bool short vec_pack (vector bool int, vector bool int); 23038 23039 vector bool short vec_vpkuwum (vector bool int, vector bool int); 23040 vector signed short vec_vpkuwum (vector signed int, vector signed int); 23041 vector unsigned short vec_vpkuwum (vector unsigned int, 23042 vector unsigned int); 23043 23044 vector bool char vec_vpkuhum (vector bool short, vector bool short); 23045 vector signed char vec_vpkuhum (vector signed short, 23046 vector signed short); 23047 vector unsigned char vec_vpkuhum (vector unsigned short, 23048 vector unsigned short); 23049 23050 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 23051 23052 vector unsigned char vec_packs (vector unsigned short, 23053 vector unsigned short); 23054 vector signed char vec_packs (vector signed short, vector signed short); 23055 vector unsigned short vec_packs (vector unsigned int, 23056 vector unsigned int); 23057 vector signed short vec_packs (vector signed int, vector signed int); 23058 23059 vector signed short vec_vpkswss (vector signed int, vector signed int); 23060 23061 vector unsigned short vec_vpkuwus (vector unsigned int, 23062 vector unsigned int); 23063 23064 vector signed char vec_vpkshss (vector signed short, 23065 vector signed short); 23066 23067 vector unsigned char vec_vpkuhus (vector unsigned short, 23068 vector unsigned short); 23069 23070 vector unsigned char vec_packsu (vector unsigned short, 23071 vector unsigned short); 23072 vector unsigned char vec_packsu (vector signed short, 23073 vector signed short); 23074 vector unsigned short vec_packsu (vector unsigned int, 23075 vector unsigned int); 23076 vector unsigned short vec_packsu (vector signed int, vector signed int); 23077 23078 vector unsigned short vec_vpkswus (vector signed int, 23079 vector signed int); 23080 23081 vector unsigned char vec_vpkshus (vector signed short, 23082 vector signed short); 23083 23084 vector float vec_perm (vector float, 23085 vector float, 23086 vector unsigned char); 23087 vector signed int vec_perm (vector signed int, 23088 vector signed int, 23089 vector unsigned char); 23090 vector unsigned int vec_perm (vector unsigned int, 23091 vector unsigned int, 23092 vector unsigned char); 23093 vector bool int vec_perm (vector bool int, 23094 vector bool int, 23095 vector unsigned char); 23096 vector signed short vec_perm (vector signed short, 23097 vector signed short, 23098 vector unsigned char); 23099 vector unsigned short vec_perm (vector unsigned short, 23100 vector unsigned short, 23101 vector unsigned char); 23102 vector bool short vec_perm (vector bool short, 23103 vector bool short, 23104 vector unsigned char); 23105 vector pixel vec_perm (vector pixel, 23106 vector pixel, 23107 vector unsigned char); 23108 vector signed char vec_perm (vector signed char, 23109 vector signed char, 23110 vector unsigned char); 23111 vector unsigned char vec_perm (vector unsigned char, 23112 vector unsigned char, 23113 vector unsigned char); 23114 vector bool char vec_perm (vector bool char, 23115 vector bool char, 23116 vector unsigned char); 23117 23118 vector float vec_re (vector float); 23119 23120 vector signed char vec_rl (vector signed char, 23121 vector unsigned char); 23122 vector unsigned char vec_rl (vector unsigned char, 23123 vector unsigned char); 23124 vector signed short vec_rl (vector signed short, vector unsigned short); 23125 vector unsigned short vec_rl (vector unsigned short, 23126 vector unsigned short); 23127 vector signed int vec_rl (vector signed int, vector unsigned int); 23128 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 23129 23130 vector signed int vec_vrlw (vector signed int, vector unsigned int); 23131 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 23132 23133 vector signed short vec_vrlh (vector signed short, 23134 vector unsigned short); 23135 vector unsigned short vec_vrlh (vector unsigned short, 23136 vector unsigned short); 23137 23138 vector signed char vec_vrlb (vector signed char, vector unsigned char); 23139 vector unsigned char vec_vrlb (vector unsigned char, 23140 vector unsigned char); 23141 23142 vector float vec_round (vector float); 23143 23144 vector float vec_rsqrte (vector float); 23145 23146 vector float vec_sel (vector float, vector float, vector bool int); 23147 vector float vec_sel (vector float, vector float, vector unsigned int); 23148 vector signed int vec_sel (vector signed int, 23149 vector signed int, 23150 vector bool int); 23151 vector signed int vec_sel (vector signed int, 23152 vector signed int, 23153 vector unsigned int); 23154 vector unsigned int vec_sel (vector unsigned int, 23155 vector unsigned int, 23156 vector bool int); 23157 vector unsigned int vec_sel (vector unsigned int, 23158 vector unsigned int, 23159 vector unsigned int); 23160 vector bool int vec_sel (vector bool int, 23161 vector bool int, 23162 vector bool int); 23163 vector bool int vec_sel (vector bool int, 23164 vector bool int, 23165 vector unsigned int); 23166 vector signed short vec_sel (vector signed short, 23167 vector signed short, 23168 vector bool short); 23169 vector signed short vec_sel (vector signed short, 23170 vector signed short, 23171 vector unsigned short); 23172 vector unsigned short vec_sel (vector unsigned short, 23173 vector unsigned short, 23174 vector bool short); 23175 vector unsigned short vec_sel (vector unsigned short, 23176 vector unsigned short, 23177 vector unsigned short); 23178 vector bool short vec_sel (vector bool short, 23179 vector bool short, 23180 vector bool short); 23181 vector bool short vec_sel (vector bool short, 23182 vector bool short, 23183 vector unsigned short); 23184 vector signed char vec_sel (vector signed char, 23185 vector signed char, 23186 vector bool char); 23187 vector signed char vec_sel (vector signed char, 23188 vector signed char, 23189 vector unsigned char); 23190 vector unsigned char vec_sel (vector unsigned char, 23191 vector unsigned char, 23192 vector bool char); 23193 vector unsigned char vec_sel (vector unsigned char, 23194 vector unsigned char, 23195 vector unsigned char); 23196 vector bool char vec_sel (vector bool char, 23197 vector bool char, 23198 vector bool char); 23199 vector bool char vec_sel (vector bool char, 23200 vector bool char, 23201 vector unsigned char); 23202 23203 vector signed char vec_sl (vector signed char, 23204 vector unsigned char); 23205 vector unsigned char vec_sl (vector unsigned char, 23206 vector unsigned char); 23207 vector signed short vec_sl (vector signed short, vector unsigned short); 23208 vector unsigned short vec_sl (vector unsigned short, 23209 vector unsigned short); 23210 vector signed int vec_sl (vector signed int, vector unsigned int); 23211 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 23212 23213 vector signed int vec_vslw (vector signed int, vector unsigned int); 23214 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 23215 23216 vector signed short vec_vslh (vector signed short, 23217 vector unsigned short); 23218 vector unsigned short vec_vslh (vector unsigned short, 23219 vector unsigned short); 23220 23221 vector signed char vec_vslb (vector signed char, vector unsigned char); 23222 vector unsigned char vec_vslb (vector unsigned char, 23223 vector unsigned char); 23224 23225 vector float vec_sld (vector float, vector float, const int); 23226 vector signed int vec_sld (vector signed int, 23227 vector signed int, 23228 const int); 23229 vector unsigned int vec_sld (vector unsigned int, 23230 vector unsigned int, 23231 const int); 23232 vector bool int vec_sld (vector bool int, 23233 vector bool int, 23234 const int); 23235 vector signed short vec_sld (vector signed short, 23236 vector signed short, 23237 const int); 23238 vector unsigned short vec_sld (vector unsigned short, 23239 vector unsigned short, 23240 const int); 23241 vector bool short vec_sld (vector bool short, 23242 vector bool short, 23243 const int); 23244 vector pixel vec_sld (vector pixel, 23245 vector pixel, 23246 const int); 23247 vector signed char vec_sld (vector signed char, 23248 vector signed char, 23249 const int); 23250 vector unsigned char vec_sld (vector unsigned char, 23251 vector unsigned char, 23252 const int); 23253 vector bool char vec_sld (vector bool char, 23254 vector bool char, 23255 const int); 23256 23257 vector signed int vec_sll (vector signed int, 23258 vector unsigned int); 23259 vector signed int vec_sll (vector signed int, 23260 vector unsigned short); 23261 vector signed int vec_sll (vector signed int, 23262 vector unsigned char); 23263 vector unsigned int vec_sll (vector unsigned int, 23264 vector unsigned int); 23265 vector unsigned int vec_sll (vector unsigned int, 23266 vector unsigned short); 23267 vector unsigned int vec_sll (vector unsigned int, 23268 vector unsigned char); 23269 vector bool int vec_sll (vector bool int, 23270 vector unsigned int); 23271 vector bool int vec_sll (vector bool int, 23272 vector unsigned short); 23273 vector bool int vec_sll (vector bool int, 23274 vector unsigned char); 23275 vector signed short vec_sll (vector signed short, 23276 vector unsigned int); 23277 vector signed short vec_sll (vector signed short, 23278 vector unsigned short); 23279 vector signed short vec_sll (vector signed short, 23280 vector unsigned char); 23281 vector unsigned short vec_sll (vector unsigned short, 23282 vector unsigned int); 23283 vector unsigned short vec_sll (vector unsigned short, 23284 vector unsigned short); 23285 vector unsigned short vec_sll (vector unsigned short, 23286 vector unsigned char); 23287 vector bool short vec_sll (vector bool short, vector unsigned int); 23288 vector bool short vec_sll (vector bool short, vector unsigned short); 23289 vector bool short vec_sll (vector bool short, vector unsigned char); 23290 vector pixel vec_sll (vector pixel, vector unsigned int); 23291 vector pixel vec_sll (vector pixel, vector unsigned short); 23292 vector pixel vec_sll (vector pixel, vector unsigned char); 23293 vector signed char vec_sll (vector signed char, vector unsigned int); 23294 vector signed char vec_sll (vector signed char, vector unsigned short); 23295 vector signed char vec_sll (vector signed char, vector unsigned char); 23296 vector unsigned char vec_sll (vector unsigned char, 23297 vector unsigned int); 23298 vector unsigned char vec_sll (vector unsigned char, 23299 vector unsigned short); 23300 vector unsigned char vec_sll (vector unsigned char, 23301 vector unsigned char); 23302 vector bool char vec_sll (vector bool char, vector unsigned int); 23303 vector bool char vec_sll (vector bool char, vector unsigned short); 23304 vector bool char vec_sll (vector bool char, vector unsigned char); 23305 23306 vector float vec_slo (vector float, vector signed char); 23307 vector float vec_slo (vector float, vector unsigned char); 23308 vector signed int vec_slo (vector signed int, vector signed char); 23309 vector signed int vec_slo (vector signed int, vector unsigned char); 23310 vector unsigned int vec_slo (vector unsigned int, vector signed char); 23311 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 23312 vector signed short vec_slo (vector signed short, vector signed char); 23313 vector signed short vec_slo (vector signed short, vector unsigned char); 23314 vector unsigned short vec_slo (vector unsigned short, 23315 vector signed char); 23316 vector unsigned short vec_slo (vector unsigned short, 23317 vector unsigned char); 23318 vector pixel vec_slo (vector pixel, vector signed char); 23319 vector pixel vec_slo (vector pixel, vector unsigned char); 23320 vector signed char vec_slo (vector signed char, vector signed char); 23321 vector signed char vec_slo (vector signed char, vector unsigned char); 23322 vector unsigned char vec_slo (vector unsigned char, vector signed char); 23323 vector unsigned char vec_slo (vector unsigned char, 23324 vector unsigned char); 23325 23326 vector signed char vec_splat (vector signed char, const int); 23327 vector unsigned char vec_splat (vector unsigned char, const int); 23328 vector bool char vec_splat (vector bool char, const int); 23329 vector signed short vec_splat (vector signed short, const int); 23330 vector unsigned short vec_splat (vector unsigned short, const int); 23331 vector bool short vec_splat (vector bool short, const int); 23332 vector pixel vec_splat (vector pixel, const int); 23333 vector float vec_splat (vector float, const int); 23334 vector signed int vec_splat (vector signed int, const int); 23335 vector unsigned int vec_splat (vector unsigned int, const int); 23336 vector bool int vec_splat (vector bool int, const int); 23337 23338 vector float vec_vspltw (vector float, const int); 23339 vector signed int vec_vspltw (vector signed int, const int); 23340 vector unsigned int vec_vspltw (vector unsigned int, const int); 23341 vector bool int vec_vspltw (vector bool int, const int); 23342 23343 vector bool short vec_vsplth (vector bool short, const int); 23344 vector signed short vec_vsplth (vector signed short, const int); 23345 vector unsigned short vec_vsplth (vector unsigned short, const int); 23346 vector pixel vec_vsplth (vector pixel, const int); 23347 23348 vector signed char vec_vspltb (vector signed char, const int); 23349 vector unsigned char vec_vspltb (vector unsigned char, const int); 23350 vector bool char vec_vspltb (vector bool char, const int); 23351 23352 vector signed char vec_splat_s8 (const int); 23353 23354 vector signed short vec_splat_s16 (const int); 23355 23356 vector signed int vec_splat_s32 (const int); 23357 23358 vector unsigned char vec_splat_u8 (const int); 23359 23360 vector unsigned short vec_splat_u16 (const int); 23361 23362 vector unsigned int vec_splat_u32 (const int); 23363 23364 vector signed char vec_sr (vector signed char, vector unsigned char); 23365 vector unsigned char vec_sr (vector unsigned char, 23366 vector unsigned char); 23367 vector signed short vec_sr (vector signed short, 23368 vector unsigned short); 23369 vector unsigned short vec_sr (vector unsigned short, 23370 vector unsigned short); 23371 vector signed int vec_sr (vector signed int, vector unsigned int); 23372 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 23373 23374 vector signed int vec_vsrw (vector signed int, vector unsigned int); 23375 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 23376 23377 vector signed short vec_vsrh (vector signed short, 23378 vector unsigned short); 23379 vector unsigned short vec_vsrh (vector unsigned short, 23380 vector unsigned short); 23381 23382 vector signed char vec_vsrb (vector signed char, vector unsigned char); 23383 vector unsigned char vec_vsrb (vector unsigned char, 23384 vector unsigned char); 23385 23386 vector signed char vec_sra (vector signed char, vector unsigned char); 23387 vector unsigned char vec_sra (vector unsigned char, 23388 vector unsigned char); 23389 vector signed short vec_sra (vector signed short, 23390 vector unsigned short); 23391 vector unsigned short vec_sra (vector unsigned short, 23392 vector unsigned short); 23393 vector signed int vec_sra (vector signed int, vector unsigned int); 23394 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 23395 23396 vector signed int vec_vsraw (vector signed int, vector unsigned int); 23397 vector unsigned int vec_vsraw (vector unsigned int, 23398 vector unsigned int); 23399 23400 vector signed short vec_vsrah (vector signed short, 23401 vector unsigned short); 23402 vector unsigned short vec_vsrah (vector unsigned short, 23403 vector unsigned short); 23404 23405 vector signed char vec_vsrab (vector signed char, vector unsigned char); 23406 vector unsigned char vec_vsrab (vector unsigned char, 23407 vector unsigned char); 23408 23409 vector signed int vec_srl (vector signed int, vector unsigned int); 23410 vector signed int vec_srl (vector signed int, vector unsigned short); 23411 vector signed int vec_srl (vector signed int, vector unsigned char); 23412 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 23413 vector unsigned int vec_srl (vector unsigned int, 23414 vector unsigned short); 23415 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 23416 vector bool int vec_srl (vector bool int, vector unsigned int); 23417 vector bool int vec_srl (vector bool int, vector unsigned short); 23418 vector bool int vec_srl (vector bool int, vector unsigned char); 23419 vector signed short vec_srl (vector signed short, vector unsigned int); 23420 vector signed short vec_srl (vector signed short, 23421 vector unsigned short); 23422 vector signed short vec_srl (vector signed short, vector unsigned char); 23423 vector unsigned short vec_srl (vector unsigned short, 23424 vector unsigned int); 23425 vector unsigned short vec_srl (vector unsigned short, 23426 vector unsigned short); 23427 vector unsigned short vec_srl (vector unsigned short, 23428 vector unsigned char); 23429 vector bool short vec_srl (vector bool short, vector unsigned int); 23430 vector bool short vec_srl (vector bool short, vector unsigned short); 23431 vector bool short vec_srl (vector bool short, vector unsigned char); 23432 vector pixel vec_srl (vector pixel, vector unsigned int); 23433 vector pixel vec_srl (vector pixel, vector unsigned short); 23434 vector pixel vec_srl (vector pixel, vector unsigned char); 23435 vector signed char vec_srl (vector signed char, vector unsigned int); 23436 vector signed char vec_srl (vector signed char, vector unsigned short); 23437 vector signed char vec_srl (vector signed char, vector unsigned char); 23438 vector unsigned char vec_srl (vector unsigned char, 23439 vector unsigned int); 23440 vector unsigned char vec_srl (vector unsigned char, 23441 vector unsigned short); 23442 vector unsigned char vec_srl (vector unsigned char, 23443 vector unsigned char); 23444 vector bool char vec_srl (vector bool char, vector unsigned int); 23445 vector bool char vec_srl (vector bool char, vector unsigned short); 23446 vector bool char vec_srl (vector bool char, vector unsigned char); 23447 23448 vector float vec_sro (vector float, vector signed char); 23449 vector float vec_sro (vector float, vector unsigned char); 23450 vector signed int vec_sro (vector signed int, vector signed char); 23451 vector signed int vec_sro (vector signed int, vector unsigned char); 23452 vector unsigned int vec_sro (vector unsigned int, vector signed char); 23453 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 23454 vector signed short vec_sro (vector signed short, vector signed char); 23455 vector signed short vec_sro (vector signed short, vector unsigned char); 23456 vector unsigned short vec_sro (vector unsigned short, 23457 vector signed char); 23458 vector unsigned short vec_sro (vector unsigned short, 23459 vector unsigned char); 23460 vector pixel vec_sro (vector pixel, vector signed char); 23461 vector pixel vec_sro (vector pixel, vector unsigned char); 23462 vector signed char vec_sro (vector signed char, vector signed char); 23463 vector signed char vec_sro (vector signed char, vector unsigned char); 23464 vector unsigned char vec_sro (vector unsigned char, vector signed char); 23465 vector unsigned char vec_sro (vector unsigned char, 23466 vector unsigned char); 23467 23468 void vec_st (vector float, int, vector float *); 23469 void vec_st (vector float, int, float *); 23470 void vec_st (vector signed int, int, vector signed int *); 23471 void vec_st (vector signed int, int, int *); 23472 void vec_st (vector unsigned int, int, vector unsigned int *); 23473 void vec_st (vector unsigned int, int, unsigned int *); 23474 void vec_st (vector bool int, int, vector bool int *); 23475 void vec_st (vector bool int, int, unsigned int *); 23476 void vec_st (vector bool int, int, int *); 23477 void vec_st (vector signed short, int, vector signed short *); 23478 void vec_st (vector signed short, int, short *); 23479 void vec_st (vector unsigned short, int, vector unsigned short *); 23480 void vec_st (vector unsigned short, int, unsigned short *); 23481 void vec_st (vector bool short, int, vector bool short *); 23482 void vec_st (vector bool short, int, unsigned short *); 23483 void vec_st (vector pixel, int, vector pixel *); 23484 void vec_st (vector pixel, int, unsigned short *); 23485 void vec_st (vector pixel, int, short *); 23486 void vec_st (vector bool short, int, short *); 23487 void vec_st (vector signed char, int, vector signed char *); 23488 void vec_st (vector signed char, int, signed char *); 23489 void vec_st (vector unsigned char, int, vector unsigned char *); 23490 void vec_st (vector unsigned char, int, unsigned char *); 23491 void vec_st (vector bool char, int, vector bool char *); 23492 void vec_st (vector bool char, int, unsigned char *); 23493 void vec_st (vector bool char, int, signed char *); 23494 23495 void vec_ste (vector signed char, int, signed char *); 23496 void vec_ste (vector unsigned char, int, unsigned char *); 23497 void vec_ste (vector bool char, int, signed char *); 23498 void vec_ste (vector bool char, int, unsigned char *); 23499 void vec_ste (vector signed short, int, short *); 23500 void vec_ste (vector unsigned short, int, unsigned short *); 23501 void vec_ste (vector bool short, int, short *); 23502 void vec_ste (vector bool short, int, unsigned short *); 23503 void vec_ste (vector pixel, int, short *); 23504 void vec_ste (vector pixel, int, unsigned short *); 23505 void vec_ste (vector float, int, float *); 23506 void vec_ste (vector signed int, int, int *); 23507 void vec_ste (vector unsigned int, int, unsigned int *); 23508 void vec_ste (vector bool int, int, int *); 23509 void vec_ste (vector bool int, int, unsigned int *); 23510 23511 void vec_stvewx (vector float, int, float *); 23512 void vec_stvewx (vector signed int, int, int *); 23513 void vec_stvewx (vector unsigned int, int, unsigned int *); 23514 void vec_stvewx (vector bool int, int, int *); 23515 void vec_stvewx (vector bool int, int, unsigned int *); 23516 23517 void vec_stvehx (vector signed short, int, short *); 23518 void vec_stvehx (vector unsigned short, int, unsigned short *); 23519 void vec_stvehx (vector bool short, int, short *); 23520 void vec_stvehx (vector bool short, int, unsigned short *); 23521 void vec_stvehx (vector pixel, int, short *); 23522 void vec_stvehx (vector pixel, int, unsigned short *); 23523 23524 void vec_stvebx (vector signed char, int, signed char *); 23525 void vec_stvebx (vector unsigned char, int, unsigned char *); 23526 void vec_stvebx (vector bool char, int, signed char *); 23527 void vec_stvebx (vector bool char, int, unsigned char *); 23528 23529 void vec_stl (vector float, int, vector float *); 23530 void vec_stl (vector float, int, float *); 23531 void vec_stl (vector signed int, int, vector signed int *); 23532 void vec_stl (vector signed int, int, int *); 23533 void vec_stl (vector unsigned int, int, vector unsigned int *); 23534 void vec_stl (vector unsigned int, int, unsigned int *); 23535 void vec_stl (vector bool int, int, vector bool int *); 23536 void vec_stl (vector bool int, int, unsigned int *); 23537 void vec_stl (vector bool int, int, int *); 23538 void vec_stl (vector signed short, int, vector signed short *); 23539 void vec_stl (vector signed short, int, short *); 23540 void vec_stl (vector unsigned short, int, vector unsigned short *); 23541 void vec_stl (vector unsigned short, int, unsigned short *); 23542 void vec_stl (vector bool short, int, vector bool short *); 23543 void vec_stl (vector bool short, int, unsigned short *); 23544 void vec_stl (vector bool short, int, short *); 23545 void vec_stl (vector pixel, int, vector pixel *); 23546 void vec_stl (vector pixel, int, unsigned short *); 23547 void vec_stl (vector pixel, int, short *); 23548 void vec_stl (vector signed char, int, vector signed char *); 23549 void vec_stl (vector signed char, int, signed char *); 23550 void vec_stl (vector unsigned char, int, vector unsigned char *); 23551 void vec_stl (vector unsigned char, int, unsigned char *); 23552 void vec_stl (vector bool char, int, vector bool char *); 23553 void vec_stl (vector bool char, int, unsigned char *); 23554 void vec_stl (vector bool char, int, signed char *); 23555 23556 vector signed char vec_sub (vector bool char, vector signed char); 23557 vector signed char vec_sub (vector signed char, vector bool char); 23558 vector signed char vec_sub (vector signed char, vector signed char); 23559 vector unsigned char vec_sub (vector bool char, vector unsigned char); 23560 vector unsigned char vec_sub (vector unsigned char, vector bool char); 23561 vector unsigned char vec_sub (vector unsigned char, 23562 vector unsigned char); 23563 vector signed short vec_sub (vector bool short, vector signed short); 23564 vector signed short vec_sub (vector signed short, vector bool short); 23565 vector signed short vec_sub (vector signed short, vector signed short); 23566 vector unsigned short vec_sub (vector bool short, 23567 vector unsigned short); 23568 vector unsigned short vec_sub (vector unsigned short, 23569 vector bool short); 23570 vector unsigned short vec_sub (vector unsigned short, 23571 vector unsigned short); 23572 vector signed int vec_sub (vector bool int, vector signed int); 23573 vector signed int vec_sub (vector signed int, vector bool int); 23574 vector signed int vec_sub (vector signed int, vector signed int); 23575 vector unsigned int vec_sub (vector bool int, vector unsigned int); 23576 vector unsigned int vec_sub (vector unsigned int, vector bool int); 23577 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 23578 vector float vec_sub (vector float, vector float); 23579 23580 vector float vec_vsubfp (vector float, vector float); 23581 23582 vector signed int vec_vsubuwm (vector bool int, vector signed int); 23583 vector signed int vec_vsubuwm (vector signed int, vector bool int); 23584 vector signed int vec_vsubuwm (vector signed int, vector signed int); 23585 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 23586 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 23587 vector unsigned int vec_vsubuwm (vector unsigned int, 23588 vector unsigned int); 23589 23590 vector signed short vec_vsubuhm (vector bool short, 23591 vector signed short); 23592 vector signed short vec_vsubuhm (vector signed short, 23593 vector bool short); 23594 vector signed short vec_vsubuhm (vector signed short, 23595 vector signed short); 23596 vector unsigned short vec_vsubuhm (vector bool short, 23597 vector unsigned short); 23598 vector unsigned short vec_vsubuhm (vector unsigned short, 23599 vector bool short); 23600 vector unsigned short vec_vsubuhm (vector unsigned short, 23601 vector unsigned short); 23602 23603 vector signed char vec_vsububm (vector bool char, vector signed char); 23604 vector signed char vec_vsububm (vector signed char, vector bool char); 23605 vector signed char vec_vsububm (vector signed char, vector signed char); 23606 vector unsigned char vec_vsububm (vector bool char, 23607 vector unsigned char); 23608 vector unsigned char vec_vsububm (vector unsigned char, 23609 vector bool char); 23610 vector unsigned char vec_vsububm (vector unsigned char, 23611 vector unsigned char); 23612 23613 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 23614 23615 vector unsigned char vec_subs (vector bool char, vector unsigned char); 23616 vector unsigned char vec_subs (vector unsigned char, vector bool char); 23617 vector unsigned char vec_subs (vector unsigned char, 23618 vector unsigned char); 23619 vector signed char vec_subs (vector bool char, vector signed char); 23620 vector signed char vec_subs (vector signed char, vector bool char); 23621 vector signed char vec_subs (vector signed char, vector signed char); 23622 vector unsigned short vec_subs (vector bool short, 23623 vector unsigned short); 23624 vector unsigned short vec_subs (vector unsigned short, 23625 vector bool short); 23626 vector unsigned short vec_subs (vector unsigned short, 23627 vector unsigned short); 23628 vector signed short vec_subs (vector bool short, vector signed short); 23629 vector signed short vec_subs (vector signed short, vector bool short); 23630 vector signed short vec_subs (vector signed short, vector signed short); 23631 vector unsigned int vec_subs (vector bool int, vector unsigned int); 23632 vector unsigned int vec_subs (vector unsigned int, vector bool int); 23633 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 23634 vector signed int vec_subs (vector bool int, vector signed int); 23635 vector signed int vec_subs (vector signed int, vector bool int); 23636 vector signed int vec_subs (vector signed int, vector signed int); 23637 23638 vector signed int vec_vsubsws (vector bool int, vector signed int); 23639 vector signed int vec_vsubsws (vector signed int, vector bool int); 23640 vector signed int vec_vsubsws (vector signed int, vector signed int); 23641 23642 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 23643 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 23644 vector unsigned int vec_vsubuws (vector unsigned int, 23645 vector unsigned int); 23646 23647 vector signed short vec_vsubshs (vector bool short, 23648 vector signed short); 23649 vector signed short vec_vsubshs (vector signed short, 23650 vector bool short); 23651 vector signed short vec_vsubshs (vector signed short, 23652 vector signed short); 23653 23654 vector unsigned short vec_vsubuhs (vector bool short, 23655 vector unsigned short); 23656 vector unsigned short vec_vsubuhs (vector unsigned short, 23657 vector bool short); 23658 vector unsigned short vec_vsubuhs (vector unsigned short, 23659 vector unsigned short); 23660 23661 vector signed char vec_vsubsbs (vector bool char, vector signed char); 23662 vector signed char vec_vsubsbs (vector signed char, vector bool char); 23663 vector signed char vec_vsubsbs (vector signed char, vector signed char); 23664 23665 vector unsigned char vec_vsububs (vector bool char, 23666 vector unsigned char); 23667 vector unsigned char vec_vsububs (vector unsigned char, 23668 vector bool char); 23669 vector unsigned char vec_vsububs (vector unsigned char, 23670 vector unsigned char); 23671 23672 vector unsigned int vec_sum4s (vector unsigned char, 23673 vector unsigned int); 23674 vector signed int vec_sum4s (vector signed char, vector signed int); 23675 vector signed int vec_sum4s (vector signed short, vector signed int); 23676 23677 vector signed int vec_vsum4shs (vector signed short, vector signed int); 23678 23679 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 23680 23681 vector unsigned int vec_vsum4ubs (vector unsigned char, 23682 vector unsigned int); 23683 23684 vector signed int vec_sum2s (vector signed int, vector signed int); 23685 23686 vector signed int vec_sums (vector signed int, vector signed int); 23687 23688 vector float vec_trunc (vector float); 23689 23690 vector signed short vec_unpackh (vector signed char); 23691 vector bool short vec_unpackh (vector bool char); 23692 vector signed int vec_unpackh (vector signed short); 23693 vector bool int vec_unpackh (vector bool short); 23694 vector unsigned int vec_unpackh (vector pixel); 23695 23696 vector bool int vec_vupkhsh (vector bool short); 23697 vector signed int vec_vupkhsh (vector signed short); 23698 23699 vector unsigned int vec_vupkhpx (vector pixel); 23700 23701 vector bool short vec_vupkhsb (vector bool char); 23702 vector signed short vec_vupkhsb (vector signed char); 23703 23704 vector signed short vec_unpackl (vector signed char); 23705 vector bool short vec_unpackl (vector bool char); 23706 vector unsigned int vec_unpackl (vector pixel); 23707 vector signed int vec_unpackl (vector signed short); 23708 vector bool int vec_unpackl (vector bool short); 23709 23710 vector unsigned int vec_vupklpx (vector pixel); 23711 23712 vector bool int vec_vupklsh (vector bool short); 23713 vector signed int vec_vupklsh (vector signed short); 23714 23715 vector bool short vec_vupklsb (vector bool char); 23716 vector signed short vec_vupklsb (vector signed char); 23717 23718 vector float vec_xor (vector float, vector float); 23719 vector float vec_xor (vector float, vector bool int); 23720 vector float vec_xor (vector bool int, vector float); 23721 vector bool int vec_xor (vector bool int, vector bool int); 23722 vector signed int vec_xor (vector bool int, vector signed int); 23723 vector signed int vec_xor (vector signed int, vector bool int); 23724 vector signed int vec_xor (vector signed int, vector signed int); 23725 vector unsigned int vec_xor (vector bool int, vector unsigned int); 23726 vector unsigned int vec_xor (vector unsigned int, vector bool int); 23727 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 23728 vector bool short vec_xor (vector bool short, vector bool short); 23729 vector signed short vec_xor (vector bool short, vector signed short); 23730 vector signed short vec_xor (vector signed short, vector bool short); 23731 vector signed short vec_xor (vector signed short, vector signed short); 23732 vector unsigned short vec_xor (vector bool short, 23733 vector unsigned short); 23734 vector unsigned short vec_xor (vector unsigned short, 23735 vector bool short); 23736 vector unsigned short vec_xor (vector unsigned short, 23737 vector unsigned short); 23738 vector signed char vec_xor (vector bool char, vector signed char); 23739 vector bool char vec_xor (vector bool char, vector bool char); 23740 vector signed char vec_xor (vector signed char, vector bool char); 23741 vector signed char vec_xor (vector signed char, vector signed char); 23742 vector unsigned char vec_xor (vector bool char, vector unsigned char); 23743 vector unsigned char vec_xor (vector unsigned char, vector bool char); 23744 vector unsigned char vec_xor (vector unsigned char, 23745 vector unsigned char); 23746 23747 int vec_all_eq (vector signed char, vector bool char); 23748 int vec_all_eq (vector signed char, vector signed char); 23749 int vec_all_eq (vector unsigned char, vector bool char); 23750 int vec_all_eq (vector unsigned char, vector unsigned char); 23751 int vec_all_eq (vector bool char, vector bool char); 23752 int vec_all_eq (vector bool char, vector unsigned char); 23753 int vec_all_eq (vector bool char, vector signed char); 23754 int vec_all_eq (vector signed short, vector bool short); 23755 int vec_all_eq (vector signed short, vector signed short); 23756 int vec_all_eq (vector unsigned short, vector bool short); 23757 int vec_all_eq (vector unsigned short, vector unsigned short); 23758 int vec_all_eq (vector bool short, vector bool short); 23759 int vec_all_eq (vector bool short, vector unsigned short); 23760 int vec_all_eq (vector bool short, vector signed short); 23761 int vec_all_eq (vector pixel, vector pixel); 23762 int vec_all_eq (vector signed int, vector bool int); 23763 int vec_all_eq (vector signed int, vector signed int); 23764 int vec_all_eq (vector unsigned int, vector bool int); 23765 int vec_all_eq (vector unsigned int, vector unsigned int); 23766 int vec_all_eq (vector bool int, vector bool int); 23767 int vec_all_eq (vector bool int, vector unsigned int); 23768 int vec_all_eq (vector bool int, vector signed int); 23769 int vec_all_eq (vector float, vector float); 23770 23771 int vec_all_ge (vector bool char, vector unsigned char); 23772 int vec_all_ge (vector unsigned char, vector bool char); 23773 int vec_all_ge (vector unsigned char, vector unsigned char); 23774 int vec_all_ge (vector bool char, vector signed char); 23775 int vec_all_ge (vector signed char, vector bool char); 23776 int vec_all_ge (vector signed char, vector signed char); 23777 int vec_all_ge (vector bool short, vector unsigned short); 23778 int vec_all_ge (vector unsigned short, vector bool short); 23779 int vec_all_ge (vector unsigned short, vector unsigned short); 23780 int vec_all_ge (vector signed short, vector signed short); 23781 int vec_all_ge (vector bool short, vector signed short); 23782 int vec_all_ge (vector signed short, vector bool short); 23783 int vec_all_ge (vector bool int, vector unsigned int); 23784 int vec_all_ge (vector unsigned int, vector bool int); 23785 int vec_all_ge (vector unsigned int, vector unsigned int); 23786 int vec_all_ge (vector bool int, vector signed int); 23787 int vec_all_ge (vector signed int, vector bool int); 23788 int vec_all_ge (vector signed int, vector signed int); 23789 int vec_all_ge (vector float, vector float); 23790 23791 int vec_all_gt (vector bool char, vector unsigned char); 23792 int vec_all_gt (vector unsigned char, vector bool char); 23793 int vec_all_gt (vector unsigned char, vector unsigned char); 23794 int vec_all_gt (vector bool char, vector signed char); 23795 int vec_all_gt (vector signed char, vector bool char); 23796 int vec_all_gt (vector signed char, vector signed char); 23797 int vec_all_gt (vector bool short, vector unsigned short); 23798 int vec_all_gt (vector unsigned short, vector bool short); 23799 int vec_all_gt (vector unsigned short, vector unsigned short); 23800 int vec_all_gt (vector bool short, vector signed short); 23801 int vec_all_gt (vector signed short, vector bool short); 23802 int vec_all_gt (vector signed short, vector signed short); 23803 int vec_all_gt (vector bool int, vector unsigned int); 23804 int vec_all_gt (vector unsigned int, vector bool int); 23805 int vec_all_gt (vector unsigned int, vector unsigned int); 23806 int vec_all_gt (vector bool int, vector signed int); 23807 int vec_all_gt (vector signed int, vector bool int); 23808 int vec_all_gt (vector signed int, vector signed int); 23809 int vec_all_gt (vector float, vector float); 23810 23811 int vec_all_in (vector float, vector float); 23812 23813 int vec_all_le (vector bool char, vector unsigned char); 23814 int vec_all_le (vector unsigned char, vector bool char); 23815 int vec_all_le (vector unsigned char, vector unsigned char); 23816 int vec_all_le (vector bool char, vector signed char); 23817 int vec_all_le (vector signed char, vector bool char); 23818 int vec_all_le (vector signed char, vector signed char); 23819 int vec_all_le (vector bool short, vector unsigned short); 23820 int vec_all_le (vector unsigned short, vector bool short); 23821 int vec_all_le (vector unsigned short, vector unsigned short); 23822 int vec_all_le (vector bool short, vector signed short); 23823 int vec_all_le (vector signed short, vector bool short); 23824 int vec_all_le (vector signed short, vector signed short); 23825 int vec_all_le (vector bool int, vector unsigned int); 23826 int vec_all_le (vector unsigned int, vector bool int); 23827 int vec_all_le (vector unsigned int, vector unsigned int); 23828 int vec_all_le (vector bool int, vector signed int); 23829 int vec_all_le (vector signed int, vector bool int); 23830 int vec_all_le (vector signed int, vector signed int); 23831 int vec_all_le (vector float, vector float); 23832 23833 int vec_all_lt (vector bool char, vector unsigned char); 23834 int vec_all_lt (vector unsigned char, vector bool char); 23835 int vec_all_lt (vector unsigned char, vector unsigned char); 23836 int vec_all_lt (vector bool char, vector signed char); 23837 int vec_all_lt (vector signed char, vector bool char); 23838 int vec_all_lt (vector signed char, vector signed char); 23839 int vec_all_lt (vector bool short, vector unsigned short); 23840 int vec_all_lt (vector unsigned short, vector bool short); 23841 int vec_all_lt (vector unsigned short, vector unsigned short); 23842 int vec_all_lt (vector bool short, vector signed short); 23843 int vec_all_lt (vector signed short, vector bool short); 23844 int vec_all_lt (vector signed short, vector signed short); 23845 int vec_all_lt (vector bool int, vector unsigned int); 23846 int vec_all_lt (vector unsigned int, vector bool int); 23847 int vec_all_lt (vector unsigned int, vector unsigned int); 23848 int vec_all_lt (vector bool int, vector signed int); 23849 int vec_all_lt (vector signed int, vector bool int); 23850 int vec_all_lt (vector signed int, vector signed int); 23851 int vec_all_lt (vector float, vector float); 23852 23853 int vec_all_nan (vector float); 23854 23855 int vec_all_ne (vector signed char, vector bool char); 23856 int vec_all_ne (vector signed char, vector signed char); 23857 int vec_all_ne (vector unsigned char, vector bool char); 23858 int vec_all_ne (vector unsigned char, vector unsigned char); 23859 int vec_all_ne (vector bool char, vector bool char); 23860 int vec_all_ne (vector bool char, vector unsigned char); 23861 int vec_all_ne (vector bool char, vector signed char); 23862 int vec_all_ne (vector signed short, vector bool short); 23863 int vec_all_ne (vector signed short, vector signed short); 23864 int vec_all_ne (vector unsigned short, vector bool short); 23865 int vec_all_ne (vector unsigned short, vector unsigned short); 23866 int vec_all_ne (vector bool short, vector bool short); 23867 int vec_all_ne (vector bool short, vector unsigned short); 23868 int vec_all_ne (vector bool short, vector signed short); 23869 int vec_all_ne (vector pixel, vector pixel); 23870 int vec_all_ne (vector signed int, vector bool int); 23871 int vec_all_ne (vector signed int, vector signed int); 23872 int vec_all_ne (vector unsigned int, vector bool int); 23873 int vec_all_ne (vector unsigned int, vector unsigned int); 23874 int vec_all_ne (vector bool int, vector bool int); 23875 int vec_all_ne (vector bool int, vector unsigned int); 23876 int vec_all_ne (vector bool int, vector signed int); 23877 int vec_all_ne (vector float, vector float); 23878 23879 int vec_all_nge (vector float, vector float); 23880 23881 int vec_all_ngt (vector float, vector float); 23882 23883 int vec_all_nle (vector float, vector float); 23884 23885 int vec_all_nlt (vector float, vector float); 23886 23887 int vec_all_numeric (vector float); 23888 23889 int vec_any_eq (vector signed char, vector bool char); 23890 int vec_any_eq (vector signed char, vector signed char); 23891 int vec_any_eq (vector unsigned char, vector bool char); 23892 int vec_any_eq (vector unsigned char, vector unsigned char); 23893 int vec_any_eq (vector bool char, vector bool char); 23894 int vec_any_eq (vector bool char, vector unsigned char); 23895 int vec_any_eq (vector bool char, vector signed char); 23896 int vec_any_eq (vector signed short, vector bool short); 23897 int vec_any_eq (vector signed short, vector signed short); 23898 int vec_any_eq (vector unsigned short, vector bool short); 23899 int vec_any_eq (vector unsigned short, vector unsigned short); 23900 int vec_any_eq (vector bool short, vector bool short); 23901 int vec_any_eq (vector bool short, vector unsigned short); 23902 int vec_any_eq (vector bool short, vector signed short); 23903 int vec_any_eq (vector pixel, vector pixel); 23904 int vec_any_eq (vector signed int, vector bool int); 23905 int vec_any_eq (vector signed int, vector signed int); 23906 int vec_any_eq (vector unsigned int, vector bool int); 23907 int vec_any_eq (vector unsigned int, vector unsigned int); 23908 int vec_any_eq (vector bool int, vector bool int); 23909 int vec_any_eq (vector bool int, vector unsigned int); 23910 int vec_any_eq (vector bool int, vector signed int); 23911 int vec_any_eq (vector float, vector float); 23912 23913 int vec_any_ge (vector signed char, vector bool char); 23914 int vec_any_ge (vector unsigned char, vector bool char); 23915 int vec_any_ge (vector unsigned char, vector unsigned char); 23916 int vec_any_ge (vector signed char, vector signed char); 23917 int vec_any_ge (vector bool char, vector unsigned char); 23918 int vec_any_ge (vector bool char, vector signed char); 23919 int vec_any_ge (vector unsigned short, vector bool short); 23920 int vec_any_ge (vector unsigned short, vector unsigned short); 23921 int vec_any_ge (vector signed short, vector signed short); 23922 int vec_any_ge (vector signed short, vector bool short); 23923 int vec_any_ge (vector bool short, vector unsigned short); 23924 int vec_any_ge (vector bool short, vector signed short); 23925 int vec_any_ge (vector signed int, vector bool int); 23926 int vec_any_ge (vector unsigned int, vector bool int); 23927 int vec_any_ge (vector unsigned int, vector unsigned int); 23928 int vec_any_ge (vector signed int, vector signed int); 23929 int vec_any_ge (vector bool int, vector unsigned int); 23930 int vec_any_ge (vector bool int, vector signed int); 23931 int vec_any_ge (vector float, vector float); 23932 23933 int vec_any_gt (vector bool char, vector unsigned char); 23934 int vec_any_gt (vector unsigned char, vector bool char); 23935 int vec_any_gt (vector unsigned char, vector unsigned char); 23936 int vec_any_gt (vector bool char, vector signed char); 23937 int vec_any_gt (vector signed char, vector bool char); 23938 int vec_any_gt (vector signed char, vector signed char); 23939 int vec_any_gt (vector bool short, vector unsigned short); 23940 int vec_any_gt (vector unsigned short, vector bool short); 23941 int vec_any_gt (vector unsigned short, vector unsigned short); 23942 int vec_any_gt (vector bool short, vector signed short); 23943 int vec_any_gt (vector signed short, vector bool short); 23944 int vec_any_gt (vector signed short, vector signed short); 23945 int vec_any_gt (vector bool int, vector unsigned int); 23946 int vec_any_gt (vector unsigned int, vector bool int); 23947 int vec_any_gt (vector unsigned int, vector unsigned int); 23948 int vec_any_gt (vector bool int, vector signed int); 23949 int vec_any_gt (vector signed int, vector bool int); 23950 int vec_any_gt (vector signed int, vector signed int); 23951 int vec_any_gt (vector float, vector float); 23952 23953 int vec_any_le (vector bool char, vector unsigned char); 23954 int vec_any_le (vector unsigned char, vector bool char); 23955 int vec_any_le (vector unsigned char, vector unsigned char); 23956 int vec_any_le (vector bool char, vector signed char); 23957 int vec_any_le (vector signed char, vector bool char); 23958 int vec_any_le (vector signed char, vector signed char); 23959 int vec_any_le (vector bool short, vector unsigned short); 23960 int vec_any_le (vector unsigned short, vector bool short); 23961 int vec_any_le (vector unsigned short, vector unsigned short); 23962 int vec_any_le (vector bool short, vector signed short); 23963 int vec_any_le (vector signed short, vector bool short); 23964 int vec_any_le (vector signed short, vector signed short); 23965 int vec_any_le (vector bool int, vector unsigned int); 23966 int vec_any_le (vector unsigned int, vector bool int); 23967 int vec_any_le (vector unsigned int, vector unsigned int); 23968 int vec_any_le (vector bool int, vector signed int); 23969 int vec_any_le (vector signed int, vector bool int); 23970 int vec_any_le (vector signed int, vector signed int); 23971 int vec_any_le (vector float, vector float); 23972 23973 int vec_any_lt (vector bool char, vector unsigned char); 23974 int vec_any_lt (vector unsigned char, vector bool char); 23975 int vec_any_lt (vector unsigned char, vector unsigned char); 23976 int vec_any_lt (vector bool char, vector signed char); 23977 int vec_any_lt (vector signed char, vector bool char); 23978 int vec_any_lt (vector signed char, vector signed char); 23979 int vec_any_lt (vector bool short, vector unsigned short); 23980 int vec_any_lt (vector unsigned short, vector bool short); 23981 int vec_any_lt (vector unsigned short, vector unsigned short); 23982 int vec_any_lt (vector bool short, vector signed short); 23983 int vec_any_lt (vector signed short, vector bool short); 23984 int vec_any_lt (vector signed short, vector signed short); 23985 int vec_any_lt (vector bool int, vector unsigned int); 23986 int vec_any_lt (vector unsigned int, vector bool int); 23987 int vec_any_lt (vector unsigned int, vector unsigned int); 23988 int vec_any_lt (vector bool int, vector signed int); 23989 int vec_any_lt (vector signed int, vector bool int); 23990 int vec_any_lt (vector signed int, vector signed int); 23991 int vec_any_lt (vector float, vector float); 23992 23993 int vec_any_nan (vector float); 23994 23995 int vec_any_ne (vector signed char, vector bool char); 23996 int vec_any_ne (vector signed char, vector signed char); 23997 int vec_any_ne (vector unsigned char, vector bool char); 23998 int vec_any_ne (vector unsigned char, vector unsigned char); 23999 int vec_any_ne (vector bool char, vector bool char); 24000 int vec_any_ne (vector bool char, vector unsigned char); 24001 int vec_any_ne (vector bool char, vector signed char); 24002 int vec_any_ne (vector signed short, vector bool short); 24003 int vec_any_ne (vector signed short, vector signed short); 24004 int vec_any_ne (vector unsigned short, vector bool short); 24005 int vec_any_ne (vector unsigned short, vector unsigned short); 24006 int vec_any_ne (vector bool short, vector bool short); 24007 int vec_any_ne (vector bool short, vector unsigned short); 24008 int vec_any_ne (vector bool short, vector signed short); 24009 int vec_any_ne (vector pixel, vector pixel); 24010 int vec_any_ne (vector signed int, vector bool int); 24011 int vec_any_ne (vector signed int, vector signed int); 24012 int vec_any_ne (vector unsigned int, vector bool int); 24013 int vec_any_ne (vector unsigned int, vector unsigned int); 24014 int vec_any_ne (vector bool int, vector bool int); 24015 int vec_any_ne (vector bool int, vector unsigned int); 24016 int vec_any_ne (vector bool int, vector signed int); 24017 int vec_any_ne (vector float, vector float); 24018 24019 int vec_any_nge (vector float, vector float); 24020 24021 int vec_any_ngt (vector float, vector float); 24022 24023 int vec_any_nle (vector float, vector float); 24024 24025 int vec_any_nlt (vector float, vector float); 24026 24027 int vec_any_numeric (vector float); 24028 24029 int vec_any_out (vector float, vector float); 24030 24031 24032File: gcc.info, Node: SPARC VIS Built-in Functions, Prev: PowerPC AltiVec Built-in Functions, Up: Target Builtins 24033 240345.48.9 SPARC VIS Built-in Functions 24035----------------------------------- 24036 24037GCC supports SIMD operations on the SPARC using both the generic vector 24038extensions (*note Vector Extensions::) as well as built-in functions for 24039the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 24040switch, the VIS extension is exposed as the following built-in 24041functions: 24042 24043 typedef int v2si __attribute__ ((vector_size (8))); 24044 typedef short v4hi __attribute__ ((vector_size (8))); 24045 typedef short v2hi __attribute__ ((vector_size (4))); 24046 typedef char v8qi __attribute__ ((vector_size (8))); 24047 typedef char v4qi __attribute__ ((vector_size (4))); 24048 24049 void * __builtin_vis_alignaddr (void *, long); 24050 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 24051 v2si __builtin_vis_faligndatav2si (v2si, v2si); 24052 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 24053 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 24054 24055 v4hi __builtin_vis_fexpand (v4qi); 24056 24057 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 24058 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 24059 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 24060 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 24061 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 24062 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 24063 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 24064 24065 v4qi __builtin_vis_fpack16 (v4hi); 24066 v8qi __builtin_vis_fpack32 (v2si, v2si); 24067 v2hi __builtin_vis_fpackfix (v2si); 24068 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 24069 24070 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 24071 24072 24073File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 24074 240755.49 Format Checks Specific to Particular Target Machines 24076========================================================= 24077 24078For some target machines, GCC supports additional options to the format 24079attribute (*note Declaring Attributes of Functions: Function 24080Attributes.). 24081 24082* Menu: 24083 24084* Solaris Format Checks:: 24085 24086 24087File: gcc.info, Node: Solaris Format Checks, Up: Target Format Checks 24088 240895.49.1 Solaris Format Checks 24090---------------------------- 24091 24092Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 24093`cmn_err' accepts a subset of the standard `printf' conversions, and 24094the two-argument `%b' conversion for displaying bit-fields. See the 24095Solaris man page for `cmn_err' for more information. 24096 24097 24098File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 24099 241005.50 Pragmas Accepted by GCC 24101============================ 24102 24103GCC supports several types of pragmas, primarily in order to compile 24104code originally written for other compilers. Note that in general we 24105do not recommend the use of pragmas; *Note Function Attributes::, for 24106further explanation. 24107 24108* Menu: 24109 24110* ARM Pragmas:: 24111* M32C Pragmas:: 24112* RS/6000 and PowerPC Pragmas:: 24113* Darwin Pragmas:: 24114* Solaris Pragmas:: 24115* Symbol-Renaming Pragmas:: 24116* Structure-Packing Pragmas:: 24117* Weak Pragmas:: 24118* Diagnostic Pragmas:: 24119* Visibility Pragmas:: 24120 24121 24122File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 24123 241245.50.1 ARM Pragmas 24125------------------ 24126 24127The ARM target defines pragmas for controlling the default addition of 24128`long_call' and `short_call' attributes to functions. *Note Function 24129Attributes::, for information about the effects of these attributes. 24130 24131`long_calls' 24132 Set all subsequent functions to have the `long_call' attribute. 24133 24134`no_long_calls' 24135 Set all subsequent functions to have the `short_call' attribute. 24136 24137`long_calls_off' 24138 Do not affect the `long_call' or `short_call' attributes of 24139 subsequent functions. 24140 24141 24142File: gcc.info, Node: M32C Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: ARM Pragmas, Up: Pragmas 24143 241445.50.2 M32C Pragmas 24145------------------- 24146 24147`memregs NUMBER' 24148 Overrides the command line option `-memregs=' for the current 24149 file. Use with care! This pragma must be before any function in 24150 the file, and mixing different memregs values in different objects 24151 may make them incompatible. This pragma is useful when a 24152 performance-critical function uses a memreg for temporary values, 24153 as it may allow you to reduce the number of memregs used. 24154 24155 24156 24157File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: M32C Pragmas, Up: Pragmas 24158 241595.50.3 RS/6000 and PowerPC Pragmas 24160---------------------------------- 24161 24162The RS/6000 and PowerPC targets define one pragma for controlling 24163whether or not the `longcall' attribute is added to function 24164declarations by default. This pragma overrides the `-mlongcall' 24165option, but not the `longcall' and `shortcall' attributes. *Note 24166RS/6000 and PowerPC Options::, for more information about when long 24167calls are and are not necessary. 24168 24169`longcall (1)' 24170 Apply the `longcall' attribute to all subsequent function 24171 declarations. 24172 24173`longcall (0)' 24174 Do not apply the `longcall' attribute to subsequent function 24175 declarations. 24176 24177 24178File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 24179 241805.50.4 Darwin Pragmas 24181--------------------- 24182 24183The following pragmas are available for all architectures running the 24184Darwin operating system. These are useful for compatibility with other 24185Mac OS compilers. 24186 24187`mark TOKENS...' 24188 This pragma is accepted, but has no effect. 24189 24190`options align=ALIGNMENT' 24191 This pragma sets the alignment of fields in structures. The 24192 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 24193 `power', to emulate PowerPC alignment. Uses of this pragma nest 24194 properly; to restore the previous setting, use `reset' for the 24195 ALIGNMENT. 24196 24197`segment TOKENS...' 24198 This pragma is accepted, but has no effect. 24199 24200`unused (VAR [, VAR]...)' 24201 This pragma declares variables to be possibly unused. GCC will not 24202 produce warnings for the listed variables. The effect is similar 24203 to that of the `unused' attribute, except that this pragma may 24204 appear anywhere within the variables' scopes. 24205 24206 24207File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 24208 242095.50.5 Solaris Pragmas 24210---------------------- 24211 24212The Solaris target supports `#pragma redefine_extname' (*note 24213Symbol-Renaming Pragmas::). It also supports additional `#pragma' 24214directives for compatibility with the system compiler. 24215 24216`align ALIGNMENT (VARIABLE [, VARIABLE]...)' 24217 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 24218 This is the same as GCC's `aligned' attribute *note Variable 24219 Attributes::). Macro expansion occurs on the arguments to this 24220 pragma when compiling C and Objective-C. It does not currently 24221 occur when compiling C++, but this is a bug which may be fixed in 24222 a future release. 24223 24224`fini (FUNCTION [, FUNCTION]...)' 24225 This pragma causes each listed FUNCTION to be called after main, 24226 or during shared module unloading, by adding a call to the `.fini' 24227 section. 24228 24229`init (FUNCTION [, FUNCTION]...)' 24230 This pragma causes each listed FUNCTION to be called during 24231 initialization (before `main') or during shared module loading, by 24232 adding a call to the `.init' section. 24233 24234 24235 24236File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 24237 242385.50.6 Symbol-Renaming Pragmas 24239------------------------------ 24240 24241For compatibility with the Solaris and Tru64 UNIX system headers, GCC 24242supports two `#pragma' directives which change the name used in 24243assembly for a given declaration. These pragmas are only available on 24244platforms whose system headers need them. To get this effect on all 24245platforms supported by GCC, use the asm labels extension (*note Asm 24246Labels::). 24247 24248`redefine_extname OLDNAME NEWNAME' 24249 This pragma gives the C function OLDNAME the assembly symbol 24250 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 24251 be defined if this pragma is available (currently only on Solaris). 24252 24253`extern_prefix STRING' 24254 This pragma causes all subsequent external function and variable 24255 declarations to have STRING prepended to their assembly symbols. 24256 This effect may be terminated with another `extern_prefix' pragma 24257 whose argument is an empty string. The preprocessor macro 24258 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 24259 available (currently only on Tru64 UNIX). 24260 24261 These pragmas and the asm labels extension interact in a complicated 24262manner. Here are some corner cases you may want to be aware of. 24263 24264 1. Both pragmas silently apply only to declarations with external 24265 linkage. Asm labels do not have this restriction. 24266 24267 2. In C++, both pragmas silently apply only to declarations with "C" 24268 linkage. Again, asm labels do not have this restriction. 24269 24270 3. If any of the three ways of changing the assembly name of a 24271 declaration is applied to a declaration whose assembly name has 24272 already been determined (either by a previous use of one of these 24273 features, or because the compiler needed the assembly name in 24274 order to generate code), and the new name is different, a warning 24275 issues and the name does not change. 24276 24277 4. The OLDNAME used by `#pragma redefine_extname' is always the 24278 C-language name. 24279 24280 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 24281 with an asm label attached, the prefix is silently ignored for 24282 that declaration. 24283 24284 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 24285 the same declaration, whichever triggered first wins, and a 24286 warning issues if they contradict each other. (We would like to 24287 have `#pragma redefine_extname' always win, for consistency with 24288 asm labels, but if `#pragma extern_prefix' triggers first we have 24289 no way of knowing that that happened.) 24290 24291 24292File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 24293 242945.50.7 Structure-Packing Pragmas 24295-------------------------------- 24296 24297For compatibility with Win32, GCC supports a set of `#pragma' 24298directives which change the maximum alignment of members of structures 24299(other than zero-width bitfields), unions, and classes subsequently 24300defined. The N value below always is required to be a small power of 24301two and specifies the new alignment in bytes. 24302 24303 1. `#pragma pack(N)' simply sets the new alignment. 24304 24305 2. `#pragma pack()' sets the alignment to the one that was in effect 24306 when compilation started (see also command line option 24307 `-fpack-struct[=<n>]' *note Code Gen Options::). 24308 24309 3. `#pragma pack(push[,N])' pushes the current alignment setting on 24310 an internal stack and then optionally sets the new alignment. 24311 24312 4. `#pragma pack(pop)' restores the alignment setting to the one 24313 saved at the top of the internal stack (and removes that stack 24314 entry). Note that `#pragma pack([N])' does not influence this 24315 internal stack; thus it is possible to have `#pragma pack(push)' 24316 followed by multiple `#pragma pack(N)' instances and finalized by 24317 a single `#pragma pack(pop)'. 24318 24319 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 24320which lays out a structure as the documented `__attribute__ 24321((ms_struct))'. 24322 1. `#pragma ms_struct on' turns on the layout for structures declared. 24323 24324 2. `#pragma ms_struct off' turns off the layout for structures 24325 declared. 24326 24327 3. `#pragma ms_struct reset' goes back to the default layout. 24328 24329 24330File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 24331 243325.50.8 Weak Pragmas 24333------------------- 24334 24335For compatibility with SVR4, GCC supports a set of `#pragma' directives 24336for declaring symbols to be weak, and defining weak aliases. 24337 24338`#pragma weak SYMBOL' 24339 This pragma declares SYMBOL to be weak, as if the declaration had 24340 the attribute of the same name. The pragma may appear before or 24341 after the declaration of SYMBOL, but must appear before either its 24342 first use or its definition. It is not an error for SYMBOL to 24343 never be defined at all. 24344 24345`#pragma weak SYMBOL1 = SYMBOL2' 24346 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 24347 an error if SYMBOL2 is not defined in the current translation unit. 24348 24349 24350File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 24351 243525.50.9 Diagnostic Pragmas 24353------------------------- 24354 24355GCC allows the user to selectively enable or disable certain types of 24356diagnostics, and change the kind of the diagnostic. For example, a 24357project's policy might require that all sources compile with `-Werror' 24358but certain files might have exceptions allowing specific types of 24359warnings. Or, a project might selectively enable diagnostics and treat 24360them as errors depending on which preprocessor macros are defined. 24361 24362`#pragma GCC diagnostic KIND OPTION' 24363 Modifies the disposition of a diagnostic. Note that not all 24364 diagnostics are modifiable; at the moment only warnings (normally 24365 controlled by `-W...') can be controlled, and not all of them. 24366 Use `-fdiagnostics-show-option' to determine which diagnostics are 24367 controllable and which option controls them. 24368 24369 KIND is `error' to treat this diagnostic as an error, `warning' to 24370 treat it like a warning (even if `-Werror' is in effect), or 24371 `ignored' if the diagnostic is to be ignored. OPTION is a double 24372 quoted string which matches the command line option. 24373 24374 #pragma GCC diagnostic warning "-Wformat" 24375 #pragma GCC diagnostic error "-Wformat" 24376 #pragma GCC diagnostic ignored "-Wformat" 24377 24378 Note that these pragmas override any command line options. Also, 24379 while it is syntactically valid to put these pragmas anywhere in 24380 your sources, the only supported location for them is before any 24381 data or functions are defined. Doing otherwise may result in 24382 unpredictable results depending on how the optimizer manages your 24383 sources. If the same option is listed multiple times, the last 24384 one specified is the one that is in effect. This pragma is not 24385 intended to be a general purpose replacement for command line 24386 options, but for implementing strict control over project policies. 24387 24388 24389 24390File: gcc.info, Node: Visibility Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 24391 243925.50.10 Visibility Pragmas 24393-------------------------- 24394 24395`#pragma GCC visibility push(VISIBILITY)' 24396`#pragma GCC visibility pop' 24397 This pragma allows the user to set the visibility for multiple 24398 declarations without having to give each a visibility attribute 24399 *Note Function Attributes::, for more information about visibility 24400 and the attribute syntax. 24401 24402 In C++, `#pragma GCC visibility' affects only namespace-scope 24403 declarations. Class members and template specializations are not 24404 affected; if you want to override the visibility for a particular 24405 member or instantiation, you must use an attribute. 24406 24407 24408 24409File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 24410 244115.51 Unnamed struct/union fields within structs/unions 24412====================================================== 24413 24414For compatibility with other compilers, GCC allows you to define a 24415structure or union that contains, as fields, structures and unions 24416without names. For example: 24417 24418 struct { 24419 int a; 24420 union { 24421 int b; 24422 float c; 24423 }; 24424 int d; 24425 } foo; 24426 24427 In this example, the user would be able to access members of the 24428unnamed union with code like `foo.b'. Note that only unnamed structs 24429and unions are allowed, you may not have, for example, an unnamed `int'. 24430 24431 You must never create such structures that cause ambiguous field 24432definitions. For example, this structure: 24433 24434 struct { 24435 int a; 24436 struct { 24437 int a; 24438 }; 24439 } foo; 24440 24441 It is ambiguous which `a' is being referred to with `foo.a'. Such 24442constructs are not supported and must be avoided. In the future, such 24443constructs may be detected and treated as compilation errors. 24444 24445 Unless `-fms-extensions' is used, the unnamed field must be a 24446structure or union definition without a tag (for example, `struct { int 24447a; };'). If `-fms-extensions' is used, the field may also be a 24448definition with a tag such as `struct foo { int a; };', a reference to 24449a previously defined structure or union such as `struct foo;', or a 24450reference to a `typedef' name for a previously defined structure or 24451union type. 24452 24453 24454File: gcc.info, Node: Thread-Local, Prev: Unnamed Fields, Up: C Extensions 24455 244565.52 Thread-Local Storage 24457========================= 24458 24459Thread-local storage (TLS) is a mechanism by which variables are 24460allocated such that there is one instance of the variable per extant 24461thread. The run-time model GCC uses to implement this originates in 24462the IA-64 processor-specific ABI, but has since been migrated to other 24463processors as well. It requires significant support from the linker 24464(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 24465`libpthread.so'), so it is not available everywhere. 24466 24467 At the user level, the extension is visible with a new storage class 24468keyword: `__thread'. For example: 24469 24470 __thread int i; 24471 extern __thread struct state s; 24472 static __thread char *p; 24473 24474 The `__thread' specifier may be used alone, with the `extern' or 24475`static' specifiers, but with no other storage class specifier. When 24476used with `extern' or `static', `__thread' must appear immediately 24477after the other storage class specifier. 24478 24479 The `__thread' specifier may be applied to any global, file-scoped 24480static, function-scoped static, or static data member of a class. It 24481may not be applied to block-scoped automatic or non-static data member. 24482 24483 When the address-of operator is applied to a thread-local variable, it 24484is evaluated at run-time and returns the address of the current thread's 24485instance of that variable. An address so obtained may be used by any 24486thread. When a thread terminates, any pointers to thread-local 24487variables in that thread become invalid. 24488 24489 No static initialization may refer to the address of a thread-local 24490variable. 24491 24492 In C++, if an initializer is present for a thread-local variable, it 24493must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 24494standard. 24495 24496 See ELF Handling For Thread-Local Storage 24497(http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of 24498the four thread-local storage addressing models, and how the run-time 24499is expected to function. 24500 24501* Menu: 24502 24503* C99 Thread-Local Edits:: 24504* C++98 Thread-Local Edits:: 24505 24506 24507File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 24508 245095.52.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 24510------------------------------------------------------- 24511 24512The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 24513document the exact semantics of the language extension. 24514 24515 * `5.1.2 Execution environments' 24516 24517 Add new text after paragraph 1 24518 24519 Within either execution environment, a "thread" is a flow of 24520 control within a program. It is implementation defined 24521 whether or not there may be more than one thread associated 24522 with a program. It is implementation defined how threads 24523 beyond the first are created, the name and type of the 24524 function called at thread startup, and how threads may be 24525 terminated. However, objects with thread storage duration 24526 shall be initialized before thread startup. 24527 24528 * `6.2.4 Storage durations of objects' 24529 24530 Add new text before paragraph 3 24531 24532 An object whose identifier is declared with the storage-class 24533 specifier `__thread' has "thread storage duration". Its 24534 lifetime is the entire execution of the thread, and its 24535 stored value is initialized only once, prior to thread 24536 startup. 24537 24538 * `6.4.1 Keywords' 24539 24540 Add `__thread'. 24541 24542 * `6.7.1 Storage-class specifiers' 24543 24544 Add `__thread' to the list of storage class specifiers in 24545 paragraph 1. 24546 24547 Change paragraph 2 to 24548 24549 With the exception of `__thread', at most one storage-class 24550 specifier may be given [...]. The `__thread' specifier may 24551 be used alone, or immediately following `extern' or `static'. 24552 24553 Add new text after paragraph 6 24554 24555 The declaration of an identifier for a variable that has 24556 block scope that specifies `__thread' shall also specify 24557 either `extern' or `static'. 24558 24559 The `__thread' specifier shall be used only with variables. 24560 24561 24562File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 24563 245645.52.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 24565-------------------------------------------------------- 24566 24567The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 24568that document the exact semantics of the language extension. 24569 24570 * [intro.execution] 24571 24572 New text after paragraph 4 24573 24574 A "thread" is a flow of control within the abstract machine. 24575 It is implementation defined whether or not there may be more 24576 than one thread. 24577 24578 New text after paragraph 7 24579 24580 It is unspecified whether additional action must be taken to 24581 ensure when and whether side effects are visible to other 24582 threads. 24583 24584 * [lex.key] 24585 24586 Add `__thread'. 24587 24588 * [basic.start.main] 24589 24590 Add after paragraph 5 24591 24592 The thread that begins execution at the `main' function is 24593 called the "main thread". It is implementation defined how 24594 functions beginning threads other than the main thread are 24595 designated or typed. A function so designated, as well as 24596 the `main' function, is called a "thread startup function". 24597 It is implementation defined what happens if a thread startup 24598 function returns. It is implementation defined what happens 24599 to other threads when any thread calls `exit'. 24600 24601 * [basic.start.init] 24602 24603 Add after paragraph 4 24604 24605 The storage for an object of thread storage duration shall be 24606 statically initialized before the first statement of the 24607 thread startup function. An object of thread storage 24608 duration shall not require dynamic initialization. 24609 24610 * [basic.start.term] 24611 24612 Add after paragraph 3 24613 24614 The type of an object with thread storage duration shall not 24615 have a non-trivial destructor, nor shall it be an array type 24616 whose elements (directly or indirectly) have non-trivial 24617 destructors. 24618 24619 * [basic.stc] 24620 24621 Add "thread storage duration" to the list in paragraph 1. 24622 24623 Change paragraph 2 24624 24625 Thread, static, and automatic storage durations are 24626 associated with objects introduced by declarations [...]. 24627 24628 Add `__thread' to the list of specifiers in paragraph 3. 24629 24630 * [basic.stc.thread] 24631 24632 New section before [basic.stc.static] 24633 24634 The keyword `__thread' applied to a non-local object gives the 24635 object thread storage duration. 24636 24637 A local variable or class data member declared both `static' 24638 and `__thread' gives the variable or member thread storage 24639 duration. 24640 24641 * [basic.stc.static] 24642 24643 Change paragraph 1 24644 24645 All objects which have neither thread storage duration, 24646 dynamic storage duration nor are local [...]. 24647 24648 * [dcl.stc] 24649 24650 Add `__thread' to the list in paragraph 1. 24651 24652 Change paragraph 1 24653 24654 With the exception of `__thread', at most one 24655 STORAGE-CLASS-SPECIFIER shall appear in a given 24656 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 24657 alone, or immediately following the `extern' or `static' 24658 specifiers. [...] 24659 24660 Add after paragraph 5 24661 24662 The `__thread' specifier can be applied only to the names of 24663 objects and to anonymous unions. 24664 24665 * [class.mem] 24666 24667 Add after paragraph 6 24668 24669 Non-`static' members shall not be `__thread'. 24670 24671 24672File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 24673 246746 Extensions to the C++ Language 24675******************************** 24676 24677The GNU compiler provides these extensions to the C++ language (and you 24678can also use most of the C language extensions in your C++ programs). 24679If you want to write code that checks whether these features are 24680available, you can test for the GNU compiler the same way as for C 24681programs: check for a predefined macro `__GNUC__'. You can also use 24682`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 24683(cpp)Common Predefined Macros.). 24684 24685* Menu: 24686 24687* Volatiles:: What constitutes an access to a volatile object. 24688* Restricted Pointers:: C99 restricted pointers and references. 24689* Vague Linkage:: Where G++ puts inlines, vtables and such. 24690* C++ Interface:: You can use a single C++ header file for both 24691 declarations and definitions. 24692* Template Instantiation:: Methods for ensuring that exactly one copy of 24693 each needed template instantiation is emitted. 24694* Bound member functions:: You can extract a function pointer to the 24695 method denoted by a `->*' or `.*' expression. 24696* C++ Attributes:: Variable, function, and type attributes for C++ only. 24697* Namespace Association:: Strong using-directives for namespace association. 24698* Java Exceptions:: Tweaking exception handling to work with Java. 24699* Deprecated Features:: Things will disappear from g++. 24700* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 24701 24702 24703File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Up: C++ Extensions 24704 247056.1 When is a Volatile Object Accessed? 24706======================================= 24707 24708Both the C and C++ standard have the concept of volatile objects. These 24709are normally accessed by pointers and used for accessing hardware. The 24710standards encourage compilers to refrain from optimizations concerning 24711accesses to volatile objects. The C standard leaves it implementation 24712defined as to what constitutes a volatile access. The C++ standard 24713omits to specify this, except to say that C++ should behave in a 24714similar manner to C with respect to volatiles, where possible. The 24715minimum either standard specifies is that at a sequence point all 24716previous accesses to volatile objects have stabilized and no subsequent 24717accesses have occurred. Thus an implementation is free to reorder and 24718combine volatile accesses which occur between sequence points, but 24719cannot do so for accesses across a sequence point. The use of 24720volatiles does not allow you to violate the restriction on updating 24721objects multiple times within a sequence point. 24722 24723 *Note Volatile qualifier and the C compiler: Qualifiers implementation. 24724 24725 The behavior differs slightly between C and C++ in the non-obvious 24726cases: 24727 24728 volatile int *src = SOMEVALUE; 24729 *src; 24730 24731 With C, such expressions are rvalues, and GCC interprets this either 24732as a read of the volatile object being pointed to or only as request to 24733evaluate the side-effects. The C++ standard specifies that such 24734expressions do not undergo lvalue to rvalue conversion, and that the 24735type of the dereferenced object may be incomplete. The C++ standard 24736does not specify explicitly that it is this lvalue to rvalue conversion 24737which may be responsible for causing an access. However, there is 24738reason to believe that it is, because otherwise certain simple 24739expressions become undefined. However, because it would surprise most 24740programmers, G++ treats dereferencing a pointer to volatile object of 24741complete type when the value is unused as GCC would do for an 24742equivalent type in C. When the object has incomplete type, G++ issues 24743a warning; if you wish to force an error, you must force a conversion 24744to rvalue with, for instance, a static cast. 24745 24746 When using a reference to volatile, G++ does not treat equivalent 24747expressions as accesses to volatiles, but instead issues a warning that 24748no volatile is accessed. The rationale for this is that otherwise it 24749becomes difficult to determine where volatile access occur, and not 24750possible to ignore the return value from functions returning volatile 24751references. Again, if you wish to force a read, cast the reference to 24752an rvalue. 24753 24754 24755File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions 24756 247576.2 Restricting Pointer Aliasing 24758================================ 24759 24760As with the C front end, G++ understands the C99 feature of restricted 24761pointers, specified with the `__restrict__', or `__restrict' type 24762qualifier. Because you cannot compile C++ by specifying the `-std=c99' 24763language flag, `restrict' is not a keyword in C++. 24764 24765 In addition to allowing restricted pointers, you can specify restricted 24766references, which indicate that the reference is not aliased in the 24767local context. 24768 24769 void fn (int *__restrict__ rptr, int &__restrict__ rref) 24770 { 24771 /* ... */ 24772 } 24773 24774In the body of `fn', RPTR points to an unaliased integer and RREF 24775refers to a (different) unaliased integer. 24776 24777 You may also specify whether a member function's THIS pointer is 24778unaliased by using `__restrict__' as a member function qualifier. 24779 24780 void T::fn () __restrict__ 24781 { 24782 /* ... */ 24783 } 24784 24785Within the body of `T::fn', THIS will have the effective definition `T 24786*__restrict__ const this'. Notice that the interpretation of a 24787`__restrict__' member function qualifier is different to that of 24788`const' or `volatile' qualifier, in that it is applied to the pointer 24789rather than the object. This is consistent with other compilers which 24790implement restricted pointers. 24791 24792 As with all outermost parameter qualifiers, `__restrict__' is ignored 24793in function definition matching. This means you only need to specify 24794`__restrict__' in a function definition, rather than in a function 24795prototype as well. 24796 24797 24798File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 24799 248006.3 Vague Linkage 24801================= 24802 24803There are several constructs in C++ which require space in the object 24804file but are not clearly tied to a single translation unit. We say that 24805these constructs have "vague linkage". Typically such constructs are 24806emitted wherever they are needed, though sometimes we can be more 24807clever. 24808 24809Inline Functions 24810 Inline functions are typically defined in a header file which can 24811 be included in many different compilations. Hopefully they can 24812 usually be inlined, but sometimes an out-of-line copy is 24813 necessary, if the address of the function is taken or if inlining 24814 fails. In general, we emit an out-of-line copy in all translation 24815 units where one is needed. As an exception, we only emit inline 24816 virtual functions with the vtable, since it will always require a 24817 copy. 24818 24819 Local static variables and string constants used in an inline 24820 function are also considered to have vague linkage, since they 24821 must be shared between all inlined and out-of-line instances of 24822 the function. 24823 24824VTables 24825 C++ virtual functions are implemented in most compilers using a 24826 lookup table, known as a vtable. The vtable contains pointers to 24827 the virtual functions provided by a class, and each object of the 24828 class contains a pointer to its vtable (or vtables, in some 24829 multiple-inheritance situations). If the class declares any 24830 non-inline, non-pure virtual functions, the first one is chosen as 24831 the "key method" for the class, and the vtable is only emitted in 24832 the translation unit where the key method is defined. 24833 24834 _Note:_ If the chosen key method is later defined as inline, the 24835 vtable will still be emitted in every translation unit which 24836 defines it. Make sure that any inline virtuals are declared 24837 inline in the class body, even if they are not defined there. 24838 24839type_info objects 24840 C++ requires information about types to be written out in order to 24841 implement `dynamic_cast', `typeid' and exception handling. For 24842 polymorphic classes (classes with virtual functions), the type_info 24843 object is written out along with the vtable so that `dynamic_cast' 24844 can determine the dynamic type of a class object at runtime. For 24845 all other types, we write out the type_info object when it is 24846 used: when applying `typeid' to an expression, throwing an object, 24847 or referring to a type in a catch clause or exception 24848 specification. 24849 24850Template Instantiations 24851 Most everything in this section also applies to template 24852 instantiations, but there are other options as well. *Note 24853 Where's the Template?: Template Instantiation. 24854 24855 24856 When used with GNU ld version 2.8 or later on an ELF system such as 24857GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 24858these constructs will be discarded at link time. This is known as 24859COMDAT support. 24860 24861 On targets that don't support COMDAT, but do support weak symbols, GCC 24862will use them. This way one copy will override all the others, but the 24863unused copies will still take up space in the executable. 24864 24865 For targets which do not support either COMDAT or weak symbols, most 24866entities with vague linkage will be emitted as local symbols to avoid 24867duplicate definition errors from the linker. This will not happen for 24868local statics in inlines, however, as having multiple copies will 24869almost certainly break things. 24870 24871 *Note Declarations and Definitions in One Header: C++ Interface, for 24872another way to control placement of these constructs. 24873 24874 24875File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 24876 248776.4 #pragma interface and implementation 24878======================================== 24879 24880`#pragma interface' and `#pragma implementation' provide the user with 24881a way of explicitly directing the compiler to emit entities with vague 24882linkage (and debugging information) in a particular translation unit. 24883 24884 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 24885cases, because of COMDAT support and the "key method" heuristic 24886mentioned in *Note Vague Linkage::. Using them can actually cause your 24887program to grow due to unnecessary out-of-line copies of inline 24888functions. Currently (3.4) the only benefit of these `#pragma's is 24889reduced duplication of debugging information, and that should be 24890addressed soon on DWARF 2 targets with the use of COMDAT groups. 24891 24892`#pragma interface' 24893`#pragma interface "SUBDIR/OBJECTS.h"' 24894 Use this directive in _header files_ that define object classes, 24895 to save space in most of the object files that use those classes. 24896 Normally, local copies of certain information (backup copies of 24897 inline member functions, debugging information, and the internal 24898 tables that implement virtual functions) must be kept in each 24899 object file that includes class definitions. You can use this 24900 pragma to avoid such duplication. When a header file containing 24901 `#pragma interface' is included in a compilation, this auxiliary 24902 information will not be generated (unless the main input source 24903 file itself uses `#pragma implementation'). Instead, the object 24904 files will contain references to be resolved at link time. 24905 24906 The second form of this directive is useful for the case where you 24907 have multiple headers with the same name in different directories. 24908 If you use this form, you must specify the same string to `#pragma 24909 implementation'. 24910 24911`#pragma implementation' 24912`#pragma implementation "OBJECTS.h"' 24913 Use this pragma in a _main input file_, when you want full output 24914 from included header files to be generated (and made globally 24915 visible). The included header file, in turn, should use `#pragma 24916 interface'. Backup copies of inline member functions, debugging 24917 information, and the internal tables used to implement virtual 24918 functions are all generated in implementation files. 24919 24920 If you use `#pragma implementation' with no argument, it applies to 24921 an include file with the same basename(1) as your source file. 24922 For example, in `allclass.cc', giving just `#pragma implementation' 24923 by itself is equivalent to `#pragma implementation "allclass.h"'. 24924 24925 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 24926 an implementation file whenever you would include it from 24927 `allclass.cc' even if you never specified `#pragma 24928 implementation'. This was deemed to be more trouble than it was 24929 worth, however, and disabled. 24930 24931 Use the string argument if you want a single implementation file to 24932 include code from multiple header files. (You must also use 24933 `#include' to include the header file; `#pragma implementation' 24934 only specifies how to use the file--it doesn't actually include 24935 it.) 24936 24937 There is no way to split up the contents of a single header file 24938 into multiple implementation files. 24939 24940 `#pragma implementation' and `#pragma interface' also have an effect 24941on function inlining. 24942 24943 If you define a class in a header file marked with `#pragma 24944interface', the effect on an inline function defined in that class is 24945similar to an explicit `extern' declaration--the compiler emits no code 24946at all to define an independent version of the function. Its 24947definition is used only for inlining with its callers. 24948 24949 Conversely, when you include the same header file in a main source file 24950that declares it as `#pragma implementation', the compiler emits code 24951for the function itself; this defines a version of the function that 24952can be found via pointers (or by callers compiled without inlining). 24953If all calls to the function can be inlined, you can avoid emitting the 24954function by compiling with `-fno-implement-inlines'. If any calls were 24955not inlined, you will get linker errors. 24956 24957 ---------- Footnotes ---------- 24958 24959 (1) A file's "basename" was the name stripped of all leading path 24960information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 24961 24962 24963File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 24964 249656.5 Where's the Template? 24966========================= 24967 24968C++ templates are the first language feature to require more 24969intelligence from the environment than one usually finds on a UNIX 24970system. Somehow the compiler and linker have to make sure that each 24971template instance occurs exactly once in the executable if it is needed, 24972and not at all otherwise. There are two basic approaches to this 24973problem, which are referred to as the Borland model and the Cfront 24974model. 24975 24976Borland model 24977 Borland C++ solved the template instantiation problem by adding 24978 the code equivalent of common blocks to their linker; the compiler 24979 emits template instances in each translation unit that uses them, 24980 and the linker collapses them together. The advantage of this 24981 model is that the linker only has to consider the object files 24982 themselves; there is no external complexity to worry about. This 24983 disadvantage is that compilation time is increased because the 24984 template code is being compiled repeatedly. Code written for this 24985 model tends to include definitions of all templates in the header 24986 file, since they must be seen to be instantiated. 24987 24988Cfront model 24989 The AT&T C++ translator, Cfront, solved the template instantiation 24990 problem by creating the notion of a template repository, an 24991 automatically maintained place where template instances are 24992 stored. A more modern version of the repository works as follows: 24993 As individual object files are built, the compiler places any 24994 template definitions and instantiations encountered in the 24995 repository. At link time, the link wrapper adds in the objects in 24996 the repository and compiles any needed instances that were not 24997 previously emitted. The advantages of this model are more optimal 24998 compilation speed and the ability to use the system linker; to 24999 implement the Borland model a compiler vendor also needs to 25000 replace the linker. The disadvantages are vastly increased 25001 complexity, and thus potential for error; for some code this can be 25002 just as transparent, but in practice it can been very difficult to 25003 build multiple programs in one directory and one program in 25004 multiple directories. Code written for this model tends to 25005 separate definitions of non-inline member templates into a 25006 separate file, which should be compiled separately. 25007 25008 When used with GNU ld version 2.8 or later on an ELF system such as 25009GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 25010Borland model. On other systems, G++ implements neither automatic 25011model. 25012 25013 A future version of G++ will support a hybrid model whereby the 25014compiler will emit any instantiations for which the template definition 25015is included in the compile, and store template definitions and 25016instantiation context information into the object file for the rest. 25017The link wrapper will extract that information as necessary and invoke 25018the compiler to produce the remaining instantiations. The linker will 25019then combine duplicate instantiations. 25020 25021 In the mean time, you have the following options for dealing with 25022template instantiations: 25023 25024 1. Compile your template-using code with `-frepo'. The compiler will 25025 generate files with the extension `.rpo' listing all of the 25026 template instantiations used in the corresponding object files 25027 which could be instantiated there; the link wrapper, `collect2', 25028 will then update the `.rpo' files to tell the compiler where to 25029 place those instantiations and rebuild any affected object files. 25030 The link-time overhead is negligible after the first pass, as the 25031 compiler will continue to place the instantiations in the same 25032 files. 25033 25034 This is your best option for application code written for the 25035 Borland model, as it will just work. Code written for the Cfront 25036 model will need to be modified so that the template definitions 25037 are available at one or more points of instantiation; usually this 25038 is as simple as adding `#include <tmethods.cc>' to the end of each 25039 template header. 25040 25041 For library code, if you want the library to provide all of the 25042 template instantiations it needs, just try to link all of its 25043 object files together; the link will fail, but cause the 25044 instantiations to be generated as a side effect. Be warned, 25045 however, that this may cause conflicts if multiple libraries try 25046 to provide the same instantiations. For greater control, use 25047 explicit instantiation as described in the next option. 25048 25049 2. Compile your code with `-fno-implicit-templates' to disable the 25050 implicit generation of template instances, and explicitly 25051 instantiate all the ones you use. This approach requires more 25052 knowledge of exactly which instances you need than do the others, 25053 but it's less mysterious and allows greater control. You can 25054 scatter the explicit instantiations throughout your program, 25055 perhaps putting them in the translation units where the instances 25056 are used or the translation units that define the templates 25057 themselves; you can put all of the explicit instantiations you 25058 need into one big file; or you can create small files like 25059 25060 #include "Foo.h" 25061 #include "Foo.cc" 25062 25063 template class Foo<int>; 25064 template ostream& operator << 25065 (ostream&, const Foo<int>&); 25066 25067 for each of the instances you need, and create a template 25068 instantiation library from those. 25069 25070 If you are using Cfront-model code, you can probably get away with 25071 not using `-fno-implicit-templates' when compiling files that don't 25072 `#include' the member template definitions. 25073 25074 If you use one big file to do the instantiations, you may want to 25075 compile it without `-fno-implicit-templates' so you get all of the 25076 instances required by your explicit instantiations (but not by any 25077 other files) without having to specify them as well. 25078 25079 G++ has extended the template instantiation syntax given in the ISO 25080 standard to allow forward declaration of explicit instantiations 25081 (with `extern'), instantiation of the compiler support data for a 25082 template class (i.e. the vtable) without instantiating any of its 25083 members (with `inline'), and instantiation of only the static data 25084 members of a template class, without the support data or member 25085 functions (with (`static'): 25086 25087 extern template int max (int, int); 25088 inline template class Foo<int>; 25089 static template class Foo<int>; 25090 25091 3. Do nothing. Pretend G++ does implement automatic instantiation 25092 management. Code written for the Borland model will work fine, but 25093 each translation unit will contain instances of each of the 25094 templates it uses. In a large program, this can lead to an 25095 unacceptable amount of code duplication. 25096 25097 25098File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 25099 251006.6 Extracting the function pointer from a bound pointer to member function 25101=========================================================================== 25102 25103In C++, pointer to member functions (PMFs) are implemented using a wide 25104pointer of sorts to handle all the possible call mechanisms; the PMF 25105needs to store information about how to adjust the `this' pointer, and 25106if the function pointed to is virtual, where to find the vtable, and 25107where in the vtable to look for the member function. If you are using 25108PMFs in an inner loop, you should really reconsider that decision. If 25109that is not an option, you can extract the pointer to the function that 25110would be called for a given object/PMF pair and call it directly inside 25111the inner loop, to save a bit of time. 25112 25113 Note that you will still be paying the penalty for the call through a 25114function pointer; on most modern architectures, such a call defeats the 25115branch prediction features of the CPU. This is also true of normal 25116virtual function calls. 25117 25118 The syntax for this extension is 25119 25120 extern A a; 25121 extern int (A::*fp)(); 25122 typedef int (*fptr)(A *); 25123 25124 fptr p = (fptr)(a.*fp); 25125 25126 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 25127object is needed to obtain the address of the function. They can be 25128converted to function pointers directly: 25129 25130 fptr p1 = (fptr)(&A::foo); 25131 25132 You must specify `-Wno-pmf-conversions' to use this extension. 25133 25134 25135File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 25136 251376.7 C++-Specific Variable, Function, and Type Attributes 25138======================================================== 25139 25140Some attributes only make sense for C++ programs. 25141 25142`init_priority (PRIORITY)' 25143 In Standard C++, objects defined at namespace scope are guaranteed 25144 to be initialized in an order in strict accordance with that of 25145 their definitions _in a given translation unit_. No guarantee is 25146 made for initializations across translation units. However, GNU 25147 C++ allows users to control the order of initialization of objects 25148 defined at namespace scope with the `init_priority' attribute by 25149 specifying a relative PRIORITY, a constant integral expression 25150 currently bounded between 101 and 65535 inclusive. Lower numbers 25151 indicate a higher priority. 25152 25153 In the following example, `A' would normally be created before 25154 `B', but the `init_priority' attribute has reversed that order: 25155 25156 Some_Class A __attribute__ ((init_priority (2000))); 25157 Some_Class B __attribute__ ((init_priority (543))); 25158 25159 Note that the particular values of PRIORITY do not matter; only 25160 their relative ordering. 25161 25162`java_interface' 25163 This type attribute informs C++ that the class is a Java 25164 interface. It may only be applied to classes declared within an 25165 `extern "Java"' block. Calls to methods declared in this 25166 interface will be dispatched using GCJ's interface table 25167 mechanism, instead of regular virtual table dispatch. 25168 25169 25170 See also *Note Namespace Association::. 25171 25172 25173File: gcc.info, Node: Namespace Association, Next: Java Exceptions, Prev: C++ Attributes, Up: C++ Extensions 25174 251756.8 Namespace Association 25176========================= 25177 25178*Caution:* The semantics of this extension are not fully defined. 25179Users should refrain from using this extension as its semantics may 25180change subtly over time. It is possible that this extension will be 25181removed in future versions of G++. 25182 25183 A using-directive with `__attribute ((strong))' is stronger than a 25184normal using-directive in two ways: 25185 25186 * Templates from the used namespace can be specialized and explicitly 25187 instantiated as though they were members of the using namespace. 25188 25189 * The using namespace is considered an associated namespace of all 25190 templates in the used namespace for purposes of argument-dependent 25191 name lookup. 25192 25193 The used namespace must be nested within the using namespace so that 25194normal unqualified lookup works properly. 25195 25196 This is useful for composing a namespace transparently from 25197implementation namespaces. For example: 25198 25199 namespace std { 25200 namespace debug { 25201 template <class T> struct A { }; 25202 } 25203 using namespace debug __attribute ((__strong__)); 25204 template <> struct A<int> { }; // ok to specialize 25205 25206 template <class T> void f (A<T>); 25207 } 25208 25209 int main() 25210 { 25211 f (std::A<float>()); // lookup finds std::f 25212 f (std::A<int>()); 25213 } 25214 25215 25216File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Namespace Association, Up: C++ Extensions 25217 252186.9 Java Exceptions 25219=================== 25220 25221The Java language uses a slightly different exception handling model 25222from C++. Normally, GNU C++ will automatically detect when you are 25223writing C++ code that uses Java exceptions, and handle them 25224appropriately. However, if C++ code only needs to execute destructors 25225when Java exceptions are thrown through it, GCC will guess incorrectly. 25226Sample problematic code is: 25227 25228 struct S { ~S(); }; 25229 extern void bar(); // is written in Java, and may throw exceptions 25230 void foo() 25231 { 25232 S s; 25233 bar(); 25234 } 25235 25236The usual effect of an incorrect guess is a link failure, complaining of 25237a missing routine called `__gxx_personality_v0'. 25238 25239 You can inform the compiler that Java exceptions are to be used in a 25240translation unit, irrespective of what it might think, by writing 25241`#pragma GCC java_exceptions' at the head of the file. This `#pragma' 25242must appear before any functions that throw or catch exceptions, or run 25243destructors when exceptions are thrown through them. 25244 25245 You cannot mix Java and C++ exceptions in the same translation unit. 25246It is believed to be safe to throw a C++ exception from one file through 25247another file compiled for the Java exception model, or vice versa, but 25248there may be bugs in this area. 25249 25250 25251File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 25252 252536.10 Deprecated Features 25254======================== 25255 25256In the past, the GNU C++ compiler was extended to experiment with new 25257features, at a time when the C++ language was still evolving. Now that 25258the C++ standard is complete, some of those features are superseded by 25259superior alternatives. Using the old features might cause a warning in 25260some cases that the feature will be dropped in the future. In other 25261cases, the feature might be gone already. 25262 25263 While the list below is not exhaustive, it documents some of the 25264options that are now deprecated: 25265 25266`-fexternal-templates' 25267`-falt-external-templates' 25268 These are two of the many ways for G++ to implement template 25269 instantiation. *Note Template Instantiation::. The C++ standard 25270 clearly defines how template definitions have to be organized 25271 across implementation units. G++ has an implicit instantiation 25272 mechanism that should work just fine for standard-conforming code. 25273 25274`-fstrict-prototype' 25275`-fno-strict-prototype' 25276 Previously it was possible to use an empty prototype parameter 25277 list to indicate an unspecified number of parameters (like C), 25278 rather than no parameters, as C++ demands. This feature has been 25279 removed, except where it is required for backwards compatibility 25280 *Note Backwards Compatibility::. 25281 25282 G++ allows a virtual function returning `void *' to be overridden by 25283one returning a different pointer type. This extension to the 25284covariant return type rules is now deprecated and will be removed from a 25285future version. 25286 25287 The G++ minimum and maximum operators (`<?' and `>?') and their 25288compound forms (`<?=') and `>?=') have been deprecated and will be 25289removed in a future version. Code using these operators should be 25290modified to use `std::min' and `std::max' instead. 25291 25292 The named return value extension has been deprecated, and is now 25293removed from G++. 25294 25295 The use of initializer lists with new expressions has been deprecated, 25296and is now removed from G++. 25297 25298 Floating and complex non-type template parameters have been deprecated, 25299and are now removed from G++. 25300 25301 The implicit typename extension has been deprecated and is now removed 25302from G++. 25303 25304 The use of default arguments in function pointers, function typedefs 25305and other places where they are not permitted by the standard is 25306deprecated and will be removed from a future version of G++. 25307 25308 G++ allows floating-point literals to appear in integral constant 25309expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 25310deprecated and will be removed from a future version. 25311 25312 G++ allows static data members of const floating-point type to be 25313declared with an initializer in a class definition. The standard only 25314allows initializers for static members of const integral types and const 25315enumeration types so this extension has been deprecated and will be 25316removed from a future version. 25317 25318 25319File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 25320 253216.11 Backwards Compatibility 25322============================ 25323 25324Now that there is a definitive ISO standard C++, G++ has a specification 25325to adhere to. The C++ language evolved over time, and features that 25326used to be acceptable in previous drafts of the standard, such as the 25327ARM [Annotated C++ Reference Manual], are no longer accepted. In order 25328to allow compilation of C++ written to such drafts, G++ contains some 25329backwards compatibilities. _All such backwards compatibility features 25330are liable to disappear in future versions of G++._ They should be 25331considered deprecated *Note Deprecated Features::. 25332 25333`For scope' 25334 If a variable is declared at for scope, it used to remain in scope 25335 until the end of the scope which contained the for statement 25336 (rather than just within the for scope). G++ retains this, but 25337 issues a warning, if such a variable is accessed outside the for 25338 scope. 25339 25340`Implicit C language' 25341 Old C system header files did not contain an `extern "C" {...}' 25342 scope to set the language. On such systems, all header files are 25343 implicitly scoped inside a C language scope. Also, an empty 25344 prototype `()' will be treated as an unspecified number of 25345 arguments, rather than no arguments, as C++ demands. 25346 25347 25348File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 25349 253507 GNU Objective-C runtime features 25351********************************** 25352 25353This document is meant to describe some of the GNU Objective-C runtime 25354features. It is not intended to teach you Objective-C, there are 25355several resources on the Internet that present the language. Questions 25356and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>. 25357 25358* Menu: 25359 25360* Executing code before main:: 25361* Type encoding:: 25362* Garbage Collection:: 25363* Constant string objects:: 25364* compatibility_alias:: 25365 25366 25367File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C 25368 253697.1 `+load': Executing code before main 25370======================================= 25371 25372The GNU Objective-C runtime provides a way that allows you to execute 25373code before the execution of the program enters the `main' function. 25374The code is executed on a per-class and a per-category basis, through a 25375special class method `+load'. 25376 25377 This facility is very useful if you want to initialize global variables 25378which can be accessed by the program directly, without sending a message 25379to the class first. The usual way to initialize global variables, in 25380the `+initialize' method, might not be useful because `+initialize' is 25381only called when the first message is sent to a class object, which in 25382some cases could be too late. 25383 25384 Suppose for example you have a `FileStream' class that declares 25385`Stdin', `Stdout' and `Stderr' as global variables, like below: 25386 25387 25388 FileStream *Stdin = nil; 25389 FileStream *Stdout = nil; 25390 FileStream *Stderr = nil; 25391 25392 @implementation FileStream 25393 25394 + (void)initialize 25395 { 25396 Stdin = [[FileStream new] initWithFd:0]; 25397 Stdout = [[FileStream new] initWithFd:1]; 25398 Stderr = [[FileStream new] initWithFd:2]; 25399 } 25400 25401 /* Other methods here */ 25402 @end 25403 25404 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 25405in `+initialize' occurs too late. The programmer can send a message to 25406one of these objects before the variables are actually initialized, 25407thus sending messages to the `nil' object. The `+initialize' method 25408which actually initializes the global variables is not invoked until 25409the first message is sent to the class object. The solution would 25410require these variables to be initialized just before entering `main'. 25411 25412 The correct solution of the above problem is to use the `+load' method 25413instead of `+initialize': 25414 25415 25416 @implementation FileStream 25417 25418 + (void)load 25419 { 25420 Stdin = [[FileStream new] initWithFd:0]; 25421 Stdout = [[FileStream new] initWithFd:1]; 25422 Stderr = [[FileStream new] initWithFd:2]; 25423 } 25424 25425 /* Other methods here */ 25426 @end 25427 25428 The `+load' is a method that is not overridden by categories. If a 25429class and a category of it both implement `+load', both methods are 25430invoked. This allows some additional initializations to be performed in 25431a category. 25432 25433 This mechanism is not intended to be a replacement for `+initialize'. 25434You should be aware of its limitations when you decide to use it 25435instead of `+initialize'. 25436 25437* Menu: 25438 25439* What you can and what you cannot do in +load:: 25440 25441 25442File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main 25443 254447.1.1 What you can and what you cannot do in `+load' 25445---------------------------------------------------- 25446 25447The `+load' implementation in the GNU runtime guarantees you the 25448following things: 25449 25450 * you can write whatever C code you like; 25451 25452 * you can send messages to Objective-C constant strings (`@"this is a 25453 constant string"'); 25454 25455 * you can allocate and send messages to objects whose class is 25456 implemented in the same file; 25457 25458 * the `+load' implementation of all super classes of a class are 25459 executed before the `+load' of that class is executed; 25460 25461 * the `+load' implementation of a class is executed before the 25462 `+load' implementation of any category. 25463 25464 25465 In particular, the following things, even if they can work in a 25466particular case, are not guaranteed: 25467 25468 * allocation of or sending messages to arbitrary objects; 25469 25470 * allocation of or sending messages to objects whose classes have a 25471 category implemented in the same file; 25472 25473 25474 You should make no assumptions about receiving `+load' in sibling 25475classes when you write `+load' of a class. The order in which sibling 25476classes receive `+load' is not guaranteed. 25477 25478 The order in which `+load' and `+initialize' are called could be 25479problematic if this matters. If you don't allocate objects inside 25480`+load', it is guaranteed that `+load' is called before `+initialize'. 25481If you create an object inside `+load' the `+initialize' method of 25482object's class is invoked even if `+load' was not invoked. Note if you 25483explicitly call `+load' on a class, `+initialize' will be called first. 25484To avoid possible problems try to implement only one of these methods. 25485 25486 The `+load' method is also invoked when a bundle is dynamically loaded 25487into your running program. This happens automatically without any 25488intervening operation from you. When you write bundles and you need to 25489write `+load' you can safely create and send messages to objects whose 25490classes already exist in the running program. The same restrictions as 25491above apply to classes defined in bundle. 25492 25493 25494File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 25495 254967.2 Type encoding 25497================= 25498 25499The Objective-C compiler generates type encodings for all the types. 25500These type encodings are used at runtime to find out information about 25501selectors and methods and about objects and classes. 25502 25503 The types are encoded in the following way: 25504 25505`_Bool' `B' 25506`char' `c' 25507`unsigned char' `C' 25508`short' `s' 25509`unsigned short' `S' 25510`int' `i' 25511`unsigned int' `I' 25512`long' `l' 25513`unsigned long' `L' 25514`long long' `q' 25515`unsigned long `Q' 25516long' 25517`float' `f' 25518`double' `d' 25519`void' `v' 25520`id' `@' 25521`Class' `#' 25522`SEL' `:' 25523`char*' `*' 25524unknown type `?' 25525Complex types `j' followed by the inner type. For example 25526 `_Complex double' is encoded as "jd". 25527bit-fields `b' followed by the starting position of the 25528 bit-field, the type of the bit-field and the size of 25529 the bit-field (the bit-fields encoding was changed 25530 from the NeXT's compiler encoding, see below) 25531 25532 The encoding of bit-fields has changed to allow bit-fields to be 25533properly handled by the runtime functions that compute sizes and 25534alignments of types that contain bit-fields. The previous encoding 25535contained only the size of the bit-field. Using only this information 25536it is not possible to reliably compute the size occupied by the 25537bit-field. This is very important in the presence of the Boehm's 25538garbage collector because the objects are allocated using the typed 25539memory facility available in this collector. The typed memory 25540allocation requires information about where the pointers are located 25541inside the object. 25542 25543 The position in the bit-field is the position, counting in bits, of the 25544bit closest to the beginning of the structure. 25545 25546 The non-atomic types are encoded as follows: 25547 25548pointers `^' followed by the pointed type. 25549arrays `[' followed by the number of elements in the array 25550 followed by the type of the elements followed by `]' 25551structures `{' followed by the name of the structure (or `?' if the 25552 structure is unnamed), the `=' sign, the type of the 25553 members and by `}' 25554unions `(' followed by the name of the structure (or `?' if the 25555 union is unnamed), the `=' sign, the type of the members 25556 followed by `)' 25557 25558 Here are some types and their encodings, as they are generated by the 25559compiler on an i386 machine: 25560 25561 25562Objective-C type Compiler encoding 25563 int a[10]; `[10i]' 25564 struct { `{?=i[3f]b128i3b131i2c}' 25565 int i; 25566 float f[3]; 25567 int a:3; 25568 int b:2; 25569 char c; 25570 } 25571 25572 25573 In addition to the types the compiler also encodes the type 25574specifiers. The table below describes the encoding of the current 25575Objective-C type specifiers: 25576 25577 25578Specifier Encoding 25579`const' `r' 25580`in' `n' 25581`inout' `N' 25582`out' `o' 25583`bycopy' `O' 25584`oneway' `V' 25585 25586 25587 The type specifiers are encoded just before the type. Unlike types 25588however, the type specifiers are only encoded when they appear in method 25589argument types. 25590 25591 25592File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 25593 255947.3 Garbage Collection 25595====================== 25596 25597Support for a new memory management policy has been added by using a 25598powerful conservative garbage collector, known as the 25599Boehm-Demers-Weiser conservative garbage collector. It is available 25600from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'. 25601 25602 To enable the support for it you have to configure the compiler using 25603an additional argument, `--enable-objc-gc'. You need to have garbage 25604collector installed before building the compiler. This will build an 25605additional runtime library which has several enhancements to support 25606the garbage collector. The new library has a new name, `libobjc_gc.a' 25607to not conflict with the non-garbage-collected library. 25608 25609 When the garbage collector is used, the objects are allocated using the 25610so-called typed memory allocation mechanism available in the 25611Boehm-Demers-Weiser collector. This mode requires precise information 25612on where pointers are located inside objects. This information is 25613computed once per class, immediately after the class has been 25614initialized. 25615 25616 There is a new runtime function `class_ivar_set_gcinvisible()' which 25617can be used to declare a so-called "weak pointer" reference. Such a 25618pointer is basically hidden for the garbage collector; this can be 25619useful in certain situations, especially when you want to keep track of 25620the allocated objects, yet allow them to be collected. This kind of 25621pointers can only be members of objects, you cannot declare a global 25622pointer as a weak reference. Every type which is a pointer type can be 25623declared a weak pointer, including `id', `Class' and `SEL'. 25624 25625 Here is an example of how to use this feature. Suppose you want to 25626implement a class whose instances hold a weak pointer reference; the 25627following class does this: 25628 25629 25630 @interface WeakPointer : Object 25631 { 25632 const void* weakPointer; 25633 } 25634 25635 - initWithPointer:(const void*)p; 25636 - (const void*)weakPointer; 25637 @end 25638 25639 25640 @implementation WeakPointer 25641 25642 + (void)initialize 25643 { 25644 class_ivar_set_gcinvisible (self, "weakPointer", YES); 25645 } 25646 25647 - initWithPointer:(const void*)p 25648 { 25649 weakPointer = p; 25650 return self; 25651 } 25652 25653 - (const void*)weakPointer 25654 { 25655 return weakPointer; 25656 } 25657 25658 @end 25659 25660 Weak pointers are supported through a new type character specifier 25661represented by the `!' character. The `class_ivar_set_gcinvisible()' 25662function adds or removes this specifier to the string type description 25663of the instance variable named as argument. 25664 25665 25666File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 25667 256687.4 Constant string objects 25669=========================== 25670 25671GNU Objective-C provides constant string objects that are generated 25672directly by the compiler. You declare a constant string object by 25673prefixing a C constant string with the character `@': 25674 25675 id myString = @"this is a constant string object"; 25676 25677 The constant string objects are by default instances of the 25678`NXConstantString' class which is provided by the GNU Objective-C 25679runtime. To get the definition of this class you must include the 25680`objc/NXConstStr.h' header file. 25681 25682 User defined libraries may want to implement their own constant string 25683class. To be able to support them, the GNU Objective-C compiler 25684provides a new command line options 25685`-fconstant-string-class=CLASS-NAME'. The provided class should adhere 25686to a strict structure, the same as `NXConstantString''s structure: 25687 25688 25689 @interface MyConstantStringClass 25690 { 25691 Class isa; 25692 char *c_string; 25693 unsigned int len; 25694 } 25695 @end 25696 25697 `NXConstantString' inherits from `Object'; user class libraries may 25698choose to inherit the customized constant string class from a different 25699class than `Object'. There is no requirement in the methods the 25700constant string class has to implement, but the final ivar layout of 25701the class must be the compatible with the given structure. 25702 25703 When the compiler creates the statically allocated constant string 25704object, the `c_string' field will be filled by the compiler with the 25705string; the `length' field will be filled by the compiler with the 25706string length; the `isa' pointer will be filled with `NULL' by the 25707compiler, and it will later be fixed up automatically at runtime by the 25708GNU Objective-C runtime library to point to the class which was set by 25709the `-fconstant-string-class' option when the object file is loaded (if 25710you wonder how it works behind the scenes, the name of the class to 25711use, and the list of static objects to fixup, are stored by the 25712compiler in the object file in a place where the GNU runtime library 25713will find them at runtime). 25714 25715 As a result, when a file is compiled with the 25716`-fconstant-string-class' option, all the constant string objects will 25717be instances of the class specified as argument to this option. It is 25718possible to have multiple compilation units referring to different 25719constant string classes, neither the compiler nor the linker impose any 25720restrictions in doing this. 25721 25722 25723File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C 25724 257257.5 compatibility_alias 25726======================= 25727 25728This is a feature of the Objective-C compiler rather than of the 25729runtime, anyway since it is documented nowhere and its existence was 25730forgotten, we are documenting it here. 25731 25732 The keyword `@compatibility_alias' allows you to define a class name 25733as equivalent to another class name. For example: 25734 25735 @compatibility_alias WOApplication GSWApplication; 25736 25737 tells the compiler that each time it encounters `WOApplication' as a 25738class name, it should replace it with `GSWApplication' (that is, 25739`WOApplication' is just an alias for `GSWApplication'). 25740 25741 There are some constraints on how this can be used-- 25742 25743 * `WOApplication' (the alias) must not be an existing class; 25744 25745 * `GSWApplication' (the real class) must be an existing class. 25746 25747 25748 25749File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 25750 257518 Binary Compatibility 25752********************** 25753 25754Binary compatibility encompasses several related concepts: 25755 25756"application binary interface (ABI)" 25757 The set of runtime conventions followed by all of the tools that 25758 deal with binary representations of a program, including 25759 compilers, assemblers, linkers, and language runtime support. 25760 Some ABIs are formal with a written specification, possibly 25761 designed by multiple interested parties. Others are simply the 25762 way things are actually done by a particular set of tools. 25763 25764"ABI conformance" 25765 A compiler conforms to an ABI if it generates code that follows 25766 all of the specifications enumerated by that ABI. A library 25767 conforms to an ABI if it is implemented according to that ABI. An 25768 application conforms to an ABI if it is built using tools that 25769 conform to that ABI and does not contain source code that 25770 specifically changes behavior specified by the ABI. 25771 25772"calling conventions" 25773 Calling conventions are a subset of an ABI that specify of how 25774 arguments are passed and function results are returned. 25775 25776"interoperability" 25777 Different sets of tools are interoperable if they generate files 25778 that can be used in the same program. The set of tools includes 25779 compilers, assemblers, linkers, libraries, header files, startup 25780 files, and debuggers. Binaries produced by different sets of 25781 tools are not interoperable unless they implement the same ABI. 25782 This applies to different versions of the same tools as well as 25783 tools from different vendors. 25784 25785"intercallability" 25786 Whether a function in a binary built by one set of tools can call a 25787 function in a binary built by a different set of tools is a subset 25788 of interoperability. 25789 25790"implementation-defined features" 25791 Language standards include lists of implementation-defined 25792 features whose behavior can vary from one implementation to 25793 another. Some of these features are normally covered by a 25794 platform's ABI and others are not. The features that are not 25795 covered by an ABI generally affect how a program behaves, but not 25796 intercallability. 25797 25798"compatibility" 25799 Conformance to the same ABI and the same behavior of 25800 implementation-defined features are both relevant for 25801 compatibility. 25802 25803 The application binary interface implemented by a C or C++ compiler 25804affects code generation and runtime support for: 25805 25806 * size and alignment of data types 25807 25808 * layout of structured types 25809 25810 * calling conventions 25811 25812 * register usage conventions 25813 25814 * interfaces for runtime arithmetic support 25815 25816 * object file formats 25817 25818 In addition, the application binary interface implemented by a C++ 25819compiler affects code generation and runtime support for: 25820 * name mangling 25821 25822 * exception handling 25823 25824 * invoking constructors and destructors 25825 25826 * layout, alignment, and padding of classes 25827 25828 * layout and alignment of virtual tables 25829 25830 Some GCC compilation options cause the compiler to generate code that 25831does not conform to the platform's default ABI. Other options cause 25832different program behavior for implementation-defined features that are 25833not covered by an ABI. These options are provided for consistency with 25834other compilers that do not follow the platform's default ABI or the 25835usual behavior of implementation-defined features for the platform. Be 25836very careful about using such options. 25837 25838 Most platforms have a well-defined ABI that covers C code, but ABIs 25839that cover C++ functionality are not yet common. 25840 25841 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 25842written, vendor-neutral C++ ABI that was designed to be specific to 2584364-bit Itanium but also includes generic specifications that apply to 25844any platform. This C++ ABI is also implemented by other compiler 25845vendors on some platforms, notably GNU/Linux and BSD systems. We have 25846tried hard to provide a stable ABI that will be compatible with future 25847GCC releases, but it is possible that we will encounter problems that 25848make this difficult. Such problems could include different 25849interpretations of the C++ ABI by different vendors, bugs in the ABI, or 25850bugs in the implementation of the ABI in different compilers. GCC's 25851`-Wabi' switch warns when G++ generates code that is probably not 25852compatible with the C++ ABI. 25853 25854 The C++ library used with a C++ compiler includes the Standard C++ 25855Library, with functionality defined in the C++ Standard, plus language 25856runtime support. The runtime support is included in a C++ ABI, but 25857there is no formal ABI for the Standard C++ Library. Two 25858implementations of that library are interoperable if one follows the 25859de-facto ABI of the other and if they are both built with the same 25860compiler, or with compilers that conform to the same ABI for C++ 25861compiler and runtime support. 25862 25863 When G++ and another C++ compiler conform to the same C++ ABI, but the 25864implementations of the Standard C++ Library that they normally use do 25865not follow the same ABI for the Standard C++ Library, object files 25866built with those compilers can be used in the same program only if they 25867use the same C++ library. This requires specifying the location of the 25868C++ library header files when invoking the compiler whose usual library 25869is not being used. The location of GCC's C++ header files depends on 25870how the GCC build was configured, but can be seen by using the G++ `-v' 25871option. With default configuration options for G++ 3.3 the compile 25872line for a different C++ compiler needs to include 25873 25874 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 25875 25876 Similarly, compiling code with G++ that must use a C++ library other 25877than the GNU C++ library requires specifying the location of the header 25878files for that other library. 25879 25880 The most straightforward way to link a program to use a particular C++ 25881library is to use a C++ driver that specifies that C++ library by 25882default. The `g++' driver, for example, tells the linker where to find 25883GCC's C++ library (`libstdc++') plus the other libraries and startup 25884files it needs, in the proper order. 25885 25886 If a program must use a different C++ library and it's not possible to 25887do the final link using a C++ driver that uses that library by default, 25888it is necessary to tell `g++' the location and name of that library. 25889It might also be necessary to specify different startup files and other 25890runtime support libraries, and to suppress the use of GCC's support 25891libraries with one or more of the options `-nostdlib', `-nostartfiles', 25892and `-nodefaultlibs'. 25893 25894 25895File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 25896 258979 `gcov'--a Test Coverage Program 25898********************************* 25899 25900`gcov' is a tool you can use in conjunction with GCC to test code 25901coverage in your programs. 25902 25903* Menu: 25904 25905* Gcov Intro:: Introduction to gcov. 25906* Invoking Gcov:: How to use gcov. 25907* Gcov and Optimization:: Using gcov with GCC optimization. 25908* Gcov Data Files:: The files used by gcov. 25909* Cross-profiling:: Data file relocation. 25910 25911 25912File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 25913 259149.1 Introduction to `gcov' 25915========================== 25916 25917`gcov' is a test coverage program. Use it in concert with GCC to 25918analyze your programs to help create more efficient, faster running 25919code and to discover untested parts of your program. You can use 25920`gcov' as a profiling tool to help discover where your optimization 25921efforts will best affect your code. You can also use `gcov' along with 25922the other profiling tool, `gprof', to assess which parts of your code 25923use the greatest amount of computing time. 25924 25925 Profiling tools help you analyze your code's performance. Using a 25926profiler such as `gcov' or `gprof', you can find out some basic 25927performance statistics, such as: 25928 25929 * how often each line of code executes 25930 25931 * what lines of code are actually executed 25932 25933 * how much computing time each section of code uses 25934 25935 Once you know these things about how your code works when compiled, you 25936can look at each module to see which modules should be optimized. 25937`gcov' helps you determine where to work on optimization. 25938 25939 Software developers also use coverage testing in concert with 25940testsuites, to make sure software is actually good enough for a release. 25941Testsuites can verify that a program works as expected; a coverage 25942program tests to see how much of the program is exercised by the 25943testsuite. Developers can then determine what kinds of test cases need 25944to be added to the testsuites to create both better testing and a better 25945final product. 25946 25947 You should compile your code without optimization if you plan to use 25948`gcov' because the optimization, by combining some lines of code into 25949one function, may not give you as much information as you need to look 25950for `hot spots' where the code is using a great deal of computer time. 25951Likewise, because `gcov' accumulates statistics by line (at the lowest 25952resolution), it works best with a programming style that places only 25953one statement on each line. If you use complicated macros that expand 25954to loops or to other control structures, the statistics are less 25955helpful--they only report on the line where the macro call appears. If 25956your complex macros behave like functions, you can replace them with 25957inline functions to solve this problem. 25958 25959 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 25960many times each line of a source file `SOURCEFILE.c' has executed. You 25961can use these logfiles along with `gprof' to aid in fine-tuning the 25962performance of your programs. `gprof' gives timing information you can 25963use along with the information you get from `gcov'. 25964 25965 `gcov' works only on code compiled with GCC. It is not compatible 25966with any other profiling or test coverage mechanism. 25967 25968 25969File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 25970 259719.2 Invoking `gcov' 25972=================== 25973 25974 gcov [OPTIONS] SOURCEFILE 25975 25976 `gcov' accepts the following options: 25977 25978`-h' 25979`--help' 25980 Display help about using `gcov' (on the standard output), and exit 25981 without doing any further processing. 25982 25983`-v' 25984`--version' 25985 Display the `gcov' version number (on the standard output), and 25986 exit without doing any further processing. 25987 25988`-a' 25989`--all-blocks' 25990 Write individual execution counts for every basic block. Normally 25991 gcov outputs execution counts only for the main blocks of a line. 25992 With this option you can determine if blocks within a single line 25993 are not being executed. 25994 25995`-b' 25996`--branch-probabilities' 25997 Write branch frequencies to the output file, and write branch 25998 summary info to the standard output. This option allows you to 25999 see how often each branch in your program was taken. 26000 Unconditional branches will not be shown, unless the `-u' option 26001 is given. 26002 26003`-c' 26004`--branch-counts' 26005 Write branch frequencies as the number of branches taken, rather 26006 than the percentage of branches taken. 26007 26008`-n' 26009`--no-output' 26010 Do not create the `gcov' output file. 26011 26012`-l' 26013`--long-file-names' 26014 Create long file names for included source files. For example, if 26015 the header file `x.h' contains code, and was included in the file 26016 `a.c', then running `gcov' on the file `a.c' will produce an 26017 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 26018 can be useful if `x.h' is included in multiple source files. If 26019 you use the `-p' option, both the including and included file 26020 names will be complete path names. 26021 26022`-p' 26023`--preserve-paths' 26024 Preserve complete path information in the names of generated 26025 `.gcov' files. Without this option, just the filename component is 26026 used. With this option, all directories are used, with `/' 26027 characters translated to `#' characters, `.' directory components 26028 removed and `..' components renamed to `^'. This is useful if 26029 sourcefiles are in several different directories. It also affects 26030 the `-l' option. 26031 26032`-f' 26033`--function-summaries' 26034 Output summaries for each function in addition to the file level 26035 summary. 26036 26037`-o DIRECTORY|FILE' 26038`--object-directory DIRECTORY' 26039`--object-file FILE' 26040 Specify either the directory containing the gcov data files, or the 26041 object path name. The `.gcno', and `.gcda' data files are 26042 searched for using this option. If a directory is specified, the 26043 data files are in that directory and named after the source file 26044 name, without its extension. If a file is specified here, the 26045 data files are named after that file, without its extension. If 26046 this option is not supplied, it defaults to the current directory. 26047 26048`-u' 26049`--unconditional-branches' 26050 When branch probabilities are given, include those of 26051 unconditional branches. Unconditional branches are normally not 26052 interesting. 26053 26054 26055 `gcov' should be run with the current directory the same as that when 26056you invoked the compiler. Otherwise it will not be able to locate the 26057source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 26058current directory. These contain the coverage information of the 26059source file they correspond to. One `.gcov' file is produced for each 26060source file containing code, which was compiled to produce the data 26061files. The MANGLEDNAME part of the output file name is usually simply 26062the source file name, but can be something more complicated if the `-l' 26063or `-p' options are given. Refer to those options for details. 26064 26065 The `.gcov' files contain the `:' separated fields along with program 26066source code. The format is 26067 26068 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 26069 26070 Additional block information may succeed each line, when requested by 26071command line option. The EXECUTION_COUNT is `-' for lines containing 26072no code and `#####' for lines which were never executed. Some lines of 26073information at the start have LINE_NUMBER of zero. 26074 26075 The preamble lines are of the form 26076 26077 -:0:TAG:VALUE 26078 26079 The ordering and number of these preamble lines will be augmented as 26080`gcov' development progresses -- do not rely on them remaining 26081unchanged. Use TAG to locate a particular preamble line. 26082 26083 The additional block information is of the form 26084 26085 TAG INFORMATION 26086 26087 The INFORMATION is human readable, but designed to be simple enough 26088for machine parsing too. 26089 26090 When printing percentages, 0% and 100% are only printed when the values 26091are _exactly_ 0% and 100% respectively. Other values which would 26092conventionally be rounded to 0% or 100% are instead printed as the 26093nearest non-boundary value. 26094 26095 When using `gcov', you must first compile your program with two 26096special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 26097compiler to generate additional information needed by gcov (basically a 26098flow graph of the program) and also includes additional code in the 26099object files for generating the extra profiling information needed by 26100gcov. These additional files are placed in the directory where the 26101object file is located. 26102 26103 Running the program will cause profile output to be generated. For 26104each source file compiled with `-fprofile-arcs', an accompanying 26105`.gcda' file will be placed in the object file directory. 26106 26107 Running `gcov' with your program's source file names as arguments will 26108now produce a listing of the code along with frequency of execution for 26109each line. For example, if your program is called `tmp.c', this is 26110what you see when you use the basic `gcov' facility: 26111 26112 $ gcc -fprofile-arcs -ftest-coverage tmp.c 26113 $ a.out 26114 $ gcov tmp.c 26115 90.00% of 10 source lines executed in file tmp.c 26116 Creating tmp.c.gcov. 26117 26118 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 26119 26120 -: 0:Source:tmp.c 26121 -: 0:Graph:tmp.gcno 26122 -: 0:Data:tmp.gcda 26123 -: 0:Runs:1 26124 -: 0:Programs:1 26125 -: 1:#include <stdio.h> 26126 -: 2: 26127 -: 3:int main (void) 26128 1: 4:{ 26129 1: 5: int i, total; 26130 -: 6: 26131 1: 7: total = 0; 26132 -: 8: 26133 11: 9: for (i = 0; i < 10; i++) 26134 10: 10: total += i; 26135 -: 11: 26136 1: 12: if (total != 45) 26137 #####: 13: printf ("Failure\n"); 26138 -: 14: else 26139 1: 15: printf ("Success\n"); 26140 1: 16: return 0; 26141 -: 17:} 26142 26143 When you use the `-a' option, you will get individual block counts, 26144and the output looks like this: 26145 26146 -: 0:Source:tmp.c 26147 -: 0:Graph:tmp.gcno 26148 -: 0:Data:tmp.gcda 26149 -: 0:Runs:1 26150 -: 0:Programs:1 26151 -: 1:#include <stdio.h> 26152 -: 2: 26153 -: 3:int main (void) 26154 1: 4:{ 26155 1: 4-block 0 26156 1: 5: int i, total; 26157 -: 6: 26158 1: 7: total = 0; 26159 -: 8: 26160 11: 9: for (i = 0; i < 10; i++) 26161 11: 9-block 0 26162 10: 10: total += i; 26163 10: 10-block 0 26164 -: 11: 26165 1: 12: if (total != 45) 26166 1: 12-block 0 26167 #####: 13: printf ("Failure\n"); 26168 $$$$$: 13-block 0 26169 -: 14: else 26170 1: 15: printf ("Success\n"); 26171 1: 15-block 0 26172 1: 16: return 0; 26173 1: 16-block 0 26174 -: 17:} 26175 26176 In this mode, each basic block is only shown on one line - the last 26177line of the block. A multi-line block will only contribute to the 26178execution count of that last line, and other lines will not be shown to 26179contain code, unless previous blocks end on those lines. The total 26180execution count of a line is shown and subsequent lines show the 26181execution counts for individual blocks that end on that line. After 26182each block, the branch and call counts of the block will be shown, if 26183the `-b' option is given. 26184 26185 Because of the way GCC instruments calls, a call count can be shown 26186after a line with no individual blocks. As you can see, line 13 26187contains a basic block that was not executed. 26188 26189 When you use the `-b' option, your output looks like this: 26190 26191 $ gcov -b tmp.c 26192 90.00% of 10 source lines executed in file tmp.c 26193 80.00% of 5 branches executed in file tmp.c 26194 80.00% of 5 branches taken at least once in file tmp.c 26195 50.00% of 2 calls executed in file tmp.c 26196 Creating tmp.c.gcov. 26197 26198 Here is a sample of a resulting `tmp.c.gcov' file: 26199 26200 -: 0:Source:tmp.c 26201 -: 0:Graph:tmp.gcno 26202 -: 0:Data:tmp.gcda 26203 -: 0:Runs:1 26204 -: 0:Programs:1 26205 -: 1:#include <stdio.h> 26206 -: 2: 26207 -: 3:int main (void) 26208 function main called 1 returned 1 blocks executed 75% 26209 1: 4:{ 26210 1: 5: int i, total; 26211 -: 6: 26212 1: 7: total = 0; 26213 -: 8: 26214 11: 9: for (i = 0; i < 10; i++) 26215 branch 0 taken 91% (fallthrough) 26216 branch 1 taken 9% 26217 10: 10: total += i; 26218 -: 11: 26219 1: 12: if (total != 45) 26220 branch 0 taken 0% (fallthrough) 26221 branch 1 taken 100% 26222 #####: 13: printf ("Failure\n"); 26223 call 0 never executed 26224 -: 14: else 26225 1: 15: printf ("Success\n"); 26226 call 0 called 1 returned 100% 26227 1: 16: return 0; 26228 -: 17:} 26229 26230 For each function, a line is printed showing how many times the 26231function is called, how many times it returns and what percentage of the 26232function's blocks were executed. 26233 26234 For each basic block, a line is printed after the last line of the 26235basic block describing the branch or call that ends the basic block. 26236There can be multiple branches and calls listed for a single source 26237line if there are multiple basic blocks that end on that line. In this 26238case, the branches and calls are each given a number. There is no 26239simple way to map these branches and calls back to source constructs. 26240In general, though, the lowest numbered branch or call will correspond 26241to the leftmost construct on the source line. 26242 26243 For a branch, if it was executed at least once, then a percentage 26244indicating the number of times the branch was taken divided by the 26245number of times the branch was executed will be printed. Otherwise, the 26246message "never executed" is printed. 26247 26248 For a call, if it was executed at least once, then a percentage 26249indicating the number of times the call returned divided by the number 26250of times the call was executed will be printed. This will usually be 26251100%, but may be less for functions that call `exit' or `longjmp', and 26252thus may not return every time they are called. 26253 26254 The execution counts are cumulative. If the example program were 26255executed again without removing the `.gcda' file, the count for the 26256number of times each line in the source was executed would be added to 26257the results of the previous run(s). This is potentially useful in 26258several ways. For example, it could be used to accumulate data over a 26259number of program runs as part of a test verification suite, or to 26260provide more accurate long-term information over a large number of 26261program runs. 26262 26263 The data in the `.gcda' files is saved immediately before the program 26264exits. For each source file compiled with `-fprofile-arcs', the 26265profiling code first attempts to read in an existing `.gcda' file; if 26266the file doesn't match the executable (differing number of basic block 26267counts) it will ignore the contents of the file. It then adds in the 26268new execution counts and finally writes the data to the file. 26269 26270 26271File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 26272 262739.3 Using `gcov' with GCC Optimization 26274====================================== 26275 26276If you plan to use `gcov' to help optimize your code, you must first 26277compile your program with two special GCC options: `-fprofile-arcs 26278-ftest-coverage'. Aside from that, you can use any other GCC options; 26279but if you want to prove that every single line in your program was 26280executed, you should not compile with optimization at the same time. 26281On some machines the optimizer can eliminate some simple code lines by 26282combining them with other lines. For example, code like this: 26283 26284 if (a != b) 26285 c = 1; 26286 else 26287 c = 0; 26288 26289can be compiled into one instruction on some machines. In this case, 26290there is no way for `gcov' to calculate separate execution counts for 26291each line because there isn't separate code for each line. Hence the 26292`gcov' output looks like this if you compiled the program with 26293optimization: 26294 26295 100: 12:if (a != b) 26296 100: 13: c = 1; 26297 100: 14:else 26298 100: 15: c = 0; 26299 26300 The output shows that this block of code, combined by optimization, 26301executed 100 times. In one sense this result is correct, because there 26302was only one instruction representing all four of these lines. However, 26303the output does not indicate how many times the result was 0 and how 26304many times the result was 1. 26305 26306 Inlineable functions can create unexpected line counts. Line counts 26307are shown for the source code of the inlineable function, but what is 26308shown depends on where the function is inlined, or if it is not inlined 26309at all. 26310 26311 If the function is not inlined, the compiler must emit an out of line 26312copy of the function, in any object file that needs it. If `fileA.o' 26313and `fileB.o' both contain out of line bodies of a particular 26314inlineable function, they will also both contain coverage counts for 26315that function. When `fileA.o' and `fileB.o' are linked together, the 26316linker will, on many systems, select one of those out of line bodies 26317for all calls to that function, and remove or ignore the other. 26318Unfortunately, it will not remove the coverage counters for the unused 26319function body. Hence when instrumented, all but one use of that 26320function will show zero counts. 26321 26322 If the function is inlined in several places, the block structure in 26323each location might not be the same. For instance, a condition might 26324now be calculable at compile time in some instances. Because the 26325coverage of all the uses of the inline function will be shown for the 26326same source lines, the line counts themselves might seem inconsistent. 26327 26328 26329File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 26330 263319.4 Brief description of `gcov' data files 26332========================================== 26333 26334`gcov' uses two files for profiling. The names of these files are 26335derived from the original _object_ file by substituting the file suffix 26336with either `.gcno', or `.gcda'. All of these files are placed in the 26337same directory as the object file, and contain data stored in a 26338platform-independent format. 26339 26340 The `.gcno' file is generated when the source file is compiled with 26341the GCC `-ftest-coverage' option. It contains information to 26342reconstruct the basic block graphs and assign source line numbers to 26343blocks. 26344 26345 The `.gcda' file is generated when a program containing object files 26346built with the GCC `-fprofile-arcs' option is executed. A separate 26347`.gcda' file is created for each object file compiled with this option. 26348It contains arc transition counts, and some summary information. 26349 26350 The full details of the file format is specified in `gcov-io.h', and 26351functions provided in that header file should be used to access the 26352coverage files. 26353 26354 26355File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 26356 263579.5 Data file relocation to support cross-profiling 26358=================================================== 26359 26360Running the program will cause profile output to be generated. For each 26361source file compiled with `-fprofile-arcs', an accompanying `.gcda' 26362file will be placed in the object file directory. That implicitly 26363requires running the program on the same system as it was built or 26364having the same absolute directory structure on the target system. The 26365program will try to create the needed directory structure, if it is not 26366already present. 26367 26368 To support cross-profiling, a program compiled with `-fprofile-arcs' 26369can relocate the data files based on two environment variables: 26370 26371 * GCOV_PREFIX contains the prefix to add to the absolute paths in 26372 the object file. Prefix must be absolute as well, otherwise its 26373 value is ignored. The default is no prefix. 26374 26375 * GCOV_PREFIX_STRIP indicates the how many initial directory names 26376 to strip off the hardwired absolute paths. Default value is 0. 26377 26378 _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is 26379 undefined, empty or non-absolute. 26380 26381 For example, if the object file `/user/build/foo.o' was built with 26382`-fprofile-arcs', the final executable will try to create the data file 26383`/user/build/foo.gcda' when running on the target system. This will 26384fail if the corresponding directory does not exist and it is unable to 26385create it. This can be overcome by, for example, setting the 26386environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 26387Such a setting will name the data file `/target/run/build/foo.gcda'. 26388 26389 You must move the data files to the expected directory tree in order to 26390use them for profile directed optimizations (`--use-profile'), or to 26391use the `gcov' tool. 26392 26393 26394File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 26395 2639610 Known Causes of Trouble with GCC 26397*********************************** 26398 26399This section describes known problems that affect users of GCC. Most 26400of these are not GCC bugs per se--if they were, we would fix them. But 26401the result for a user may be like the result of a bug. 26402 26403 Some of these problems are due to bugs in other software, some are 26404missing features that are too much work to add, and some are places 26405where people's opinions differ as to what is best. 26406 26407* Menu: 26408 26409* Actual Bugs:: Bugs we will fix later. 26410* Cross-Compiler Problems:: Common problems of cross compiling with GCC. 26411* Interoperation:: Problems using GCC with other compilers, 26412 and with certain linkers, assemblers and debuggers. 26413* Incompatibilities:: GCC is incompatible with traditional C. 26414* Fixed Headers:: GCC uses corrected versions of system header files. 26415 This is necessary, but doesn't always work smoothly. 26416* Standard Libraries:: GCC uses the system C library, which might not be 26417 compliant with the ISO C standard. 26418* Disappointments:: Regrettable things we can't change, but not quite bugs. 26419* C++ Misunderstandings:: Common misunderstandings with GNU C++. 26420* Protoize Caveats:: Things to watch out for when using `protoize'. 26421* Non-bugs:: Things we think are right, but some others disagree. 26422* Warnings and Errors:: Which problems in your code get warnings, 26423 and which get errors. 26424 26425 26426File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 26427 2642810.1 Actual Bugs We Haven't Fixed Yet 26429===================================== 26430 26431 * The `fixincludes' script interacts badly with automounters; if the 26432 directory of system header files is automounted, it tends to be 26433 unmounted while `fixincludes' is running. This would seem to be a 26434 bug in the automounter. We don't know any good way to work around 26435 it. 26436 26437 * The `fixproto' script will sometimes add prototypes for the 26438 `sigsetjmp' and `siglongjmp' functions that reference the 26439 `jmp_buf' type before that type is defined. To work around this, 26440 edit the offending file and place the typedef in front of the 26441 prototypes. 26442 26443 26444File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 26445 2644610.2 Cross-Compiler Problems 26447============================ 26448 26449You may run into problems with cross compilation on certain machines, 26450for several reasons. 26451 26452 * At present, the program `mips-tfile' which adds debug support to 26453 object files on MIPS systems does not work in a cross compile 26454 environment. 26455 26456 26457File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 26458 2645910.3 Interoperation 26460=================== 26461 26462This section lists various difficulties encountered in using GCC 26463together with other compilers or with the assemblers, linkers, 26464libraries and debuggers on certain systems. 26465 26466 * On many platforms, GCC supports a different ABI for C++ than do 26467 other compilers, so the object files compiled by GCC cannot be 26468 used with object files generated by another C++ compiler. 26469 26470 An area where the difference is most apparent is name mangling. 26471 The use of different name mangling is intentional, to protect you 26472 from more subtle problems. Compilers differ as to many internal 26473 details of C++ implementation, including: how class instances are 26474 laid out, how multiple inheritance is implemented, and how virtual 26475 function calls are handled. If the name encoding were made the 26476 same, your programs would link against libraries provided from 26477 other compilers--but the programs would then crash when run. 26478 Incompatible libraries are then detected at link time, rather than 26479 at run time. 26480 26481 * On some BSD systems, including some versions of Ultrix, use of 26482 profiling causes static variable destructors (currently used only 26483 in C++) not to be run. 26484 26485 * On some SGI systems, when you use `-lgl_s' as an option, it gets 26486 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 26487 does not happen when you use GCC. You must specify all three 26488 options explicitly. 26489 26490 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 26491 boundary, and it expects every `double' to be so aligned. The Sun 26492 compiler usually gives `double' values 8-byte alignment, with one 26493 exception: function arguments of type `double' may not be aligned. 26494 26495 As a result, if a function compiled with Sun CC takes the address 26496 of an argument of type `double' and passes this pointer of type 26497 `double *' to a function compiled with GCC, dereferencing the 26498 pointer may cause a fatal signal. 26499 26500 One way to solve this problem is to compile your entire program 26501 with GCC. Another solution is to modify the function that is 26502 compiled with Sun CC to copy the argument into a local variable; 26503 local variables are always properly aligned. A third solution is 26504 to modify the function that uses the pointer to dereference it via 26505 the following function `access_double' instead of directly with 26506 `*': 26507 26508 inline double 26509 access_double (double *unaligned_ptr) 26510 { 26511 union d2i { double d; int i[2]; }; 26512 26513 union d2i *p = (union d2i *) unaligned_ptr; 26514 union d2i u; 26515 26516 u.i[0] = p->i[0]; 26517 u.i[1] = p->i[1]; 26518 26519 return u.d; 26520 } 26521 26522 Storing into the pointer can be done likewise with the same union. 26523 26524 * On Solaris, the `malloc' function in the `libmalloc.a' library may 26525 allocate memory that is only 4 byte aligned. Since GCC on the 26526 SPARC assumes that doubles are 8 byte aligned, this may result in a 26527 fatal signal if doubles are stored in memory allocated by the 26528 `libmalloc.a' library. 26529 26530 The solution is to not use the `libmalloc.a' library. Use instead 26531 `malloc' and related functions from `libc.a'; they do not have 26532 this problem. 26533 26534 * On the HP PA machine, ADB sometimes fails to work on functions 26535 compiled with GCC. Specifically, it fails to work on functions 26536 that use `alloca' or variable-size arrays. This is because GCC 26537 doesn't generate HP-UX unwind descriptors for such functions. It 26538 may even be impossible to generate them. 26539 26540 * Debugging (`-g') is not supported on the HP PA machine, unless you 26541 use the preliminary GNU tools. 26542 26543 * Taking the address of a label may generate errors from the HP-UX 26544 PA assembler. GAS for the PA does not have this problem. 26545 26546 * Using floating point parameters for indirect calls to static 26547 functions will not work when using the HP assembler. There simply 26548 is no way for GCC to specify what registers hold arguments for 26549 static functions when using the HP assembler. GAS for the PA does 26550 not have this problem. 26551 26552 * In extremely rare cases involving some very large functions you may 26553 receive errors from the HP linker complaining about an out of 26554 bounds unconditional branch offset. This used to occur more often 26555 in previous versions of GCC, but is now exceptionally rare. If 26556 you should run into it, you can work around by making your 26557 function smaller. 26558 26559 * GCC compiled code sometimes emits warnings from the HP-UX 26560 assembler of the form: 26561 26562 (warning) Use of GR3 when 26563 frame >= 8192 may cause conflict. 26564 26565 These warnings are harmless and can be safely ignored. 26566 26567 * In extremely rare cases involving some very large functions you may 26568 receive errors from the AIX Assembler complaining about a 26569 displacement that is too large. If you should run into it, you 26570 can work around by making your function smaller. 26571 26572 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 26573 semantics which merges global symbols between libraries and 26574 applications, especially necessary for C++ streams functionality. 26575 This is not the default behavior of AIX shared libraries and 26576 dynamic linking. `libstdc++.a' is built on AIX with 26577 "runtime-linking" enabled so that symbol merging can occur. To 26578 utilize this feature, the application linked with `libstdc++.a' 26579 must include the `-Wl,-brtl' flag on the link line. G++ cannot 26580 impose this because this option may interfere with the semantics 26581 of the user program and users may not always use `g++' to link his 26582 or her application. Applications are not required to use the 26583 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 26584 library which is not dependent on the symbol merging semantics 26585 will continue to function correctly. 26586 26587 * An application can interpose its own definition of functions for 26588 functions invoked by `libstdc++.a' with "runtime-linking" enabled 26589 on AIX. To accomplish this the application must be linked with 26590 "runtime-linking" option and the functions explicitly must be 26591 exported by the application (`-Wl,-brtl,-bE:exportfile'). 26592 26593 * AIX on the RS/6000 provides support (NLS) for environments outside 26594 of the United States. Compilers and assemblers use NLS to support 26595 locale-specific representations of various objects including 26596 floating-point numbers (`.' vs `,' for separating decimal 26597 fractions). There have been problems reported where the library 26598 linked with GCC does not produce the same floating-point formats 26599 that the assembler accepts. If you have this problem, set the 26600 `LANG' environment variable to `C' or `En_US'. 26601 26602 * Even if you specify `-fdollars-in-identifiers', you cannot 26603 successfully use `$' in identifiers on the RS/6000 due to a 26604 restriction in the IBM assembler. GAS supports these identifiers. 26605 26606 * On Ultrix, the Fortran compiler expects registers 2 through 5 to 26607 be saved by function calls. However, the C compiler uses 26608 conventions compatible with BSD Unix: registers 2 through 5 may be 26609 clobbered by function calls. 26610 26611 GCC uses the same convention as the Ultrix C compiler. You can use 26612 these options to produce code compatible with the Fortran compiler: 26613 26614 -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5 26615 26616 26617File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 26618 2661910.4 Incompatibilities of GCC 26620============================= 26621 26622There are several noteworthy incompatibilities between GNU C and K&R 26623(non-ISO) versions of C. 26624 26625 * GCC normally makes string constants read-only. If several 26626 identical-looking string constants are used, GCC stores only one 26627 copy of the string. 26628 26629 One consequence is that you cannot call `mktemp' with a string 26630 constant argument. The function `mktemp' always alters the string 26631 its argument points to. 26632 26633 Another consequence is that `sscanf' does not work on some very 26634 old systems when passed a string constant as its format control 26635 string or input. This is because `sscanf' incorrectly tries to 26636 write into the string constant. Likewise `fscanf' and `scanf'. 26637 26638 The solution to these problems is to change the program to use 26639 `char'-array variables with initialization strings for these 26640 purposes instead of string constants. 26641 26642 * `-2147483648' is positive. 26643 26644 This is because 2147483648 cannot fit in the type `int', so 26645 (following the ISO C rules) its data type is `unsigned long int'. 26646 Negating this value yields 2147483648 again. 26647 26648 * GCC does not substitute macro arguments when they appear inside of 26649 string constants. For example, the following macro in GCC 26650 26651 #define foo(a) "a" 26652 26653 will produce output `"a"' regardless of what the argument A is. 26654 26655 * When you use `setjmp' and `longjmp', the only automatic variables 26656 guaranteed to remain valid are those declared `volatile'. This is 26657 a consequence of automatic register allocation. Consider this 26658 function: 26659 26660 jmp_buf j; 26661 26662 foo () 26663 { 26664 int a, b; 26665 26666 a = fun1 (); 26667 if (setjmp (j)) 26668 return a; 26669 26670 a = fun2 (); 26671 /* `longjmp (j)' may occur in `fun3'. */ 26672 return a + fun3 (); 26673 } 26674 26675 Here `a' may or may not be restored to its first value when the 26676 `longjmp' occurs. If `a' is allocated in a register, then its 26677 first value is restored; otherwise, it keeps the last value stored 26678 in it. 26679 26680 If you use the `-W' option with the `-O' option, you will get a 26681 warning when GCC thinks such a problem might be possible. 26682 26683 * Programs that use preprocessing directives in the middle of macro 26684 arguments do not work with GCC. For example, a program like this 26685 will not work: 26686 26687 foobar ( 26688 #define luser 26689 hack) 26690 26691 ISO C does not permit such a construct. 26692 26693 * K&R compilers allow comments to cross over an inclusion boundary 26694 (i.e. started in an include file and ended in the including file). 26695 26696 * Declarations of external variables and functions within a block 26697 apply only to the block containing the declaration. In other 26698 words, they have the same scope as any other declaration in the 26699 same place. 26700 26701 In some other C compilers, a `extern' declaration affects all the 26702 rest of the file even if it happens within a block. 26703 26704 * In traditional C, you can combine `long', etc., with a typedef 26705 name, as shown here: 26706 26707 typedef int foo; 26708 typedef long foo bar; 26709 26710 In ISO C, this is not allowed: `long' and other type modifiers 26711 require an explicit `int'. 26712 26713 * PCC allows typedef names to be used as function parameters. 26714 26715 * Traditional C allows the following erroneous pair of declarations 26716 to appear together in a given scope: 26717 26718 typedef int foo; 26719 typedef foo foo; 26720 26721 * GCC treats all characters of identifiers as significant. 26722 According to K&R-1 (2.2), "No more than the first eight characters 26723 are significant, although more may be used.". Also according to 26724 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 26725 the first character must be a letter. The underscore _ counts as 26726 a letter.", but GCC also allows dollar signs in identifiers. 26727 26728 * PCC allows whitespace in the middle of compound assignment 26729 operators such as `+='. GCC, following the ISO standard, does not 26730 allow this. 26731 26732 * GCC complains about unterminated character constants inside of 26733 preprocessing conditionals that fail. Some programs have English 26734 comments enclosed in conditionals that are guaranteed to fail; if 26735 these comments contain apostrophes, GCC will probably report an 26736 error. For example, this code would produce an error: 26737 26738 #if 0 26739 You can't expect this to work. 26740 #endif 26741 26742 The best solution to such a problem is to put the text into an 26743 actual C comment delimited by `/*...*/'. 26744 26745 * Many user programs contain the declaration `long time ();'. In the 26746 past, the system header files on many systems did not actually 26747 declare `time', so it did not matter what type your program 26748 declared it to return. But in systems with ISO C headers, `time' 26749 is declared to return `time_t', and if that is not the same as 26750 `long', then `long time ();' is erroneous. 26751 26752 The solution is to change your program to use appropriate system 26753 headers (`<time.h>' on systems with ISO C headers) and not to 26754 declare `time' if the system header files declare it, or failing 26755 that to use `time_t' as the return type of `time'. 26756 26757 * When compiling functions that return `float', PCC converts it to a 26758 double. GCC actually returns a `float'. If you are concerned 26759 with PCC compatibility, you should declare your functions to return 26760 `double'; you might as well say what you mean. 26761 26762 * When compiling functions that return structures or unions, GCC 26763 output code normally uses a method different from that used on most 26764 versions of Unix. As a result, code compiled with GCC cannot call 26765 a structure-returning function compiled with PCC, and vice versa. 26766 26767 The method used by GCC is as follows: a structure or union which is 26768 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 26769 union with any other size is stored into an address supplied by 26770 the caller (usually in a special, fixed register, but on some 26771 machines it is passed on the stack). The target hook 26772 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 26773 26774 By contrast, PCC on most target machines returns structures and 26775 unions of any size by copying the data into an area of static 26776 storage, and then returning the address of that storage as if it 26777 were a pointer value. The caller must copy the data from that 26778 memory area to the place where the value is wanted. GCC does not 26779 use this method because it is slower and nonreentrant. 26780 26781 On some newer machines, PCC uses a reentrant convention for all 26782 structure and union returning. GCC on most of these machines uses 26783 a compatible convention when returning structures and unions in 26784 memory, but still returns small structures and unions in registers. 26785 26786 You can tell GCC to use a compatible convention for all structure 26787 and union returning with the option `-fpcc-struct-return'. 26788 26789 * GCC complains about program fragments such as `0x74ae-0x4000' 26790 which appear to be two hexadecimal constants separated by the minus 26791 operator. Actually, this string is a single "preprocessing token". 26792 Each such token must correspond to one token in C. Since this 26793 does not, GCC prints an error message. Although it may appear 26794 obvious that what is meant is an operator and two values, the ISO 26795 C standard specifically requires that this be treated as erroneous. 26796 26797 A "preprocessing token" is a "preprocessing number" if it begins 26798 with a digit and is followed by letters, underscores, digits, 26799 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 26800 character sequences. (In strict C89 mode, the sequences `p+', 26801 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 26802 26803 To make the above program fragment valid, place whitespace in 26804 front of the minus sign. This whitespace will end the 26805 preprocessing number. 26806 26807 26808File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 26809 2681010.5 Fixed Header Files 26811======================= 26812 26813GCC needs to install corrected versions of some system header files. 26814This is because most target systems have some header files that won't 26815work with GCC unless they are changed. Some have bugs, some are 26816incompatible with ISO C, and some depend on special features of other 26817compilers. 26818 26819 Installing GCC automatically creates and installs the fixed header 26820files, by running a program called `fixincludes'. Normally, you don't 26821need to pay attention to this. But there are cases where it doesn't do 26822the right thing automatically. 26823 26824 * If you update the system's header files, such as by installing a 26825 new system version, the fixed header files of GCC are not 26826 automatically updated. They can be updated using the `mkheaders' 26827 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 26828 26829 * On some systems, header file directories contain machine-specific 26830 symbolic links in certain places. This makes it possible to share 26831 most of the header files among hosts running the same version of 26832 the system on different machine models. 26833 26834 The programs that fix the header files do not understand this 26835 special way of using symbolic links; therefore, the directory of 26836 fixed header files is good only for the machine model used to 26837 build it. 26838 26839 It is possible to make separate sets of fixed header files for the 26840 different machine models, and arrange a structure of symbolic 26841 links so as to use the proper set, but you'll have to do this by 26842 hand. 26843 26844 26845File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 26846 2684710.6 Standard Libraries 26848======================= 26849 26850GCC by itself attempts to be a conforming freestanding implementation. 26851*Note Language Standards Supported by GCC: Standards, for details of 26852what this means. Beyond the library facilities required of such an 26853implementation, the rest of the C library is supplied by the vendor of 26854the operating system. If that C library doesn't conform to the C 26855standards, then your programs might get warnings (especially when using 26856`-Wall') that you don't expect. 26857 26858 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 26859while the C standard says that `sprintf' returns an `int'. The 26860`fixincludes' program could make the prototype for this function match 26861the Standard, but that would be wrong, since the function will still 26862return `char *'. 26863 26864 If you need a Standard compliant library, then you need to find one, as 26865GCC does not provide one. The GNU C library (called `glibc') provides 26866ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 26867HURD-based GNU systems; no recent version of it supports other systems, 26868though some very old versions did. Version 2.2 of the GNU C library 26869includes nearly complete C99 support. You could also ask your 26870operating system vendor if newer libraries are available. 26871 26872 26873File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 26874 2687510.7 Disappointments and Misunderstandings 26876========================================== 26877 26878These problems are perhaps regrettable, but we don't know any practical 26879way around them. 26880 26881 * Certain local variables aren't recognized by debuggers when you 26882 compile with optimization. 26883 26884 This occurs because sometimes GCC optimizes the variable out of 26885 existence. There is no way to tell the debugger how to compute the 26886 value such a variable "would have had", and it is not clear that 26887 would be desirable anyway. So GCC simply does not mention the 26888 eliminated variable when it writes debugging information. 26889 26890 You have to expect a certain amount of disagreement between the 26891 executable and your source code, when you use optimization. 26892 26893 * Users often think it is a bug when GCC reports an error for code 26894 like this: 26895 26896 int foo (struct mumble *); 26897 26898 struct mumble { ... }; 26899 26900 int foo (struct mumble *x) 26901 { ... } 26902 26903 This code really is erroneous, because the scope of `struct 26904 mumble' in the prototype is limited to the argument list 26905 containing it. It does not refer to the `struct mumble' defined 26906 with file scope immediately below--they are two unrelated types 26907 with similar names in different scopes. 26908 26909 But in the definition of `foo', the file-scope type is used 26910 because that is available to be inherited. Thus, the definition 26911 and the prototype do not match, and you get an error. 26912 26913 This behavior may seem silly, but it's what the ISO standard 26914 specifies. It is easy enough for you to make your code work by 26915 moving the definition of `struct mumble' above the prototype. 26916 It's not worth being incompatible with ISO C just to avoid an 26917 error for the example shown above. 26918 26919 * Accesses to bit-fields even in volatile objects works by accessing 26920 larger objects, such as a byte or a word. You cannot rely on what 26921 size of object is accessed in order to read or write the 26922 bit-field; it may even vary for a given bit-field according to the 26923 precise usage. 26924 26925 If you care about controlling the amount of memory that is 26926 accessed, use volatile but do not use bit-fields. 26927 26928 * GCC comes with shell scripts to fix certain known problems in 26929 system header files. They install corrected copies of various 26930 header files in a special directory where only GCC will normally 26931 look for them. The scripts adapt to various systems by searching 26932 all the system header files for the problem cases that we know 26933 about. 26934 26935 If new system header files are installed, nothing automatically 26936 arranges to update the corrected header files. They can be 26937 updated using the `mkheaders' script installed in 26938 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 26939 26940 * On 68000 and x86 systems, for instance, you can get paradoxical 26941 results if you test the precise values of floating point numbers. 26942 For example, you can find that a floating point value which is not 26943 a NaN is not equal to itself. This results from the fact that the 26944 floating point registers hold a few more bits of precision than 26945 fit in a `double' in memory. Compiled code moves values between 26946 memory and floating point registers at its convenience, and moving 26947 them into memory truncates them. 26948 26949 You can partially avoid this problem by using the `-ffloat-store' 26950 option (*note Optimize Options::). 26951 26952 * On AIX and other platforms without weak symbol support, templates 26953 need to be instantiated explicitly and symbols for static members 26954 of templates will not be generated. 26955 26956 * On AIX, GCC scans object files and library archives for static 26957 constructors and destructors when linking an application before the 26958 linker prunes unreferenced symbols. This is necessary to prevent 26959 the AIX linker from mistakenly assuming that static constructor or 26960 destructor are unused and removing them before the scanning can 26961 occur. All static constructors and destructors found will be 26962 referenced even though the modules in which they occur may not be 26963 used by the program. This may lead to both increased executable 26964 size and unexpected symbol references. 26965 26966 26967File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble 26968 2696910.8 Common Misunderstandings with GNU C++ 26970========================================== 26971 26972C++ is a complex language and an evolving one, and its standard 26973definition (the ISO C++ standard) was only recently completed. As a 26974result, your C++ compiler may occasionally surprise you, even when its 26975behavior is correct. This section discusses some areas that frequently 26976give rise to questions of this sort. 26977 26978* Menu: 26979 26980* Static Definitions:: Static member declarations are not definitions 26981* Name lookup:: Name lookup, templates, and accessing members of base classes 26982* Temporaries:: Temporaries may vanish before you expect 26983* Copy Assignment:: Copy Assignment operators copy virtual bases twice 26984 26985 26986File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 26987 2698810.8.1 Declare _and_ Define Static Members 26989------------------------------------------ 26990 26991When a class has static data members, it is not enough to _declare_ the 26992static member; you must also _define_ it. For example: 26993 26994 class Foo 26995 { 26996 ... 26997 void method(); 26998 static int bar; 26999 }; 27000 27001 This declaration only establishes that the class `Foo' has an `int' 27002named `Foo::bar', and a member function named `Foo::method'. But you 27003still need to define _both_ `method' and `bar' elsewhere. According to 27004the ISO standard, you must supply an initializer in one (and only one) 27005source file, such as: 27006 27007 int Foo::bar = 0; 27008 27009 Other C++ compilers may not correctly implement the standard behavior. 27010As a result, when you switch to `g++' from one of these compilers, you 27011may discover that a program that appeared to work correctly in fact 27012does not conform to the standard: `g++' reports as undefined symbols 27013any static data members that lack definitions. 27014 27015 27016File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 27017 2701810.8.2 Name lookup, templates, and accessing members of base classes 27019-------------------------------------------------------------------- 27020 27021The C++ standard prescribes that all names that are not dependent on 27022template parameters are bound to their present definitions when parsing 27023a template function or class.(1) Only names that are dependent are 27024looked up at the point of instantiation. For example, consider 27025 27026 void foo(double); 27027 27028 struct A { 27029 template <typename T> 27030 void f () { 27031 foo (1); // 1 27032 int i = N; // 2 27033 T t; 27034 t.bar(); // 3 27035 foo (t); // 4 27036 } 27037 27038 static const int N; 27039 }; 27040 27041 Here, the names `foo' and `N' appear in a context that does not depend 27042on the type of `T'. The compiler will thus require that they are 27043defined in the context of use in the template, not only before the 27044point of instantiation, and will here use `::foo(double)' and `A::N', 27045respectively. In particular, it will convert the integer value to a 27046`double' when passing it to `::foo(double)'. 27047 27048 Conversely, `bar' and the call to `foo' in the fourth marked line are 27049used in contexts that do depend on the type of `T', so they are only 27050looked up at the point of instantiation, and you can provide 27051declarations for them after declaring the template, but before 27052instantiating it. In particular, if you instantiate `A::f<int>', the 27053last line will call an overloaded `::foo(int)' if one was provided, 27054even if after the declaration of `struct A'. 27055 27056 This distinction between lookup of dependent and non-dependent names is 27057called two-stage (or dependent) name lookup. G++ implements it since 27058version 3.4. 27059 27060 Two-stage name lookup sometimes leads to situations with behavior 27061different from non-template codes. The most common is probably this: 27062 27063 template <typename T> struct Base { 27064 int i; 27065 }; 27066 27067 template <typename T> struct Derived : public Base<T> { 27068 int get_i() { return i; } 27069 }; 27070 27071 In `get_i()', `i' is not used in a dependent context, so the compiler 27072will look for a name declared at the enclosing namespace scope (which 27073is the global scope here). It will not look into the base class, since 27074that is dependent and you may declare specializations of `Base' even 27075after declaring `Derived', so the compiler can't really know what `i' 27076would refer to. If there is no global variable `i', then you will get 27077an error message. 27078 27079 In order to make it clear that you want the member of the base class, 27080you need to defer lookup until instantiation time, at which the base 27081class is known. For this, you need to access `i' in a dependent 27082context, by either using `this->i' (remember that `this' is of type 27083`Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 27084Alternatively, `Base<T>::i' might be brought into scope by a 27085`using'-declaration. 27086 27087 Another, similar example involves calling member functions of a base 27088class: 27089 27090 template <typename T> struct Base { 27091 int f(); 27092 }; 27093 27094 template <typename T> struct Derived : Base<T> { 27095 int g() { return f(); }; 27096 }; 27097 27098 Again, the call to `f()' is not dependent on template arguments (there 27099are no arguments that depend on the type `T', and it is also not 27100otherwise specified that the call should be in a dependent context). 27101Thus a global declaration of such a function must be available, since 27102the one in the base class is not visible until instantiation time. The 27103compiler will consequently produce the following error message: 27104 27105 x.cc: In member function `int Derived<T>::g()': 27106 x.cc:6: error: there are no arguments to `f' that depend on a template 27107 parameter, so a declaration of `f' must be available 27108 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 27109 allowing the use of an undeclared name is deprecated) 27110 27111 To make the code valid either use `this->f()', or `Base<T>::f()'. 27112Using the `-fpermissive' flag will also let the compiler accept the 27113code, by marking all function calls for which no declaration is visible 27114at the time of definition of the template for later lookup at 27115instantiation time, as if it were a dependent call. We do not 27116recommend using `-fpermissive' to work around invalid code, and it will 27117also only catch cases where functions in base classes are called, not 27118where variables in base classes are used (as in the example above). 27119 27120 Note that some compilers (including G++ versions prior to 3.4) get 27121these examples wrong and accept above code without an error. Those 27122compilers do not implement two-stage name lookup correctly. 27123 27124 ---------- Footnotes ---------- 27125 27126 (1) The C++ standard just uses the term "dependent" for names that 27127depend on the type or value of template parameters. This shorter term 27128will also be used in the rest of this section. 27129 27130 27131File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 27132 2713310.8.3 Temporaries May Vanish Before You Expect 27134----------------------------------------------- 27135 27136It is dangerous to use pointers or references to _portions_ of a 27137temporary object. The compiler may very well delete the object before 27138you expect it to, leaving a pointer to garbage. The most common place 27139where this problem crops up is in classes like string classes, 27140especially ones that define a conversion function to type `char *' or 27141`const char *'--which is one reason why the standard `string' class 27142requires you to call the `c_str' member function. However, any class 27143that returns a pointer to some internal structure is potentially 27144subject to this problem. 27145 27146 For example, a program may use a function `strfunc' that returns 27147`string' objects, and another function `charfunc' that operates on 27148pointers to `char': 27149 27150 string strfunc (); 27151 void charfunc (const char *); 27152 27153 void 27154 f () 27155 { 27156 const char *p = strfunc().c_str(); 27157 ... 27158 charfunc (p); 27159 ... 27160 charfunc (p); 27161 } 27162 27163In this situation, it may seem reasonable to save a pointer to the C 27164string returned by the `c_str' member function and use that rather than 27165call `c_str' repeatedly. However, the temporary string created by the 27166call to `strfunc' is destroyed after `p' is initialized, at which point 27167`p' is left pointing to freed memory. 27168 27169 Code like this may run successfully under some other compilers, 27170particularly obsolete cfront-based compilers that delete temporaries 27171along with normal local variables. However, the GNU C++ behavior is 27172standard-conforming, so if your program depends on late destruction of 27173temporaries it is not portable. 27174 27175 The safe way to write such code is to give the temporary a name, which 27176forces it to remain until the end of the scope of the name. For 27177example: 27178 27179 const string& tmp = strfunc (); 27180 charfunc (tmp.c_str ()); 27181 27182 27183File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 27184 2718510.8.4 Implicit Copy-Assignment for Virtual Bases 27186------------------------------------------------- 27187 27188When a base class is virtual, only one subobject of the base class 27189belongs to each full object. Also, the constructors and destructors are 27190invoked only once, and called from the most-derived class. However, 27191such objects behave unspecified when being assigned. For example: 27192 27193 struct Base{ 27194 char *name; 27195 Base(char *n) : name(strdup(n)){} 27196 Base& operator= (const Base& other){ 27197 free (name); 27198 name = strdup (other.name); 27199 } 27200 }; 27201 27202 struct A:virtual Base{ 27203 int val; 27204 A():Base("A"){} 27205 }; 27206 27207 struct B:virtual Base{ 27208 int bval; 27209 B():Base("B"){} 27210 }; 27211 27212 struct Derived:public A, public B{ 27213 Derived():Base("Derived"){} 27214 }; 27215 27216 void func(Derived &d1, Derived &d2) 27217 { 27218 d1 = d2; 27219 } 27220 27221 The C++ standard specifies that `Base::Base' is only called once when 27222constructing or copy-constructing a Derived object. It is unspecified 27223whether `Base::operator=' is called more than once when the implicit 27224copy-assignment for Derived objects is invoked (as it is inside `func' 27225in the example). 27226 27227 G++ implements the "intuitive" algorithm for copy-assignment: assign 27228all direct bases, then assign all members. In that algorithm, the 27229virtual base subobject can be encountered more than once. In the 27230example, copying proceeds in the following order: `val', `name' (via 27231`strdup'), `bval', and `name' again. 27232 27233 If application code relies on copy-assignment, a user-defined 27234copy-assignment operator removes any uncertainties. With such an 27235operator, the application can define whether and how the virtual base 27236subobject is assigned. 27237 27238 27239File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: C++ Misunderstandings, Up: Trouble 27240 2724110.9 Caveats of using `protoize' 27242================================ 27243 27244The conversion programs `protoize' and `unprotoize' can sometimes 27245change a source file in a way that won't work unless you rearrange it. 27246 27247 * `protoize' can insert references to a type name or type tag before 27248 the definition, or in a file where they are not defined. 27249 27250 If this happens, compiler error messages should show you where the 27251 new references are, so fixing the file by hand is straightforward. 27252 27253 * There are some C constructs which `protoize' cannot figure out. 27254 For example, it can't determine argument types for declaring a 27255 pointer-to-function variable; this you must do by hand. `protoize' 27256 inserts a comment containing `???' each time it finds such a 27257 variable; so you can find all such variables by searching for this 27258 string. ISO C does not require declaring the argument types of 27259 pointer-to-function types. 27260 27261 * Using `unprotoize' can easily introduce bugs. If the program 27262 relied on prototypes to bring about conversion of arguments, these 27263 conversions will not take place in the program without prototypes. 27264 One case in which you can be sure `unprotoize' is safe is when you 27265 are removing prototypes that were made with `protoize'; if the 27266 program worked before without any prototypes, it will work again 27267 without them. 27268 27269 You can find all the places where this problem might occur by 27270 compiling the program with the `-Wconversion' option. It prints a 27271 warning whenever an argument is converted. 27272 27273 * Both conversion programs can be confused if there are macro calls 27274 in and around the text to be converted. In other words, the 27275 standard syntax for a declaration or definition must not result 27276 from expanding a macro. This problem is inherent in the design of 27277 C and cannot be fixed. If only a few functions have confusing 27278 macro calls, you can easily convert them manually. 27279 27280 * `protoize' cannot get the argument types for a function whose 27281 definition was not actually compiled due to preprocessing 27282 conditionals. When this happens, `protoize' changes nothing in 27283 regard to such a function. `protoize' tries to detect such 27284 instances and warn about them. 27285 27286 You can generally work around this problem by using `protoize' step 27287 by step, each time specifying a different set of `-D' options for 27288 compilation, until all of the functions have been converted. 27289 There is no automatic way to verify that you have got them all, 27290 however. 27291 27292 * Confusion may result if there is an occasion to convert a function 27293 declaration or definition in a region of source code where there 27294 is more than one formal parameter list present. Thus, attempts to 27295 convert code containing multiple (conditionally compiled) versions 27296 of a single function header (in the same vicinity) may not produce 27297 the desired (or expected) results. 27298 27299 If you plan on converting source files which contain such code, it 27300 is recommended that you first make sure that each conditionally 27301 compiled region of source code which contains an alternative 27302 function header also contains at least one additional follower 27303 token (past the final right parenthesis of the function header). 27304 This should circumvent the problem. 27305 27306 * `unprotoize' can become confused when trying to convert a function 27307 definition or declaration which contains a declaration for a 27308 pointer-to-function formal argument which has the same name as the 27309 function being defined or declared. We recommend you avoid such 27310 choices of formal parameter names. 27311 27312 * You might also want to correct some of the indentation by hand and 27313 break long lines. (The conversion programs don't write lines 27314 longer than eighty characters in any case.) 27315 27316 27317File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Protoize Caveats, Up: Trouble 27318 2731910.10 Certain Changes We Don't Want to Make 27320=========================================== 27321 27322This section lists changes that people frequently request, but which we 27323do not make because we think GCC is better without them. 27324 27325 * Checking the number and type of arguments to a function which has 27326 an old-fashioned definition and no prototype. 27327 27328 Such a feature would work only occasionally--only for calls that 27329 appear in the same file as the called function, following the 27330 definition. The only way to check all calls reliably is to add a 27331 prototype for the function. But adding a prototype eliminates the 27332 motivation for this feature. So the feature is not worthwhile. 27333 27334 * Warning about using an expression whose type is signed as a shift 27335 count. 27336 27337 Shift count operands are probably signed more often than unsigned. 27338 Warning about this would cause far more annoyance than good. 27339 27340 * Warning about assigning a signed value to an unsigned variable. 27341 27342 Such assignments must be very common; warning about them would 27343 cause more annoyance than good. 27344 27345 * Warning when a non-void function value is ignored. 27346 27347 C contains many standard functions that return a value that most 27348 programs choose to ignore. One obvious example is `printf'. 27349 Warning about this practice only leads the defensive programmer to 27350 clutter programs with dozens of casts to `void'. Such casts are 27351 required so frequently that they become visual noise. Writing 27352 those casts becomes so automatic that they no longer convey useful 27353 information about the intentions of the programmer. For functions 27354 where the return value should never be ignored, use the 27355 `warn_unused_result' function attribute (*note Function 27356 Attributes::). 27357 27358 * Making `-fshort-enums' the default. 27359 27360 This would cause storage layout to be incompatible with most other 27361 C compilers. And it doesn't seem very important, given that you 27362 can get the same result in other ways. The case where it matters 27363 most is when the enumeration-valued object is inside a structure, 27364 and in that case you can specify a field width explicitly. 27365 27366 * Making bit-fields unsigned by default on particular machines where 27367 "the ABI standard" says to do so. 27368 27369 The ISO C standard leaves it up to the implementation whether a 27370 bit-field declared plain `int' is signed or not. This in effect 27371 creates two alternative dialects of C. 27372 27373 The GNU C compiler supports both dialects; you can specify the 27374 signed dialect with `-fsigned-bitfields' and the unsigned dialect 27375 with `-funsigned-bitfields'. However, this leaves open the 27376 question of which dialect to use by default. 27377 27378 Currently, the preferred dialect makes plain bit-fields signed, 27379 because this is simplest. Since `int' is the same as `signed int' 27380 in every other context, it is cleanest for them to be the same in 27381 bit-fields as well. 27382 27383 Some computer manufacturers have published Application Binary 27384 Interface standards which specify that plain bit-fields should be 27385 unsigned. It is a mistake, however, to say anything about this 27386 issue in an ABI. This is because the handling of plain bit-fields 27387 distinguishes two dialects of C. Both dialects are meaningful on 27388 every type of machine. Whether a particular object file was 27389 compiled using signed bit-fields or unsigned is of no concern to 27390 other object files, even if they access the same bit-fields in the 27391 same data structures. 27392 27393 A given program is written in one or the other of these two 27394 dialects. The program stands a chance to work on most any machine 27395 if it is compiled with the proper dialect. It is unlikely to work 27396 at all if compiled with the wrong dialect. 27397 27398 Many users appreciate the GNU C compiler because it provides an 27399 environment that is uniform across machines. These users would be 27400 inconvenienced if the compiler treated plain bit-fields 27401 differently on certain machines. 27402 27403 Occasionally users write programs intended only for a particular 27404 machine type. On these occasions, the users would benefit if the 27405 GNU C compiler were to support by default the same dialect as the 27406 other compilers on that machine. But such applications are rare. 27407 And users writing a program to run on more than one type of 27408 machine cannot possibly benefit from this kind of compatibility. 27409 27410 This is why GCC does and will treat plain bit-fields in the same 27411 fashion on all types of machines (by default). 27412 27413 There are some arguments for making bit-fields unsigned by default 27414 on all machines. If, for example, this becomes a universal de 27415 facto standard, it would make sense for GCC to go along with it. 27416 This is something to be considered in the future. 27417 27418 (Of course, users strongly concerned about portability should 27419 indicate explicitly in each bit-field whether it is signed or not. 27420 In this way, they write programs which have the same meaning in 27421 both C dialects.) 27422 27423 * Undefining `__STDC__' when `-ansi' is not used. 27424 27425 Currently, GCC defines `__STDC__' unconditionally. This provides 27426 good results in practice. 27427 27428 Programmers normally use conditionals on `__STDC__' to ask whether 27429 it is safe to use certain features of ISO C, such as function 27430 prototypes or ISO token concatenation. Since plain `gcc' supports 27431 all the features of ISO C, the correct answer to these questions is 27432 "yes". 27433 27434 Some users try to use `__STDC__' to check for the availability of 27435 certain library facilities. This is actually incorrect usage in 27436 an ISO C program, because the ISO C standard says that a conforming 27437 freestanding implementation should define `__STDC__' even though it 27438 does not have the library facilities. `gcc -ansi -pedantic' is a 27439 conforming freestanding implementation, and it is therefore 27440 required to define `__STDC__', even though it does not come with 27441 an ISO C library. 27442 27443 Sometimes people say that defining `__STDC__' in a compiler that 27444 does not completely conform to the ISO C standard somehow violates 27445 the standard. This is illogical. The standard is a standard for 27446 compilers that claim to support ISO C, such as `gcc -ansi'--not 27447 for other compilers such as plain `gcc'. Whatever the ISO C 27448 standard says is relevant to the design of plain `gcc' without 27449 `-ansi' only for pragmatic reasons, not as a requirement. 27450 27451 GCC normally defines `__STDC__' to be 1, and in addition defines 27452 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 27453 option for strict conformance to some version of ISO C. On some 27454 hosts, system include files use a different convention, where 27455 `__STDC__' is normally 0, but is 1 if the user specifies strict 27456 conformance to the C Standard. GCC follows the host convention 27457 when processing system include files, but when processing user 27458 files it follows the usual GNU C convention. 27459 27460 * Undefining `__STDC__' in C++. 27461 27462 Programs written to compile with C++-to-C translators get the 27463 value of `__STDC__' that goes with the C compiler that is 27464 subsequently used. These programs must test `__STDC__' to 27465 determine what kind of C preprocessor that compiler uses: whether 27466 they should concatenate tokens in the ISO C fashion or in the 27467 traditional fashion. 27468 27469 These programs work properly with GNU C++ if `__STDC__' is defined. 27470 They would not work otherwise. 27471 27472 In addition, many header files are written to provide prototypes 27473 in ISO C but not in traditional C. Many of these header files can 27474 work without change in C++ provided `__STDC__' is defined. If 27475 `__STDC__' is not defined, they will all fail, and will all need 27476 to be changed to test explicitly for C++ as well. 27477 27478 * Deleting "empty" loops. 27479 27480 Historically, GCC has not deleted "empty" loops under the 27481 assumption that the most likely reason you would put one in a 27482 program is to have a delay, so deleting them will not make real 27483 programs run any faster. 27484 27485 However, the rationale here is that optimization of a nonempty loop 27486 cannot produce an empty one. This held for carefully written C 27487 compiled with less powerful optimizers but is not always the case 27488 for carefully written C++ or with more powerful optimizers. Thus 27489 GCC will remove operations from loops whenever it can determine 27490 those operations are not externally visible (apart from the time 27491 taken to execute them, of course). In case the loop can be proved 27492 to be finite, GCC will also remove the loop itself. 27493 27494 Be aware of this when performing timing tests, for instance the 27495 following loop can be completely removed, provided 27496 `some_expression' can provably not change any global state. 27497 27498 { 27499 int sum = 0; 27500 int ix; 27501 27502 for (ix = 0; ix != 10000; ix++) 27503 sum += some_expression; 27504 } 27505 27506 Even though `sum' is accumulated in the loop, no use is made of 27507 that summation, so the accumulation can be removed. 27508 27509 * Making side effects happen in the same order as in some other 27510 compiler. 27511 27512 It is never safe to depend on the order of evaluation of side 27513 effects. For example, a function call like this may very well 27514 behave differently from one compiler to another: 27515 27516 void func (int, int); 27517 27518 int i = 2; 27519 func (i++, i++); 27520 27521 There is no guarantee (in either the C or the C++ standard language 27522 definitions) that the increments will be evaluated in any 27523 particular order. Either increment might happen first. `func' 27524 might get the arguments `2, 3', or it might get `3, 2', or even 27525 `2, 2'. 27526 27527 * Making certain warnings into errors by default. 27528 27529 Some ISO C testsuites report failure when the compiler does not 27530 produce an error message for a certain program. 27531 27532 ISO C requires a "diagnostic" message for certain kinds of invalid 27533 programs, but a warning is defined by GCC to count as a 27534 diagnostic. If GCC produces a warning but not an error, that is 27535 correct ISO C support. If testsuites call this "failure", they 27536 should be run with the GCC option `-pedantic-errors', which will 27537 turn these warnings into errors. 27538 27539 27540 27541File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 27542 2754310.11 Warning Messages and Error Messages 27544========================================= 27545 27546The GNU compiler can produce two kinds of diagnostics: errors and 27547warnings. Each kind has a different purpose: 27548 27549 "Errors" report problems that make it impossible to compile your 27550 program. GCC reports errors with the source file name and line 27551 number where the problem is apparent. 27552 27553 "Warnings" report other unusual conditions in your code that _may_ 27554 indicate a problem, although compilation can (and does) proceed. 27555 Warning messages also report the source file name and line number, 27556 but include the text `warning:' to distinguish them from error 27557 messages. 27558 27559 Warnings may indicate danger points where you should check to make sure 27560that your program really does what you intend; or the use of obsolete 27561features; or the use of nonstandard features of GNU C or C++. Many 27562warnings are issued only if you ask for them, with one of the `-W' 27563options (for instance, `-Wall' requests a variety of useful warnings). 27564 27565 GCC always tries to compile your program if possible; it never 27566gratuitously rejects a program whose meaning is clear merely because 27567(for instance) it fails to conform to a standard. In some cases, 27568however, the C and C++ standards specify that certain extensions are 27569forbidden, and a diagnostic _must_ be issued by a conforming compiler. 27570The `-pedantic' option tells GCC to issue warnings in such cases; 27571`-pedantic-errors' says to make them errors instead. This does not 27572mean that _all_ non-ISO constructs get warnings or errors. 27573 27574 *Note Options to Request or Suppress Warnings: Warning Options, for 27575more detail on these and related command-line options. 27576 27577 27578File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 27579 2758011 Reporting Bugs 27581***************** 27582 27583Your bug reports play an essential role in making GCC reliable. 27584 27585 When you encounter a problem, the first thing to do is to see if it is 27586already known. *Note Trouble::. If it isn't known, then you should 27587report the problem. 27588 27589* Menu: 27590 27591* Criteria: Bug Criteria. Have you really found a bug? 27592* Reporting: Bug Reporting. How to report a bug effectively. 27593* Known: Trouble. Known problems. 27594* Help: Service. Where to ask for help. 27595 27596 27597File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 27598 2759911.1 Have You Found a Bug? 27600========================== 27601 27602If you are not sure whether you have found a bug, here are some 27603guidelines: 27604 27605 * If the compiler gets a fatal signal, for any input whatever, that 27606 is a compiler bug. Reliable compilers never crash. 27607 27608 * If the compiler produces invalid assembly code, for any input 27609 whatever (except an `asm' statement), that is a compiler bug, 27610 unless the compiler reports errors (not just warnings) which would 27611 ordinarily prevent the assembler from being run. 27612 27613 * If the compiler produces valid assembly code that does not 27614 correctly execute the input source code, that is a compiler bug. 27615 27616 However, you must double-check to make sure, because you may have a 27617 program whose behavior is undefined, which happened by chance to 27618 give the desired results with another C or C++ compiler. 27619 27620 For example, in many nonoptimizing compilers, you can write `x;' 27621 at the end of a function instead of `return x;', with the same 27622 results. But the value of the function is undefined if `return' 27623 is omitted; it is not a bug when GCC produces different results. 27624 27625 Problems often result from expressions with two increment 27626 operators, as in `f (*p++, *p++)'. Your previous compiler might 27627 have interpreted that expression the way you intended; GCC might 27628 interpret it another way. Neither compiler is wrong. The bug is 27629 in your code. 27630 27631 After you have localized the error to a single source line, it 27632 should be easy to check for these things. If your program is 27633 correct and well defined, you have found a compiler bug. 27634 27635 * If the compiler produces an error message for valid input, that is 27636 a compiler bug. 27637 27638 * If the compiler does not produce an error message for invalid 27639 input, that is a compiler bug. However, you should note that your 27640 idea of "invalid input" might be someone else's idea of "an 27641 extension" or "support for traditional practice". 27642 27643 * If you are an experienced user of one of the languages GCC 27644 supports, your suggestions for improvement of GCC are welcome in 27645 any case. 27646 27647 27648File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 27649 2765011.2 How and where to Report Bugs 27651================================= 27652 27653Bugs should be reported to the GCC bug database. Please refer to 27654`http://gcc.gnu.org/bugs.html' for up-to-date instructions how to 27655submit bug reports. Copies of this file in HTML (`bugs.html') and 27656plain text (`BUGS') are also part of GCC releases. 27657 27658 27659File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 27660 2766112 How To Get Help with GCC 27662*************************** 27663 27664If you need help installing, using or changing GCC, there are two ways 27665to find it: 27666 27667 * Send a message to a suitable network mailing list. First try 27668 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 27669 that brings no response, try <gcc@gcc.gnu.org>. For help changing 27670 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 27671 GCC, please report it following the instructions at *note Bug 27672 Reporting::. 27673 27674 * Look in the service directory for someone who might help you for a 27675 fee. The service directory is found at 27676 `http://www.gnu.org/prep/service.html'. 27677 27678 For further information, see `http://gcc.gnu.org/faq.html#support'. 27679 27680 27681File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 27682 2768313 Contributing to GCC Development 27684********************************** 27685 27686If you would like to help pretest GCC releases to assure they work well, 27687current development sources are available by SVN (see 27688`http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 27689available for FTP; see `http://gcc.gnu.org/snapshots.html'. 27690 27691 If you would like to work on improvements to GCC, please read the 27692advice at these URLs: 27693 27694 `http://gcc.gnu.org/contribute.html' 27695 `http://gcc.gnu.org/contributewhy.html' 27696 27697for information on how to make useful contributions and avoid 27698duplication of effort. Suggested projects are listed at 27699`http://gcc.gnu.org/projects/'. 27700 27701 27702File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 27703 27704Funding Free Software 27705********************* 27706 27707If you want to have more free software a few years from now, it makes 27708sense for you to help encourage people to contribute funds for its 27709development. The most effective approach known is to encourage 27710commercial redistributors to donate. 27711 27712 Users of free software systems can boost the pace of development by 27713encouraging for-a-fee distributors to donate part of their selling price 27714to free software developers--the Free Software Foundation, and others. 27715 27716 The way to convince distributors to do this is to demand it and expect 27717it from them. So when you compare distributors, judge them partly by 27718how much they give to free software development. Show distributors 27719they must compete to be the one who gives the most. 27720 27721 To make this approach work, you must insist on numbers that you can 27722compare, such as, "We will donate ten dollars to the Frobnitz project 27723for each disk sold." Don't be satisfied with a vague promise, such as 27724"A portion of the profits are donated," since it doesn't give a basis 27725for comparison. 27726 27727 Even a precise fraction "of the profits from this disk" is not very 27728meaningful, since creative accounting and unrelated business decisions 27729can greatly alter what fraction of the sales price counts as profit. 27730If the price you pay is $50, ten percent of the profit is probably less 27731than a dollar; it might be a few cents, or nothing at all. 27732 27733 Some redistributors do development work themselves. This is useful 27734too; but to keep everyone honest, you need to inquire how much they do, 27735and what kind. Some kinds of development make much more long-term 27736difference than others. For example, maintaining a separate version of 27737a program contributes very little; maintaining the standard version of a 27738program for the whole community contributes much. Easy new ports 27739contribute little, since someone else would surely do them; difficult 27740ports such as adding a new CPU to the GNU Compiler Collection 27741contribute more; major new features or packages contribute the most. 27742 27743 By establishing the idea that supporting further development is "the 27744proper thing to do" when distributing free software for a fee, we can 27745assure a steady flow of resources into making more free software. 27746 27747 Copyright (C) 1994 Free Software Foundation, Inc. 27748 Verbatim copying and redistribution of this section is permitted 27749 without royalty; alteration is not permitted. 27750 27751 27752File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 27753 27754The GNU Project and GNU/Linux 27755***************************** 27756 27757The GNU Project was launched in 1984 to develop a complete Unix-like 27758operating system which is free software: the GNU system. (GNU is a 27759recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 27760Variants of the GNU operating system, which use the kernel Linux, are 27761now widely used; though these systems are often referred to as "Linux", 27762they are more accurately called GNU/Linux systems. 27763 27764 For more information, see: 27765 `http://www.gnu.org/' 27766 `http://www.gnu.org/gnu/linux-and-gnu.html' 27767 27768 27769File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 27770 27771GNU GENERAL PUBLIC LICENSE 27772************************** 27773 27774 Version 2, June 1991 27775 27776 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 27777 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 27778 27779 Everyone is permitted to copy and distribute verbatim copies 27780 of this license document, but changing it is not allowed. 27781 27782Preamble 27783======== 27784 27785The licenses for most software are designed to take away your freedom 27786to share and change it. By contrast, the GNU General Public License is 27787intended to guarantee your freedom to share and change free 27788software--to make sure the software is free for all its users. This 27789General Public License applies to most of the Free Software 27790Foundation's software and to any other program whose authors commit to 27791using it. (Some other Free Software Foundation software is covered by 27792the GNU Library General Public License instead.) You can apply it to 27793your programs, too. 27794 27795 When we speak of free software, we are referring to freedom, not 27796price. Our General Public Licenses are designed to make sure that you 27797have the freedom to distribute copies of free software (and charge for 27798this service if you wish), that you receive source code or can get it 27799if you want it, that you can change the software or use pieces of it in 27800new free programs; and that you know you can do these things. 27801 27802 To protect your rights, we need to make restrictions that forbid 27803anyone to deny you these rights or to ask you to surrender the rights. 27804These restrictions translate to certain responsibilities for you if you 27805distribute copies of the software, or if you modify it. 27806 27807 For example, if you distribute copies of such a program, whether 27808gratis or for a fee, you must give the recipients all the rights that 27809you have. You must make sure that they, too, receive or can get the 27810source code. And you must show them these terms so they know their 27811rights. 27812 27813 We protect your rights with two steps: (1) copyright the software, and 27814(2) offer you this license which gives you legal permission to copy, 27815distribute and/or modify the software. 27816 27817 Also, for each author's protection and ours, we want to make certain 27818that everyone understands that there is no warranty for this free 27819software. If the software is modified by someone else and passed on, we 27820want its recipients to know that what they have is not the original, so 27821that any problems introduced by others will not reflect on the original 27822authors' reputations. 27823 27824 Finally, any free program is threatened constantly by software 27825patents. We wish to avoid the danger that redistributors of a free 27826program will individually obtain patent licenses, in effect making the 27827program proprietary. To prevent this, we have made it clear that any 27828patent must be licensed for everyone's free use or not licensed at all. 27829 27830 The precise terms and conditions for copying, distribution and 27831modification follow. 27832 27833 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 27834 0. This License applies to any program or other work which contains a 27835 notice placed by the copyright holder saying it may be distributed 27836 under the terms of this General Public License. The "Program", 27837 below, refers to any such program or work, and a "work based on 27838 the Program" means either the Program or any derivative work under 27839 copyright law: that is to say, a work containing the Program or a 27840 portion of it, either verbatim or with modifications and/or 27841 translated into another language. (Hereinafter, translation is 27842 included without limitation in the term "modification".) Each 27843 licensee is addressed as "you". 27844 27845 Activities other than copying, distribution and modification are 27846 not covered by this License; they are outside its scope. The act 27847 of running the Program is not restricted, and the output from the 27848 Program is covered only if its contents constitute a work based on 27849 the Program (independent of having been made by running the 27850 Program). Whether that is true depends on what the Program does. 27851 27852 1. You may copy and distribute verbatim copies of the Program's 27853 source code as you receive it, in any medium, provided that you 27854 conspicuously and appropriately publish on each copy an appropriate 27855 copyright notice and disclaimer of warranty; keep intact all the 27856 notices that refer to this License and to the absence of any 27857 warranty; and give any other recipients of the Program a copy of 27858 this License along with the Program. 27859 27860 You may charge a fee for the physical act of transferring a copy, 27861 and you may at your option offer warranty protection in exchange 27862 for a fee. 27863 27864 2. You may modify your copy or copies of the Program or any portion 27865 of it, thus forming a work based on the Program, and copy and 27866 distribute such modifications or work under the terms of Section 1 27867 above, provided that you also meet all of these conditions: 27868 27869 a. You must cause the modified files to carry prominent notices 27870 stating that you changed the files and the date of any change. 27871 27872 b. You must cause any work that you distribute or publish, that 27873 in whole or in part contains or is derived from the Program 27874 or any part thereof, to be licensed as a whole at no charge 27875 to all third parties under the terms of this License. 27876 27877 c. If the modified program normally reads commands interactively 27878 when run, you must cause it, when started running for such 27879 interactive use in the most ordinary way, to print or display 27880 an announcement including an appropriate copyright notice and 27881 a notice that there is no warranty (or else, saying that you 27882 provide a warranty) and that users may redistribute the 27883 program under these conditions, and telling the user how to 27884 view a copy of this License. (Exception: if the Program 27885 itself is interactive but does not normally print such an 27886 announcement, your work based on the Program is not required 27887 to print an announcement.) 27888 27889 These requirements apply to the modified work as a whole. If 27890 identifiable sections of that work are not derived from the 27891 Program, and can be reasonably considered independent and separate 27892 works in themselves, then this License, and its terms, do not 27893 apply to those sections when you distribute them as separate 27894 works. But when you distribute the same sections as part of a 27895 whole which is a work based on the Program, the distribution of 27896 the whole must be on the terms of this License, whose permissions 27897 for other licensees extend to the entire whole, and thus to each 27898 and every part regardless of who wrote it. 27899 27900 Thus, it is not the intent of this section to claim rights or 27901 contest your rights to work written entirely by you; rather, the 27902 intent is to exercise the right to control the distribution of 27903 derivative or collective works based on the Program. 27904 27905 In addition, mere aggregation of another work not based on the 27906 Program with the Program (or with a work based on the Program) on 27907 a volume of a storage or distribution medium does not bring the 27908 other work under the scope of this License. 27909 27910 3. You may copy and distribute the Program (or a work based on it, 27911 under Section 2) in object code or executable form under the terms 27912 of Sections 1 and 2 above provided that you also do one of the 27913 following: 27914 27915 a. Accompany it with the complete corresponding machine-readable 27916 source code, which must be distributed under the terms of 27917 Sections 1 and 2 above on a medium customarily used for 27918 software interchange; or, 27919 27920 b. Accompany it with a written offer, valid for at least three 27921 years, to give any third party, for a charge no more than your 27922 cost of physically performing source distribution, a complete 27923 machine-readable copy of the corresponding source code, to be 27924 distributed under the terms of Sections 1 and 2 above on a 27925 medium customarily used for software interchange; or, 27926 27927 c. Accompany it with the information you received as to the offer 27928 to distribute corresponding source code. (This alternative is 27929 allowed only for noncommercial distribution and only if you 27930 received the program in object code or executable form with 27931 such an offer, in accord with Subsection b above.) 27932 27933 The source code for a work means the preferred form of the work for 27934 making modifications to it. For an executable work, complete 27935 source code means all the source code for all modules it contains, 27936 plus any associated interface definition files, plus the scripts 27937 used to control compilation and installation of the executable. 27938 However, as a special exception, the source code distributed need 27939 not include anything that is normally distributed (in either 27940 source or binary form) with the major components (compiler, 27941 kernel, and so on) of the operating system on which the executable 27942 runs, unless that component itself accompanies the executable. 27943 27944 If distribution of executable or object code is made by offering 27945 access to copy from a designated place, then offering equivalent 27946 access to copy the source code from the same place counts as 27947 distribution of the source code, even though third parties are not 27948 compelled to copy the source along with the object code. 27949 27950 4. You may not copy, modify, sublicense, or distribute the Program 27951 except as expressly provided under this License. Any attempt 27952 otherwise to copy, modify, sublicense or distribute the Program is 27953 void, and will automatically terminate your rights under this 27954 License. However, parties who have received copies, or rights, 27955 from you under this License will not have their licenses 27956 terminated so long as such parties remain in full compliance. 27957 27958 5. You are not required to accept this License, since you have not 27959 signed it. However, nothing else grants you permission to modify 27960 or distribute the Program or its derivative works. These actions 27961 are prohibited by law if you do not accept this License. 27962 Therefore, by modifying or distributing the Program (or any work 27963 based on the Program), you indicate your acceptance of this 27964 License to do so, and all its terms and conditions for copying, 27965 distributing or modifying the Program or works based on it. 27966 27967 6. Each time you redistribute the Program (or any work based on the 27968 Program), the recipient automatically receives a license from the 27969 original licensor to copy, distribute or modify the Program 27970 subject to these terms and conditions. You may not impose any 27971 further restrictions on the recipients' exercise of the rights 27972 granted herein. You are not responsible for enforcing compliance 27973 by third parties to this License. 27974 27975 7. If, as a consequence of a court judgment or allegation of patent 27976 infringement or for any other reason (not limited to patent 27977 issues), conditions are imposed on you (whether by court order, 27978 agreement or otherwise) that contradict the conditions of this 27979 License, they do not excuse you from the conditions of this 27980 License. If you cannot distribute so as to satisfy simultaneously 27981 your obligations under this License and any other pertinent 27982 obligations, then as a consequence you may not distribute the 27983 Program at all. For example, if a patent license would not permit 27984 royalty-free redistribution of the Program by all those who 27985 receive copies directly or indirectly through you, then the only 27986 way you could satisfy both it and this License would be to refrain 27987 entirely from distribution of the Program. 27988 27989 If any portion of this section is held invalid or unenforceable 27990 under any particular circumstance, the balance of the section is 27991 intended to apply and the section as a whole is intended to apply 27992 in other circumstances. 27993 27994 It is not the purpose of this section to induce you to infringe any 27995 patents or other property right claims or to contest validity of 27996 any such claims; this section has the sole purpose of protecting 27997 the integrity of the free software distribution system, which is 27998 implemented by public license practices. Many people have made 27999 generous contributions to the wide range of software distributed 28000 through that system in reliance on consistent application of that 28001 system; it is up to the author/donor to decide if he or she is 28002 willing to distribute software through any other system and a 28003 licensee cannot impose that choice. 28004 28005 This section is intended to make thoroughly clear what is believed 28006 to be a consequence of the rest of this License. 28007 28008 8. If the distribution and/or use of the Program is restricted in 28009 certain countries either by patents or by copyrighted interfaces, 28010 the original copyright holder who places the Program under this 28011 License may add an explicit geographical distribution limitation 28012 excluding those countries, so that distribution is permitted only 28013 in or among countries not thus excluded. In such case, this 28014 License incorporates the limitation as if written in the body of 28015 this License. 28016 28017 9. The Free Software Foundation may publish revised and/or new 28018 versions of the General Public License from time to time. Such 28019 new versions will be similar in spirit to the present version, but 28020 may differ in detail to address new problems or concerns. 28021 28022 Each version is given a distinguishing version number. If the 28023 Program specifies a version number of this License which applies 28024 to it and "any later version", you have the option of following 28025 the terms and conditions either of that version or of any later 28026 version published by the Free Software Foundation. If the Program 28027 does not specify a version number of this License, you may choose 28028 any version ever published by the Free Software Foundation. 28029 28030 10. If you wish to incorporate parts of the Program into other free 28031 programs whose distribution conditions are different, write to the 28032 author to ask for permission. For software which is copyrighted 28033 by the Free Software Foundation, write to the Free Software 28034 Foundation; we sometimes make exceptions for this. Our decision 28035 will be guided by the two goals of preserving the free status of 28036 all derivatives of our free software and of promoting the sharing 28037 and reuse of software generally. 28038 28039 NO WARRANTY 28040 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO 28041 WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE 28042 LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 28043 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT 28044 WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT 28045 NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 28046 FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE 28047 QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 28048 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY 28049 SERVICING, REPAIR OR CORRECTION. 28050 28051 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 28052 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY 28053 MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE 28054 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 28055 INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR 28056 INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 28057 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU 28058 OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY 28059 OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN 28060 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 28061 28062 END OF TERMS AND CONDITIONS 28063Appendix: How to Apply These Terms to Your New Programs 28064======================================================= 28065 28066If you develop a new program, and you want it to be of the greatest 28067possible use to the public, the best way to achieve this is to make it 28068free software which everyone can redistribute and change under these 28069terms. 28070 28071 To do so, attach the following notices to the program. It is safest 28072to attach them to the start of each source file to most effectively 28073convey the exclusion of warranty; and each file should have at least 28074the "copyright" line and a pointer to where the full notice is found. 28075 28076 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 28077 Copyright (C) YEAR NAME OF AUTHOR 28078 28079 This program is free software; you can redistribute it and/or modify 28080 it under the terms of the GNU General Public License as published by 28081 the Free Software Foundation; either version 2 of the License, or 28082 (at your option) any later version. 28083 28084 This program is distributed in the hope that it will be useful, 28085 but WITHOUT ANY WARRANTY; without even the implied warranty of 28086 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 28087 GNU General Public License for more details. 28088 28089 You should have received a copy of the GNU General Public License 28090 along with this program; if not, write to the Free Software 28091 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 28092 28093 Also add information on how to contact you by electronic and paper 28094mail. 28095 28096 If the program is interactive, make it output a short notice like this 28097when it starts in an interactive mode: 28098 28099 Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR 28100 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details 28101 type `show w'. 28102 This is free software, and you are welcome to redistribute it 28103 under certain conditions; type `show c' for details. 28104 28105 The hypothetical commands `show w' and `show c' should show the 28106appropriate parts of the General Public License. Of course, the 28107commands you use may be called something other than `show w' and `show 28108c'; they could even be mouse-clicks or menu items--whatever suits your 28109program. 28110 28111 You should also get your employer (if you work as a programmer) or your 28112school, if any, to sign a "copyright disclaimer" for the program, if 28113necessary. Here is a sample; alter the names: 28114 28115 Yoyodyne, Inc., hereby disclaims all copyright interest in the program 28116 `Gnomovision' (which makes passes at compilers) written by James Hacker. 28117 28118 SIGNATURE OF TY COON, 1 April 1989 28119 Ty Coon, President of Vice 28120 28121 This General Public License does not permit incorporating your program 28122into proprietary programs. If your program is a subroutine library, 28123you may consider it more useful to permit linking proprietary 28124applications with the library. If this is what you want to do, use the 28125GNU Library General Public License instead of this License. 28126 28127 28128File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 28129 28130GNU Free Documentation License 28131****************************** 28132 28133 Version 1.2, November 2002 28134 28135 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 28136 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 28137 28138 Everyone is permitted to copy and distribute verbatim copies 28139 of this license document, but changing it is not allowed. 28140 28141 0. PREAMBLE 28142 28143 The purpose of this License is to make a manual, textbook, or other 28144 functional and useful document "free" in the sense of freedom: to 28145 assure everyone the effective freedom to copy and redistribute it, 28146 with or without modifying it, either commercially or 28147 noncommercially. Secondarily, this License preserves for the 28148 author and publisher a way to get credit for their work, while not 28149 being considered responsible for modifications made by others. 28150 28151 This License is a kind of "copyleft", which means that derivative 28152 works of the document must themselves be free in the same sense. 28153 It complements the GNU General Public License, which is a copyleft 28154 license designed for free software. 28155 28156 We have designed this License in order to use it for manuals for 28157 free software, because free software needs free documentation: a 28158 free program should come with manuals providing the same freedoms 28159 that the software does. But this License is not limited to 28160 software manuals; it can be used for any textual work, regardless 28161 of subject matter or whether it is published as a printed book. 28162 We recommend this License principally for works whose purpose is 28163 instruction or reference. 28164 28165 1. APPLICABILITY AND DEFINITIONS 28166 28167 This License applies to any manual or other work, in any medium, 28168 that contains a notice placed by the copyright holder saying it 28169 can be distributed under the terms of this License. Such a notice 28170 grants a world-wide, royalty-free license, unlimited in duration, 28171 to use that work under the conditions stated herein. The 28172 "Document", below, refers to any such manual or work. Any member 28173 of the public is a licensee, and is addressed as "you". You 28174 accept the license if you copy, modify or distribute the work in a 28175 way requiring permission under copyright law. 28176 28177 A "Modified Version" of the Document means any work containing the 28178 Document or a portion of it, either copied verbatim, or with 28179 modifications and/or translated into another language. 28180 28181 A "Secondary Section" is a named appendix or a front-matter section 28182 of the Document that deals exclusively with the relationship of the 28183 publishers or authors of the Document to the Document's overall 28184 subject (or to related matters) and contains nothing that could 28185 fall directly within that overall subject. (Thus, if the Document 28186 is in part a textbook of mathematics, a Secondary Section may not 28187 explain any mathematics.) The relationship could be a matter of 28188 historical connection with the subject or with related matters, or 28189 of legal, commercial, philosophical, ethical or political position 28190 regarding them. 28191 28192 The "Invariant Sections" are certain Secondary Sections whose 28193 titles are designated, as being those of Invariant Sections, in 28194 the notice that says that the Document is released under this 28195 License. If a section does not fit the above definition of 28196 Secondary then it is not allowed to be designated as Invariant. 28197 The Document may contain zero Invariant Sections. If the Document 28198 does not identify any Invariant Sections then there are none. 28199 28200 The "Cover Texts" are certain short passages of text that are 28201 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 28202 that says that the Document is released under this License. A 28203 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 28204 be at most 25 words. 28205 28206 A "Transparent" copy of the Document means a machine-readable copy, 28207 represented in a format whose specification is available to the 28208 general public, that is suitable for revising the document 28209 straightforwardly with generic text editors or (for images 28210 composed of pixels) generic paint programs or (for drawings) some 28211 widely available drawing editor, and that is suitable for input to 28212 text formatters or for automatic translation to a variety of 28213 formats suitable for input to text formatters. A copy made in an 28214 otherwise Transparent file format whose markup, or absence of 28215 markup, has been arranged to thwart or discourage subsequent 28216 modification by readers is not Transparent. An image format is 28217 not Transparent if used for any substantial amount of text. A 28218 copy that is not "Transparent" is called "Opaque". 28219 28220 Examples of suitable formats for Transparent copies include plain 28221 ASCII without markup, Texinfo input format, LaTeX input format, 28222 SGML or XML using a publicly available DTD, and 28223 standard-conforming simple HTML, PostScript or PDF designed for 28224 human modification. Examples of transparent image formats include 28225 PNG, XCF and JPG. Opaque formats include proprietary formats that 28226 can be read and edited only by proprietary word processors, SGML or 28227 XML for which the DTD and/or processing tools are not generally 28228 available, and the machine-generated HTML, PostScript or PDF 28229 produced by some word processors for output purposes only. 28230 28231 The "Title Page" means, for a printed book, the title page itself, 28232 plus such following pages as are needed to hold, legibly, the 28233 material this License requires to appear in the title page. For 28234 works in formats which do not have any title page as such, "Title 28235 Page" means the text near the most prominent appearance of the 28236 work's title, preceding the beginning of the body of the text. 28237 28238 A section "Entitled XYZ" means a named subunit of the Document 28239 whose title either is precisely XYZ or contains XYZ in parentheses 28240 following text that translates XYZ in another language. (Here XYZ 28241 stands for a specific section name mentioned below, such as 28242 "Acknowledgements", "Dedications", "Endorsements", or "History".) 28243 To "Preserve the Title" of such a section when you modify the 28244 Document means that it remains a section "Entitled XYZ" according 28245 to this definition. 28246 28247 The Document may include Warranty Disclaimers next to the notice 28248 which states that this License applies to the Document. These 28249 Warranty Disclaimers are considered to be included by reference in 28250 this License, but only as regards disclaiming warranties: any other 28251 implication that these Warranty Disclaimers may have is void and 28252 has no effect on the meaning of this License. 28253 28254 2. VERBATIM COPYING 28255 28256 You may copy and distribute the Document in any medium, either 28257 commercially or noncommercially, provided that this License, the 28258 copyright notices, and the license notice saying this License 28259 applies to the Document are reproduced in all copies, and that you 28260 add no other conditions whatsoever to those of this License. You 28261 may not use technical measures to obstruct or control the reading 28262 or further copying of the copies you make or distribute. However, 28263 you may accept compensation in exchange for copies. If you 28264 distribute a large enough number of copies you must also follow 28265 the conditions in section 3. 28266 28267 You may also lend copies, under the same conditions stated above, 28268 and you may publicly display copies. 28269 28270 3. COPYING IN QUANTITY 28271 28272 If you publish printed copies (or copies in media that commonly 28273 have printed covers) of the Document, numbering more than 100, and 28274 the Document's license notice requires Cover Texts, you must 28275 enclose the copies in covers that carry, clearly and legibly, all 28276 these Cover Texts: Front-Cover Texts on the front cover, and 28277 Back-Cover Texts on the back cover. Both covers must also clearly 28278 and legibly identify you as the publisher of these copies. The 28279 front cover must present the full title with all words of the 28280 title equally prominent and visible. You may add other material 28281 on the covers in addition. Copying with changes limited to the 28282 covers, as long as they preserve the title of the Document and 28283 satisfy these conditions, can be treated as verbatim copying in 28284 other respects. 28285 28286 If the required texts for either cover are too voluminous to fit 28287 legibly, you should put the first ones listed (as many as fit 28288 reasonably) on the actual cover, and continue the rest onto 28289 adjacent pages. 28290 28291 If you publish or distribute Opaque copies of the Document 28292 numbering more than 100, you must either include a 28293 machine-readable Transparent copy along with each Opaque copy, or 28294 state in or with each Opaque copy a computer-network location from 28295 which the general network-using public has access to download 28296 using public-standard network protocols a complete Transparent 28297 copy of the Document, free of added material. If you use the 28298 latter option, you must take reasonably prudent steps, when you 28299 begin distribution of Opaque copies in quantity, to ensure that 28300 this Transparent copy will remain thus accessible at the stated 28301 location until at least one year after the last time you 28302 distribute an Opaque copy (directly or through your agents or 28303 retailers) of that edition to the public. 28304 28305 It is requested, but not required, that you contact the authors of 28306 the Document well before redistributing any large number of 28307 copies, to give them a chance to provide you with an updated 28308 version of the Document. 28309 28310 4. MODIFICATIONS 28311 28312 You may copy and distribute a Modified Version of the Document 28313 under the conditions of sections 2 and 3 above, provided that you 28314 release the Modified Version under precisely this License, with 28315 the Modified Version filling the role of the Document, thus 28316 licensing distribution and modification of the Modified Version to 28317 whoever possesses a copy of it. In addition, you must do these 28318 things in the Modified Version: 28319 28320 A. Use in the Title Page (and on the covers, if any) a title 28321 distinct from that of the Document, and from those of 28322 previous versions (which should, if there were any, be listed 28323 in the History section of the Document). You may use the 28324 same title as a previous version if the original publisher of 28325 that version gives permission. 28326 28327 B. List on the Title Page, as authors, one or more persons or 28328 entities responsible for authorship of the modifications in 28329 the Modified Version, together with at least five of the 28330 principal authors of the Document (all of its principal 28331 authors, if it has fewer than five), unless they release you 28332 from this requirement. 28333 28334 C. State on the Title page the name of the publisher of the 28335 Modified Version, as the publisher. 28336 28337 D. Preserve all the copyright notices of the Document. 28338 28339 E. Add an appropriate copyright notice for your modifications 28340 adjacent to the other copyright notices. 28341 28342 F. Include, immediately after the copyright notices, a license 28343 notice giving the public permission to use the Modified 28344 Version under the terms of this License, in the form shown in 28345 the Addendum below. 28346 28347 G. Preserve in that license notice the full lists of Invariant 28348 Sections and required Cover Texts given in the Document's 28349 license notice. 28350 28351 H. Include an unaltered copy of this License. 28352 28353 I. Preserve the section Entitled "History", Preserve its Title, 28354 and add to it an item stating at least the title, year, new 28355 authors, and publisher of the Modified Version as given on 28356 the Title Page. If there is no section Entitled "History" in 28357 the Document, create one stating the title, year, authors, 28358 and publisher of the Document as given on its Title Page, 28359 then add an item describing the Modified Version as stated in 28360 the previous sentence. 28361 28362 J. Preserve the network location, if any, given in the Document 28363 for public access to a Transparent copy of the Document, and 28364 likewise the network locations given in the Document for 28365 previous versions it was based on. These may be placed in 28366 the "History" section. You may omit a network location for a 28367 work that was published at least four years before the 28368 Document itself, or if the original publisher of the version 28369 it refers to gives permission. 28370 28371 K. For any section Entitled "Acknowledgements" or "Dedications", 28372 Preserve the Title of the section, and preserve in the 28373 section all the substance and tone of each of the contributor 28374 acknowledgements and/or dedications given therein. 28375 28376 L. Preserve all the Invariant Sections of the Document, 28377 unaltered in their text and in their titles. Section numbers 28378 or the equivalent are not considered part of the section 28379 titles. 28380 28381 M. Delete any section Entitled "Endorsements". Such a section 28382 may not be included in the Modified Version. 28383 28384 N. Do not retitle any existing section to be Entitled 28385 "Endorsements" or to conflict in title with any Invariant 28386 Section. 28387 28388 O. Preserve any Warranty Disclaimers. 28389 28390 If the Modified Version includes new front-matter sections or 28391 appendices that qualify as Secondary Sections and contain no 28392 material copied from the Document, you may at your option 28393 designate some or all of these sections as invariant. To do this, 28394 add their titles to the list of Invariant Sections in the Modified 28395 Version's license notice. These titles must be distinct from any 28396 other section titles. 28397 28398 You may add a section Entitled "Endorsements", provided it contains 28399 nothing but endorsements of your Modified Version by various 28400 parties--for example, statements of peer review or that the text 28401 has been approved by an organization as the authoritative 28402 definition of a standard. 28403 28404 You may add a passage of up to five words as a Front-Cover Text, 28405 and a passage of up to 25 words as a Back-Cover Text, to the end 28406 of the list of Cover Texts in the Modified Version. Only one 28407 passage of Front-Cover Text and one of Back-Cover Text may be 28408 added by (or through arrangements made by) any one entity. If the 28409 Document already includes a cover text for the same cover, 28410 previously added by you or by arrangement made by the same entity 28411 you are acting on behalf of, you may not add another; but you may 28412 replace the old one, on explicit permission from the previous 28413 publisher that added the old one. 28414 28415 The author(s) and publisher(s) of the Document do not by this 28416 License give permission to use their names for publicity for or to 28417 assert or imply endorsement of any Modified Version. 28418 28419 5. COMBINING DOCUMENTS 28420 28421 You may combine the Document with other documents released under 28422 this License, under the terms defined in section 4 above for 28423 modified versions, provided that you include in the combination 28424 all of the Invariant Sections of all of the original documents, 28425 unmodified, and list them all as Invariant Sections of your 28426 combined work in its license notice, and that you preserve all 28427 their Warranty Disclaimers. 28428 28429 The combined work need only contain one copy of this License, and 28430 multiple identical Invariant Sections may be replaced with a single 28431 copy. If there are multiple Invariant Sections with the same name 28432 but different contents, make the title of each such section unique 28433 by adding at the end of it, in parentheses, the name of the 28434 original author or publisher of that section if known, or else a 28435 unique number. Make the same adjustment to the section titles in 28436 the list of Invariant Sections in the license notice of the 28437 combined work. 28438 28439 In the combination, you must combine any sections Entitled 28440 "History" in the various original documents, forming one section 28441 Entitled "History"; likewise combine any sections Entitled 28442 "Acknowledgements", and any sections Entitled "Dedications". You 28443 must delete all sections Entitled "Endorsements." 28444 28445 6. COLLECTIONS OF DOCUMENTS 28446 28447 You may make a collection consisting of the Document and other 28448 documents released under this License, and replace the individual 28449 copies of this License in the various documents with a single copy 28450 that is included in the collection, provided that you follow the 28451 rules of this License for verbatim copying of each of the 28452 documents in all other respects. 28453 28454 You may extract a single document from such a collection, and 28455 distribute it individually under this License, provided you insert 28456 a copy of this License into the extracted document, and follow 28457 this License in all other respects regarding verbatim copying of 28458 that document. 28459 28460 7. AGGREGATION WITH INDEPENDENT WORKS 28461 28462 A compilation of the Document or its derivatives with other 28463 separate and independent documents or works, in or on a volume of 28464 a storage or distribution medium, is called an "aggregate" if the 28465 copyright resulting from the compilation is not used to limit the 28466 legal rights of the compilation's users beyond what the individual 28467 works permit. When the Document is included in an aggregate, this 28468 License does not apply to the other works in the aggregate which 28469 are not themselves derivative works of the Document. 28470 28471 If the Cover Text requirement of section 3 is applicable to these 28472 copies of the Document, then if the Document is less than one half 28473 of the entire aggregate, the Document's Cover Texts may be placed 28474 on covers that bracket the Document within the aggregate, or the 28475 electronic equivalent of covers if the Document is in electronic 28476 form. Otherwise they must appear on printed covers that bracket 28477 the whole aggregate. 28478 28479 8. TRANSLATION 28480 28481 Translation is considered a kind of modification, so you may 28482 distribute translations of the Document under the terms of section 28483 4. Replacing Invariant Sections with translations requires special 28484 permission from their copyright holders, but you may include 28485 translations of some or all Invariant Sections in addition to the 28486 original versions of these Invariant Sections. You may include a 28487 translation of this License, and all the license notices in the 28488 Document, and any Warranty Disclaimers, provided that you also 28489 include the original English version of this License and the 28490 original versions of those notices and disclaimers. In case of a 28491 disagreement between the translation and the original version of 28492 this License or a notice or disclaimer, the original version will 28493 prevail. 28494 28495 If a section in the Document is Entitled "Acknowledgements", 28496 "Dedications", or "History", the requirement (section 4) to 28497 Preserve its Title (section 1) will typically require changing the 28498 actual title. 28499 28500 9. TERMINATION 28501 28502 You may not copy, modify, sublicense, or distribute the Document 28503 except as expressly provided for under this License. Any other 28504 attempt to copy, modify, sublicense or distribute the Document is 28505 void, and will automatically terminate your rights under this 28506 License. However, parties who have received copies, or rights, 28507 from you under this License will not have their licenses 28508 terminated so long as such parties remain in full compliance. 28509 28510 10. FUTURE REVISIONS OF THIS LICENSE 28511 28512 The Free Software Foundation may publish new, revised versions of 28513 the GNU Free Documentation License from time to time. Such new 28514 versions will be similar in spirit to the present version, but may 28515 differ in detail to address new problems or concerns. See 28516 `http://www.gnu.org/copyleft/'. 28517 28518 Each version of the License is given a distinguishing version 28519 number. If the Document specifies that a particular numbered 28520 version of this License "or any later version" applies to it, you 28521 have the option of following the terms and conditions either of 28522 that specified version or of any later version that has been 28523 published (not as a draft) by the Free Software Foundation. If 28524 the Document does not specify a version number of this License, 28525 you may choose any version ever published (not as a draft) by the 28526 Free Software Foundation. 28527 28528ADDENDUM: How to use this License for your documents 28529==================================================== 28530 28531To use this License in a document you have written, include a copy of 28532the License in the document and put the following copyright and license 28533notices just after the title page: 28534 28535 Copyright (C) YEAR YOUR NAME. 28536 Permission is granted to copy, distribute and/or modify this document 28537 under the terms of the GNU Free Documentation License, Version 1.2 28538 or any later version published by the Free Software Foundation; 28539 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 28540 Texts. A copy of the license is included in the section entitled ``GNU 28541 Free Documentation License''. 28542 28543 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 28544replace the "with...Texts." line with this: 28545 28546 with the Invariant Sections being LIST THEIR TITLES, with 28547 the Front-Cover Texts being LIST, and with the Back-Cover Texts 28548 being LIST. 28549 28550 If you have Invariant Sections without Cover Texts, or some other 28551combination of the three, merge those two alternatives to suit the 28552situation. 28553 28554 If your document contains nontrivial examples of program code, we 28555recommend releasing these examples in parallel under your choice of 28556free software license, such as the GNU General Public License, to 28557permit their use in free software. 28558 28559 28560File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 28561 28562Contributors to GCC 28563******************* 28564 28565The GCC project would like to thank its many contributors. Without 28566them the project would not have been nearly as successful as it has 28567been. Any omissions in this list are accidental. Feel free to contact 28568<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 28569some of your contributions are not listed. Please keep this list in 28570alphabetical order. 28571 28572 * Analog Devices helped implement the support for complex data types 28573 and iterators. 28574 28575 * John David Anglin for threading-related fixes and improvements to 28576 libstdc++-v3, and the HP-UX port. 28577 28578 * James van Artsdalen wrote the code that makes efficient use of the 28579 Intel 80387 register stack. 28580 28581 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 28582 Series port. 28583 28584 * Alasdair Baird for various bug fixes. 28585 28586 * Giovanni Bajo for analyzing lots of complicated C++ problem 28587 reports. 28588 28589 * Peter Barada for his work to improve code generation for new 28590 ColdFire cores. 28591 28592 * Gerald Baumgartner added the signature extension to the C++ front 28593 end. 28594 28595 * Godmar Back for his Java improvements and encouragement. 28596 28597 * Scott Bambrough for help porting the Java compiler. 28598 28599 * Wolfgang Bangerth for processing tons of bug reports. 28600 28601 * Jon Beniston for his Microsoft Windows port of Java. 28602 28603 * Daniel Berlin for better DWARF2 support, faster/better 28604 optimizations, improved alias analysis, plus migrating GCC to 28605 Bugzilla. 28606 28607 * Geoff Berry for his Java object serialization work and various 28608 patches. 28609 28610 * Uros Bizjak for the implementation of x87 math built-in functions 28611 and for various middle end and i386 back end improvements and 28612 bugfixes. 28613 28614 * Eric Blake for helping to make GCJ and libgcj conform to the 28615 specifications. 28616 28617 * Janne Blomqvist for contributions to GNU Fortran. 28618 28619 * Segher Boessenkool for various fixes. 28620 28621 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 28622 other Java work. 28623 28624 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 28625 miscellaneous clean-ups. 28626 28627 * Steven Bosscher for integrating the GNU Fortran front end into GCC 28628 and for contributing to the tree-ssa branch. 28629 28630 * Eric Botcazou for fixing middle- and backend bugs left and right. 28631 28632 * Per Bothner for his direction via the steering committee and 28633 various improvements to the infrastructure for supporting new 28634 languages. Chill front end implementation. Initial 28635 implementations of cpplib, fix-header, config.guess, libio, and 28636 past C++ library (libg++) maintainer. Dreaming up, designing and 28637 implementing much of GCJ. 28638 28639 * Devon Bowen helped port GCC to the Tahoe. 28640 28641 * Don Bowman for mips-vxworks contributions. 28642 28643 * Dave Brolley for work on cpplib and Chill. 28644 28645 * Paul Brook for work on the ARM architecture and maintaining GNU 28646 Fortran. 28647 28648 * Robert Brown implemented the support for Encore 32000 systems. 28649 28650 * Christian Bruel for improvements to local store elimination. 28651 28652 * Herman A.J. ten Brugge for various fixes. 28653 28654 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 28655 FAQ. 28656 28657 * Joe Buck for his direction via the steering committee. 28658 28659 * Craig Burley for leadership of the G77 Fortran effort. 28660 28661 * Stephan Buys for contributing Doxygen notes for libstdc++. 28662 28663 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 28664 to the C++ strings, streambufs and formatted I/O, hard detective 28665 work on the frustrating localization issues, and keeping up with 28666 the problem reports. 28667 28668 * John Carr for his alias work, SPARC hacking, infrastructure 28669 improvements, previous contributions to the steering committee, 28670 loop optimizations, etc. 28671 28672 * Stephane Carrez for 68HC11 and 68HC12 ports. 28673 28674 * Steve Chamberlain for support for the Renesas SH and H8 processors 28675 and the PicoJava processor, and for GCJ config fixes. 28676 28677 * Glenn Chambers for help with the GCJ FAQ. 28678 28679 * John-Marc Chandonia for various libgcj patches. 28680 28681 * Scott Christley for his Objective-C contributions. 28682 28683 * Eric Christopher for his Java porting help and clean-ups. 28684 28685 * Branko Cibej for more warning contributions. 28686 28687 * The GNU Classpath project for all of their merged runtime code. 28688 28689 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and 28690 other random hacking. 28691 28692 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 28693 28694 * R. Kelley Cook for making GCC buildable from a read-only directory 28695 as well as other miscellaneous build process and documentation 28696 clean-ups. 28697 28698 * Ralf Corsepius for SH testing and minor bugfixing. 28699 28700 * Stan Cox for care and feeding of the x86 port and lots of behind 28701 the scenes hacking. 28702 28703 * Alex Crain provided changes for the 3b1. 28704 28705 * Ian Dall for major improvements to the NS32k port. 28706 28707 * Paul Dale for his work to add uClinux platform support to the m68k 28708 backend. 28709 28710 * Dario Dariol contributed the four varieties of sample programs 28711 that print a copy of their source. 28712 28713 * Russell Davidson for fstream and stringstream fixes in libstdc++. 28714 28715 * Bud Davis for work on the G77 and GNU Fortran compilers. 28716 28717 * Mo DeJong for GCJ and libgcj bug fixes. 28718 28719 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 28720 various bug fixes, and the M32C port. 28721 28722 * Arnaud Desitter for helping to debug GNU Fortran. 28723 28724 * Gabriel Dos Reis for contributions to G++, contributions and 28725 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 28726 including `valarray<>', `complex<>', maintaining the numerics 28727 library (including that pesky `<limits>' :-) and keeping 28728 up-to-date anything to do with numbers. 28729 28730 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 28731 ISO C99 support, CFG dumping support, etc., plus support of the 28732 C++ runtime libraries including for all kinds of C interface 28733 issues, contributing and maintaining `complex<>', sanity checking 28734 and disbursement, configuration architecture, libio maintenance, 28735 and early math work. 28736 28737 * Zdenek Dvorak for a new loop unroller and various fixes. 28738 28739 * Richard Earnshaw for his ongoing work with the ARM. 28740 28741 * David Edelsohn for his direction via the steering committee, 28742 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 28743 loop changes, doing the entire AIX port of libstdc++ with his bare 28744 hands, and for ensuring GCC properly keeps working on AIX. 28745 28746 * Kevin Ediger for the floating point formatting of num_put::do_put 28747 in libstdc++. 28748 28749 * Phil Edwards for libstdc++ work including configuration hackery, 28750 documentation maintainer, chief breaker of the web pages, the 28751 occasional iostream bug fix, and work on shared library symbol 28752 versioning. 28753 28754 * Paul Eggert for random hacking all over GCC. 28755 28756 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 28757 configuration support for locales and fstream-related fixes. 28758 28759 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 28760 iostreams. 28761 28762 * Christian Ehrhardt for dealing with bug reports. 28763 28764 * Ben Elliston for his work to move the Objective-C runtime into its 28765 own subdirectory and for his work on autoconf. 28766 28767 * Marc Espie for OpenBSD support. 28768 28769 * Doug Evans for much of the global optimization framework, arc, 28770 m32r, and SPARC work. 28771 28772 * Christopher Faylor for his work on the Cygwin port and for caring 28773 and feeding the gcc.gnu.org box and saving its users tons of spam. 28774 28775 * Fred Fish for BeOS support and Ada fixes. 28776 28777 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 28778 28779 * Peter Gerwinski for various bug fixes and the Pascal front end. 28780 28781 * Kaveh R. Ghazi for his direction via the steering committee, 28782 amazing work to make `-W -Wall -W* -Werror' useful, and 28783 continuously testing GCC on a plethora of platforms. Kaveh 28784 extends his gratitude to the CAIP Center at Rutgers University for 28785 providing him with computing resources to work on Free Software 28786 since the late 1980s. 28787 28788 * John Gilmore for a donation to the FSF earmarked improving GNU 28789 Java. 28790 28791 * Judy Goldberg for c++ contributions. 28792 28793 * Torbjorn Granlund for various fixes and the c-torture testsuite, 28794 multiply- and divide-by-constant optimization, improved long long 28795 support, improved leaf function register allocation, and his 28796 direction via the steering committee. 28797 28798 * Anthony Green for his `-Os' contributions and Java front end work. 28799 28800 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 28801 Java code. 28802 28803 * Michael K. Gschwind contributed the port to the PDP-11. 28804 28805 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 28806 the support for Dwarf symbolic debugging information, and much of 28807 the support for System V Release 4. He has also worked heavily on 28808 the Intel 386 and 860 support. 28809 28810 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 28811 GCSE. 28812 28813 * Bruno Haible for improvements in the runtime overhead for EH, new 28814 warnings and assorted bug fixes. 28815 28816 * Andrew Haley for his amazing Java compiler and library efforts. 28817 28818 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 28819 series 300. 28820 28821 * Michael Hayes for various thankless work he's done trying to get 28822 the c30/c40 ports functional. Lots of loop and unroll 28823 improvements and fixes. 28824 28825 * Dara Hazeghi for wading through myriads of target-specific bug 28826 reports. 28827 28828 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 28829 28830 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 28831 work, loop opts, and generally fixing lots of old problems we've 28832 ignored for years, flow rewrite and lots of further stuff, 28833 including reviewing tons of patches. 28834 28835 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 28836 various fixes. 28837 28838 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 28839 contributed the support for the Sony NEWS machine. 28840 28841 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 28842 various fixes. 28843 28844 * Katherine Holcomb for work on GNU Fortran. 28845 28846 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 28847 of testing and bug fixing, particularly of GCC configury code. 28848 28849 * Steve Holmgren for MachTen patches. 28850 28851 * Jan Hubicka for his x86 port improvements. 28852 28853 * Falk Hueffner for working on C and optimization bug reports. 28854 28855 * Bernardo Innocenti for his m68k work, including merging of 28856 ColdFire improvements and uClinux support. 28857 28858 * Christian Iseli for various bug fixes. 28859 28860 * Kamil Iskra for general m68k hacking. 28861 28862 * Lee Iverson for random fixes and MIPS testing. 28863 28864 * Andreas Jaeger for testing and benchmarking of GCC and various bug 28865 fixes. 28866 28867 * Jakub Jelinek for his SPARC work and sibling call optimizations as 28868 well as lots of bug fixes and test cases, and for improving the 28869 Java build system. 28870 28871 * Janis Johnson for ia64 testing and fixes, her quality improvement 28872 sidetracks, and web page maintenance. 28873 28874 * Kean Johnston for SCO OpenServer support and various fixes. 28875 28876 * Tim Josling for the sample language treelang based originally on 28877 Richard Kenner's "toy" language. 28878 28879 * Nicolai Josuttis for additional libstdc++ documentation. 28880 28881 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 28882 target. 28883 28884 * Steven G. Kargl for work on GNU Fortran. 28885 28886 * David Kashtan of SRI adapted GCC to VMS. 28887 28888 * Ryszard Kabatek for many, many libstdc++ bug fixes and 28889 optimizations of strings, especially member functions, and for 28890 auto_ptr fixes. 28891 28892 * Geoffrey Keating for his ongoing work to make the PPC work for 28893 GNU/Linux and his automatic regression tester. 28894 28895 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 28896 work in just about every part of libstdc++. 28897 28898 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 28899 MIL-STD-1750A. 28900 28901 * Richard Kenner of the New York University Ultracomputer Research 28902 Laboratory wrote the machine descriptions for the AMD 29000, the 28903 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 28904 support for instruction attributes. He also made changes to 28905 better support RISC processors including changes to common 28906 subexpression elimination, strength reduction, function calling 28907 sequence handling, and condition code support, in addition to 28908 generalizing the code for frame pointer elimination and delay slot 28909 scheduling. Richard Kenner was also the head maintainer of GCC 28910 for several years. 28911 28912 * Mumit Khan for various contributions to the Cygwin and Mingw32 28913 ports and maintaining binary releases for Microsoft Windows hosts, 28914 and for massive libstdc++ porting work to Cygwin/Mingw32. 28915 28916 * Robin Kirkham for cpu32 support. 28917 28918 * Mark Klein for PA improvements. 28919 28920 * Thomas Koenig for various bug fixes. 28921 28922 * Bruce Korb for the new and improved fixincludes code. 28923 28924 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 28925 effort. 28926 28927 * Charles LaBrec contributed the support for the Integrated Solutions 28928 68020 system. 28929 28930 * Asher Langton and Mike Kumbera for contributing Cray pointer 28931 support to GNU Fortran, and for other GNU Fortran improvements. 28932 28933 * Jeff Law for his direction via the steering committee, 28934 coordinating the entire egcs project and GCC 2.95, rolling out 28935 snapshots and releases, handling merges from GCC2, reviewing tons 28936 of patches that might have fallen through the cracks else, and 28937 random but extensive hacking. 28938 28939 * Marc Lehmann for his direction via the steering committee and 28940 helping with analysis and improvements of x86 performance. 28941 28942 * Victor Leikehman for work on GNU Fortran. 28943 28944 * Ted Lemon wrote parts of the RTL reader and printer. 28945 28946 * Kriang Lerdsuwanakij for C++ improvements including template as 28947 template parameter support, and many C++ fixes. 28948 28949 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 28950 and random work on the Java front end. 28951 28952 * Alain Lichnewsky ported GCC to the MIPS CPU. 28953 28954 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 28955 and patches. 28956 28957 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 28958 28959 * Weiwen Liu for testing and various bug fixes. 28960 28961 * Dave Love for his ongoing work with the Fortran front end and 28962 runtime libraries. 28963 28964 * Martin von Lo"wis for internal consistency checking infrastructure, 28965 various C++ improvements including namespace support, and tons of 28966 assistance with libstdc++/compiler merges. 28967 28968 * H.J. Lu for his previous contributions to the steering committee, 28969 many x86 bug reports, prototype patches, and keeping the GNU/Linux 28970 ports working. 28971 28972 * Greg McGary for random fixes and (someday) bounded pointers. 28973 28974 * Andrew MacLeod for his ongoing work in building a real EH system, 28975 various code generation improvements, work on the global 28976 optimizer, etc. 28977 28978 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 28979 hacking improvements to compile-time performance, overall 28980 knowledge and direction in the area of instruction scheduling, and 28981 design and implementation of the automaton based instruction 28982 scheduler. 28983 28984 * Bob Manson for his behind the scenes work on dejagnu. 28985 28986 * Philip Martin for lots of libstdc++ string and vector iterator 28987 fixes and improvements, and string clean up and testsuites. 28988 28989 * All of the Mauve project contributors, for Java test code. 28990 28991 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 28992 28993 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 28994 28995 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 28996 powerpc, haifa, ECOFF debug support, and other assorted hacking. 28997 28998 * Jason Merrill for his direction via the steering committee and 28999 leading the G++ effort. 29000 29001 * Martin Michlmayr for testing GCC on several architectures using the 29002 entire Debian archive. 29003 29004 * David Miller for his direction via the steering committee, lots of 29005 SPARC work, improvements in jump.c and interfacing with the Linux 29006 kernel developers. 29007 29008 * Gary Miller ported GCC to Charles River Data Systems machines. 29009 29010 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 29011 the entire libstdc++ testsuite namespace-compatible. 29012 29013 * Mark Mitchell for his direction via the steering committee, 29014 mountains of C++ work, load/store hoisting out of loops, alias 29015 analysis improvements, ISO C `restrict' support, and serving as 29016 release manager for GCC 3.x. 29017 29018 * Alan Modra for various GNU/Linux bits and testing. 29019 29020 * Toon Moene for his direction via the steering committee, Fortran 29021 maintenance, and his ongoing work to make us make Fortran run fast. 29022 29023 * Jason Molenda for major help in the care and feeding of all the 29024 services on the gcc.gnu.org (formerly egcs.cygnus.com) 29025 machine--mail, web services, ftp services, etc etc. Doing all 29026 this work on scrap paper and the backs of envelopes would have 29027 been... difficult. 29028 29029 * Catherine Moore for fixing various ugly problems we have sent her 29030 way, including the haifa bug which was killing the Alpha & PowerPC 29031 Linux kernels. 29032 29033 * Mike Moreton for his various Java patches. 29034 29035 * David Mosberger-Tang for various Alpha improvements, and for the 29036 initial IA-64 port. 29037 29038 * Stephen Moshier contributed the floating point emulator that 29039 assists in cross-compilation and permits support for floating 29040 point numbers wider than 64 bits and for ISO C99 support. 29041 29042 * Bill Moyer for his behind the scenes work on various issues. 29043 29044 * Philippe De Muyter for his work on the m68k port. 29045 29046 * Joseph S. Myers for his work on the PDP-11 port, format checking 29047 and ISO C99 support, and continuous emphasis on (and contributions 29048 to) documentation. 29049 29050 * Nathan Myers for his work on libstdc++-v3: architecture and 29051 authorship through the first three snapshots, including 29052 implementation of locale infrastructure, string, shadow C headers, 29053 and the initial project documentation (DESIGN, CHECKLIST, and so 29054 forth). Later, more work on MT-safe string and shadow headers. 29055 29056 * Felix Natter for documentation on porting libstdc++. 29057 29058 * Nathanael Nerode for cleaning up the configuration/build process. 29059 29060 * NeXT, Inc. donated the front end that supports the Objective-C 29061 language. 29062 29063 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 29064 the search engine setup, various documentation fixes and other 29065 small fixes. 29066 29067 * Geoff Noer for his work on getting cygwin native builds working. 29068 29069 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 29070 tracking web pages and assorted fixes. 29071 29072 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 29073 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 29074 related infrastructure improvements. 29075 29076 * Alexandre Oliva for various build infrastructure improvements, 29077 scripts and amazing testing work, including keeping libtool issues 29078 sane and happy. 29079 29080 * Stefan Olsson for work on mt_alloc. 29081 29082 * Melissa O'Neill for various NeXT fixes. 29083 29084 * Rainer Orth for random MIPS work, including improvements to GCC's 29085 o32 ABI support, improvements to dejagnu's MIPS support, Java 29086 configuration clean-ups and porting work, etc. 29087 29088 * Hartmut Penner for work on the s390 port. 29089 29090 * Paul Petersen wrote the machine description for the Alliant FX/8. 29091 29092 * Alexandre Petit-Bianco for implementing much of the Java compiler 29093 and continued Java maintainership. 29094 29095 * Matthias Pfaller for major improvements to the NS32k port. 29096 29097 * Gerald Pfeifer for his direction via the steering committee, 29098 pointing out lots of problems we need to solve, maintenance of the 29099 web pages, and taking care of documentation maintenance in general. 29100 29101 * Andrew Pinski for processing bug reports by the dozen. 29102 29103 * Ovidiu Predescu for his work on the Objective-C front end and 29104 runtime libraries. 29105 29106 * Jerry Quinn for major performance improvements in C++ formatted 29107 I/O. 29108 29109 * Ken Raeburn for various improvements to checker, MIPS ports and 29110 various cleanups in the compiler. 29111 29112 * Rolf W. Rasmussen for hacking on AWT. 29113 29114 * David Reese of Sun Microsystems contributed to the Solaris on 29115 PowerPC port. 29116 29117 * Volker Reichelt for keeping up with the problem reports. 29118 29119 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 29120 hacking. 29121 29122 * Loren J. Rittle for improvements to libstdc++-v3 including the 29123 FreeBSD port, threading fixes, thread-related configury changes, 29124 critical threading documentation, and solutions to really tricky 29125 I/O problems, as well as keeping GCC properly working on FreeBSD 29126 and continuous testing. 29127 29128 * Craig Rodrigues for processing tons of bug reports. 29129 29130 * Ola Ro"nnerup for work on mt_alloc. 29131 29132 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 29133 29134 * David Ronis inspired and encouraged Craig to rewrite the G77 29135 documentation in texinfo format by contributing a first pass at a 29136 translation of the old `g77-0.5.16/f/DOC' file. 29137 29138 * Ken Rose for fixes to GCC's delay slot filling code. 29139 29140 * Paul Rubin wrote most of the preprocessor. 29141 29142 * Pe'tur Runo'lfsson for major performance improvements in C++ 29143 formatted I/O and large file support in C++ filebuf. 29144 29145 * Chip Salzenberg for libstdc++ patches and improvements to locales, 29146 traits, Makefiles, libio, libtool hackery, and "long long" support. 29147 29148 * Juha Sarlin for improvements to the H8 code generator. 29149 29150 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 29151 300. 29152 29153 * Roger Sayle for improvements to constant folding and GCC's RTL 29154 optimizers as well as for fixing numerous bugs. 29155 29156 * Bradley Schatz for his work on the GCJ FAQ. 29157 29158 * Peter Schauer wrote the code to allow debugging to work on the 29159 Alpha. 29160 29161 * William Schelter did most of the work on the Intel 80386 support. 29162 29163 * Tobias Schlu"ter for work on GNU Fortran. 29164 29165 * Bernd Schmidt for various code generation improvements and major 29166 work in the reload pass as well a serving as release manager for 29167 GCC 2.95.3. 29168 29169 * Peter Schmid for constant testing of libstdc++--especially 29170 application testing, going above and beyond what was requested for 29171 the release criteria--and libstdc++ header file tweaks. 29172 29173 * Jason Schroeder for jcf-dump patches. 29174 29175 * Andreas Schwab for his work on the m68k port. 29176 29177 * Lars Segerlund for work on GNU Fortran. 29178 29179 * Joel Sherrill for his direction via the steering committee, RTEMS 29180 contributions and RTEMS testing. 29181 29182 * Nathan Sidwell for many C++ fixes/improvements. 29183 29184 * Jeffrey Siegal for helping RMS with the original design of GCC, 29185 some code which handles the parse tree and RTL data structures, 29186 constant folding and help with the original VAX & m68k ports. 29187 29188 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 29189 from the LWG (thereby keeping GCC in line with updates from the 29190 ISO). 29191 29192 * Franz Sirl for his ongoing work with making the PPC port stable 29193 for GNU/Linux. 29194 29195 * Andrey Slepuhin for assorted AIX hacking. 29196 29197 * Christopher Smith did the port for Convex machines. 29198 29199 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 29200 29201 * Randy Smith finished the Sun FPA support. 29202 29203 * Scott Snyder for queue, iterator, istream, and string fixes and 29204 libstdc++ testsuite entries. Also for providing the patch to G77 29205 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 29206 `LOGICAL*1'. 29207 29208 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 29209 29210 * Richard Stallman, for writing the original GCC and launching the 29211 GNU project. 29212 29213 * Jan Stein of the Chalmers Computer Society provided support for 29214 Genix, as well as part of the 32000 machine description. 29215 29216 * Nigel Stephens for various mips16 related fixes/improvements. 29217 29218 * Jonathan Stone wrote the machine description for the Pyramid 29219 computer. 29220 29221 * Graham Stott for various infrastructure improvements. 29222 29223 * John Stracke for his Java HTTP protocol fixes. 29224 29225 * Mike Stump for his Elxsi port, G++ contributions over the years 29226 and more recently his vxworks contributions 29227 29228 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 29229 29230 * Shigeya Suzuki for this fixes for the bsdi platforms. 29231 29232 * Ian Lance Taylor for his mips16 work, general configury hacking, 29233 fixincludes, etc. 29234 29235 * Holger Teutsch provided the support for the Clipper CPU. 29236 29237 * Gary Thomas for his ongoing work to make the PPC work for 29238 GNU/Linux. 29239 29240 * Philipp Thomas for random bug fixes throughout the compiler 29241 29242 * Jason Thorpe for thread support in libstdc++ on NetBSD. 29243 29244 * Kresten Krab Thorup wrote the run time support for the Objective-C 29245 language and the fantastic Java bytecode interpreter. 29246 29247 * Michael Tiemann for random bug fixes, the first instruction 29248 scheduler, initial C++ support, function integration, NS32k, SPARC 29249 and M88k machine description work, delay slot scheduling. 29250 29251 * Andreas Tobler for his work porting libgcj to Darwin. 29252 29253 * Teemu Torma for thread safe exception handling support. 29254 29255 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 29256 definitions, and of the VAX machine description. 29257 29258 * Tom Tromey for internationalization support and for his many Java 29259 contributions and libgcj maintainership. 29260 29261 * Lassi Tuura for improvements to config.guess to determine HP 29262 processor types. 29263 29264 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 29265 29266 * Andy Vaught for the design and initial implementation of the GNU 29267 Fortran front end. 29268 29269 * Brent Verner for work with the libstdc++ cshadow files and their 29270 associated configure steps. 29271 29272 * Todd Vierling for contributions for NetBSD ports. 29273 29274 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 29275 guidance. 29276 29277 * Dean Wakerley for converting the install documentation from HTML 29278 to texinfo in time for GCC 3.0. 29279 29280 * Krister Walfridsson for random bug fixes. 29281 29282 * Feng Wang for contributions to GNU Fortran. 29283 29284 * Stephen M. Webb for time and effort on making libstdc++ shadow 29285 files work with the tricky Solaris 8+ headers, and for pushing the 29286 build-time header tree. 29287 29288 * John Wehle for various improvements for the x86 code generator, 29289 related infrastructure improvements to help x86 code generation, 29290 value range propagation and other work, WE32k port. 29291 29292 * Ulrich Weigand for work on the s390 port. 29293 29294 * Zack Weinberg for major work on cpplib and various other bug fixes. 29295 29296 * Matt Welsh for help with Linux Threads support in GCJ. 29297 29298 * Urban Widmark for help fixing java.io. 29299 29300 * Mark Wielaard for new Java library code and his work integrating 29301 with Classpath. 29302 29303 * Dale Wiles helped port GCC to the Tahoe. 29304 29305 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 29306 29307 * Jim Wilson for his direction via the steering committee, tackling 29308 hard problems in various places that nobody else wanted to work 29309 on, strength reduction and other loop optimizations. 29310 29311 * Paul Woegerer and Tal Agmon for the CRX port. 29312 29313 * Carlo Wood for various fixes. 29314 29315 * Tom Wood for work on the m88k port. 29316 29317 * Canqun Yang for work on GNU Fortran. 29318 29319 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 29320 description for the Tron architecture (specifically, the Gmicro). 29321 29322 * Kevin Zachmann helped port GCC to the Tahoe. 29323 29324 * Ayal Zaks for Swing Modulo Scheduling (SMS). 29325 29326 * Xiaoqiang Zhang for work on GNU Fortran. 29327 29328 * Gilles Zunino for help porting Java to Irix. 29329 29330 29331 The following people are recognized for their contributions to GNAT, 29332the Ada front end of GCC: 29333 * Bernard Banner 29334 29335 * Romain Berrendonner 29336 29337 * Geert Bosch 29338 29339 * Emmanuel Briot 29340 29341 * Joel Brobecker 29342 29343 * Ben Brosgol 29344 29345 * Vincent Celier 29346 29347 * Arnaud Charlet 29348 29349 * Chien Chieng 29350 29351 * Cyrille Comar 29352 29353 * Cyrille Crozes 29354 29355 * Robert Dewar 29356 29357 * Gary Dismukes 29358 29359 * Robert Duff 29360 29361 * Ed Falis 29362 29363 * Ramon Fernandez 29364 29365 * Sam Figueroa 29366 29367 * Vasiliy Fofanov 29368 29369 * Michael Friess 29370 29371 * Franco Gasperoni 29372 29373 * Ted Giering 29374 29375 * Matthew Gingell 29376 29377 * Laurent Guerby 29378 29379 * Jerome Guitton 29380 29381 * Olivier Hainque 29382 29383 * Jerome Hugues 29384 29385 * Hristian Kirtchev 29386 29387 * Jerome Lambourg 29388 29389 * Bruno Leclerc 29390 29391 * Albert Lee 29392 29393 * Sean McNeil 29394 29395 * Javier Miranda 29396 29397 * Laurent Nana 29398 29399 * Pascal Obry 29400 29401 * Dong-Ik Oh 29402 29403 * Laurent Pautet 29404 29405 * Brett Porter 29406 29407 * Thomas Quinot 29408 29409 * Nicolas Roche 29410 29411 * Pat Rogers 29412 29413 * Jose Ruiz 29414 29415 * Douglas Rupp 29416 29417 * Sergey Rybin 29418 29419 * Gail Schenker 29420 29421 * Ed Schonberg 29422 29423 * Nicolas Setton 29424 29425 * Samuel Tardieu 29426 29427 29428 The following people are recognized for their contributions of new 29429features, bug reports, testing and integration of classpath/libgcj for 29430GCC version 4.1: 29431 * Lillian Angel for `JTree' implementation and lots Free Swing 29432 additions and bugfixes. 29433 29434 * Wolfgang Baer for `GapContent' bugfixes. 29435 29436 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 29437 event fixes, lots of Free Swing work including `JTable' editing. 29438 29439 * Stuart Ballard for RMI constant fixes. 29440 29441 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 29442 29443 * Gary Benson for `MessageFormat' fixes. 29444 29445 * Daniel Bonniot for `Serialization' fixes. 29446 29447 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 29448 and `DOM xml:id' support. 29449 29450 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 29451 29452 * Archie Cobbs for build fixes, VM interface updates, 29453 `URLClassLoader' updates. 29454 29455 * Kelley Cook for build fixes. 29456 29457 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 29458 29459 * David Daney for `BitSet' bugfixes, `HttpURLConnection' rewrite and 29460 improvements. 29461 29462 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 29463 2D support. Lots of imageio framework additions, lots of AWT and 29464 Free Swing bugfixes. 29465 29466 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 29467 fixes, better `Proxy' support, bugfixes and IKVM integration. 29468 29469 * Santiago Gala for `AccessControlContext' fixes. 29470 29471 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 29472 improvements. 29473 29474 * David Gilbert for `basic' and `metal' icon and plaf support and 29475 lots of documenting, Lots of Free Swing and metal theme additions. 29476 `MetalIconFactory' implementation. 29477 29478 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 29479 29480 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 29481 build speedups. 29482 29483 * Kim Ho for `JFileChooser' implementation. 29484 29485 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 29486 updates, `Serialization' fixes, `Properties' XML support and 29487 generic branch work, VMIntegration guide update. 29488 29489 * Bastiaan Huisman for `TimeZone' bugfixing. 29490 29491 * Andreas Jaeger for mprec updates. 29492 29493 * Paul Jenner for better `-Werror' support. 29494 29495 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 29496 29497 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 29498 bugfixes all over. Lots of Free Swing work including styled text. 29499 29500 * Simon Kitching for `String' cleanups and optimization suggestions. 29501 29502 * Michael Koch for configuration fixes, `Locale' updates, bug and 29503 build fixes. 29504 29505 * Guilhem Lavaux for configuration, thread and channel fixes and 29506 Kaffe integration. JCL native `Pointer' updates. Logger bugfixes. 29507 29508 * David Lichteblau for JCL support library global/local reference 29509 cleanups. 29510 29511 * Aaron Luchko for JDWP updates and documentation fixes. 29512 29513 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 29514 features. 29515 29516 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 29517 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 29518 and implementing the Qt4 peers. 29519 29520 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 29521 `SystemLogger' and `FileHandler' rotate implementations, NIO 29522 `FileChannel.map' support, security and policy updates. 29523 29524 * Bryce McKinlay for RMI work. 29525 29526 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 29527 testing and documenting. 29528 29529 * Kalle Olavi Niemitalo for build fixes. 29530 29531 * Rainer Orth for build fixes. 29532 29533 * Andrew Overholt for `File' locking fixes. 29534 29535 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 29536 29537 * Olga Rodimina for `MenuSelectionManager' implementation. 29538 29539 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 29540 29541 * Julian Scheid for documentation updates and gjdoc support. 29542 29543 * Christian Schlichtherle for zip fixes and cleanups. 29544 29545 * Robert Schuster for documentation updates and beans fixes, 29546 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 29547 and URL, AWT and Free Swing bugfixes. 29548 29549 * Keith Seitz for lots of JDWP work. 29550 29551 * Christian Thalinger for 64-bit cleanups, Configuration and VM 29552 interface fixes and `CACAO' integration, `fdlibm' updates. 29553 29554 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 29555 29556 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 29557 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 29558 29559 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 29560 integration. `Qt4' build infrastructure, `SHA1PRNG' and 29561 `GdkPixbugDecoder' updates. 29562 29563 * Tom Tromey for Eclipse integration, generics work, lots of bugfixes 29564 and gcj integration including coordinating The Big Merge. 29565 29566 * Mark Wielaard for bugfixes, packaging and release management, 29567 `Clipboard' implementation, system call interrupts and network 29568 timeouts and `GdkPixpufDecoder' fixes. 29569 29570 29571 In addition to the above, all of which also contributed time and 29572energy in testing GCC, we would like to thank the following for their 29573contributions to testing: 29574 29575 * Michael Abd-El-Malek 29576 29577 * Thomas Arend 29578 29579 * Bonzo Armstrong 29580 29581 * Steven Ashe 29582 29583 * Chris Baldwin 29584 29585 * David Billinghurst 29586 29587 * Jim Blandy 29588 29589 * Stephane Bortzmeyer 29590 29591 * Horst von Brand 29592 29593 * Frank Braun 29594 29595 * Rodney Brown 29596 29597 * Sidney Cadot 29598 29599 * Bradford Castalia 29600 29601 * Jonathan Corbet 29602 29603 * Ralph Doncaster 29604 29605 * Richard Emberson 29606 29607 * Levente Farkas 29608 29609 * Graham Fawcett 29610 29611 * Mark Fernyhough 29612 29613 * Robert A. French 29614 29615 * Jo"rgen Freyh 29616 29617 * Mark K. Gardner 29618 29619 * Charles-Antoine Gauthier 29620 29621 * Yung Shing Gene 29622 29623 * David Gilbert 29624 29625 * Simon Gornall 29626 29627 * Fred Gray 29628 29629 * John Griffin 29630 29631 * Patrik Hagglund 29632 29633 * Phil Hargett 29634 29635 * Amancio Hasty 29636 29637 * Takafumi Hayashi 29638 29639 * Bryan W. Headley 29640 29641 * Kevin B. Hendricks 29642 29643 * Joep Jansen 29644 29645 * Christian Joensson 29646 29647 * Michel Kern 29648 29649 * David Kidd 29650 29651 * Tobias Kuipers 29652 29653 * Anand Krishnaswamy 29654 29655 * A. O. V. Le Blanc 29656 29657 * llewelly 29658 29659 * Damon Love 29660 29661 * Brad Lucier 29662 29663 * Matthias Klose 29664 29665 * Martin Knoblauch 29666 29667 * Rick Lutowski 29668 29669 * Jesse Macnish 29670 29671 * Stefan Morrell 29672 29673 * Anon A. Mous 29674 29675 * Matthias Mueller 29676 29677 * Pekka Nikander 29678 29679 * Rick Niles 29680 29681 * Jon Olson 29682 29683 * Magnus Persson 29684 29685 * Chris Pollard 29686 29687 * Richard Polton 29688 29689 * Derk Reefman 29690 29691 * David Rees 29692 29693 * Paul Reilly 29694 29695 * Tom Reilly 29696 29697 * Torsten Rueger 29698 29699 * Danny Sadinoff 29700 29701 * Marc Schifer 29702 29703 * Erik Schnetter 29704 29705 * Wayne K. Schroll 29706 29707 * David Schuler 29708 29709 * Vin Shelton 29710 29711 * Tim Souder 29712 29713 * Adam Sulmicki 29714 29715 * Bill Thorson 29716 29717 * George Talbot 29718 29719 * Pedro A. M. Vazquez 29720 29721 * Gregory Warnes 29722 29723 * Ian Watson 29724 29725 * David E. Young 29726 29727 * And many others 29728 29729 And finally we'd like to thank everyone who uses the compiler, submits 29730bug reports and generally reminds us why we're doing this work in the 29731first place. 29732 29733 29734File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 29735 29736Option Index 29737************ 29738 29739GCC's command line options are indexed here without any initial `-' or 29740`--'. Where an option has both positive and negative forms (such as 29741`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 29742indexed under the most appropriate form; it may sometimes be useful to 29743look up both forms. 29744 29745[index] 29746* Menu: 29747 29748* ###: Overall Options. (line 192) 29749* A: Preprocessor Options. 29750 (line 510) 29751* all_load: Darwin Options. (line 103) 29752* allowable_client: Darwin Options. (line 190) 29753* ansi <1>: Non-bugs. (line 107) 29754* ansi <2>: Other Builtins. (line 22) 29755* ansi <3>: Preprocessor Options. 29756 (line 324) 29757* ansi <4>: C Dialect Options. (line 11) 29758* ansi: Standards. (line 13) 29759* arch_errors_fatal: Darwin Options. (line 107) 29760* aux-info: C Dialect Options. (line 119) 29761* b: Target Options. (line 13) 29762* B: Directory Options. (line 41) 29763* bcopy-builtin: PDP-11 Options. (line 32) 29764* bind_at_load: Darwin Options. (line 111) 29765* bundle: Darwin Options. (line 116) 29766* bundle_loader: Darwin Options. (line 120) 29767* c: Link Options. (line 20) 29768* C: Preprocessor Options. 29769 (line 557) 29770* c: Overall Options. (line 147) 29771* client_name: Darwin Options. (line 190) 29772* combine: Overall Options. (line 203) 29773* compatibility_version: Darwin Options. (line 190) 29774* coverage: Debugging Options. (line 169) 29775* crossjumping: Optimize Options. (line 435) 29776* current_version: Darwin Options. (line 190) 29777* D: Preprocessor Options. 29778 (line 33) 29779* d: Debugging Options. (line 221) 29780* da: Debugging Options. (line 387) 29781* dA: Debugging Options. (line 234) 29782* dB: Debugging Options. (line 239) 29783* dC: Debugging Options. (line 249) 29784* dc: Debugging Options. (line 243) 29785* dD <1>: Preprocessor Options. 29786 (line 538) 29787* dD: Debugging Options. (line 263) 29788* dd: Debugging Options. (line 257) 29789* dE: Debugging Options. (line 268) 29790* dead_strip: Darwin Options. (line 190) 29791* dependency-file: Darwin Options. (line 190) 29792* df: Debugging Options. (line 273) 29793* dG: Debugging Options. (line 285) 29794* dg: Debugging Options. (line 280) 29795* dH: Debugging Options. (line 390) 29796* dh: Debugging Options. (line 292) 29797* dI: Preprocessor Options. 29798 (line 547) 29799* di: Debugging Options. (line 296) 29800* dj: Debugging Options. (line 300) 29801* dk: Debugging Options. (line 304) 29802* dL: Debugging Options. (line 313) 29803* dl: Debugging Options. (line 309) 29804* dM: Preprocessor Options. 29805 (line 526) 29806* dm: Debugging Options. (line 393) 29807* dM: Debugging Options. (line 324) 29808* dm: Debugging Options. (line 320) 29809* dN <1>: Preprocessor Options. 29810 (line 544) 29811* dN: Debugging Options. (line 333) 29812* dn: Debugging Options. (line 329) 29813* do: Debugging Options. (line 337) 29814* dP: Debugging Options. (line 402) 29815* dp: Debugging Options. (line 397) 29816* dR: Debugging Options. (line 345) 29817* dr: Debugging Options. (line 341) 29818* dS: Debugging Options. (line 354) 29819* ds: Debugging Options. (line 349) 29820* dT: Debugging Options. (line 363) 29821* dt: Debugging Options. (line 358) 29822* dumpmachine: Debugging Options. (line 770) 29823* dumpspecs: Debugging Options. (line 778) 29824* dumpversion: Debugging Options. (line 774) 29825* dv: Debugging Options. (line 406) 29826* dV: Debugging Options. (line 368) 29827* dw: Debugging Options. (line 375) 29828* dx: Debugging Options. (line 411) 29829* dy: Debugging Options. (line 415) 29830* dylib_file: Darwin Options. (line 190) 29831* dylinker_install_name: Darwin Options. (line 190) 29832* dynamic: Darwin Options. (line 190) 29833* dynamiclib: Darwin Options. (line 124) 29834* dZ: Debugging Options. (line 383) 29835* dz: Debugging Options. (line 379) 29836* E <1>: Link Options. (line 20) 29837* E: Overall Options. (line 168) 29838* EB <1>: MIPS Options. (line 7) 29839* EB: ARC Options. (line 12) 29840* EL <1>: MIPS Options. (line 10) 29841* EL: ARC Options. (line 9) 29842* exported_symbols_list: Darwin Options. (line 190) 29843* F: Darwin Options. (line 32) 29844* fabi-version: C++ Dialect Options. 29845 (line 20) 29846* falign-functions: Optimize Options. (line 902) 29847* falign-jumps: Optimize Options. (line 952) 29848* falign-labels: Optimize Options. (line 920) 29849* falign-loops: Optimize Options. (line 938) 29850* fargument-alias: Code Gen Options. (line 336) 29851* fargument-noalias: Code Gen Options. (line 336) 29852* fargument-noalias-anything: Code Gen Options. (line 336) 29853* fargument-noalias-global: Code Gen Options. (line 336) 29854* fasynchronous-unwind-tables: Code Gen Options. (line 64) 29855* fbounds-check <1>: Code Gen Options. (line 15) 29856* fbounds-check: Optimize Options. (line 326) 29857* fbranch-probabilities: Optimize Options. (line 1200) 29858* fbranch-target-load-optimize: Optimize Options. (line 1308) 29859* fbranch-target-load-optimize2: Optimize Options. (line 1314) 29860* fbtr-bb-exclusive: Optimize Options. (line 1318) 29861* fcall-saved <1>: Interoperation. (line 150) 29862* fcall-saved: Code Gen Options. (line 237) 29863* fcall-used: Code Gen Options. (line 223) 29864* fcaller-saves: Optimize Options. (line 579) 29865* fcheck-new: C++ Dialect Options. 29866 (line 34) 29867* fcommon: Variable Attributes. 29868 (line 92) 29869* fcond-mismatch: C Dialect Options. (line 235) 29870* fconserve-space: C++ Dialect Options. 29871 (line 44) 29872* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 29873 (line 30) 29874* fcse-follow-jumps: Optimize Options. (line 363) 29875* fcse-skip-blocks: Optimize Options. (line 372) 29876* fcx-limited-range: Optimize Options. (line 1186) 29877* fdata-sections: Optimize Options. (line 1289) 29878* fdelayed-branch: Optimize Options. (line 488) 29879* fdelete-null-pointer-checks: Optimize Options. (line 457) 29880* fdiagnostics-show-location: Language Independent Options. 29881 (line 21) 29882* fdiagnostics-show-option: Language Independent Options. 29883 (line 36) 29884* fdollars-in-identifiers <1>: Interoperation. (line 146) 29885* fdollars-in-identifiers: Preprocessor Options. 29886 (line 440) 29887* fdump-class-hierarchy: Debugging Options. (line 441) 29888* fdump-ipa: Debugging Options. (line 448) 29889* fdump-noaddr: Debugging Options. (line 418) 29890* fdump-rtl-all: Debugging Options. (line 387) 29891* fdump-rtl-bbro: Debugging Options. (line 239) 29892* fdump-rtl-btl: Debugging Options. (line 257) 29893* fdump-rtl-bypass: Debugging Options. (line 285) 29894* fdump-rtl-ce1: Debugging Options. (line 249) 29895* fdump-rtl-ce2: Debugging Options. (line 249) 29896* fdump-rtl-ce3: Debugging Options. (line 268) 29897* fdump-rtl-cfg: Debugging Options. (line 273) 29898* fdump-rtl-combine: Debugging Options. (line 243) 29899* fdump-rtl-cse: Debugging Options. (line 349) 29900* fdump-rtl-cse2: Debugging Options. (line 358) 29901* fdump-rtl-dbr: Debugging Options. (line 257) 29902* fdump-rtl-eh: Debugging Options. (line 292) 29903* fdump-rtl-expand: Debugging Options. (line 341) 29904* fdump-rtl-flow2: Debugging Options. (line 375) 29905* fdump-rtl-gcse: Debugging Options. (line 285) 29906* fdump-rtl-greg: Debugging Options. (line 280) 29907* fdump-rtl-jump: Debugging Options. (line 300) 29908* fdump-rtl-life: Debugging Options. (line 273) 29909* fdump-rtl-loop2: Debugging Options. (line 313) 29910* fdump-rtl-lreg: Debugging Options. (line 309) 29911* fdump-rtl-mach: Debugging Options. (line 324) 29912* fdump-rtl-peephole2: Debugging Options. (line 379) 29913* fdump-rtl-postreload: Debugging Options. (line 337) 29914* fdump-rtl-regmove: Debugging Options. (line 333) 29915* fdump-rtl-rnreg: Debugging Options. (line 329) 29916* fdump-rtl-sched: Debugging Options. (line 354) 29917* fdump-rtl-sched2: Debugging Options. (line 345) 29918* fdump-rtl-sibling: Debugging Options. (line 296) 29919* fdump-rtl-sms: Debugging Options. (line 320) 29920* fdump-rtl-stack: Debugging Options. (line 304) 29921* fdump-rtl-tracer: Debugging Options. (line 363) 29922* fdump-rtl-vartrack: Debugging Options. (line 368) 29923* fdump-rtl-vpt: Debugging Options. (line 368) 29924* fdump-rtl-web: Debugging Options. (line 383) 29925* fdump-translation-unit: Debugging Options. (line 433) 29926* fdump-tree: Debugging Options. (line 463) 29927* fdump-tree-alias: Debugging Options. (line 551) 29928* fdump-tree-all: Debugging Options. (line 636) 29929* fdump-tree-ccp: Debugging Options. (line 555) 29930* fdump-tree-cfg: Debugging Options. (line 526) 29931* fdump-tree-ch: Debugging Options. (line 538) 29932* fdump-tree-copyprop: Debugging Options. (line 571) 29933* fdump-tree-copyrename: Debugging Options. (line 617) 29934* fdump-tree-dce: Debugging Options. (line 579) 29935* fdump-tree-dom: Debugging Options. (line 597) 29936* fdump-tree-dse: Debugging Options. (line 602) 29937* fdump-tree-forwprop: Debugging Options. (line 612) 29938* fdump-tree-fre: Debugging Options. (line 567) 29939* fdump-tree-gimple: Debugging Options. (line 521) 29940* fdump-tree-mudflap: Debugging Options. (line 583) 29941* fdump-tree-nrv: Debugging Options. (line 622) 29942* fdump-tree-phiopt: Debugging Options. (line 607) 29943* fdump-tree-pre: Debugging Options. (line 563) 29944* fdump-tree-salias: Debugging Options. (line 546) 29945* fdump-tree-sink: Debugging Options. (line 593) 29946* fdump-tree-sra: Debugging Options. (line 588) 29947* fdump-tree-ssa: Debugging Options. (line 542) 29948* fdump-tree-store_copyprop: Debugging Options. (line 575) 29949* fdump-tree-storeccp: Debugging Options. (line 559) 29950* fdump-tree-vcg: Debugging Options. (line 530) 29951* fdump-tree-vect: Debugging Options. (line 627) 29952* fdump-tree-vrp: Debugging Options. (line 632) 29953* fdump-unnumbered: Debugging Options. (line 425) 29954* fearly-inlining: Optimize Options. (line 204) 29955* feliminate-dwarf2-dups: Debugging Options. (line 125) 29956* feliminate-unused-debug-symbols: Debugging Options. (line 52) 29957* feliminate-unused-debug-types: Debugging Options. (line 782) 29958* fexceptions: Code Gen Options. (line 34) 29959* fexec-charset: Preprocessor Options. 29960 (line 467) 29961* fexpensive-optimizations: Optimize Options. (line 470) 29962* fextended-identifiers: Preprocessor Options. 29963 (line 443) 29964* ffast-math: Optimize Options. (line 1070) 29965* ffinite-math-only: Optimize Options. (line 1114) 29966* ffix-and-continue: Darwin Options. (line 97) 29967* ffixed: Code Gen Options. (line 211) 29968* ffloat-store <1>: Disappointments. (line 77) 29969* ffloat-store: Optimize Options. (line 1056) 29970* ffor-scope: C++ Dialect Options. 29971 (line 86) 29972* fforce-addr: Optimize Options. (line 154) 29973* fforce-mem: Optimize Options. (line 146) 29974* ffreestanding <1>: Function Attributes. 29975 (line 314) 29976* ffreestanding <2>: Warning Options. (line 94) 29977* ffreestanding <3>: C Dialect Options. (line 190) 29978* ffreestanding: Standards. (line 81) 29979* ffriend-injection: C++ Dialect Options. 29980 (line 56) 29981* ffunction-sections: Optimize Options. (line 1289) 29982* fgcse: Optimize Options. (line 386) 29983* fgcse-after-reload: Optimize Options. (line 422) 29984* fgcse-las: Optimize Options. (line 415) 29985* fgcse-lm: Optimize Options. (line 397) 29986* fgcse-sm: Optimize Options. (line 406) 29987* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 29988 (line 39) 29989* fgnu89-inline: C Dialect Options. (line 98) 29990* fhosted: C Dialect Options. (line 183) 29991* filelist: Darwin Options. (line 190) 29992* findirect-data: Darwin Options. (line 97) 29993* finhibit-size-directive: Code Gen Options. (line 147) 29994* finline-functions: Optimize Options. (line 185) 29995* finline-functions-called-once: Optimize Options. (line 196) 29996* finline-limit: Optimize Options. (line 214) 29997* finput-charset: Preprocessor Options. 29998 (line 480) 29999* finstrument-functions <1>: Function Attributes. 30000 (line 508) 30001* finstrument-functions: Code Gen Options. (line 267) 30002* fkeep-inline-functions <1>: Inline. (line 58) 30003* fkeep-inline-functions: Optimize Options. (line 252) 30004* fkeep-static-consts: Optimize Options. (line 259) 30005* flat_namespace: Darwin Options. (line 190) 30006* fleading-underscore: Code Gen Options. (line 353) 30007* fmem-report: Debugging Options. (line 150) 30008* fmessage-length: Language Independent Options. 30009 (line 15) 30010* fmodulo-sched: Optimize Options. (line 288) 30011* fmove-loop-invariants: Optimize Options. (line 1279) 30012* fms-extensions <1>: Unnamed Fields. (line 37) 30013* fms-extensions <2>: C++ Dialect Options. 30014 (line 121) 30015* fms-extensions: C Dialect Options. (line 206) 30016* fmudflap: Optimize Options. (line 333) 30017* fmudflapir: Optimize Options. (line 333) 30018* fmudflapth: Optimize Options. (line 333) 30019* fnext-runtime: Objective-C and Objective-C++ Dialect Options. 30020 (line 43) 30021* fno-access-control: C++ Dialect Options. 30022 (line 30) 30023* fno-asm: C Dialect Options. (line 135) 30024* fno-branch-count-reg: Optimize Options. (line 293) 30025* fno-builtin <1>: Other Builtins. (line 14) 30026* fno-builtin <2>: Function Attributes. 30027 (line 314) 30028* fno-builtin <3>: Warning Options. (line 94) 30029* fno-builtin: C Dialect Options. (line 149) 30030* fno-common <1>: Variable Attributes. 30031 (line 92) 30032* fno-common: Code Gen Options. (line 135) 30033* fno-cprop-registers: Optimize Options. (line 1028) 30034* fno-cx-limited-range: Optimize Options. (line 1186) 30035* fno-default-inline <1>: Inline. (line 53) 30036* fno-default-inline <2>: Optimize Options. (line 131) 30037* fno-default-inline: C++ Dialect Options. 30038 (line 233) 30039* fno-defer-pop: Optimize Options. (line 138) 30040* fno-elide-constructors: C++ Dialect Options. 30041 (line 69) 30042* fno-enforce-eh-specs: C++ Dialect Options. 30043 (line 75) 30044* fno-for-scope: C++ Dialect Options. 30045 (line 86) 30046* fno-function-cse: Optimize Options. (line 303) 30047* fno-gnu-keywords: C++ Dialect Options. 30048 (line 98) 30049* fno-guess-branch-probability: Optimize Options. (line 787) 30050* fno-ident: Code Gen Options. (line 144) 30051* fno-implement-inlines <1>: C++ Interface. (line 75) 30052* fno-implement-inlines: C++ Dialect Options. 30053 (line 115) 30054* fno-implicit-inline-templates: C++ Dialect Options. 30055 (line 109) 30056* fno-implicit-templates <1>: Template Instantiation. 30057 (line 87) 30058* fno-implicit-templates: C++ Dialect Options. 30059 (line 103) 30060* fno-inline: Optimize Options. (line 179) 30061* fno-jump-tables: Code Gen Options. (line 203) 30062* fno-math-errno: Optimize Options. (line 1083) 30063* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 30064 (line 49) 30065* fno-nonansi-builtins: C++ Dialect Options. 30066 (line 126) 30067* fno-operator-names: C++ Dialect Options. 30068 (line 131) 30069* fno-optional-diags: C++ Dialect Options. 30070 (line 135) 30071* fno-peephole: Optimize Options. (line 778) 30072* fno-peephole2: Optimize Options. (line 778) 30073* fno-rtti: C++ Dialect Options. 30074 (line 150) 30075* fno-sched-interblock: Optimize Options. (line 514) 30076* fno-sched-spec: Optimize Options. (line 519) 30077* fno-show-column: Preprocessor Options. 30078 (line 505) 30079* fno-signed-bitfields: C Dialect Options. (line 268) 30080* fno-stack-limit: Code Gen Options. (line 319) 30081* fno-threadsafe-statics: C++ Dialect Options. 30082 (line 172) 30083* fno-trapping-math: Optimize Options. (line 1124) 30084* fno-unsigned-bitfields: C Dialect Options. (line 268) 30085* fno-use-cxa-get-exception-ptr: C++ Dialect Options. 30086 (line 185) 30087* fno-weak: C++ Dialect Options. 30088 (line 218) 30089* fno-working-directory: Preprocessor Options. 30090 (line 490) 30091* fno-zero-initialized-in-bss: Optimize Options. (line 314) 30092* fnon-call-exceptions: Code Gen Options. (line 48) 30093* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 30094 (line 56) 30095* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 30096 (line 81) 30097* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 30098 (line 85) 30099* fobjc-gc: Objective-C and Objective-C++ Dialect Options. 30100 (line 170) 30101* fomit-frame-pointer: Optimize Options. (line 158) 30102* fopenmp: C Dialect Options. (line 200) 30103* foptimize-register-move: Optimize Options. (line 477) 30104* foptimize-sibling-calls: Optimize Options. (line 174) 30105* force_cpusubtype_ALL: Darwin Options. (line 129) 30106* force_flat_namespace: Darwin Options. (line 190) 30107* fpack-struct: Code Gen Options. (line 254) 30108* fpcc-struct-return <1>: Incompatibilities. (line 170) 30109* fpcc-struct-return: Code Gen Options. (line 70) 30110* fpch-deps: Preprocessor Options. 30111 (line 280) 30112* fpch-preprocess: Preprocessor Options. 30113 (line 288) 30114* fpeel-loops: Optimize Options. (line 1271) 30115* fpermissive: C++ Dialect Options. 30116 (line 140) 30117* fPIC: Code Gen Options. (line 184) 30118* fpic: Code Gen Options. (line 163) 30119* fPIE: Code Gen Options. (line 197) 30120* fpie: Code Gen Options. (line 197) 30121* fprefetch-loop-arrays: Optimize Options. (line 767) 30122* fpreprocessed: Preprocessor Options. 30123 (line 448) 30124* fprofile-arcs <1>: Other Builtins. (line 236) 30125* fprofile-arcs: Debugging Options. (line 154) 30126* fprofile-generate: Optimize Options. (line 1035) 30127* fprofile-use: Optimize Options. (line 1044) 30128* fprofile-values: Optimize Options. (line 1219) 30129* frandom-string: Debugging Options. (line 665) 30130* freg-struct-return: Code Gen Options. (line 88) 30131* fregmove: Optimize Options. (line 477) 30132* frename-registers: Optimize Options. (line 1238) 30133* freorder-blocks: Optimize Options. (line 804) 30134* freorder-blocks-and-partition: Optimize Options. (line 810) 30135* freorder-functions: Optimize Options. (line 821) 30136* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 30137 (line 174) 30138* frepo <1>: Template Instantiation. 30139 (line 62) 30140* frepo: C++ Dialect Options. 30141 (line 145) 30142* frerun-cse-after-loop: Optimize Options. (line 380) 30143* frounding-math: Optimize Options. (line 1139) 30144* frtl-abstract-sequences: Optimize Options. (line 1159) 30145* fsched-spec-load: Optimize Options. (line 524) 30146* fsched-spec-load-dangerous: Optimize Options. (line 529) 30147* fsched-stalled-insns: Optimize Options. (line 534) 30148* fsched-stalled-insns-dep: Optimize Options. (line 539) 30149* fsched-verbose: Debugging Options. (line 675) 30150* fsched2-use-superblocks: Optimize Options. (line 546) 30151* fsched2-use-traces: Optimize Options. (line 557) 30152* fschedule-insns: Optimize Options. (line 495) 30153* fschedule-insns2: Optimize Options. (line 505) 30154* fscheduling-in-modulo-scheduled-loops: Optimize Options. (line 573) 30155* fsection-anchors: Optimize Options. (line 1334) 30156* fsee: Optimize Options. (line 569) 30157* fshort-double: Code Gen Options. (line 117) 30158* fshort-enums <1>: Non-bugs. (line 42) 30159* fshort-enums <2>: Type Attributes. (line 112) 30160* fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 30161 (line 43) 30162* fshort-enums: Code Gen Options. (line 106) 30163* fshort-wchar: Code Gen Options. (line 125) 30164* fsignaling-nans: Optimize Options. (line 1166) 30165* fsigned-bitfields <1>: Non-bugs. (line 57) 30166* fsigned-bitfields: C Dialect Options. (line 268) 30167* fsigned-char <1>: Characters implementation. 30168 (line 31) 30169* fsigned-char: C Dialect Options. (line 258) 30170* fsingle-precision-constant: Optimize Options. (line 1181) 30171* fsplit-ivs-in-unroller: Optimize Options. (line 748) 30172* fstack-check: Code Gen Options. (line 304) 30173* fstack-limit-register: Code Gen Options. (line 319) 30174* fstack-limit-symbol: Code Gen Options. (line 319) 30175* fstats: C++ Dialect Options. 30176 (line 160) 30177* fstrict-aliasing: Optimize Options. (line 834) 30178* fstrict-overflow: Optimize Options. (line 876) 30179* fsyntax-only: Warning Options. (line 23) 30180* ftabstop: Preprocessor Options. 30181 (line 461) 30182* ftemplate-depth: C++ Dialect Options. 30183 (line 165) 30184* ftest-coverage: Debugging Options. (line 210) 30185* fthread-jumps: Optimize Options. (line 354) 30186* ftime-report: Debugging Options. (line 146) 30187* ftracer: Optimize Options. (line 731) 30188* ftrapv: Code Gen Options. (line 22) 30189* ftree-vect-loop-version: Optimize Options. (line 713) 30190* ftree-vectorizer-verbose: Debugging Options. (line 640) 30191* funit-at-a-time: Optimize Options. (line 965) 30192* funroll-all-loops: Optimize Options. (line 742) 30193* funroll-loops: Optimize Options. (line 736) 30194* funsafe-loop-optimizations: Optimize Options. (line 427) 30195* funsafe-math-optimizations: Optimize Options. (line 1100) 30196* funsigned-bitfields <1>: Non-bugs. (line 57) 30197* funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 30198 (line 17) 30199* funsigned-bitfields: C Dialect Options. (line 268) 30200* funsigned-char <1>: Characters implementation. 30201 (line 31) 30202* funsigned-char: C Dialect Options. (line 240) 30203* funswitch-loops: Optimize Options. (line 1283) 30204* funwind-tables: Code Gen Options. (line 57) 30205* fuse-cxa-atexit: C++ Dialect Options. 30206 (line 178) 30207* fvar-tracking: Debugging Options. (line 718) 30208* fvariable-expansion-in-unroller: Optimize Options. (line 762) 30209* fverbose-asm: Code Gen Options. (line 154) 30210* fvisibility: Code Gen Options. (line 372) 30211* fvisibility-inlines-hidden: C++ Dialect Options. 30212 (line 190) 30213* fvpt: Optimize Options. (line 1229) 30214* fweb: Optimize Options. (line 1004) 30215* fwhole-program: Optimize Options. (line 1015) 30216* fwide-exec-charset: Preprocessor Options. 30217 (line 472) 30218* fworking-directory: Preprocessor Options. 30219 (line 490) 30220* fwrapv: Code Gen Options. (line 26) 30221* fzero-link: Objective-C and Objective-C++ Dialect Options. 30222 (line 184) 30223* G <1>: System V Options. (line 10) 30224* G <2>: RS/6000 and PowerPC Options. 30225 (line 607) 30226* G <3>: MIPS Options. (line 216) 30227* G: M32R/D Options. (line 57) 30228* g: Debugging Options. (line 10) 30229* gcoff: Debugging Options. (line 70) 30230* gdwarf-2: Debugging Options. (line 88) 30231* gen-decls: Objective-C and Objective-C++ Dialect Options. 30232 (line 194) 30233* gfull: Darwin Options. (line 64) 30234* ggdb: Debugging Options. (line 38) 30235* gnu-ld: HPPA Options. (line 113) 30236* gstabs: Debugging Options. (line 44) 30237* gstabs+: Debugging Options. (line 64) 30238* gused: Darwin Options. (line 59) 30239* gvms: Debugging Options. (line 95) 30240* gxcoff: Debugging Options. (line 75) 30241* gxcoff+: Debugging Options. (line 80) 30242* H: Preprocessor Options. 30243 (line 612) 30244* headerpad_max_install_names: Darwin Options. (line 190) 30245* help <1>: Preprocessor Options. 30246 (line 604) 30247* help: Overall Options. (line 219) 30248* hp-ld: HPPA Options. (line 125) 30249* I <1>: Directory Options. (line 10) 30250* I: Preprocessor Options. 30251 (line 64) 30252* I- <1>: Directory Options. (line 107) 30253* I-: Preprocessor Options. 30254 (line 361) 30255* idirafter: Preprocessor Options. 30256 (line 403) 30257* if-conversion: Optimize Options. (line 442) 30258* if-conversion2: Optimize Options. (line 451) 30259* imacros: Preprocessor Options. 30260 (line 394) 30261* image_base: Darwin Options. (line 190) 30262* imultilib: Preprocessor Options. 30263 (line 424) 30264* include: Preprocessor Options. 30265 (line 383) 30266* init: Darwin Options. (line 190) 30267* install_name: Darwin Options. (line 190) 30268* iprefix: Preprocessor Options. 30269 (line 408) 30270* iquote <1>: Directory Options. (line 31) 30271* iquote: Preprocessor Options. 30272 (line 434) 30273* isysroot: Preprocessor Options. 30274 (line 420) 30275* isystem: Preprocessor Options. 30276 (line 428) 30277* iwithprefix: Preprocessor Options. 30278 (line 414) 30279* iwithprefixbefore: Preprocessor Options. 30280 (line 414) 30281* keep_private_externs: Darwin Options. (line 190) 30282* L: Directory Options. (line 37) 30283* l: Link Options. (line 26) 30284* lobjc: Link Options. (line 53) 30285* M: Preprocessor Options. 30286 (line 173) 30287* m1: SH Options. (line 9) 30288* m10: PDP-11 Options. (line 29) 30289* m128bit-long-double: i386 and x86-64 Options. 30290 (line 254) 30291* m16-bit: CRIS Options. (line 69) 30292* m2: SH Options. (line 12) 30293* m210: MCore Options. (line 43) 30294* m3: SH Options. (line 18) 30295* m31: S/390 and zSeries Options. 30296 (line 79) 30297* m32 <1>: SPARC Options. (line 189) 30298* m32 <2>: RS/6000 and PowerPC Options. 30299 (line 222) 30300* m32: i386 and x86-64 Options. 30301 (line 464) 30302* m32-bit: CRIS Options. (line 69) 30303* m32r: M32R/D Options. (line 15) 30304* m32r2: M32R/D Options. (line 9) 30305* m32rx: M32R/D Options. (line 12) 30306* m340: MCore Options. (line 43) 30307* m386: i386 and x86-64 Options. 30308 (line 142) 30309* m3dnow: i386 and x86-64 Options. 30310 (line 389) 30311* m3e: SH Options. (line 21) 30312* m4: SH Options. (line 35) 30313* m4-nofpu: SH Options. (line 24) 30314* m4-single: SH Options. (line 31) 30315* m4-single-only: SH Options. (line 27) 30316* m40: PDP-11 Options. (line 23) 30317* m45: PDP-11 Options. (line 26) 30318* m486: i386 and x86-64 Options. 30319 (line 142) 30320* m4a: SH Options. (line 50) 30321* m4a-nofpu: SH Options. (line 38) 30322* m4a-single: SH Options. (line 46) 30323* m4a-single-only: SH Options. (line 42) 30324* m4al: SH Options. (line 53) 30325* m4byte-functions: MCore Options. (line 27) 30326* m5200: M680x0 Options. (line 59) 30327* m64 <1>: SPARC Options. (line 189) 30328* m64 <2>: S/390 and zSeries Options. 30329 (line 79) 30330* m64 <3>: RS/6000 and PowerPC Options. 30331 (line 222) 30332* m64: i386 and x86-64 Options. 30333 (line 464) 30334* m68000: M680x0 Options. (line 13) 30335* m68020: M680x0 Options. (line 21) 30336* m68020-40: M680x0 Options. (line 70) 30337* m68020-60: M680x0 Options. (line 77) 30338* m68030: M680x0 Options. (line 30) 30339* m68040: M680x0 Options. (line 34) 30340* m68060: M680x0 Options. (line 42) 30341* m6811: M68hc1x Options. (line 13) 30342* m6812: M68hc1x Options. (line 18) 30343* m68881: M680x0 Options. (line 25) 30344* m68hc11: M68hc1x Options. (line 13) 30345* m68hc12: M68hc1x Options. (line 18) 30346* m68hcs12: M68hc1x Options. (line 23) 30347* m68S12: M68hc1x Options. (line 23) 30348* m8-bit: CRIS Options. (line 69) 30349* m96bit-long-double: i386 and x86-64 Options. 30350 (line 254) 30351* mabi <1>: RS/6000 and PowerPC Options. 30352 (line 489) 30353* mabi: ARM Options. (line 10) 30354* mabi-mmixware: MMIX Options. (line 20) 30355* mabi=32: MIPS Options. (line 89) 30356* mabi=64: MIPS Options. (line 89) 30357* mabi=eabi: MIPS Options. (line 89) 30358* mabi=gnu: MMIX Options. (line 20) 30359* mabi=ibmlongdouble: RS/6000 and PowerPC Options. 30360 (line 502) 30361* mabi=ieeelongdouble: RS/6000 and PowerPC Options. 30362 (line 506) 30363* mabi=n32: MIPS Options. (line 89) 30364* mabi=no-spe: RS/6000 and PowerPC Options. 30365 (line 499) 30366* mabi=o64: MIPS Options. (line 89) 30367* mabi=spe: RS/6000 and PowerPC Options. 30368 (line 494) 30369* mabicalls: MIPS Options. (line 100) 30370* mabort-on-noreturn: ARM Options. (line 144) 30371* mabshi: PDP-11 Options. (line 55) 30372* mac0: PDP-11 Options. (line 16) 30373* macc-4: FRV Options. (line 113) 30374* macc-8: FRV Options. (line 116) 30375* maccumulate-outgoing-args: i386 and x86-64 Options. 30376 (line 415) 30377* madjust-unroll: SH Options. (line 175) 30378* mads: RS/6000 and PowerPC Options. 30379 (line 532) 30380* maix-struct-return: RS/6000 and PowerPC Options. 30381 (line 482) 30382* maix32: RS/6000 and PowerPC Options. 30383 (line 260) 30384* maix64: RS/6000 and PowerPC Options. 30385 (line 260) 30386* malign-300: H8/300 Options. (line 31) 30387* malign-double: i386 and x86-64 Options. 30388 (line 238) 30389* malign-int: M680x0 Options. (line 132) 30390* malign-labels: FRV Options. (line 104) 30391* malign-loops: M32R/D Options. (line 73) 30392* malign-natural: RS/6000 and PowerPC Options. 30393 (line 299) 30394* malign-power: RS/6000 and PowerPC Options. 30395 (line 299) 30396* malloc-cc: FRV Options. (line 25) 30397* malpha-as: DEC Alpha Options. (line 159) 30398* maltivec: RS/6000 and PowerPC Options. 30399 (line 164) 30400* mam33: MN10300 Options. (line 17) 30401* maout: CRIS Options. (line 92) 30402* mapcs: ARM Options. (line 22) 30403* mapcs-frame: ARM Options. (line 14) 30404* mapp-regs <1>: V850 Options. (line 57) 30405* mapp-regs: SPARC Options. (line 10) 30406* march <1>: S/390 and zSeries Options. 30407 (line 108) 30408* march <2>: MT Options. (line 9) 30409* march <3>: MIPS Options. (line 14) 30410* march <4>: i386 and x86-64 Options. 30411 (line 131) 30412* march <5>: HPPA Options. (line 9) 30413* march <6>: CRIS Options. (line 10) 30414* march: ARM Options. (line 109) 30415* masm=DIALECT: i386 and x86-64 Options. 30416 (line 194) 30417* mauto-incdec: M68hc1x Options. (line 26) 30418* mauto-pic: IA-64 Options. (line 50) 30419* mb: SH Options. (line 58) 30420* mbacc: MT Options. (line 16) 30421* mbackchain: S/390 and zSeries Options. 30422 (line 26) 30423* mbase-addresses: MMIX Options. (line 54) 30424* mbcopy: PDP-11 Options. (line 36) 30425* mbig <1>: TMS320C3x/C4x Options. 30426 (line 18) 30427* mbig: RS/6000 and PowerPC Options. 30428 (line 414) 30429* mbig-endian <1>: RS/6000 and PowerPC Options. 30430 (line 414) 30431* mbig-endian <2>: MCore Options. (line 39) 30432* mbig-endian <3>: IA-64 Options. (line 9) 30433* mbig-endian: ARM Options. (line 72) 30434* mbig-memory: TMS320C3x/C4x Options. 30435 (line 18) 30436* mbig-switch <1>: V850 Options. (line 52) 30437* mbig-switch: HPPA Options. (line 23) 30438* mbigtable: SH Options. (line 74) 30439* mbit-align: RS/6000 and PowerPC Options. 30440 (line 368) 30441* mbitfield: M680x0 Options. (line 104) 30442* mbk: TMS320C3x/C4x Options. 30443 (line 27) 30444* mbranch-cheap: PDP-11 Options. (line 65) 30445* mbranch-cost=NUMBER: M32R/D Options. (line 82) 30446* mbranch-expensive: PDP-11 Options. (line 61) 30447* mbranch-likely: MIPS Options. (line 367) 30448* mbranch-predict: MMIX Options. (line 49) 30449* mbss-plt: RS/6000 and PowerPC Options. 30450 (line 181) 30451* mbuild-constants: DEC Alpha Options. (line 142) 30452* mbwx: DEC Alpha Options. (line 171) 30453* mc68000: M680x0 Options. (line 13) 30454* mc68020: M680x0 Options. (line 21) 30455* mcall-gnu: RS/6000 and PowerPC Options. 30456 (line 474) 30457* mcall-linux: RS/6000 and PowerPC Options. 30458 (line 470) 30459* mcall-netbsd: RS/6000 and PowerPC Options. 30460 (line 478) 30461* mcall-prologues: AVR Options. (line 43) 30462* mcall-solaris: RS/6000 and PowerPC Options. 30463 (line 466) 30464* mcall-sysv: RS/6000 and PowerPC Options. 30465 (line 453) 30466* mcall-sysv-eabi: RS/6000 and PowerPC Options. 30467 (line 460) 30468* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 30469 (line 463) 30470* mcallee-super-interworking: ARM Options. (line 234) 30471* mcaller-super-interworking: ARM Options. (line 240) 30472* mcallgraph-data: MCore Options. (line 31) 30473* mcc-init: CRIS Options. (line 46) 30474* mcfv4e: M680x0 Options. (line 66) 30475* mcheck-zero-division: MIPS Options. (line 254) 30476* mcirrus-fix-invalid-insns: ARM Options. (line 187) 30477* mcix: DEC Alpha Options. (line 171) 30478* mcmodel=embmedany: SPARC Options. (line 211) 30479* mcmodel=kernel: i386 and x86-64 Options. 30480 (line 486) 30481* mcmodel=large: i386 and x86-64 Options. 30482 (line 498) 30483* mcmodel=medany: SPARC Options. (line 205) 30484* mcmodel=medium: i386 and x86-64 Options. 30485 (line 491) 30486* mcmodel=medlow: SPARC Options. (line 194) 30487* mcmodel=medmid: SPARC Options. (line 199) 30488* mcmodel=small: i386 and x86-64 Options. 30489 (line 480) 30490* mcond-exec: FRV Options. (line 152) 30491* mcond-move: FRV Options. (line 128) 30492* mconst-align: CRIS Options. (line 60) 30493* mconst16: Xtensa Options. (line 10) 30494* mconstant-gp: IA-64 Options. (line 46) 30495* mcpu <1>: TMS320C3x/C4x Options. 30496 (line 9) 30497* mcpu <2>: SPARC Options. (line 96) 30498* mcpu <3>: RS/6000 and PowerPC Options. 30499 (line 100) 30500* mcpu <4>: i386 and x86-64 Options. 30501 (line 136) 30502* mcpu <5>: FRV Options. (line 212) 30503* mcpu <6>: DEC Alpha Options. (line 223) 30504* mcpu <7>: CRIS Options. (line 10) 30505* mcpu <8>: ARM Options. (line 84) 30506* mcpu: ARC Options. (line 23) 30507* mcpu32: M680x0 Options. (line 51) 30508* mcpu=: M32C Options. (line 7) 30509* mcsync-anomaly: Blackfin Options. (line 23) 30510* MD: Preprocessor Options. 30511 (line 261) 30512* mdalign: SH Options. (line 64) 30513* mdata: ARC Options. (line 30) 30514* mdata-align: CRIS Options. (line 60) 30515* mdb: TMS320C3x/C4x Options. 30516 (line 32) 30517* mdebug <1>: S/390 and zSeries Options. 30518 (line 104) 30519* mdebug: M32R/D Options. (line 69) 30520* mdec-asm: PDP-11 Options. (line 78) 30521* mdisable-callt: V850 Options. (line 80) 30522* mdisable-fpregs: HPPA Options. (line 33) 30523* mdisable-indexing: HPPA Options. (line 40) 30524* mdiv: MCore Options. (line 15) 30525* mdiv=STRATEGY: SH Options. (line 127) 30526* mdivide-breaks: MIPS Options. (line 259) 30527* mdivide-traps: MIPS Options. (line 259) 30528* mdivsi3_libfunc=NAME: SH Options. (line 168) 30529* mdlmzb: RS/6000 and PowerPC Options. 30530 (line 362) 30531* mdouble: FRV Options. (line 38) 30532* mdouble-float: MIPS Options. (line 173) 30533* mdp-isr-reload: TMS320C3x/C4x Options. 30534 (line 45) 30535* mdsp: MIPS Options. (line 178) 30536* mdwarf2-asm: IA-64 Options. (line 79) 30537* mdword: FRV Options. (line 32) 30538* mdynamic-no-pic: RS/6000 and PowerPC Options. 30539 (line 419) 30540* meabi: RS/6000 and PowerPC Options. 30541 (line 555) 30542* mearly-stop-bits: IA-64 Options. (line 85) 30543* meb: Score Options. (line 9) 30544* mel: Score Options. (line 12) 30545* melf <1>: MMIX Options. (line 44) 30546* melf: CRIS Options. (line 95) 30547* melinux: CRIS Options. (line 99) 30548* melinux-stacksize: CRIS Options. (line 25) 30549* memb: RS/6000 and PowerPC Options. 30550 (line 550) 30551* membedded-data: MIPS Options. (line 225) 30552* memregs=: M32C Options. (line 21) 30553* mep: V850 Options. (line 16) 30554* mepsilon: MMIX Options. (line 15) 30555* mesa: S/390 and zSeries Options. 30556 (line 87) 30557* metrax100: CRIS Options. (line 31) 30558* metrax4: CRIS Options. (line 31) 30559* mexplicit-relocs <1>: MIPS Options. (line 245) 30560* mexplicit-relocs: DEC Alpha Options. (line 184) 30561* MF: Preprocessor Options. 30562 (line 207) 30563* mfast-fix: TMS320C3x/C4x Options. 30564 (line 62) 30565* mfast-indirect-calls: HPPA Options. (line 52) 30566* mfaster-structs: SPARC Options. (line 71) 30567* mfdpic: FRV Options. (line 56) 30568* mfix: DEC Alpha Options. (line 171) 30569* mfix-and-continue: Darwin Options. (line 97) 30570* mfix-r4000: MIPS Options. (line 309) 30571* mfix-r4400: MIPS Options. (line 323) 30572* mfix-sb1: MIPS Options. (line 351) 30573* mfix-vr4120: MIPS Options. (line 330) 30574* mfix-vr4130: MIPS Options. (line 344) 30575* mfixed-cc: FRV Options. (line 28) 30576* mfixed-range <1>: IA-64 Options. (line 90) 30577* mfixed-range: HPPA Options. (line 59) 30578* mfloat-abi: ARM Options. (line 59) 30579* mfloat-gprs: RS/6000 and PowerPC Options. 30580 (line 205) 30581* mfloat-ieee: DEC Alpha Options. (line 179) 30582* mfloat-vax: DEC Alpha Options. (line 179) 30583* mfloat32: PDP-11 Options. (line 52) 30584* mfloat64: PDP-11 Options. (line 48) 30585* mflush-func: MIPS Options. (line 357) 30586* mflush-func=NAME: M32R/D Options. (line 94) 30587* mflush-trap=NUMBER: M32R/D Options. (line 87) 30588* mfmovd: SH Options. (line 78) 30589* mfp: ARM Options. (line 119) 30590* mfp-exceptions: MIPS Options. (line 378) 30591* mfp-reg: DEC Alpha Options. (line 25) 30592* mfp-rounding-mode: DEC Alpha Options. (line 85) 30593* mfp-trap-mode: DEC Alpha Options. (line 63) 30594* mfp32: MIPS Options. (line 156) 30595* mfp64: MIPS Options. (line 159) 30596* mfpe: ARM Options. (line 119) 30597* mfpr-32: FRV Options. (line 13) 30598* mfpr-64: FRV Options. (line 16) 30599* mfprnd: RS/6000 and PowerPC Options. 30600 (line 25) 30601* mfpu <1>: SPARC Options. (line 20) 30602* mfpu <2>: PDP-11 Options. (line 9) 30603* mfpu: ARM Options. (line 119) 30604* mfull-toc: RS/6000 and PowerPC Options. 30605 (line 233) 30606* mfused-madd <1>: Xtensa Options. (line 19) 30607* mfused-madd <2>: S/390 and zSeries Options. 30608 (line 128) 30609* mfused-madd <3>: RS/6000 and PowerPC Options. 30610 (line 349) 30611* mfused-madd: MIPS Options. (line 294) 30612* mg: VAX Options. (line 17) 30613* MG: Preprocessor Options. 30614 (line 216) 30615* mgas <1>: HPPA Options. (line 75) 30616* mgas: DEC Alpha Options. (line 159) 30617* mgettrcost=NUMBER: SH Options. (line 190) 30618* mglibc: GNU/Linux Options. (line 9) 30619* mgnu: VAX Options. (line 13) 30620* mgnu-as: IA-64 Options. (line 18) 30621* mgnu-ld: IA-64 Options. (line 23) 30622* mgotplt: CRIS Options. (line 86) 30623* mgp32: MIPS Options. (line 150) 30624* mgp64: MIPS Options. (line 153) 30625* mgpr-32: FRV Options. (line 7) 30626* mgpr-64: FRV Options. (line 10) 30627* mgprel-ro: FRV Options. (line 79) 30628* mh: H8/300 Options. (line 14) 30629* mhard-float <1>: SPARC Options. (line 20) 30630* mhard-float <2>: S/390 and zSeries Options. 30631 (line 11) 30632* mhard-float <3>: RS/6000 and PowerPC Options. 30633 (line 311) 30634* mhard-float <4>: MIPS Options. (line 162) 30635* mhard-float <5>: FRV Options. (line 19) 30636* mhard-float: ARM Options. (line 41) 30637* mhard-quad-float: SPARC Options. (line 41) 30638* mhardlit: MCore Options. (line 10) 30639* mhitachi: SH Options. (line 81) 30640* mid-shared-library: Blackfin Options. (line 39) 30641* mieee <1>: SH Options. (line 96) 30642* mieee: DEC Alpha Options. (line 39) 30643* mieee-conformant: DEC Alpha Options. (line 134) 30644* mieee-fp: i386 and x86-64 Options. 30645 (line 200) 30646* mieee-with-inexact: DEC Alpha Options. (line 52) 30647* milp32: IA-64 Options. (line 114) 30648* mimpure-text: SPARC Options. (line 81) 30649* mindexed-addressing: SH Options. (line 180) 30650* minit-stack: AVR Options. (line 35) 30651* minline-all-stringops: i386 and x86-64 Options. 30652 (line 436) 30653* minline-float-divide-max-throughput: IA-64 Options. (line 58) 30654* minline-float-divide-min-latency: IA-64 Options. (line 54) 30655* minline-int-divide-max-throughput: IA-64 Options. (line 66) 30656* minline-int-divide-min-latency: IA-64 Options. (line 62) 30657* minline-plt: FRV Options. (line 64) 30658* minline-sqrt-max-throughput: IA-64 Options. (line 74) 30659* minline-sqrt-min-latency: IA-64 Options. (line 70) 30660* minmax: M68hc1x Options. (line 31) 30661* minsert-sched-nops: RS/6000 and PowerPC Options. 30662 (line 441) 30663* mint16: PDP-11 Options. (line 40) 30664* mint32 <1>: PDP-11 Options. (line 44) 30665* mint32: H8/300 Options. (line 28) 30666* mint8: AVR Options. (line 53) 30667* minvalid-symbols: SH Options. (line 213) 30668* mips1: MIPS Options. (line 59) 30669* mips16: MIPS Options. (line 81) 30670* mips2: MIPS Options. (line 62) 30671* mips3: MIPS Options. (line 65) 30672* mips32: MIPS Options. (line 71) 30673* mips32r2: MIPS Options. (line 74) 30674* mips3d: MIPS Options. (line 190) 30675* mips4: MIPS Options. (line 68) 30676* mips64: MIPS Options. (line 77) 30677* misel: RS/6000 and PowerPC Options. 30678 (line 187) 30679* misize: SH Options. (line 103) 30680* missue-rate=NUMBER: M32R/D Options. (line 79) 30681* mjump-in-delay: HPPA Options. (line 28) 30682* mkernel: Darwin Options. (line 75) 30683* mknuthdiv: MMIX Options. (line 33) 30684* ml: SH Options. (line 61) 30685* mlarge-data: DEC Alpha Options. (line 195) 30686* mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 30687 (line 280) 30688* mlarge-text: DEC Alpha Options. (line 213) 30689* mlibfuncs: MMIX Options. (line 10) 30690* mlibrary-pic: FRV Options. (line 110) 30691* mlinked-fp: FRV Options. (line 94) 30692* mlinker-opt: HPPA Options. (line 85) 30693* mlinux: CRIS Options. (line 104) 30694* mlittle: RS/6000 and PowerPC Options. 30695 (line 408) 30696* mlittle-endian <1>: SPARC Options. (line 183) 30697* mlittle-endian <2>: RS/6000 and PowerPC Options. 30698 (line 408) 30699* mlittle-endian <3>: MCore Options. (line 39) 30700* mlittle-endian <4>: IA-64 Options. (line 13) 30701* mlittle-endian: ARM Options. (line 68) 30702* mlong-calls <1>: V850 Options. (line 10) 30703* mlong-calls <2>: MIPS Options. (line 280) 30704* mlong-calls <3>: M68hc1x Options. (line 35) 30705* mlong-calls <4>: FRV Options. (line 99) 30706* mlong-calls <5>: Blackfin Options. (line 57) 30707* mlong-calls: ARM Options. (line 149) 30708* mlong-double-128: S/390 and zSeries Options. 30709 (line 20) 30710* mlong-double-64: S/390 and zSeries Options. 30711 (line 20) 30712* mlong-load-store: HPPA Options. (line 66) 30713* mlong32: MIPS Options. (line 199) 30714* mlong64: MIPS Options. (line 194) 30715* mlongcall: RS/6000 and PowerPC Options. 30716 (line 621) 30717* mlongcalls: Xtensa Options. (line 60) 30718* mloop-unsigned: TMS320C3x/C4x Options. 30719 (line 94) 30720* mlow-64k: Blackfin Options. (line 32) 30721* mlp64: IA-64 Options. (line 114) 30722* MM: Preprocessor Options. 30723 (line 197) 30724* mmac <1>: Score Options. (line 21) 30725* mmac: CRX Options. (line 9) 30726* mmad: MIPS Options. (line 289) 30727* mmangle-cpu: ARC Options. (line 15) 30728* mmax: DEC Alpha Options. (line 171) 30729* mmax-stack-frame: CRIS Options. (line 22) 30730* mmcu: AVR Options. (line 9) 30731* MMD: Preprocessor Options. 30732 (line 276) 30733* mmedia: FRV Options. (line 44) 30734* mmemcpy: MIPS Options. (line 274) 30735* mmemory-latency: DEC Alpha Options. (line 266) 30736* mmemparm: TMS320C3x/C4x Options. 30737 (line 109) 30738* mmfcrf: RS/6000 and PowerPC Options. 30739 (line 25) 30740* mminimal-toc: RS/6000 and PowerPC Options. 30741 (line 233) 30742* mmmx: i386 and x86-64 Options. 30743 (line 389) 30744* mmodel=large: M32R/D Options. (line 33) 30745* mmodel=medium: M32R/D Options. (line 27) 30746* mmodel=small: M32R/D Options. (line 18) 30747* mmpyi: TMS320C3x/C4x Options. 30748 (line 53) 30749* mmul-bug-workaround: CRIS Options. (line 36) 30750* mmuladd: FRV Options. (line 50) 30751* mmulhw: RS/6000 and PowerPC Options. 30752 (line 355) 30753* mmult-bug: MN10300 Options. (line 9) 30754* mmulti-cond-exec: FRV Options. (line 176) 30755* mmultiple: RS/6000 and PowerPC Options. 30756 (line 317) 30757* mmvcle: S/390 and zSeries Options. 30758 (line 97) 30759* mmvme: RS/6000 and PowerPC Options. 30760 (line 527) 30761* mn: H8/300 Options. (line 20) 30762* mnested-cond-exec: FRV Options. (line 189) 30763* mnew-mnemonics: RS/6000 and PowerPC Options. 30764 (line 85) 30765* mnhwloop: Score Options. (line 15) 30766* mno-3dnow: i386 and x86-64 Options. 30767 (line 389) 30768* mno-4byte-functions: MCore Options. (line 27) 30769* mno-abicalls: MIPS Options. (line 100) 30770* mno-abshi: PDP-11 Options. (line 58) 30771* mno-ac0: PDP-11 Options. (line 20) 30772* mno-align-double: i386 and x86-64 Options. 30773 (line 238) 30774* mno-align-int: M680x0 Options. (line 132) 30775* mno-align-loops: M32R/D Options. (line 76) 30776* mno-align-stringops: i386 and x86-64 Options. 30777 (line 431) 30778* mno-altivec: RS/6000 and PowerPC Options. 30779 (line 164) 30780* mno-am33: MN10300 Options. (line 20) 30781* mno-app-regs <1>: V850 Options. (line 61) 30782* mno-app-regs: SPARC Options. (line 10) 30783* mno-bacc: MT Options. (line 19) 30784* mno-backchain: S/390 and zSeries Options. 30785 (line 26) 30786* mno-base-addresses: MMIX Options. (line 54) 30787* mno-bit-align: RS/6000 and PowerPC Options. 30788 (line 368) 30789* mno-bk: TMS320C3x/C4x Options. 30790 (line 27) 30791* mno-branch-likely: MIPS Options. (line 367) 30792* mno-branch-predict: MMIX Options. (line 49) 30793* mno-bwx: DEC Alpha Options. (line 171) 30794* mno-callgraph-data: MCore Options. (line 31) 30795* mno-check-zero-division: MIPS Options. (line 254) 30796* mno-cirrus-fix-invalid-insns: ARM Options. (line 187) 30797* mno-cix: DEC Alpha Options. (line 171) 30798* mno-cond-exec: FRV Options. (line 158) 30799* mno-cond-move: FRV Options. (line 134) 30800* mno-const-align: CRIS Options. (line 60) 30801* mno-const16: Xtensa Options. (line 10) 30802* mno-crt0 <1>: MT Options. (line 25) 30803* mno-crt0: MN10300 Options. (line 31) 30804* mno-csync-anomaly: Blackfin Options. (line 28) 30805* mno-data-align: CRIS Options. (line 60) 30806* mno-db: TMS320C3x/C4x Options. 30807 (line 32) 30808* mno-debug: S/390 and zSeries Options. 30809 (line 104) 30810* mno-div: MCore Options. (line 15) 30811* mno-dlmzb: RS/6000 and PowerPC Options. 30812 (line 362) 30813* mno-double: FRV Options. (line 41) 30814* mno-dsp: MIPS Options. (line 178) 30815* mno-dwarf2-asm: IA-64 Options. (line 79) 30816* mno-dword: FRV Options. (line 35) 30817* mno-eabi: RS/6000 and PowerPC Options. 30818 (line 555) 30819* mno-early-stop-bits: IA-64 Options. (line 85) 30820* mno-eflags: FRV Options. (line 125) 30821* mno-embedded-data: MIPS Options. (line 225) 30822* mno-ep: V850 Options. (line 16) 30823* mno-epsilon: MMIX Options. (line 15) 30824* mno-explicit-relocs <1>: MIPS Options. (line 245) 30825* mno-explicit-relocs: DEC Alpha Options. (line 184) 30826* mno-fancy-math-387: i386 and x86-64 Options. 30827 (line 227) 30828* mno-fast-fix: TMS320C3x/C4x Options. 30829 (line 62) 30830* mno-faster-structs: SPARC Options. (line 71) 30831* mno-fix: DEC Alpha Options. (line 171) 30832* mno-fix-r4000: MIPS Options. (line 309) 30833* mno-fix-r4400: MIPS Options. (line 323) 30834* mno-float32: PDP-11 Options. (line 48) 30835* mno-float64: PDP-11 Options. (line 52) 30836* mno-flush-func: M32R/D Options. (line 99) 30837* mno-flush-trap: M32R/D Options. (line 91) 30838* mno-fp-in-toc: RS/6000 and PowerPC Options. 30839 (line 233) 30840* mno-fp-regs: DEC Alpha Options. (line 25) 30841* mno-fp-ret-in-387: i386 and x86-64 Options. 30842 (line 217) 30843* mno-fprnd: RS/6000 and PowerPC Options. 30844 (line 25) 30845* mno-fpu: SPARC Options. (line 25) 30846* mno-fused-madd <1>: Xtensa Options. (line 19) 30847* mno-fused-madd <2>: S/390 and zSeries Options. 30848 (line 128) 30849* mno-fused-madd <3>: RS/6000 and PowerPC Options. 30850 (line 349) 30851* mno-fused-madd: MIPS Options. (line 294) 30852* mno-gnu-as: IA-64 Options. (line 18) 30853* mno-gnu-ld: IA-64 Options. (line 23) 30854* mno-gotplt: CRIS Options. (line 86) 30855* mno-hardlit: MCore Options. (line 10) 30856* mno-id-shared-library: Blackfin Options. (line 45) 30857* mno-ieee-fp: i386 and x86-64 Options. 30858 (line 200) 30859* mno-int16: PDP-11 Options. (line 44) 30860* mno-int32: PDP-11 Options. (line 40) 30861* mno-interrupts: AVR Options. (line 39) 30862* mno-isel: RS/6000 and PowerPC Options. 30863 (line 187) 30864* mno-knuthdiv: MMIX Options. (line 33) 30865* mno-libfuncs: MMIX Options. (line 10) 30866* mno-long-calls <1>: V850 Options. (line 10) 30867* mno-long-calls <2>: MIPS Options. (line 280) 30868* mno-long-calls <3>: M68hc1x Options. (line 35) 30869* mno-long-calls <4>: HPPA Options. (line 138) 30870* mno-long-calls <5>: Blackfin Options. (line 57) 30871* mno-long-calls: ARM Options. (line 149) 30872* mno-longcall: RS/6000 and PowerPC Options. 30873 (line 621) 30874* mno-longcalls: Xtensa Options. (line 60) 30875* mno-loop-unsigned: TMS320C3x/C4x Options. 30876 (line 94) 30877* mno-low-64k: Blackfin Options. (line 36) 30878* mno-mad: MIPS Options. (line 289) 30879* mno-max: DEC Alpha Options. (line 171) 30880* mno-media: FRV Options. (line 47) 30881* mno-memcpy: MIPS Options. (line 274) 30882* mno-mfcrf: RS/6000 and PowerPC Options. 30883 (line 25) 30884* mno-mips16: MIPS Options. (line 81) 30885* mno-mips3d: MIPS Options. (line 190) 30886* mno-mmx: i386 and x86-64 Options. 30887 (line 389) 30888* mno-mpyi: TMS320C3x/C4x Options. 30889 (line 53) 30890* mno-mul-bug-workaround: CRIS Options. (line 36) 30891* mno-muladd: FRV Options. (line 53) 30892* mno-mulhw: RS/6000 and PowerPC Options. 30893 (line 355) 30894* mno-mult-bug: MN10300 Options. (line 13) 30895* mno-multi-cond-exec: FRV Options. (line 183) 30896* mno-multiple: RS/6000 and PowerPC Options. 30897 (line 317) 30898* mno-mvcle: S/390 and zSeries Options. 30899 (line 97) 30900* mno-nested-cond-exec: FRV Options. (line 195) 30901* mno-optimize-membar: FRV Options. (line 205) 30902* mno-pack: FRV Options. (line 122) 30903* mno-packed-stack: S/390 and zSeries Options. 30904 (line 46) 30905* mno-paired-single: MIPS Options. (line 183) 30906* mno-parallel-insns: TMS320C3x/C4x Options. 30907 (line 115) 30908* mno-parallel-mpy: TMS320C3x/C4x Options. 30909 (line 120) 30910* mno-pic: IA-64 Options. (line 26) 30911* mno-popcntb: RS/6000 and PowerPC Options. 30912 (line 25) 30913* mno-power: RS/6000 and PowerPC Options. 30914 (line 25) 30915* mno-power2: RS/6000 and PowerPC Options. 30916 (line 25) 30917* mno-powerpc: RS/6000 and PowerPC Options. 30918 (line 25) 30919* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 30920 (line 25) 30921* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 30922 (line 25) 30923* mno-powerpc64: RS/6000 and PowerPC Options. 30924 (line 25) 30925* mno-prolog-function: V850 Options. (line 23) 30926* mno-prologue-epilogue: CRIS Options. (line 76) 30927* mno-prototype: RS/6000 and PowerPC Options. 30928 (line 511) 30929* mno-push-args: i386 and x86-64 Options. 30930 (line 408) 30931* mno-register-names: IA-64 Options. (line 37) 30932* mno-regnames: RS/6000 and PowerPC Options. 30933 (line 615) 30934* mno-relax-immediate: MCore Options. (line 19) 30935* mno-relocatable: RS/6000 and PowerPC Options. 30936 (line 385) 30937* mno-relocatable-lib: RS/6000 and PowerPC Options. 30938 (line 393) 30939* mno-rptb: TMS320C3x/C4x Options. 30940 (line 72) 30941* mno-rpts: TMS320C3x/C4x Options. 30942 (line 81) 30943* mno-scc: FRV Options. (line 146) 30944* mno-sched-ar-data-spec: IA-64 Options. (line 128) 30945* mno-sched-ar-in-data-spec: IA-64 Options. (line 149) 30946* mno-sched-br-data-spec: IA-64 Options. (line 121) 30947* mno-sched-br-in-data-spec: IA-64 Options. (line 142) 30948* mno-sched-control-ldc: IA-64 Options. (line 168) 30949* mno-sched-control-spec: IA-64 Options. (line 135) 30950* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 194) 30951* mno-sched-in-control-spec: IA-64 Options. (line 156) 30952* mno-sched-ldc: IA-64 Options. (line 162) 30953* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 30954* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 30955* mno-sched-prolog: ARM Options. (line 32) 30956* mno-sched-spec-verbose: IA-64 Options. (line 176) 30957* mno-sdata <1>: RS/6000 and PowerPC Options. 30958 (line 602) 30959* mno-sdata: IA-64 Options. (line 42) 30960* mno-side-effects: CRIS Options. (line 51) 30961* mno-single-exit: MMIX Options. (line 66) 30962* mno-slow-bytes: MCore Options. (line 35) 30963* mno-small-exec: S/390 and zSeries Options. 30964 (line 72) 30965* mno-soft-float: DEC Alpha Options. (line 10) 30966* mno-space-regs: HPPA Options. (line 45) 30967* mno-spe: RS/6000 and PowerPC Options. 30968 (line 196) 30969* mno-specld-anomaly: Blackfin Options. (line 19) 30970* mno-split: PDP-11 Options. (line 71) 30971* mno-split-addresses: MIPS Options. (line 239) 30972* mno-sse: i386 and x86-64 Options. 30973 (line 389) 30974* mno-stack-align: CRIS Options. (line 60) 30975* mno-stack-bias: SPARC Options. (line 220) 30976* mno-strict-align <1>: RS/6000 and PowerPC Options. 30977 (line 380) 30978* mno-strict-align: M680x0 Options. (line 152) 30979* mno-string: RS/6000 and PowerPC Options. 30980 (line 328) 30981* mno-sum-in-toc: RS/6000 and PowerPC Options. 30982 (line 233) 30983* mno-svr3-shlib: i386 and x86-64 Options. 30984 (line 287) 30985* mno-swdiv: RS/6000 and PowerPC Options. 30986 (line 154) 30987* mno-sym32: MIPS Options. (line 209) 30988* mno-tablejump: AVR Options. (line 47) 30989* mno-target-align: Xtensa Options. (line 47) 30990* mno-text-section-literals: Xtensa Options. (line 35) 30991* mno-toc: RS/6000 and PowerPC Options. 30992 (line 402) 30993* mno-toplevel-symbols: MMIX Options. (line 40) 30994* mno-tpf-trace: S/390 and zSeries Options. 30995 (line 122) 30996* mno-unaligned-doubles: SPARC Options. (line 59) 30997* mno-uninit-const-in-rodata: MIPS Options. (line 233) 30998* mno-update: RS/6000 and PowerPC Options. 30999 (line 339) 31000* mno-v8plus: SPARC Options. (line 168) 31001* mno-vis: SPARC Options. (line 175) 31002* mno-vliw-branch: FRV Options. (line 170) 31003* mno-volatile-asm-stop: IA-64 Options. (line 32) 31004* mno-vrsave: RS/6000 and PowerPC Options. 31005 (line 173) 31006* mno-wide-bitfields: MCore Options. (line 23) 31007* mno-xgot: MIPS Options. (line 127) 31008* mno-xl-compat: RS/6000 and PowerPC Options. 31009 (line 268) 31010* mno-zero-extend: MMIX Options. (line 27) 31011* mnobitfield: M680x0 Options. (line 100) 31012* mnomacsave: SH Options. (line 92) 31013* mnominmax: M68hc1x Options. (line 31) 31014* mnop-fun-dllimport: ARM Options. (line 174) 31015* mold-mnemonics: RS/6000 and PowerPC Options. 31016 (line 85) 31017* momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 31018 (line 443) 31019* momit-leaf-frame-pointer: Blackfin Options. (line 7) 31020* mone-byte-bool: Darwin Options. (line 83) 31021* moptimize-membar: FRV Options. (line 201) 31022* MP: Preprocessor Options. 31023 (line 226) 31024* mpa-risc-1-0: HPPA Options. (line 19) 31025* mpa-risc-1-1: HPPA Options. (line 19) 31026* mpa-risc-2-0: HPPA Options. (line 19) 31027* mpack: FRV Options. (line 119) 31028* mpacked-stack: S/390 and zSeries Options. 31029 (line 46) 31030* mpadstruct: SH Options. (line 106) 31031* mpaired-single: MIPS Options. (line 183) 31032* mparallel-insns: TMS320C3x/C4x Options. 31033 (line 115) 31034* mparallel-mpy: TMS320C3x/C4x Options. 31035 (line 120) 31036* mparanoid: TMS320C3x/C4x Options. 31037 (line 45) 31038* mpcrel: M680x0 Options. (line 144) 31039* mpdebug: CRIS Options. (line 40) 31040* mpe: RS/6000 and PowerPC Options. 31041 (line 288) 31042* mpentium: i386 and x86-64 Options. 31043 (line 142) 31044* mpentiumpro: i386 and x86-64 Options. 31045 (line 142) 31046* mpic-register: ARM Options. (line 183) 31047* mpoke-function-name: ARM Options. (line 197) 31048* mpopcntb: RS/6000 and PowerPC Options. 31049 (line 25) 31050* mportable-runtime: HPPA Options. (line 71) 31051* mpower: RS/6000 and PowerPC Options. 31052 (line 25) 31053* mpower2: RS/6000 and PowerPC Options. 31054 (line 25) 31055* mpowerpc: RS/6000 and PowerPC Options. 31056 (line 25) 31057* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 31058 (line 25) 31059* mpowerpc-gpopt: RS/6000 and PowerPC Options. 31060 (line 25) 31061* mpowerpc64: RS/6000 and PowerPC Options. 31062 (line 25) 31063* mprefergot: SH Options. (line 113) 31064* mpreferred-stack-boundary: i386 and x86-64 Options. 31065 (line 351) 31066* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 31067 (line 425) 31068* mprolog-function: V850 Options. (line 23) 31069* mprologue-epilogue: CRIS Options. (line 76) 31070* mprototype: RS/6000 and PowerPC Options. 31071 (line 511) 31072* mpt-fixed: SH Options. (line 194) 31073* mpush-args <1>: i386 and x86-64 Options. 31074 (line 408) 31075* mpush-args: CRX Options. (line 13) 31076* MQ: Preprocessor Options. 31077 (line 252) 31078* mregister-names: IA-64 Options. (line 37) 31079* mregnames: RS/6000 and PowerPC Options. 31080 (line 615) 31081* mregparm <1>: TMS320C3x/C4x Options. 31082 (line 109) 31083* mregparm: i386 and x86-64 Options. 31084 (line 316) 31085* mrelax <1>: SH Options. (line 70) 31086* mrelax <2>: MN10300 Options. (line 34) 31087* mrelax: H8/300 Options. (line 9) 31088* mrelax-immediate: MCore Options. (line 19) 31089* mrelocatable: RS/6000 and PowerPC Options. 31090 (line 385) 31091* mrelocatable-lib: RS/6000 and PowerPC Options. 31092 (line 393) 31093* mreturn-pointer-on-d0: MN10300 Options. (line 24) 31094* mrodata: ARC Options. (line 30) 31095* mrptb: TMS320C3x/C4x Options. 31096 (line 72) 31097* mrpts: TMS320C3x/C4x Options. 31098 (line 81) 31099* mrtd <1>: Function Attributes. 31100 (line 100) 31101* mrtd <2>: M680x0 Options. (line 109) 31102* mrtd: i386 and x86-64 Options. 31103 (line 292) 31104* ms: H8/300 Options. (line 17) 31105* ms2600: H8/300 Options. (line 24) 31106* mscc: FRV Options. (line 140) 31107* msched-ar-data-spec: IA-64 Options. (line 128) 31108* msched-ar-in-data-spec: IA-64 Options. (line 149) 31109* msched-br-data-spec: IA-64 Options. (line 121) 31110* msched-br-in-data-spec: IA-64 Options. (line 142) 31111* msched-control-ldc: IA-64 Options. (line 168) 31112* msched-control-spec: IA-64 Options. (line 135) 31113* msched-costly-dep: RS/6000 and PowerPC Options. 31114 (line 432) 31115* msched-count-spec-in-critical-path: IA-64 Options. (line 194) 31116* msched-in-control-spec: IA-64 Options. (line 156) 31117* msched-ldc: IA-64 Options. (line 162) 31118* msched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 31119* msched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 31120* msched-spec-verbose: IA-64 Options. (line 176) 31121* mschedule: HPPA Options. (line 78) 31122* mscore5: Score Options. (line 25) 31123* mscore5u: Score Options. (line 28) 31124* mscore7: Score Options. (line 31) 31125* mscore7d: Score Options. (line 34) 31126* msda: V850 Options. (line 40) 31127* msdata <1>: RS/6000 and PowerPC Options. 31128 (line 589) 31129* msdata: IA-64 Options. (line 42) 31130* msdata-data: RS/6000 and PowerPC Options. 31131 (line 594) 31132* msdata=default: RS/6000 and PowerPC Options. 31133 (line 589) 31134* msdata=eabi: RS/6000 and PowerPC Options. 31135 (line 569) 31136* msdata=none <1>: RS/6000 and PowerPC Options. 31137 (line 602) 31138* msdata=none: M32R/D Options. (line 40) 31139* msdata=sdata: M32R/D Options. (line 49) 31140* msdata=sysv: RS/6000 and PowerPC Options. 31141 (line 580) 31142* msdata=use: M32R/D Options. (line 53) 31143* msecure-plt: RS/6000 and PowerPC Options. 31144 (line 176) 31145* mshared-library-id: Blackfin Options. (line 49) 31146* mshort <1>: M68hc1x Options. (line 40) 31147* mshort: M680x0 Options. (line 94) 31148* msim <1>: Xstormy16 Options. (line 9) 31149* msim <2>: RS/6000 and PowerPC Options. 31150 (line 521) 31151* msim <3>: MT Options. (line 22) 31152* msim: M32C Options. (line 13) 31153* msingle-exit: MMIX Options. (line 66) 31154* msingle-float: MIPS Options. (line 169) 31155* msingle-pic-base: ARM Options. (line 177) 31156* msio: HPPA Options. (line 107) 31157* msize: AVR Options. (line 32) 31158* mslow-bytes: MCore Options. (line 35) 31159* msmall: TMS320C3x/C4x Options. 31160 (line 18) 31161* msmall-data: DEC Alpha Options. (line 195) 31162* msmall-exec: S/390 and zSeries Options. 31163 (line 72) 31164* msmall-memory: TMS320C3x/C4x Options. 31165 (line 18) 31166* msmall-text: DEC Alpha Options. (line 213) 31167* msoft-float <1>: SPARC Options. (line 25) 31168* msoft-float <2>: S/390 and zSeries Options. 31169 (line 11) 31170* msoft-float <3>: RS/6000 and PowerPC Options. 31171 (line 311) 31172* msoft-float <4>: PDP-11 Options. (line 13) 31173* msoft-float <5>: MIPS Options. (line 165) 31174* msoft-float <6>: M680x0 Options. (line 84) 31175* msoft-float <7>: i386 and x86-64 Options. 31176 (line 205) 31177* msoft-float <8>: HPPA Options. (line 91) 31178* msoft-float <9>: FRV Options. (line 22) 31179* msoft-float <10>: DEC Alpha Options. (line 10) 31180* msoft-float: ARM Options. (line 45) 31181* msoft-quad-float: SPARC Options. (line 45) 31182* msoft-reg-count: M68hc1x Options. (line 43) 31183* mspace <1>: V850 Options. (line 30) 31184* mspace: SH Options. (line 110) 31185* mspe: RS/6000 and PowerPC Options. 31186 (line 196) 31187* mspecld-anomaly: Blackfin Options. (line 14) 31188* msplit: PDP-11 Options. (line 68) 31189* msplit-addresses: MIPS Options. (line 239) 31190* msse: i386 and x86-64 Options. 31191 (line 389) 31192* msseregparm: i386 and x86-64 Options. 31193 (line 327) 31194* mstack-align: CRIS Options. (line 60) 31195* mstack-bias: SPARC Options. (line 220) 31196* mstack-guard: S/390 and zSeries Options. 31197 (line 148) 31198* mstack-size: S/390 and zSeries Options. 31199 (line 148) 31200* mstackrealign: i386 and x86-64 Options. 31201 (line 337) 31202* mstrict-align <1>: RS/6000 and PowerPC Options. 31203 (line 380) 31204* mstrict-align: M680x0 Options. (line 152) 31205* mstring: RS/6000 and PowerPC Options. 31206 (line 328) 31207* mstructure-size-boundary: ARM Options. (line 129) 31208* msvr3-shlib: i386 and x86-64 Options. 31209 (line 287) 31210* msvr4-struct-return: RS/6000 and PowerPC Options. 31211 (line 485) 31212* mswdiv: RS/6000 and PowerPC Options. 31213 (line 154) 31214* msym32: MIPS Options. (line 209) 31215* mt: IA-64 Options. (line 106) 31216* MT: Preprocessor Options. 31217 (line 238) 31218* mtarget-align: Xtensa Options. (line 47) 31219* mtda: V850 Options. (line 34) 31220* mtext: ARC Options. (line 30) 31221* mtext-section-literals: Xtensa Options. (line 35) 31222* mthreads: i386 and x86-64 Options. 31223 (line 423) 31224* mthumb: ARM Options. (line 218) 31225* mthumb-interwork: ARM Options. (line 25) 31226* mti: TMS320C3x/C4x Options. 31227 (line 102) 31228* mtiny-stack: AVR Options. (line 50) 31229* mtls-direct-seg-refs: i386 and x86-64 Options. 31230 (line 451) 31231* mtls-size: IA-64 Options. (line 97) 31232* mtoc: RS/6000 and PowerPC Options. 31233 (line 402) 31234* mtomcat-stats: FRV Options. (line 209) 31235* mtoplevel-symbols: MMIX Options. (line 40) 31236* mtp: ARM Options. (line 246) 31237* mtpcs-frame: ARM Options. (line 222) 31238* mtpcs-leaf-frame: ARM Options. (line 228) 31239* mtpf-trace: S/390 and zSeries Options. 31240 (line 122) 31241* mtrap-precision: DEC Alpha Options. (line 109) 31242* mtune <1>: SPARC Options. (line 156) 31243* mtune <2>: S/390 and zSeries Options. 31244 (line 115) 31245* mtune <3>: RS/6000 and PowerPC Options. 31246 (line 144) 31247* mtune <4>: MIPS Options. (line 44) 31248* mtune <5>: IA-64 Options. (line 101) 31249* mtune <6>: i386 and x86-64 Options. 31250 (line 10) 31251* mtune <7>: DEC Alpha Options. (line 262) 31252* mtune <8>: CRIS Options. (line 16) 31253* mtune: ARM Options. (line 99) 31254* muclibc: GNU/Linux Options. (line 13) 31255* muls: Score Options. (line 18) 31256* multcost=NUMBER: SH Options. (line 124) 31257* multi_module: Darwin Options. (line 190) 31258* multilib-library-pic: FRV Options. (line 89) 31259* multiply_defined: Darwin Options. (line 190) 31260* multiply_defined_unused: Darwin Options. (line 190) 31261* munaligned-doubles: SPARC Options. (line 59) 31262* muninit-const-in-rodata: MIPS Options. (line 233) 31263* munix: VAX Options. (line 9) 31264* munix-asm: PDP-11 Options. (line 74) 31265* mupdate: RS/6000 and PowerPC Options. 31266 (line 339) 31267* musermode: SH Options. (line 118) 31268* mv850: V850 Options. (line 49) 31269* mv850e: V850 Options. (line 69) 31270* mv850e1: V850 Options. (line 64) 31271* mv8plus: SPARC Options. (line 168) 31272* mvis: SPARC Options. (line 175) 31273* mvliw-branch: FRV Options. (line 164) 31274* mvms-return-codes: DEC Alpha/VMS Options. 31275 (line 9) 31276* mvolatile-asm-stop: IA-64 Options. (line 32) 31277* mvr4130-align: MIPS Options. (line 388) 31278* mvrsave: RS/6000 and PowerPC Options. 31279 (line 173) 31280* mvxworks: RS/6000 and PowerPC Options. 31281 (line 542) 31282* mwarn-dynamicstack: S/390 and zSeries Options. 31283 (line 141) 31284* mwarn-framesize: S/390 and zSeries Options. 31285 (line 133) 31286* mwide-bitfields: MCore Options. (line 23) 31287* mwindiss: RS/6000 and PowerPC Options. 31288 (line 546) 31289* mwords-little-endian: ARM Options. (line 76) 31290* mxgot: MIPS Options. (line 127) 31291* mxl-compat: RS/6000 and PowerPC Options. 31292 (line 268) 31293* myellowknife: RS/6000 and PowerPC Options. 31294 (line 537) 31295* mzarch: S/390 and zSeries Options. 31296 (line 87) 31297* mzda: V850 Options. (line 45) 31298* mzero-extend: MMIX Options. (line 27) 31299* no-integrated-cpp: C Dialect Options. (line 217) 31300* no-red-zone: i386 and x86-64 Options. 31301 (line 472) 31302* no_dead_strip_inits_and_terms: Darwin Options. (line 190) 31303* noall_load: Darwin Options. (line 190) 31304* nocpp: MIPS Options. (line 304) 31305* nodefaultlibs: Link Options. (line 62) 31306* nofixprebinding: Darwin Options. (line 190) 31307* nolibdld: HPPA Options. (line 190) 31308* nomultidefs: Darwin Options. (line 190) 31309* noprebind: Darwin Options. (line 190) 31310* noseglinkedit: Darwin Options. (line 190) 31311* nostartfiles: Link Options. (line 57) 31312* nostdinc: Preprocessor Options. 31313 (line 373) 31314* nostdinc++ <1>: Preprocessor Options. 31315 (line 378) 31316* nostdinc++: C++ Dialect Options. 31317 (line 225) 31318* nostdlib: Link Options. (line 71) 31319* o: Preprocessor Options. 31320 (line 72) 31321* O: Optimize Options. (line 32) 31322* o: Overall Options. (line 175) 31323* O0: Optimize Options. (line 104) 31324* O1: Optimize Options. (line 32) 31325* O2: Optimize Options. (line 63) 31326* O3: Optimize Options. (line 99) 31327* Os: Optimize Options. (line 107) 31328* P: Preprocessor Options. 31329 (line 551) 31330* p: Debugging Options. (line 130) 31331* pagezero_size: Darwin Options. (line 190) 31332* param: Optimize Options. (line 1358) 31333* pass-exit-codes: Overall Options. (line 133) 31334* pedantic <1>: Warnings and Errors. 31335 (line 25) 31336* pedantic <2>: Alternate Keywords. (line 29) 31337* pedantic <3>: C Extensions. (line 6) 31338* pedantic <4>: Preprocessor Options. 31339 (line 163) 31340* pedantic <5>: Warning Options. (line 27) 31341* pedantic: Standards. (line 13) 31342* pedantic-errors <1>: Warnings and Errors. 31343 (line 25) 31344* pedantic-errors <2>: Non-bugs. (line 216) 31345* pedantic-errors <3>: Preprocessor Options. 31346 (line 168) 31347* pedantic-errors <4>: Warning Options. (line 69) 31348* pedantic-errors: Standards. (line 13) 31349* pg: Debugging Options. (line 136) 31350* pie: Link Options. (line 92) 31351* pipe: Overall Options. (line 197) 31352* prebind: Darwin Options. (line 190) 31353* prebind_all_twolevel_modules: Darwin Options. (line 190) 31354* preprocessor: Preprocessor Options. 31355 (line 24) 31356* print-file-name: Debugging Options. (line 728) 31357* print-libgcc-file-name: Debugging Options. (line 749) 31358* print-multi-directory: Debugging Options. (line 734) 31359* print-multi-lib: Debugging Options. (line 739) 31360* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 31361 (line 244) 31362* print-prog-name: Debugging Options. (line 746) 31363* print-search-dirs: Debugging Options. (line 757) 31364* private_bundle: Darwin Options. (line 190) 31365* pthread <1>: SPARC Options. (line 240) 31366* pthread <2>: RS/6000 and PowerPC Options. 31367 (line 653) 31368* pthread: IA-64 Options. (line 106) 31369* pthreads: SPARC Options. (line 234) 31370* Q: Debugging Options. (line 142) 31371* Qn: System V Options. (line 18) 31372* Qy: System V Options. (line 14) 31373* rdynamic: Link Options. (line 98) 31374* read_only_relocs: Darwin Options. (line 190) 31375* remap: Preprocessor Options. 31376 (line 599) 31377* s: Link Options. (line 105) 31378* S <1>: Link Options. (line 20) 31379* S: Overall Options. (line 158) 31380* save-temps: Debugging Options. (line 690) 31381* sectalign: Darwin Options. (line 190) 31382* sectcreate: Darwin Options. (line 190) 31383* sectobjectsymbols: Darwin Options. (line 190) 31384* sectorder: Darwin Options. (line 190) 31385* seg1addr: Darwin Options. (line 190) 31386* seg_addr_table: Darwin Options. (line 190) 31387* seg_addr_table_filename: Darwin Options. (line 190) 31388* segaddr: Darwin Options. (line 190) 31389* seglinkedit: Darwin Options. (line 190) 31390* segprot: Darwin Options. (line 190) 31391* segs_read_only_addr: Darwin Options. (line 190) 31392* segs_read_write_addr: Darwin Options. (line 190) 31393* shared: Link Options. (line 114) 31394* shared-libgcc: Link Options. (line 122) 31395* sim: CRIS Options. (line 108) 31396* sim2: CRIS Options. (line 114) 31397* single_module: Darwin Options. (line 190) 31398* specs: Directory Options. (line 84) 31399* static <1>: HPPA Options. (line 194) 31400* static <2>: Darwin Options. (line 190) 31401* static: Link Options. (line 109) 31402* static-libgcc: Link Options. (line 122) 31403* std <1>: Non-bugs. (line 107) 31404* std <2>: Other Builtins. (line 22) 31405* std <3>: C Dialect Options. (line 47) 31406* std: Standards. (line 13) 31407* std=: Preprocessor Options. 31408 (line 324) 31409* sub_library: Darwin Options. (line 190) 31410* sub_umbrella: Darwin Options. (line 190) 31411* symbolic: Link Options. (line 157) 31412* sysroot: Directory Options. (line 92) 31413* target-help <1>: Preprocessor Options. 31414 (line 604) 31415* target-help: Overall Options. (line 228) 31416* threads <1>: SPARC Options. (line 228) 31417* threads: HPPA Options. (line 207) 31418* time: Debugging Options. (line 704) 31419* tls: FRV Options. (line 75) 31420* TLS: FRV Options. (line 72) 31421* traditional <1>: Incompatibilities. (line 6) 31422* traditional: C Dialect Options. (line 229) 31423* traditional-cpp <1>: Preprocessor Options. 31424 (line 582) 31425* traditional-cpp: C Dialect Options. (line 229) 31426* trigraphs <1>: Preprocessor Options. 31427 (line 586) 31428* trigraphs: C Dialect Options. (line 213) 31429* twolevel_namespace: Darwin Options. (line 190) 31430* u: Link Options. (line 179) 31431* U: Preprocessor Options. 31432 (line 56) 31433* umbrella: Darwin Options. (line 190) 31434* undef: Preprocessor Options. 31435 (line 60) 31436* undefined: Darwin Options. (line 190) 31437* unexported_symbols_list: Darwin Options. (line 190) 31438* V: Target Options. (line 24) 31439* v <1>: Preprocessor Options. 31440 (line 608) 31441* v: Overall Options. (line 186) 31442* version <1>: Preprocessor Options. 31443 (line 621) 31444* version: Overall Options. (line 232) 31445* W: Incompatibilities. (line 64) 31446* w: Preprocessor Options. 31447 (line 159) 31448* W: Warning Options. (line 569) 31449* w: Warning Options. (line 73) 31450* Wa: Assembler Options. (line 9) 31451* Wabi: C++ Dialect Options. 31452 (line 239) 31453* Waddress: Warning Options. (line 837) 31454* Waggregate-return: Warning Options. (line 850) 31455* Wall <1>: Standard Libraries. (line 6) 31456* Wall <2>: Preprocessor Options. 31457 (line 78) 31458* Wall: Warning Options. (line 553) 31459* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 31460 (line 198) 31461* Wattributes: Warning Options. (line 855) 31462* Wbad-function-cast: Warning Options. (line 785) 31463* Wcast-align: Warning Options. (line 799) 31464* Wcast-qual: Warning Options. (line 794) 31465* Wchar-subscripts: Warning Options. (line 79) 31466* Wcomment <1>: Preprocessor Options. 31467 (line 86) 31468* Wcomment: Warning Options. (line 84) 31469* Wcomments: Preprocessor Options. 31470 (line 86) 31471* Wconversion <1>: Protoize Caveats. (line 31) 31472* Wconversion: Warning Options. (line 817) 31473* Wctor-dtor-privacy: C++ Dialect Options. 31474 (line 317) 31475* Wdeclaration-after-statement: Warning Options. (line 751) 31476* Wdisabled-optimization: Warning Options. (line 1104) 31477* Wdiv-by-zero: Warning Options. (line 643) 31478* weak_reference_mismatches: Darwin Options. (line 190) 31479* Weffc++: C++ Dialect Options. 31480 (line 343) 31481* Wendif-labels <1>: Preprocessor Options. 31482 (line 136) 31483* Wendif-labels: Warning Options. (line 761) 31484* Werror <1>: Preprocessor Options. 31485 (line 149) 31486* Werror: Warning Options. (line 1119) 31487* Werror-implicit-function-declaration: Warning Options. (line 198) 31488* Werror=: Warning Options. (line 1122) 31489* Wextra: Warning Options. (line 569) 31490* Wfatal-errors: Warning Options. (line 89) 31491* Wfloat-equal: Warning Options. (line 659) 31492* Wformat <1>: Function Attributes. 31493 (line 281) 31494* Wformat: Warning Options. (line 94) 31495* Wformat-nonliteral <1>: Function Attributes. 31496 (line 334) 31497* Wformat-nonliteral: Warning Options. (line 151) 31498* Wformat-security: Warning Options. (line 156) 31499* Wformat-y2k: Warning Options. (line 129) 31500* Wformat=2: Warning Options. (line 167) 31501* whatsloaded: Darwin Options. (line 190) 31502* whyload: Darwin Options. (line 190) 31503* Wimplicit: Warning Options. (line 204) 31504* Wimplicit-function-declaration: Warning Options. (line 198) 31505* Wimplicit-int: Warning Options. (line 193) 31506* Wimport: Preprocessor Options. 31507 (line 109) 31508* Winit-self: Warning Options. (line 179) 31509* Winline <1>: Inline. (line 42) 31510* Winline: Warning Options. (line 1048) 31511* Winvalid-pch: Warning Options. (line 1083) 31512* Wl: Link Options. (line 175) 31513* Wlarger-than: Warning Options. (line 770) 31514* Wlong-long: Warning Options. (line 1087) 31515* Wmain: Warning Options. (line 208) 31516* Wmissing-braces: Warning Options. (line 214) 31517* Wmissing-declarations: Warning Options. (line 877) 31518* Wmissing-field-initializers: Warning Options. (line 883) 31519* Wmissing-format-attribute: Warning Options. (line 909) 31520* Wmissing-include-dirs: Warning Options. (line 224) 31521* Wmissing-noreturn: Warning Options. (line 901) 31522* Wmissing-prototypes: Warning Options. (line 871) 31523* Wmultichar: Warning Options. (line 928) 31524* Wnested-externs: Warning Options. (line 1023) 31525* Wno-address: Warning Options. (line 837) 31526* Wno-attributes: Warning Options. (line 855) 31527* Wno-deprecated: C++ Dialect Options. 31528 (line 373) 31529* Wno-deprecated-declarations: Warning Options. (line 977) 31530* Wno-div-by-zero: Warning Options. (line 643) 31531* Wno-endif-labels: Warning Options. (line 761) 31532* Wno-format-extra-args: Warning Options. (line 133) 31533* Wno-format-zero-length: Warning Options. (line 147) 31534* Wno-import: Warning Options. (line 76) 31535* Wno-int-to-pointer-cast: Warning Options. (line 1075) 31536* Wno-invalid-offsetof: Warning Options. (line 1061) 31537* Wno-long-long: Warning Options. (line 1087) 31538* Wno-multichar: Warning Options. (line 928) 31539* Wno-non-template-friend: C++ Dialect Options. 31540 (line 384) 31541* Wno-overflow: Warning Options. (line 983) 31542* Wno-pmf-conversions <1>: Bound member functions. 31543 (line 35) 31544* Wno-pmf-conversions: C++ Dialect Options. 31545 (line 425) 31546* Wno-pointer-sign: Warning Options. (line 1113) 31547* Wno-pointer-to-int-cast: Warning Options. (line 1079) 31548* Wno-pragmas: Warning Options. (line 481) 31549* Wno-protocol: Objective-C and Objective-C++ Dialect Options. 31550 (line 202) 31551* Wno-variadic-macros: Warning Options. (line 1093) 31552* Wno-volatile-register-var: Warning Options. (line 1099) 31553* Wnon-virtual-dtor: C++ Dialect Options. 31554 (line 322) 31555* Wnonnull: Warning Options. (line 172) 31556* Wnormalized: Warning Options. (line 934) 31557* Wold-style-cast: C++ Dialect Options. 31558 (line 400) 31559* Wold-style-definition: Warning Options. (line 867) 31560* Woverlength-strings: Warning Options. (line 1141) 31561* Woverloaded-virtual: C++ Dialect Options. 31562 (line 406) 31563* Woverride-init: Warning Options. (line 986) 31564* Wp: Preprocessor Options. 31565 (line 13) 31566* Wpacked: Warning Options. (line 994) 31567* Wpadded: Warning Options. (line 1011) 31568* Wparentheses: Warning Options. (line 227) 31569* Wpointer-arith <1>: Pointer Arith. (line 13) 31570* Wpointer-arith: Warning Options. (line 779) 31571* Wpointer-sign: Warning Options. (line 1113) 31572* Wpragmas: Warning Options. (line 481) 31573* Wredundant-decls: Warning Options. (line 1018) 31574* Wreorder: C++ Dialect Options. 31575 (line 327) 31576* Wreturn-type: Warning Options. (line 319) 31577* Wselector: Objective-C and Objective-C++ Dialect Options. 31578 (line 212) 31579* Wsequence-point: Warning Options. (line 273) 31580* Wshadow: Warning Options. (line 765) 31581* Wsign-compare: Warning Options. (line 830) 31582* Wsign-promo: C++ Dialect Options. 31583 (line 429) 31584* Wstack-protector: Warning Options. (line 1136) 31585* Wstrict-aliasing: Warning Options. (line 486) 31586* Wstrict-aliasing=2: Warning Options. (line 493) 31587* Wstrict-null-sentinel: C++ Dialect Options. 31588 (line 377) 31589* Wstrict-overflow: Warning Options. (line 502) 31590* Wstrict-prototypes: Warning Options. (line 861) 31591* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 31592 (line 224) 31593* Wswitch: Warning Options. (line 338) 31594* Wswitch-enum: Warning Options. (line 349) 31595* Wswitch-switch: Warning Options. (line 346) 31596* Wsystem-headers <1>: Preprocessor Options. 31597 (line 153) 31598* Wsystem-headers: Warning Options. (line 648) 31599* Wtraditional <1>: Preprocessor Options. 31600 (line 103) 31601* Wtraditional: Warning Options. (line 674) 31602* Wtrigraphs <1>: Preprocessor Options. 31603 (line 91) 31604* Wtrigraphs: Warning Options. (line 355) 31605* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 31606 (line 232) 31607* Wundef <1>: Preprocessor Options. 31608 (line 112) 31609* Wundef: Warning Options. (line 758) 31610* Wuninitialized: Warning Options. (line 400) 31611* Wunknown-pragmas: Warning Options. (line 474) 31612* Wunreachable-code: Warning Options. (line 1026) 31613* Wunsafe-loop-optimizations: Warning Options. (line 773) 31614* Wunused: Warning Options. (line 393) 31615* Wunused-function: Warning Options. (line 360) 31616* Wunused-label: Warning Options. (line 365) 31617* Wunused-macros: Preprocessor Options. 31618 (line 117) 31619* Wunused-parameter: Warning Options. (line 372) 31620* Wunused-value: Warning Options. (line 387) 31621* Wunused-variable: Warning Options. (line 379) 31622* Wvariadic-macros: Warning Options. (line 1093) 31623* Wvolatile-register-var: Warning Options. (line 1099) 31624* Wwrite-strings: Warning Options. (line 805) 31625* x <1>: Preprocessor Options. 31626 (line 308) 31627* x: Overall Options. (line 109) 31628* Xassembler: Assembler Options. (line 13) 31629* Xlinker: Link Options. (line 163) 31630* Ym: System V Options. (line 26) 31631* YP: System V Options. (line 22) 31632 31633 31634File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 31635 31636Keyword Index 31637************* 31638 31639[index] 31640* Menu: 31641 31642* ! in constraint: Multi-Alternative. (line 33) 31643* # in constraint: Modifiers. (line 57) 31644* #pragma: Pragmas. (line 6) 31645* #pragma implementation: C++ Interface. (line 39) 31646* #pragma implementation, implied: C++ Interface. (line 46) 31647* #pragma interface: C++ Interface. (line 20) 31648* #pragma, reason for not using: Function Attributes. 31649 (line 916) 31650* $: Dollar Signs. (line 6) 31651* % in constraint: Modifiers. (line 45) 31652* %include: Spec Files. (line 27) 31653* %include_noerr: Spec Files. (line 31) 31654* %rename: Spec Files. (line 35) 31655* & in constraint: Modifiers. (line 25) 31656* ': Incompatibilities. (line 116) 31657* * in constraint: Modifiers. (line 62) 31658* + in constraint: Modifiers. (line 12) 31659* -lgcc, use with -nodefaultlibs: Link Options. (line 79) 31660* -lgcc, use with -nostdlib: Link Options. (line 79) 31661* -nodefaultlibs and unresolved references: Link Options. (line 79) 31662* -nostdlib and unresolved references: Link Options. (line 79) 31663* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 31664 (line 607) 31665* //: C++ Comments. (line 6) 31666* 0 in constraint: Simple Constraints. (line 115) 31667* < in constraint: Simple Constraints. (line 46) 31668* = in constraint: Modifiers. (line 8) 31669* > in constraint: Simple Constraints. (line 50) 31670* ? in constraint: Multi-Alternative. (line 27) 31671* ?: extensions: Conditionals. (line 6) 31672* ?: side effect: Conditionals. (line 20) 31673* _ in variables in macros: Typeof. (line 42) 31674* __builtin___fprintf_chk: Object Size Checking. 31675 (line 6) 31676* __builtin___memcpy_chk: Object Size Checking. 31677 (line 6) 31678* __builtin___memmove_chk: Object Size Checking. 31679 (line 6) 31680* __builtin___mempcpy_chk: Object Size Checking. 31681 (line 6) 31682* __builtin___memset_chk: Object Size Checking. 31683 (line 6) 31684* __builtin___printf_chk: Object Size Checking. 31685 (line 6) 31686* __builtin___snprintf_chk: Object Size Checking. 31687 (line 6) 31688* __builtin___sprintf_chk: Object Size Checking. 31689 (line 6) 31690* __builtin___stpcpy_chk: Object Size Checking. 31691 (line 6) 31692* __builtin___strcat_chk: Object Size Checking. 31693 (line 6) 31694* __builtin___strcpy_chk: Object Size Checking. 31695 (line 6) 31696* __builtin___strncat_chk: Object Size Checking. 31697 (line 6) 31698* __builtin___strncpy_chk: Object Size Checking. 31699 (line 6) 31700* __builtin___vfprintf_chk: Object Size Checking. 31701 (line 6) 31702* __builtin___vprintf_chk: Object Size Checking. 31703 (line 6) 31704* __builtin___vsnprintf_chk: Object Size Checking. 31705 (line 6) 31706* __builtin___vsprintf_chk: Object Size Checking. 31707 (line 6) 31708* __builtin_apply: Constructing Calls. (line 31) 31709* __builtin_apply_args: Constructing Calls. (line 20) 31710* __builtin_choose_expr: Other Builtins. (line 150) 31711* __builtin_clz: Other Builtins. (line 383) 31712* __builtin_clzl: Other Builtins. (line 401) 31713* __builtin_clzll: Other Builtins. (line 421) 31714* __builtin_constant_p: Other Builtins. (line 190) 31715* __builtin_ctz: Other Builtins. (line 387) 31716* __builtin_ctzl: Other Builtins. (line 405) 31717* __builtin_ctzll: Other Builtins. (line 425) 31718* __builtin_expect: Other Builtins. (line 236) 31719* __builtin_ffs: Other Builtins. (line 379) 31720* __builtin_ffsl: Other Builtins. (line 397) 31721* __builtin_ffsll: Other Builtins. (line 417) 31722* __builtin_frame_address: Return Address. (line 34) 31723* __builtin_huge_val: Other Builtins. (line 300) 31724* __builtin_huge_valf: Other Builtins. (line 305) 31725* __builtin_huge_vall: Other Builtins. (line 308) 31726* __builtin_inf: Other Builtins. (line 312) 31727* __builtin_infd128: Other Builtins. (line 322) 31728* __builtin_infd32: Other Builtins. (line 316) 31729* __builtin_infd64: Other Builtins. (line 319) 31730* __builtin_inff: Other Builtins. (line 326) 31731* __builtin_infl: Other Builtins. (line 331) 31732* __builtin_isgreater: Other Builtins. (line 6) 31733* __builtin_isgreaterequal: Other Builtins. (line 6) 31734* __builtin_isless: Other Builtins. (line 6) 31735* __builtin_islessequal: Other Builtins. (line 6) 31736* __builtin_islessgreater: Other Builtins. (line 6) 31737* __builtin_isunordered: Other Builtins. (line 6) 31738* __builtin_nan: Other Builtins. (line 335) 31739* __builtin_nand128: Other Builtins. (line 357) 31740* __builtin_nand32: Other Builtins. (line 351) 31741* __builtin_nand64: Other Builtins. (line 354) 31742* __builtin_nanf: Other Builtins. (line 361) 31743* __builtin_nanl: Other Builtins. (line 364) 31744* __builtin_nans: Other Builtins. (line 368) 31745* __builtin_nansf: Other Builtins. (line 372) 31746* __builtin_nansl: Other Builtins. (line 375) 31747* __builtin_object_size: Object Size Checking. 31748 (line 6) 31749* __builtin_offsetof: Offsetof. (line 6) 31750* __builtin_parity: Other Builtins. (line 394) 31751* __builtin_parityl: Other Builtins. (line 413) 31752* __builtin_parityll: Other Builtins. (line 433) 31753* __builtin_popcount: Other Builtins. (line 391) 31754* __builtin_popcountl: Other Builtins. (line 409) 31755* __builtin_popcountll: Other Builtins. (line 429) 31756* __builtin_powi: Other Builtins. (line 6) 31757* __builtin_powif: Other Builtins. (line 6) 31758* __builtin_powil: Other Builtins. (line 6) 31759* __builtin_prefetch: Other Builtins. (line 261) 31760* __builtin_return: Constructing Calls. (line 48) 31761* __builtin_return_address: Return Address. (line 11) 31762* __builtin_types_compatible_p: Other Builtins. (line 104) 31763* __complex__ keyword: Complex. (line 6) 31764* __declspec(dllexport): Function Attributes. 31765 (line 161) 31766* __declspec(dllimport): Function Attributes. 31767 (line 193) 31768* __extension__: Alternate Keywords. (line 29) 31769* __func__ identifier: Function Names. (line 6) 31770* __FUNCTION__ identifier: Function Names. (line 6) 31771* __imag__ keyword: Complex. (line 27) 31772* __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 31773* __real__ keyword: Complex. (line 27) 31774* __STDC_HOSTED__: Standards. (line 6) 31775* __sync_add_and_fetch: Atomic Builtins. (line 57) 31776* __sync_and_and_fetch: Atomic Builtins. (line 57) 31777* __sync_bool_compare_and_swap: Atomic Builtins. (line 65) 31778* __sync_fetch_and_add: Atomic Builtins. (line 45) 31779* __sync_fetch_and_and: Atomic Builtins. (line 45) 31780* __sync_fetch_and_nand: Atomic Builtins. (line 45) 31781* __sync_fetch_and_or: Atomic Builtins. (line 45) 31782* __sync_fetch_and_sub: Atomic Builtins. (line 45) 31783* __sync_fetch_and_xor: Atomic Builtins. (line 45) 31784* __sync_lock_release: Atomic Builtins. (line 95) 31785* __sync_lock_test_and_set: Atomic Builtins. (line 77) 31786* __sync_nand_and_fetch: Atomic Builtins. (line 57) 31787* __sync_or_and_fetch: Atomic Builtins. (line 57) 31788* __sync_sub_and_fetch: Atomic Builtins. (line 57) 31789* __sync_synchronize: Atomic Builtins. (line 74) 31790* __sync_val_compare_and_swap: Atomic Builtins. (line 65) 31791* __sync_xor_and_fetch: Atomic Builtins. (line 57) 31792* __thread: Thread-Local. (line 6) 31793* _Complex keyword: Complex. (line 6) 31794* _Decimal128 data type: Decimal Float. (line 6) 31795* _Decimal32 data type: Decimal Float. (line 6) 31796* _Decimal64 data type: Decimal Float. (line 6) 31797* _exit: Other Builtins. (line 6) 31798* _Exit: Other Builtins. (line 6) 31799* ABI: Compatibility. (line 6) 31800* abort: Other Builtins. (line 6) 31801* abs: Other Builtins. (line 6) 31802* accessing volatiles: Volatiles. (line 6) 31803* acos: Other Builtins. (line 6) 31804* acosf: Other Builtins. (line 6) 31805* acosh: Other Builtins. (line 6) 31806* acoshf: Other Builtins. (line 6) 31807* acoshl: Other Builtins. (line 6) 31808* acosl: Other Builtins. (line 6) 31809* Ada: G++ and GCC. (line 6) 31810* address constraints: Simple Constraints. (line 142) 31811* address of a label: Labels as Values. (line 6) 31812* address_operand: Simple Constraints. (line 146) 31813* alias attribute: Function Attributes. 31814 (line 33) 31815* aliasing of parameters: Code Gen Options. (line 332) 31816* aligned attribute <1>: Type Attributes. (line 30) 31817* aligned attribute: Variable Attributes. 31818 (line 23) 31819* alignment: Alignment. (line 6) 31820* alloca: Other Builtins. (line 6) 31821* alloca vs variable-length arrays: Variable Length. (line 27) 31822* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 31823 (line 497) 31824* alternate keywords: Alternate Keywords. (line 6) 31825* always_inline function attribute: Function Attributes. 31826 (line 46) 31827* AMD x86-64 Options: i386 and x86-64 Options. 31828 (line 6) 31829* AMD1: Standards. (line 6) 31830* ANSI C: Standards. (line 6) 31831* ANSI C standard: Standards. (line 6) 31832* ANSI C89: Standards. (line 6) 31833* ANSI support: C Dialect Options. (line 10) 31834* ANSI X3.159-1989: Standards. (line 6) 31835* apostrophes: Incompatibilities. (line 116) 31836* application binary interface: Compatibility. (line 6) 31837* ARC Options: ARC Options. (line 6) 31838* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 31839 (line 6) 31840* ARM options: ARM Options. (line 6) 31841* arrays of length zero: Zero Length. (line 6) 31842* arrays of variable length: Variable Length. (line 6) 31843* arrays, non-lvalue: Subscripting. (line 6) 31844* asin: Other Builtins. (line 6) 31845* asinf: Other Builtins. (line 6) 31846* asinh: Other Builtins. (line 6) 31847* asinhf: Other Builtins. (line 6) 31848* asinhl: Other Builtins. (line 6) 31849* asinl: Other Builtins. (line 6) 31850* asm constraints: Constraints. (line 6) 31851* asm expressions: Extended Asm. (line 6) 31852* assembler instructions: Extended Asm. (line 6) 31853* assembler names for identifiers: Asm Labels. (line 6) 31854* assembly code, invalid: Bug Criteria. (line 12) 31855* atan: Other Builtins. (line 6) 31856* atan2: Other Builtins. (line 6) 31857* atan2f: Other Builtins. (line 6) 31858* atan2l: Other Builtins. (line 6) 31859* atanf: Other Builtins. (line 6) 31860* atanh: Other Builtins. (line 6) 31861* atanhf: Other Builtins. (line 6) 31862* atanhl: Other Builtins. (line 6) 31863* atanl: Other Builtins. (line 6) 31864* attribute of types: Type Attributes. (line 6) 31865* attribute of variables: Variable Attributes. 31866 (line 6) 31867* attribute syntax: Attribute Syntax. (line 6) 31868* autoincrement/decrement addressing: Simple Constraints. (line 28) 31869* automatic inline for C++ member fns: Inline. (line 53) 31870* AVR Options: AVR Options. (line 6) 31871* Backwards Compatibility: Backwards Compatibility. 31872 (line 6) 31873* base class members: Name lookup. (line 6) 31874* bcmp: Other Builtins. (line 6) 31875* below100 attribute: Variable Attributes. 31876 (line 449) 31877* binary compatibility: Compatibility. (line 6) 31878* Blackfin Options: Blackfin Options. (line 6) 31879* bound pointer to member function: Bound member functions. 31880 (line 6) 31881* bounds checking: Optimize Options. (line 333) 31882* bug criteria: Bug Criteria. (line 6) 31883* bugs: Bugs. (line 6) 31884* bugs, known: Trouble. (line 6) 31885* built-in functions <1>: Other Builtins. (line 6) 31886* built-in functions: C Dialect Options. (line 149) 31887* bzero: Other Builtins. (line 6) 31888* C compilation options: Invoking GCC. (line 17) 31889* C intermediate output, nonexistent: G++ and GCC. (line 35) 31890* C language extensions: C Extensions. (line 6) 31891* C language, traditional: C Dialect Options. (line 227) 31892* C standard: Standards. (line 6) 31893* C standards: Standards. (line 6) 31894* c++: Invoking G++. (line 13) 31895* C++: G++ and GCC. (line 30) 31896* C++ comments: C++ Comments. (line 6) 31897* C++ compilation options: Invoking GCC. (line 23) 31898* C++ interface and implementation headers: C++ Interface. (line 6) 31899* C++ language extensions: C++ Extensions. (line 6) 31900* C++ member fns, automatically inline: Inline. (line 53) 31901* C++ misunderstandings: C++ Misunderstandings. 31902 (line 6) 31903* C++ options, command line: C++ Dialect Options. 31904 (line 6) 31905* C++ pragmas, effect on inlining: C++ Interface. (line 66) 31906* C++ source file suffixes: Invoking G++. (line 6) 31907* C++ static data, declaring and defining: Static Definitions. 31908 (line 6) 31909* C89: Standards. (line 6) 31910* C90: Standards. (line 6) 31911* C94: Standards. (line 6) 31912* C95: Standards. (line 6) 31913* C99: Standards. (line 6) 31914* C9X: Standards. (line 6) 31915* C_INCLUDE_PATH: Environment Variables. 31916 (line 124) 31917* cabs: Other Builtins. (line 6) 31918* cabsf: Other Builtins. (line 6) 31919* cabsl: Other Builtins. (line 6) 31920* cacos: Other Builtins. (line 6) 31921* cacosf: Other Builtins. (line 6) 31922* cacosh: Other Builtins. (line 6) 31923* cacoshf: Other Builtins. (line 6) 31924* cacoshl: Other Builtins. (line 6) 31925* cacosl: Other Builtins. (line 6) 31926* calling functions through the function vector on the H8/300 processors: Function Attributes. 31927 (line 373) 31928* calloc: Other Builtins. (line 6) 31929* carg: Other Builtins. (line 6) 31930* cargf: Other Builtins. (line 6) 31931* cargl: Other Builtins. (line 6) 31932* case labels in initializers: Designated Inits. (line 6) 31933* case ranges: Case Ranges. (line 6) 31934* casin: Other Builtins. (line 6) 31935* casinf: Other Builtins. (line 6) 31936* casinh: Other Builtins. (line 6) 31937* casinhf: Other Builtins. (line 6) 31938* casinhl: Other Builtins. (line 6) 31939* casinl: Other Builtins. (line 6) 31940* cast to a union: Cast to Union. (line 6) 31941* catan: Other Builtins. (line 6) 31942* catanf: Other Builtins. (line 6) 31943* catanh: Other Builtins. (line 6) 31944* catanhf: Other Builtins. (line 6) 31945* catanhl: Other Builtins. (line 6) 31946* catanl: Other Builtins. (line 6) 31947* cbrt: Other Builtins. (line 6) 31948* cbrtf: Other Builtins. (line 6) 31949* cbrtl: Other Builtins. (line 6) 31950* ccos: Other Builtins. (line 6) 31951* ccosf: Other Builtins. (line 6) 31952* ccosh: Other Builtins. (line 6) 31953* ccoshf: Other Builtins. (line 6) 31954* ccoshl: Other Builtins. (line 6) 31955* ccosl: Other Builtins. (line 6) 31956* ceil: Other Builtins. (line 6) 31957* ceilf: Other Builtins. (line 6) 31958* ceill: Other Builtins. (line 6) 31959* cexp: Other Builtins. (line 6) 31960* cexpf: Other Builtins. (line 6) 31961* cexpl: Other Builtins. (line 6) 31962* character set, execution: Preprocessor Options. 31963 (line 467) 31964* character set, input: Preprocessor Options. 31965 (line 480) 31966* character set, input normalization: Warning Options. (line 934) 31967* character set, wide execution: Preprocessor Options. 31968 (line 472) 31969* cimag: Other Builtins. (line 6) 31970* cimagf: Other Builtins. (line 6) 31971* cimagl: Other Builtins. (line 6) 31972* cleanup attribute: Variable Attributes. 31973 (line 76) 31974* clog: Other Builtins. (line 6) 31975* clogf: Other Builtins. (line 6) 31976* clogl: Other Builtins. (line 6) 31977* COBOL: G++ and GCC. (line 23) 31978* code generation conventions: Code Gen Options. (line 6) 31979* code, mixed with declarations: Mixed Declarations. (line 6) 31980* command options: Invoking GCC. (line 6) 31981* comments, C++ style: C++ Comments. (line 6) 31982* common attribute: Variable Attributes. 31983 (line 92) 31984* comparison of signed and unsigned values, warning: Warning Options. 31985 (line 830) 31986* compiler bugs, reporting: Bug Reporting. (line 6) 31987* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 31988* compiler options, C++: C++ Dialect Options. 31989 (line 6) 31990* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 31991 (line 6) 31992* compiler version, specifying: Target Options. (line 6) 31993* COMPILER_PATH: Environment Variables. 31994 (line 85) 31995* complex conjugation: Complex. (line 34) 31996* complex numbers: Complex. (line 6) 31997* compound literals: Compound Literals. (line 6) 31998* computed gotos: Labels as Values. (line 6) 31999* conditional expressions, extensions: Conditionals. (line 6) 32000* conflicting types: Disappointments. (line 21) 32001* conj: Other Builtins. (line 6) 32002* conjf: Other Builtins. (line 6) 32003* conjl: Other Builtins. (line 6) 32004* const applied to function: Function Attributes. 32005 (line 6) 32006* const function attribute: Function Attributes. 32007 (line 106) 32008* constants in constraints: Simple Constraints. (line 58) 32009* constraint modifier characters: Modifiers. (line 6) 32010* constraint, matching: Simple Constraints. (line 127) 32011* constraints, asm: Constraints. (line 6) 32012* constraints, machine specific: Machine Constraints. 32013 (line 6) 32014* constructing calls: Constructing Calls. (line 6) 32015* constructor expressions: Compound Literals. (line 6) 32016* constructor function attribute: Function Attributes. 32017 (line 132) 32018* contributors: Contributors. (line 6) 32019* copysign: Other Builtins. (line 6) 32020* copysignf: Other Builtins. (line 6) 32021* copysignl: Other Builtins. (line 6) 32022* core dump: Bug Criteria. (line 9) 32023* cos: Other Builtins. (line 6) 32024* cosf: Other Builtins. (line 6) 32025* cosh: Other Builtins. (line 6) 32026* coshf: Other Builtins. (line 6) 32027* coshl: Other Builtins. (line 6) 32028* cosl: Other Builtins. (line 6) 32029* CPATH: Environment Variables. 32030 (line 123) 32031* CPLUS_INCLUDE_PATH: Environment Variables. 32032 (line 125) 32033* cpow: Other Builtins. (line 6) 32034* cpowf: Other Builtins. (line 6) 32035* cpowl: Other Builtins. (line 6) 32036* cproj: Other Builtins. (line 6) 32037* cprojf: Other Builtins. (line 6) 32038* cprojl: Other Builtins. (line 6) 32039* creal: Other Builtins. (line 6) 32040* crealf: Other Builtins. (line 6) 32041* creall: Other Builtins. (line 6) 32042* CRIS Options: CRIS Options. (line 6) 32043* cross compiling: Target Options. (line 6) 32044* CRX Options: CRX Options. (line 6) 32045* csin: Other Builtins. (line 6) 32046* csinf: Other Builtins. (line 6) 32047* csinh: Other Builtins. (line 6) 32048* csinhf: Other Builtins. (line 6) 32049* csinhl: Other Builtins. (line 6) 32050* csinl: Other Builtins. (line 6) 32051* csqrt: Other Builtins. (line 6) 32052* csqrtf: Other Builtins. (line 6) 32053* csqrtl: Other Builtins. (line 6) 32054* ctan: Other Builtins. (line 6) 32055* ctanf: Other Builtins. (line 6) 32056* ctanh: Other Builtins. (line 6) 32057* ctanhf: Other Builtins. (line 6) 32058* ctanhl: Other Builtins. (line 6) 32059* ctanl: Other Builtins. (line 6) 32060* Darwin options: Darwin Options. (line 6) 32061* dcgettext: Other Builtins. (line 6) 32062* DD integer suffix: Decimal Float. (line 6) 32063* dd integer suffix: Decimal Float. (line 6) 32064* deallocating variable length arrays: Variable Length. (line 23) 32065* debugging information options: Debugging Options. (line 6) 32066* decimal floating types: Decimal Float. (line 6) 32067* declaration scope: Incompatibilities. (line 80) 32068* declarations inside expressions: Statement Exprs. (line 6) 32069* declarations, mixed with code: Mixed Declarations. (line 6) 32070* declaring attributes of functions: Function Attributes. 32071 (line 6) 32072* declaring static data in C++: Static Definitions. (line 6) 32073* defining static data in C++: Static Definitions. (line 6) 32074* dependencies for make as output: Environment Variables. 32075 (line 151) 32076* dependencies, make: Preprocessor Options. 32077 (line 173) 32078* DEPENDENCIES_OUTPUT: Environment Variables. 32079 (line 150) 32080* dependent name lookup: Name lookup. (line 6) 32081* deprecated attribute: Variable Attributes. 32082 (line 100) 32083* deprecated attribute.: Function Attributes. 32084 (line 143) 32085* designated initializers: Designated Inits. (line 6) 32086* designator lists: Designated Inits. (line 94) 32087* designators: Designated Inits. (line 61) 32088* destructor function attribute: Function Attributes. 32089 (line 132) 32090* DF integer suffix: Decimal Float. (line 6) 32091* df integer suffix: Decimal Float. (line 6) 32092* dgettext: Other Builtins. (line 6) 32093* diagnostic messages: Language Independent Options. 32094 (line 6) 32095* dialect options: C Dialect Options. (line 6) 32096* digits in constraint: Simple Constraints. (line 115) 32097* directory options: Directory Options. (line 6) 32098* DL integer suffix: Decimal Float. (line 6) 32099* dl integer suffix: Decimal Float. (line 6) 32100* dollar signs in identifier names: Dollar Signs. (line 6) 32101* double-word arithmetic: Long Long. (line 6) 32102* downward funargs: Nested Functions. (line 6) 32103* drem: Other Builtins. (line 6) 32104* dremf: Other Builtins. (line 6) 32105* dreml: Other Builtins. (line 6) 32106* E in constraint: Simple Constraints. (line 77) 32107* earlyclobber operand: Modifiers. (line 25) 32108* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 32109 (line 240) 32110* empty structures: Empty Structures. (line 6) 32111* environment variables: Environment Variables. 32112 (line 6) 32113* erf: Other Builtins. (line 6) 32114* erfc: Other Builtins. (line 6) 32115* erfcf: Other Builtins. (line 6) 32116* erfcl: Other Builtins. (line 6) 32117* erff: Other Builtins. (line 6) 32118* erfl: Other Builtins. (line 6) 32119* error messages: Warnings and Errors. 32120 (line 6) 32121* escaped newlines: Escaped Newlines. (line 6) 32122* exception handler functions on the Blackfin processor: Function Attributes. 32123 (line 250) 32124* exclamation point: Multi-Alternative. (line 33) 32125* exit: Other Builtins. (line 6) 32126* exp: Other Builtins. (line 6) 32127* exp10: Other Builtins. (line 6) 32128* exp10f: Other Builtins. (line 6) 32129* exp10l: Other Builtins. (line 6) 32130* exp2: Other Builtins. (line 6) 32131* exp2f: Other Builtins. (line 6) 32132* exp2l: Other Builtins. (line 6) 32133* expf: Other Builtins. (line 6) 32134* expl: Other Builtins. (line 6) 32135* explicit register variables: Explicit Reg Vars. (line 6) 32136* expm1: Other Builtins. (line 6) 32137* expm1f: Other Builtins. (line 6) 32138* expm1l: Other Builtins. (line 6) 32139* expressions containing statements: Statement Exprs. (line 6) 32140* expressions, constructor: Compound Literals. (line 6) 32141* extended asm: Extended Asm. (line 6) 32142* extensible constraints: Simple Constraints. (line 151) 32143* extensions, ?:: Conditionals. (line 6) 32144* extensions, C language: C Extensions. (line 6) 32145* extensions, C++ language: C++ Extensions. (line 6) 32146* external declaration scope: Incompatibilities. (line 80) 32147* externally_visible attribute.: Function Attributes. 32148 (line 907) 32149* F in constraint: Simple Constraints. (line 82) 32150* fabs: Other Builtins. (line 6) 32151* fabsf: Other Builtins. (line 6) 32152* fabsl: Other Builtins. (line 6) 32153* fatal signal: Bug Criteria. (line 9) 32154* fdim: Other Builtins. (line 6) 32155* fdimf: Other Builtins. (line 6) 32156* fdiml: Other Builtins. (line 6) 32157* FDL, GNU Free Documentation License: GNU Free Documentation License. 32158 (line 6) 32159* ffs: Other Builtins. (line 6) 32160* file name suffix: Overall Options. (line 14) 32161* file names: Link Options. (line 10) 32162* flatten function attribute: Function Attributes. 32163 (line 91) 32164* flexible array members: Zero Length. (line 6) 32165* float as function value type: Incompatibilities. (line 141) 32166* floating point precision <1>: Disappointments. (line 68) 32167* floating point precision: Optimize Options. (line 1060) 32168* floor: Other Builtins. (line 6) 32169* floorf: Other Builtins. (line 6) 32170* floorl: Other Builtins. (line 6) 32171* fma: Other Builtins. (line 6) 32172* fmaf: Other Builtins. (line 6) 32173* fmal: Other Builtins. (line 6) 32174* fmax: Other Builtins. (line 6) 32175* fmaxf: Other Builtins. (line 6) 32176* fmaxl: Other Builtins. (line 6) 32177* fmin: Other Builtins. (line 6) 32178* fminf: Other Builtins. (line 6) 32179* fminl: Other Builtins. (line 6) 32180* fmod: Other Builtins. (line 6) 32181* fmodf: Other Builtins. (line 6) 32182* fmodl: Other Builtins. (line 6) 32183* force_align_arg_pointer attribute: Function Attributes. 32184 (line 636) 32185* format function attribute: Function Attributes. 32186 (line 281) 32187* format_arg function attribute: Function Attributes. 32188 (line 334) 32189* Fortran: G++ and GCC. (line 6) 32190* forwarding calls: Constructing Calls. (line 6) 32191* fprintf: Other Builtins. (line 6) 32192* fprintf_unlocked: Other Builtins. (line 6) 32193* fputs: Other Builtins. (line 6) 32194* fputs_unlocked: Other Builtins. (line 6) 32195* freestanding environment: Standards. (line 6) 32196* freestanding implementation: Standards. (line 6) 32197* frexp: Other Builtins. (line 6) 32198* frexpf: Other Builtins. (line 6) 32199* frexpl: Other Builtins. (line 6) 32200* FRV Options: FRV Options. (line 6) 32201* fscanf: Other Builtins. (line 6) 32202* fscanf, and constant strings: Incompatibilities. (line 17) 32203* function addressability on the M32R/D: Function Attributes. 32204 (line 457) 32205* function attributes: Function Attributes. 32206 (line 6) 32207* function pointers, arithmetic: Pointer Arith. (line 6) 32208* function prototype declarations: Function Prototypes. 32209 (line 6) 32210* function without a prologue/epilogue code: Function Attributes. 32211 (line 485) 32212* function, size of pointer to: Pointer Arith. (line 6) 32213* functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 32214 (line 428) 32215* functions in arbitrary sections: Function Attributes. 32216 (line 6) 32217* functions that are passed arguments in registers on the 386: Function Attributes. 32218 (line 6) 32219* functions that behave like malloc: Function Attributes. 32220 (line 6) 32221* functions that do not pop the argument stack on the 386: Function Attributes. 32222 (line 6) 32223* functions that do pop the argument stack on the 386: Function Attributes. 32224 (line 100) 32225* functions that have no side effects: Function Attributes. 32226 (line 6) 32227* functions that never return: Function Attributes. 32228 (line 6) 32229* functions that pop the argument stack on the 386: Function Attributes. 32230 (line 6) 32231* functions that return more than once: Function Attributes. 32232 (line 6) 32233* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 32234 (line 491) 32235* functions which handle memory bank switching: Function Attributes. 32236 (line 256) 32237* functions with non-null pointer arguments: Function Attributes. 32238 (line 6) 32239* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 32240 (line 6) 32241* g in constraint: Simple Constraints. (line 108) 32242* G in constraint: Simple Constraints. (line 86) 32243* g++: Invoking G++. (line 13) 32244* G++: G++ and GCC. (line 30) 32245* gamma: Other Builtins. (line 6) 32246* gammaf: Other Builtins. (line 6) 32247* gammal: Other Builtins. (line 6) 32248* GCC: G++ and GCC. (line 6) 32249* GCC command options: Invoking GCC. (line 6) 32250* GCC_EXEC_PREFIX: Environment Variables. 32251 (line 52) 32252* gcc_struct: Type Attributes. (line 302) 32253* gcc_struct attribute: Variable Attributes. 32254 (line 313) 32255* gcov: Debugging Options. (line 168) 32256* gettext: Other Builtins. (line 6) 32257* global offset table: Code Gen Options. (line 163) 32258* global register after longjmp: Global Reg Vars. (line 66) 32259* global register variables: Global Reg Vars. (line 6) 32260* GNAT: G++ and GCC. (line 30) 32261* GNU C Compiler: G++ and GCC. (line 6) 32262* GNU Compiler Collection: G++ and GCC. (line 6) 32263* gnu_inline function attribute: Function Attributes. 32264 (line 51) 32265* goto with computed label: Labels as Values. (line 6) 32266* gp-relative references (MIPS): MIPS Options. (line 216) 32267* gprof: Debugging Options. (line 135) 32268* grouping options: Invoking GCC. (line 26) 32269* H in constraint: Simple Constraints. (line 86) 32270* hardware models and configurations, specifying: Submodel Options. 32271 (line 6) 32272* hex floats: Hex Floats. (line 6) 32273* hosted environment <1>: C Dialect Options. (line 183) 32274* hosted environment: Standards. (line 6) 32275* hosted implementation: Standards. (line 6) 32276* HPPA Options: HPPA Options. (line 6) 32277* hypot: Other Builtins. (line 6) 32278* hypotf: Other Builtins. (line 6) 32279* hypotl: Other Builtins. (line 6) 32280* I in constraint: Simple Constraints. (line 69) 32281* i in constraint: Simple Constraints. (line 58) 32282* i386 Options: i386 and x86-64 Options. 32283 (line 6) 32284* IA-64 Options: IA-64 Options. (line 6) 32285* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 32286 (line 6) 32287* identifier names, dollar signs in: Dollar Signs. (line 6) 32288* identifiers, names in assembler code: Asm Labels. (line 6) 32289* ilogb: Other Builtins. (line 6) 32290* ilogbf: Other Builtins. (line 6) 32291* ilogbl: Other Builtins. (line 6) 32292* imaxabs: Other Builtins. (line 6) 32293* implementation-defined behavior, C language: C Implementation. 32294 (line 6) 32295* implied #pragma implementation: C++ Interface. (line 46) 32296* incompatibilities of GCC: Incompatibilities. (line 6) 32297* increment operators: Bug Criteria. (line 17) 32298* index: Other Builtins. (line 6) 32299* indirect calls on ARM: Function Attributes. 32300 (line 418) 32301* indirect calls on MIPS: Function Attributes. 32302 (line 440) 32303* init_priority attribute: C++ Attributes. (line 9) 32304* initializations in expressions: Compound Literals. (line 6) 32305* initializers with labeled elements: Designated Inits. (line 6) 32306* initializers, non-constant: Initializers. (line 6) 32307* inline automatic for C++ member fns: Inline. (line 53) 32308* inline functions: Inline. (line 6) 32309* inline functions, omission of: Inline. (line 58) 32310* inlining and C++ pragmas: C++ Interface. (line 66) 32311* installation trouble: Trouble. (line 6) 32312* integrating function code: Inline. (line 6) 32313* Intel 386 Options: i386 and x86-64 Options. 32314 (line 6) 32315* interface and implementation headers, C++: C++ Interface. (line 6) 32316* intermediate C version, nonexistent: G++ and GCC. (line 35) 32317* interrupt handler functions: Function Attributes. 32318 (line 384) 32319* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 32320 (line 406) 32321* introduction: Top. (line 6) 32322* invalid assembly code: Bug Criteria. (line 12) 32323* invalid input: Bug Criteria. (line 42) 32324* invoking g++: Invoking G++. (line 21) 32325* isalnum: Other Builtins. (line 6) 32326* isalpha: Other Builtins. (line 6) 32327* isascii: Other Builtins. (line 6) 32328* isblank: Other Builtins. (line 6) 32329* iscntrl: Other Builtins. (line 6) 32330* isdigit: Other Builtins. (line 6) 32331* isgraph: Other Builtins. (line 6) 32332* islower: Other Builtins. (line 6) 32333* ISO 9899: Standards. (line 6) 32334* ISO C: Standards. (line 6) 32335* ISO C standard: Standards. (line 6) 32336* ISO C90: Standards. (line 6) 32337* ISO C94: Standards. (line 6) 32338* ISO C95: Standards. (line 6) 32339* ISO C99: Standards. (line 6) 32340* ISO C9X: Standards. (line 6) 32341* ISO support: C Dialect Options. (line 10) 32342* ISO/IEC 9899: Standards. (line 6) 32343* isprint: Other Builtins. (line 6) 32344* ispunct: Other Builtins. (line 6) 32345* isspace: Other Builtins. (line 6) 32346* isupper: Other Builtins. (line 6) 32347* iswalnum: Other Builtins. (line 6) 32348* iswalpha: Other Builtins. (line 6) 32349* iswblank: Other Builtins. (line 6) 32350* iswcntrl: Other Builtins. (line 6) 32351* iswdigit: Other Builtins. (line 6) 32352* iswgraph: Other Builtins. (line 6) 32353* iswlower: Other Builtins. (line 6) 32354* iswprint: Other Builtins. (line 6) 32355* iswpunct: Other Builtins. (line 6) 32356* iswspace: Other Builtins. (line 6) 32357* iswupper: Other Builtins. (line 6) 32358* iswxdigit: Other Builtins. (line 6) 32359* isxdigit: Other Builtins. (line 6) 32360* j0: Other Builtins. (line 6) 32361* j0f: Other Builtins. (line 6) 32362* j0l: Other Builtins. (line 6) 32363* j1: Other Builtins. (line 6) 32364* j1f: Other Builtins. (line 6) 32365* j1l: Other Builtins. (line 6) 32366* Java: G++ and GCC. (line 6) 32367* java_interface attribute: C++ Attributes. (line 29) 32368* jn: Other Builtins. (line 6) 32369* jnf: Other Builtins. (line 6) 32370* jnl: Other Builtins. (line 6) 32371* keywords, alternate: Alternate Keywords. (line 6) 32372* known causes of trouble: Trouble. (line 6) 32373* labeled elements in initializers: Designated Inits. (line 6) 32374* labels as values: Labels as Values. (line 6) 32375* labs: Other Builtins. (line 6) 32376* LANG: Environment Variables. 32377 (line 21) 32378* language dialect options: C Dialect Options. (line 6) 32379* LC_ALL: Environment Variables. 32380 (line 21) 32381* LC_CTYPE: Environment Variables. 32382 (line 21) 32383* LC_MESSAGES: Environment Variables. 32384 (line 21) 32385* ldexp: Other Builtins. (line 6) 32386* ldexpf: Other Builtins. (line 6) 32387* ldexpl: Other Builtins. (line 6) 32388* length-zero arrays: Zero Length. (line 6) 32389* lgamma: Other Builtins. (line 6) 32390* lgammaf: Other Builtins. (line 6) 32391* lgammal: Other Builtins. (line 6) 32392* Libraries: Link Options. (line 24) 32393* LIBRARY_PATH: Environment Variables. 32394 (line 91) 32395* link options: Link Options. (line 6) 32396* LL integer suffix: Long Long. (line 6) 32397* llabs: Other Builtins. (line 6) 32398* llrint: Other Builtins. (line 6) 32399* llrintf: Other Builtins. (line 6) 32400* llrintl: Other Builtins. (line 6) 32401* llround: Other Builtins. (line 6) 32402* llroundf: Other Builtins. (line 6) 32403* llroundl: Other Builtins. (line 6) 32404* load address instruction: Simple Constraints. (line 142) 32405* local labels: Local Labels. (line 6) 32406* local variables in macros: Typeof. (line 42) 32407* local variables, specifying registers: Local Reg Vars. (line 6) 32408* locale: Environment Variables. 32409 (line 21) 32410* locale definition: Environment Variables. 32411 (line 100) 32412* log: Other Builtins. (line 6) 32413* log10: Other Builtins. (line 6) 32414* log10f: Other Builtins. (line 6) 32415* log10l: Other Builtins. (line 6) 32416* log1p: Other Builtins. (line 6) 32417* log1pf: Other Builtins. (line 6) 32418* log1pl: Other Builtins. (line 6) 32419* log2: Other Builtins. (line 6) 32420* log2f: Other Builtins. (line 6) 32421* log2l: Other Builtins. (line 6) 32422* logb: Other Builtins. (line 6) 32423* logbf: Other Builtins. (line 6) 32424* logbl: Other Builtins. (line 6) 32425* logf: Other Builtins. (line 6) 32426* logl: Other Builtins. (line 6) 32427* long long data types: Long Long. (line 6) 32428* longjmp: Global Reg Vars. (line 66) 32429* longjmp incompatibilities: Incompatibilities. (line 39) 32430* longjmp warnings: Warning Options. (line 457) 32431* lrint: Other Builtins. (line 6) 32432* lrintf: Other Builtins. (line 6) 32433* lrintl: Other Builtins. (line 6) 32434* lround: Other Builtins. (line 6) 32435* lroundf: Other Builtins. (line 6) 32436* lroundl: Other Builtins. (line 6) 32437* m in constraint: Simple Constraints. (line 17) 32438* M32C options: M32C Options. (line 6) 32439* M32R/D options: M32R/D Options. (line 6) 32440* M680x0 options: M680x0 Options. (line 6) 32441* M68hc1x options: M68hc1x Options. (line 6) 32442* machine dependent options: Submodel Options. (line 6) 32443* machine specific constraints: Machine Constraints. 32444 (line 6) 32445* macro with variable arguments: Variadic Macros. (line 6) 32446* macros containing asm: Extended Asm. (line 239) 32447* macros, inline alternative: Inline. (line 6) 32448* macros, local labels: Local Labels. (line 6) 32449* macros, local variables in: Typeof. (line 42) 32450* macros, statements in expressions: Statement Exprs. (line 6) 32451* macros, types of arguments: Typeof. (line 6) 32452* make: Preprocessor Options. 32453 (line 173) 32454* malloc: Other Builtins. (line 6) 32455* malloc attribute: Function Attributes. 32456 (line 447) 32457* matching constraint: Simple Constraints. (line 127) 32458* MCore options: MCore Options. (line 6) 32459* member fns, automatically inline: Inline. (line 53) 32460* memcmp: Other Builtins. (line 6) 32461* memcpy: Other Builtins. (line 6) 32462* memory references in constraints: Simple Constraints. (line 17) 32463* mempcpy: Other Builtins. (line 6) 32464* memset: Other Builtins. (line 6) 32465* Mercury: G++ and GCC. (line 23) 32466* message formatting: Language Independent Options. 32467 (line 6) 32468* messages, warning: Warning Options. (line 6) 32469* messages, warning and error: Warnings and Errors. 32470 (line 6) 32471* middle-operands, omitted: Conditionals. (line 6) 32472* MIPS options: MIPS Options. (line 6) 32473* misunderstandings in C++: C++ Misunderstandings. 32474 (line 6) 32475* mixed declarations and code: Mixed Declarations. (line 6) 32476* mktemp, and constant strings: Incompatibilities. (line 13) 32477* MMIX Options: MMIX Options. (line 6) 32478* MN10300 options: MN10300 Options. (line 6) 32479* mode attribute: Variable Attributes. 32480 (line 118) 32481* modf: Other Builtins. (line 6) 32482* modff: Other Builtins. (line 6) 32483* modfl: Other Builtins. (line 6) 32484* modifiers in constraints: Modifiers. (line 6) 32485* ms_struct: Type Attributes. (line 302) 32486* ms_struct attribute: Variable Attributes. 32487 (line 313) 32488* MT options: MT Options. (line 6) 32489* mudflap: Optimize Options. (line 333) 32490* multiple alternative constraints: Multi-Alternative. (line 6) 32491* multiprecision arithmetic: Long Long. (line 6) 32492* n in constraint: Simple Constraints. (line 63) 32493* names used in assembler code: Asm Labels. (line 6) 32494* naming convention, implementation headers: C++ Interface. (line 46) 32495* nearbyint: Other Builtins. (line 6) 32496* nearbyintf: Other Builtins. (line 6) 32497* nearbyintl: Other Builtins. (line 6) 32498* nested functions: Nested Functions. (line 6) 32499* newlines (escaped): Escaped Newlines. (line 6) 32500* nextafter: Other Builtins. (line 6) 32501* nextafterf: Other Builtins. (line 6) 32502* nextafterl: Other Builtins. (line 6) 32503* nexttoward: Other Builtins. (line 6) 32504* nexttowardf: Other Builtins. (line 6) 32505* nexttowardl: Other Builtins. (line 6) 32506* NFC: Warning Options. (line 934) 32507* NFKC: Warning Options. (line 934) 32508* NMI handler functions on the Blackfin processor: Function Attributes. 32509 (line 502) 32510* no_instrument_function function attribute: Function Attributes. 32511 (line 508) 32512* nocommon attribute: Variable Attributes. 32513 (line 92) 32514* noinline function attribute: Function Attributes. 32515 (line 513) 32516* non-constant initializers: Initializers. (line 6) 32517* non-static inline function: Inline. (line 70) 32518* nonnull function attribute: Function Attributes. 32519 (line 517) 32520* noreturn function attribute: Function Attributes. 32521 (line 540) 32522* nothrow function attribute: Function Attributes. 32523 (line 582) 32524* o in constraint: Simple Constraints. (line 21) 32525* OBJC_INCLUDE_PATH: Environment Variables. 32526 (line 126) 32527* Objective-C <1>: Standards. (line 110) 32528* Objective-C: G++ and GCC. (line 6) 32529* Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 32530 (line 6) 32531* Objective-C++ <1>: Standards. (line 110) 32532* Objective-C++: G++ and GCC. (line 6) 32533* offsettable address: Simple Constraints. (line 21) 32534* old-style function definitions: Function Prototypes. 32535 (line 6) 32536* omitted middle-operands: Conditionals. (line 6) 32537* open coding: Inline. (line 6) 32538* openmp parallel: C Dialect Options. (line 200) 32539* operand constraints, asm: Constraints. (line 6) 32540* optimize options: Optimize Options. (line 6) 32541* options to control diagnostics formatting: Language Independent Options. 32542 (line 6) 32543* options to control warnings: Warning Options. (line 6) 32544* options, C++: C++ Dialect Options. 32545 (line 6) 32546* options, code generation: Code Gen Options. (line 6) 32547* options, debugging: Debugging Options. (line 6) 32548* options, dialect: C Dialect Options. (line 6) 32549* options, directory search: Directory Options. (line 6) 32550* options, GCC command: Invoking GCC. (line 6) 32551* options, grouping: Invoking GCC. (line 26) 32552* options, linking: Link Options. (line 6) 32553* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 32554 (line 6) 32555* options, optimization: Optimize Options. (line 6) 32556* options, order: Invoking GCC. (line 30) 32557* options, preprocessor: Preprocessor Options. 32558 (line 6) 32559* order of evaluation, side effects: Non-bugs. (line 196) 32560* order of options: Invoking GCC. (line 30) 32561* other register constraints: Simple Constraints. (line 151) 32562* output file option: Overall Options. (line 174) 32563* overloaded virtual fn, warning: C++ Dialect Options. 32564 (line 406) 32565* p in constraint: Simple Constraints. (line 142) 32566* packed attribute: Variable Attributes. 32567 (line 129) 32568* parameter forward declaration: Variable Length. (line 60) 32569* parameters, aliased: Code Gen Options. (line 332) 32570* Pascal: G++ and GCC. (line 23) 32571* PDP-11 Options: PDP-11 Options. (line 6) 32572* PIC: Code Gen Options. (line 163) 32573* pmf: Bound member functions. 32574 (line 6) 32575* pointer arguments: Function Attributes. 32576 (line 111) 32577* pointer to member function: Bound member functions. 32578 (line 6) 32579* portions of temporary objects, pointers to: Temporaries. (line 6) 32580* pow: Other Builtins. (line 6) 32581* pow10: Other Builtins. (line 6) 32582* pow10f: Other Builtins. (line 6) 32583* pow10l: Other Builtins. (line 6) 32584* PowerPC options: PowerPC Options. (line 6) 32585* powf: Other Builtins. (line 6) 32586* powl: Other Builtins. (line 6) 32587* pragma, align: Solaris Pragmas. (line 11) 32588* pragma, diagnostic: Diagnostic Pragmas. (line 14) 32589* pragma, extern_prefix: Symbol-Renaming Pragmas. 32590 (line 19) 32591* pragma, fini: Solaris Pragmas. (line 19) 32592* pragma, init: Solaris Pragmas. (line 24) 32593* pragma, long_calls: ARM Pragmas. (line 11) 32594* pragma, long_calls_off: ARM Pragmas. (line 17) 32595* pragma, longcall: RS/6000 and PowerPC Pragmas. 32596 (line 14) 32597* pragma, mark: Darwin Pragmas. (line 11) 32598* pragma, memregs: M32C Pragmas. (line 7) 32599* pragma, no_long_calls: ARM Pragmas. (line 14) 32600* pragma, options align: Darwin Pragmas. (line 14) 32601* pragma, reason for not using: Function Attributes. 32602 (line 916) 32603* pragma, redefine_extname: Symbol-Renaming Pragmas. 32604 (line 14) 32605* pragma, segment: Darwin Pragmas. (line 21) 32606* pragma, unused: Darwin Pragmas. (line 24) 32607* pragma, visibility: Visibility Pragmas. (line 8) 32608* pragma, weak: Weak Pragmas. (line 10) 32609* pragmas: Pragmas. (line 6) 32610* pragmas in C++, effect on inlining: C++ Interface. (line 66) 32611* pragmas, interface and implementation: C++ Interface. (line 6) 32612* pragmas, warning of unknown: Warning Options. (line 474) 32613* precompiled headers: Precompiled Headers. 32614 (line 6) 32615* preprocessing numbers: Incompatibilities. (line 173) 32616* preprocessing tokens: Incompatibilities. (line 173) 32617* preprocessor options: Preprocessor Options. 32618 (line 6) 32619* printf: Other Builtins. (line 6) 32620* printf_unlocked: Other Builtins. (line 6) 32621* prof: Debugging Options. (line 129) 32622* promotion of formal parameters: Function Prototypes. 32623 (line 6) 32624* pure function attribute: Function Attributes. 32625 (line 590) 32626* push address instruction: Simple Constraints. (line 142) 32627* putchar: Other Builtins. (line 6) 32628* puts: Other Builtins. (line 6) 32629* qsort, and global register variables: Global Reg Vars. (line 42) 32630* question mark: Multi-Alternative. (line 27) 32631* r in constraint: Simple Constraints. (line 54) 32632* ranges in case statements: Case Ranges. (line 6) 32633* read-only strings: Incompatibilities. (line 9) 32634* register variable after longjmp: Global Reg Vars. (line 66) 32635* registers: Extended Asm. (line 6) 32636* registers for local variables: Local Reg Vars. (line 6) 32637* registers in constraints: Simple Constraints. (line 54) 32638* registers, global allocation: Explicit Reg Vars. (line 6) 32639* registers, global variables in: Global Reg Vars. (line 6) 32640* regparm attribute: Function Attributes. 32641 (line 612) 32642* relocation truncated to fit (MIPS): MIPS Options. (line 135) 32643* remainder: Other Builtins. (line 6) 32644* remainderf: Other Builtins. (line 6) 32645* remainderl: Other Builtins. (line 6) 32646* remquo: Other Builtins. (line 6) 32647* remquof: Other Builtins. (line 6) 32648* remquol: Other Builtins. (line 6) 32649* reordering, warning: C++ Dialect Options. 32650 (line 327) 32651* reporting bugs: Bugs. (line 6) 32652* rest argument (in macro): Variadic Macros. (line 6) 32653* restricted pointers: Restricted Pointers. 32654 (line 6) 32655* restricted references: Restricted Pointers. 32656 (line 6) 32657* restricted this pointer: Restricted Pointers. 32658 (line 6) 32659* returns_twice attribute: Function Attributes. 32660 (line 649) 32661* rindex: Other Builtins. (line 6) 32662* rint: Other Builtins. (line 6) 32663* rintf: Other Builtins. (line 6) 32664* rintl: Other Builtins. (line 6) 32665* round: Other Builtins. (line 6) 32666* roundf: Other Builtins. (line 6) 32667* roundl: Other Builtins. (line 6) 32668* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 32669 (line 6) 32670* RTTI: Vague Linkage. (line 43) 32671* run-time options: Code Gen Options. (line 6) 32672* s in constraint: Simple Constraints. (line 90) 32673* S/390 and zSeries Options: S/390 and zSeries Options. 32674 (line 6) 32675* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 32676 (line 658) 32677* scalb: Other Builtins. (line 6) 32678* scalbf: Other Builtins. (line 6) 32679* scalbl: Other Builtins. (line 6) 32680* scalbln: Other Builtins. (line 6) 32681* scalblnf: Other Builtins. (line 6) 32682* scalbn: Other Builtins. (line 6) 32683* scalbnf: Other Builtins. (line 6) 32684* scanf, and constant strings: Incompatibilities. (line 17) 32685* scanfnl: Other Builtins. (line 6) 32686* scope of a variable length array: Variable Length. (line 23) 32687* scope of declaration: Disappointments. (line 21) 32688* scope of external declarations: Incompatibilities. (line 80) 32689* Score Options: Score Options. (line 6) 32690* search path: Directory Options. (line 6) 32691* section function attribute: Function Attributes. 32692 (line 663) 32693* section variable attribute: Variable Attributes. 32694 (line 144) 32695* sentinel function attribute: Function Attributes. 32696 (line 679) 32697* setjmp: Global Reg Vars. (line 66) 32698* setjmp incompatibilities: Incompatibilities. (line 39) 32699* shared strings: Incompatibilities. (line 9) 32700* shared variable attribute: Variable Attributes. 32701 (line 189) 32702* side effect in ?:: Conditionals. (line 20) 32703* side effects, macro argument: Statement Exprs. (line 35) 32704* side effects, order of evaluation: Non-bugs. (line 196) 32705* signal handler functions on the AVR processors: Function Attributes. 32706 (line 710) 32707* signbit: Other Builtins. (line 6) 32708* signbitf: Other Builtins. (line 6) 32709* signbitl: Other Builtins. (line 6) 32710* signed and unsigned values, comparison warning: Warning Options. 32711 (line 830) 32712* significand: Other Builtins. (line 6) 32713* significandf: Other Builtins. (line 6) 32714* significandl: Other Builtins. (line 6) 32715* simple constraints: Simple Constraints. (line 6) 32716* sin: Other Builtins. (line 6) 32717* sincos: Other Builtins. (line 6) 32718* sincosf: Other Builtins. (line 6) 32719* sincosl: Other Builtins. (line 6) 32720* sinf: Other Builtins. (line 6) 32721* sinh: Other Builtins. (line 6) 32722* sinhf: Other Builtins. (line 6) 32723* sinhl: Other Builtins. (line 6) 32724* sinl: Other Builtins. (line 6) 32725* sizeof: Typeof. (line 6) 32726* smaller data references: M32R/D Options. (line 57) 32727* smaller data references (MIPS): MIPS Options. (line 216) 32728* smaller data references (PowerPC): RS/6000 and PowerPC Options. 32729 (line 607) 32730* snprintf: Other Builtins. (line 6) 32731* SPARC options: SPARC Options. (line 6) 32732* Spec Files: Spec Files. (line 6) 32733* specified registers: Explicit Reg Vars. (line 6) 32734* specifying compiler version and target machine: Target Options. 32735 (line 6) 32736* specifying hardware config: Submodel Options. (line 6) 32737* specifying machine version: Target Options. (line 6) 32738* specifying registers for local variables: Local Reg Vars. (line 6) 32739* speed of compilation: Precompiled Headers. 32740 (line 6) 32741* sprintf: Other Builtins. (line 6) 32742* sqrt: Other Builtins. (line 6) 32743* sqrtf: Other Builtins. (line 6) 32744* sqrtl: Other Builtins. (line 6) 32745* sscanf: Other Builtins. (line 6) 32746* sscanf, and constant strings: Incompatibilities. (line 17) 32747* sseregparm attribute: Function Attributes. 32748 (line 629) 32749* statements inside expressions: Statement Exprs. (line 6) 32750* static data in C++, declaring and defining: Static Definitions. 32751 (line 6) 32752* stpcpy: Other Builtins. (line 6) 32753* stpncpy: Other Builtins. (line 6) 32754* strcasecmp: Other Builtins. (line 6) 32755* strcat: Other Builtins. (line 6) 32756* strchr: Other Builtins. (line 6) 32757* strcmp: Other Builtins. (line 6) 32758* strcpy: Other Builtins. (line 6) 32759* strcspn: Other Builtins. (line 6) 32760* strdup: Other Builtins. (line 6) 32761* strfmon: Other Builtins. (line 6) 32762* strftime: Other Builtins. (line 6) 32763* string constants: Incompatibilities. (line 9) 32764* strlen: Other Builtins. (line 6) 32765* strncasecmp: Other Builtins. (line 6) 32766* strncat: Other Builtins. (line 6) 32767* strncmp: Other Builtins. (line 6) 32768* strncpy: Other Builtins. (line 6) 32769* strndup: Other Builtins. (line 6) 32770* strpbrk: Other Builtins. (line 6) 32771* strrchr: Other Builtins. (line 6) 32772* strspn: Other Builtins. (line 6) 32773* strstr: Other Builtins. (line 6) 32774* struct: Unnamed Fields. (line 6) 32775* structures: Incompatibilities. (line 146) 32776* structures, constructor expression: Compound Literals. (line 6) 32777* submodel options: Submodel Options. (line 6) 32778* subscripting: Subscripting. (line 6) 32779* subscripting and function values: Subscripting. (line 6) 32780* suffixes for C++ source: Invoking G++. (line 6) 32781* SUNPRO_DEPENDENCIES: Environment Variables. 32782 (line 166) 32783* suppressing warnings: Warning Options. (line 6) 32784* surprises in C++: C++ Misunderstandings. 32785 (line 6) 32786* syntax checking: Warning Options. (line 22) 32787* system headers, warnings from: Warning Options. (line 648) 32788* tan: Other Builtins. (line 6) 32789* tanf: Other Builtins. (line 6) 32790* tanh: Other Builtins. (line 6) 32791* tanhf: Other Builtins. (line 6) 32792* tanhl: Other Builtins. (line 6) 32793* tanl: Other Builtins. (line 6) 32794* target machine, specifying: Target Options. (line 6) 32795* target options: Target Options. (line 6) 32796* TC1: Standards. (line 6) 32797* TC2: Standards. (line 6) 32798* Technical Corrigenda: Standards. (line 6) 32799* Technical Corrigendum 1: Standards. (line 6) 32800* Technical Corrigendum 2: Standards. (line 6) 32801* template instantiation: Template Instantiation. 32802 (line 6) 32803* temporaries, lifetime of: Temporaries. (line 6) 32804* tgamma: Other Builtins. (line 6) 32805* tgammaf: Other Builtins. (line 6) 32806* tgammal: Other Builtins. (line 6) 32807* Thread-Local Storage: Thread-Local. (line 6) 32808* thunks: Nested Functions. (line 6) 32809* tiny data section on the H8/300H and H8S: Function Attributes. 32810 (line 732) 32811* TLS: Thread-Local. (line 6) 32812* tls_model attribute: Variable Attributes. 32813 (line 213) 32814* TMPDIR: Environment Variables. 32815 (line 45) 32816* TMS320C3x/C4x Options: TMS320C3x/C4x Options. 32817 (line 6) 32818* toascii: Other Builtins. (line 6) 32819* tolower: Other Builtins. (line 6) 32820* toupper: Other Builtins. (line 6) 32821* towlower: Other Builtins. (line 6) 32822* towupper: Other Builtins. (line 6) 32823* traditional C language: C Dialect Options. (line 227) 32824* treelang <1>: Standards. (line 123) 32825* treelang: G++ and GCC. (line 6) 32826* trunc: Other Builtins. (line 6) 32827* truncf: Other Builtins. (line 6) 32828* truncl: Other Builtins. (line 6) 32829* two-stage name lookup: Name lookup. (line 6) 32830* type alignment: Alignment. (line 6) 32831* type attributes: Type Attributes. (line 6) 32832* type_info: Vague Linkage. (line 43) 32833* typedef names as function parameters: Incompatibilities. (line 97) 32834* typeof: Typeof. (line 6) 32835* ULL integer suffix: Long Long. (line 6) 32836* Ultrix calling convention: Interoperation. (line 150) 32837* undefined behavior: Bug Criteria. (line 17) 32838* undefined function value: Bug Criteria. (line 17) 32839* underscores in variables in macros: Typeof. (line 42) 32840* union: Unnamed Fields. (line 6) 32841* union, casting to a: Cast to Union. (line 6) 32842* unions: Incompatibilities. (line 146) 32843* unknown pragmas, warning: Warning Options. (line 474) 32844* unresolved references and -nodefaultlibs: Link Options. (line 79) 32845* unresolved references and -nostdlib: Link Options. (line 79) 32846* unused attribute.: Function Attributes. 32847 (line 744) 32848* used attribute.: Function Attributes. 32849 (line 749) 32850* User stack pointer in interrupts on the Blackfin: Function Attributes. 32851 (line 413) 32852* V in constraint: Simple Constraints. (line 41) 32853* V850 Options: V850 Options. (line 6) 32854* vague linkage: Vague Linkage. (line 6) 32855* value after longjmp: Global Reg Vars. (line 66) 32856* variable addressability on the IA-64: Function Attributes. 32857 (line 457) 32858* variable addressability on the M32R/D: Variable Attributes. 32859 (line 294) 32860* variable alignment: Alignment. (line 6) 32861* variable attributes: Variable Attributes. 32862 (line 6) 32863* variable number of arguments: Variadic Macros. (line 6) 32864* variable-length array scope: Variable Length. (line 23) 32865* variable-length arrays: Variable Length. (line 6) 32866* variables in specified registers: Explicit Reg Vars. (line 6) 32867* variables, local, in macros: Typeof. (line 42) 32868* variadic macros: Variadic Macros. (line 6) 32869* VAX calling convention: Interoperation. (line 150) 32870* VAX options: VAX Options. (line 6) 32871* vfprintf: Other Builtins. (line 6) 32872* vfscanf: Other Builtins. (line 6) 32873* visibility attribute: Function Attributes. 32874 (line 755) 32875* VLAs: Variable Length. (line 6) 32876* void pointers, arithmetic: Pointer Arith. (line 6) 32877* void, size of pointer to: Pointer Arith. (line 6) 32878* volatile access: Volatiles. (line 6) 32879* volatile applied to function: Function Attributes. 32880 (line 6) 32881* volatile read: Volatiles. (line 6) 32882* volatile write: Volatiles. (line 6) 32883* vprintf: Other Builtins. (line 6) 32884* vscanf: Other Builtins. (line 6) 32885* vsnprintf: Other Builtins. (line 6) 32886* vsprintf: Other Builtins. (line 6) 32887* vsscanf: Other Builtins. (line 6) 32888* vtable: Vague Linkage. (line 28) 32889* warn_unused_result attribute: Function Attributes. 32890 (line 849) 32891* warning for comparison of signed and unsigned values: Warning Options. 32892 (line 830) 32893* warning for overloaded virtual fn: C++ Dialect Options. 32894 (line 406) 32895* warning for reordering of member initializers: C++ Dialect Options. 32896 (line 327) 32897* warning for unknown pragmas: Warning Options. (line 474) 32898* warning messages: Warning Options. (line 6) 32899* warnings from system headers: Warning Options. (line 648) 32900* warnings vs errors: Warnings and Errors. 32901 (line 6) 32902* weak attribute: Function Attributes. 32903 (line 866) 32904* weakref attribute: Function Attributes. 32905 (line 875) 32906* whitespace: Incompatibilities. (line 112) 32907* X in constraint: Simple Constraints. (line 112) 32908* X3.159-1989: Standards. (line 6) 32909* x86-64 options: x86-64 Options. (line 6) 32910* x86-64 Options: i386 and x86-64 Options. 32911 (line 6) 32912* Xstormy16 Options: Xstormy16 Options. (line 6) 32913* Xtensa Options: Xtensa Options. (line 6) 32914* y0: Other Builtins. (line 6) 32915* y0f: Other Builtins. (line 6) 32916* y0l: Other Builtins. (line 6) 32917* y1: Other Builtins. (line 6) 32918* y1f: Other Builtins. (line 6) 32919* y1l: Other Builtins. (line 6) 32920* yn: Other Builtins. (line 6) 32921* ynf: Other Builtins. (line 6) 32922* ynl: Other Builtins. (line 6) 32923* zero-length arrays: Zero Length. (line 6) 32924* zero-size structures: Empty Structures. (line 6) 32925* zSeries options: zSeries Options. (line 6) 32926 32927 32928 32929Tag Table: 32930Node: Top2067 32931Node: G++ and GCC3749 32932Node: Standards5814 32933Node: Invoking GCC12942 32934Node: Option Summary16703 32935Node: Overall Options45263 32936Node: Invoking G++54489 32937Node: C Dialect Options55968 32938Node: C++ Dialect Options68381 32939Node: Objective-C and Objective-C++ Dialect Options87431 32940Node: Language Independent Options99027 32941Node: Warning Options101109 32942Node: Debugging Options152492 32943Node: Optimize Options184360 32944Node: Preprocessor Options264634 32945Ref: Wtrigraphs268598 32946Ref: dashMF273355 32947Ref: fdollars-in-identifiers282513 32948Node: Assembler Options290569 32949Node: Link Options291274 32950Ref: Link Options-Footnote-1299842 32951Node: Directory Options300176 32952Node: Spec Files306238 32953Node: Target Options325544 32954Node: Submodel Options326968 32955Node: ARC Options328598 32956Node: ARM Options329788 32957Node: AVR Options341399 32958Node: Blackfin Options343532 32959Node: CRIS Options346300 32960Node: CRX Options350519 32961Node: Darwin Options350944 32962Node: DEC Alpha Options357897 32963Node: DEC Alpha/VMS Options369374 32964Node: FRV Options369759 32965Node: GNU/Linux Options376429 32966Node: H8/300 Options376887 32967Node: HPPA Options377954 32968Node: i386 and x86-64 Options387547 32969Node: IA-64 Options408992 32970Node: M32C Options416309 32971Node: M32R/D Options417600 32972Node: M680x0 Options421187 32973Node: M68hc1x Options428564 32974Node: MCore Options430132 32975Node: MIPS Options431153 32976Node: MMIX Options446236 32977Node: MN10300 Options448718 32978Node: MT Options450136 32979Node: PDP-11 Options451050 32980Node: PowerPC Options452884 32981Node: RS/6000 and PowerPC Options453118 32982Node: S/390 and zSeries Options481787 32983Node: Score Options489102 32984Node: SH Options489930 32985Node: SPARC Options499154 32986Node: System V Options509997 32987Node: TMS320C3x/C4x Options510831 32988Node: V850 Options516356 32989Node: VAX Options519501 32990Node: x86-64 Options520048 32991Node: Xstormy16 Options520262 32992Node: Xtensa Options520551 32993Node: zSeries Options524391 32994Node: Code Gen Options524587 32995Node: Environment Variables545236 32996Node: Precompiled Headers552908 32997Node: Running Protoize559145 32998Node: C Implementation565482 32999Node: Translation implementation567145 33000Node: Environment implementation567719 33001Node: Identifiers implementation568269 33002Node: Characters implementation569323 33003Node: Integers implementation572129 33004Node: Floating point implementation573954 33005Node: Arrays and pointers implementation576883 33006Ref: Arrays and pointers implementation-Footnote-1578318 33007Node: Hints implementation578442 33008Node: Structures unions enumerations and bit-fields implementation579908 33009Node: Qualifiers implementation581871 33010Node: Declarators implementation583643 33011Node: Statements implementation583985 33012Node: Preprocessing directives implementation584312 33013Node: Library functions implementation586417 33014Node: Architecture implementation587057 33015Node: Locale-specific behavior implementation587760 33016Node: C Extensions588065 33017Node: Statement Exprs592463 33018Node: Local Labels596976 33019Node: Labels as Values599955 33020Ref: Labels as Values-Footnote-1602009 33021Node: Nested Functions602192 33022Node: Constructing Calls606086 33023Node: Typeof608422 33024Node: Conditionals611588 33025Node: Long Long612479 33026Node: Complex613980 33027Node: Decimal Float616549 33028Node: Hex Floats618230 33029Node: Zero Length619271 33030Node: Empty Structures622548 33031Node: Variable Length622964 33032Node: Variadic Macros625731 33033Node: Escaped Newlines628113 33034Node: Subscripting628952 33035Node: Pointer Arith629675 33036Node: Initializers630243 33037Node: Compound Literals630739 33038Node: Designated Inits632914 33039Node: Case Ranges636569 33040Node: Cast to Union637252 33041Node: Mixed Declarations638348 33042Node: Function Attributes638854 33043Node: Attribute Syntax682699 33044Node: Function Prototypes693570 33045Node: C++ Comments695351 33046Node: Dollar Signs695870 33047Node: Character Escapes696335 33048Node: Alignment696629 33049Node: Variable Attributes697946 33050Ref: i386 Variable Attributes710969 33051Node: Type Attributes716466 33052Ref: i386 Type Attributes729768 33053Ref: PowerPC Type Attributes730612 33054Node: Inline731465 33055Node: Extended Asm736797 33056Ref: Example of asm with clobbered asm reg742883 33057Node: Constraints756979 33058Node: Simple Constraints757829 33059Node: Multi-Alternative764356 33060Node: Modifiers766073 33061Node: Machine Constraints768967 33062Node: Asm Labels796214 33063Node: Explicit Reg Vars797890 33064Node: Global Reg Vars799498 33065Node: Local Reg Vars804048 33066Node: Alternate Keywords806489 33067Node: Incomplete Enums807917 33068Node: Function Names808674 33069Node: Return Address810864 33070Node: Vector Extensions813661 33071Node: Offsetof817163 33072Node: Atomic Builtins817949 33073Node: Object Size Checking823034 33074Node: Other Builtins828391 33075Node: Target Builtins850479 33076Node: Alpha Built-in Functions851212 33077Node: ARM Built-in Functions854204 33078Node: Blackfin Built-in Functions860911 33079Node: FR-V Built-in Functions861528 33080Node: Argument Types862387 33081Node: Directly-mapped Integer Functions864143 33082Node: Directly-mapped Media Functions865225 33083Node: Raw read/write Functions872257 33084Node: Other Built-in Functions873169 33085Node: X86 Built-in Functions874358 33086Node: MIPS DSP Built-in Functions892481 33087Node: MIPS Paired-Single Support900906 33088Node: Paired-Single Arithmetic902516 33089Node: Paired-Single Built-in Functions903456 33090Node: MIPS-3D Built-in Functions906120 33091Node: PowerPC AltiVec Built-in Functions911489 33092Node: SPARC VIS Built-in Functions1012793 33093Node: Target Format Checks1014452 33094Node: Solaris Format Checks1014859 33095Node: Pragmas1015256 33096Node: ARM Pragmas1015886 33097Node: M32C Pragmas1016489 33098Node: RS/6000 and PowerPC Pragmas1017065 33099Node: Darwin Pragmas1017807 33100Node: Solaris Pragmas1018874 33101Node: Symbol-Renaming Pragmas1020035 33102Node: Structure-Packing Pragmas1022657 33103Node: Weak Pragmas1024288 33104Node: Diagnostic Pragmas1025090 33105Node: Visibility Pragmas1027083 33106Node: Unnamed Fields1027804 33107Node: Thread-Local1029314 33108Node: C99 Thread-Local Edits1031398 33109Node: C++98 Thread-Local Edits1033410 33110Node: C++ Extensions1036855 33111Node: Volatiles1038431 33112Node: Restricted Pointers1041107 33113Node: Vague Linkage1042701 33114Node: C++ Interface1046357 33115Ref: C++ Interface-Footnote-11050654 33116Node: Template Instantiation1050791 33117Node: Bound member functions1057803 33118Node: C++ Attributes1059346 33119Node: Namespace Association1061004 33120Node: Java Exceptions1062422 33121Node: Deprecated Features1063827 33122Node: Backwards Compatibility1066802 33123Node: Objective-C1068157 33124Node: Executing code before main1068738 33125Node: What you can and what you cannot do in +load1071344 33126Node: Type encoding1073511 33127Node: Garbage Collection1076898 33128Node: Constant string objects1079522 33129Node: compatibility_alias1082030 33130Node: Compatibility1082908 33131Node: Gcov1089475 33132Node: Gcov Intro1089999 33133Node: Invoking Gcov1092715 33134Node: Gcov and Optimization1104575 33135Node: Gcov Data Files1107228 33136Node: Cross-profiling1108366 33137Node: Trouble1110192 33138Node: Actual Bugs1111732 33139Node: Cross-Compiler Problems1112472 33140Node: Interoperation1112886 33141Node: Incompatibilities1120484 33142Node: Fixed Headers1128634 33143Node: Standard Libraries1130297 33144Node: Disappointments1131669 33145Node: C++ Misunderstandings1136027 33146Node: Static Definitions1136846 33147Node: Name lookup1137899 33148Ref: Name lookup-Footnote-11142677 33149Node: Temporaries1142864 33150Node: Copy Assignment1144840 33151Node: Protoize Caveats1146647 33152Node: Non-bugs1150609 33153Node: Warnings and Errors1161113 33154Node: Bugs1162877 33155Node: Bug Criteria1163441 33156Node: Bug Reporting1165651 33157Node: Service1166043 33158Node: Contributing1166862 33159Node: Funding1167602 33160Node: GNU Project1170091 33161Node: Copying1170737 33162Node: GNU Free Documentation License1189914 33163Node: Contributors1212320 33164Node: Option Index1248176 33165Node: Keyword Index1384054 33166 33167End Tag Table 33168